Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Energie_M_xxx, bug corrigé > v12.03
#1
Thumbs Up 
Bonjour,
j'ai un souci sur les valeurs retournées en MQTT concernant "Energie_M_Soutiree" et "EnergieJour_M_Soutiree" ("Soutirage Jour" dans l'image).

La mesure de PuissanceS_M ("Puissance Soutirée") est correcte, mais il semble y avoir un seuil sous lequel "Energie_M_Soutiree" et "EnergieJour_M_Soutiree" ne sont pas mis à jour.


[Image: Soutirage-Jour.png]


Pour être honnête, ça pourrait ressembler à une division d'un flottant par un entier dans le code.

Dans le code de "Source_UxI.ino", à la ligne 55 (et aussi 62, du coup), est-ce que ce calcul est réalisé en flottant ? :

EASfloat += PWcal / 90000;  // Watt Hour,Every 40ms. Soutirée

Pas un pro du compilateur Arduino, mais peut-être l'écrire :

EASfloat += PWcal / 90000.;  // Watt Hour,Every 40ms. Soutirée
Répondre
#2
Bonjour

Vous avez raison, la notation n'est pas bonne à priori. Il manque un .0. Je vais publier un correctif.

André
Répondre
#3
Merci André pour votre réactivité Smile

Quand je pourrai tester à la maison, je regarderai s'il ne faut pas faire de même avec tous les autres calculs en flottant :

  for (int i = 0; i < 100; i++) {
    voltM[i] = (19. * voltM[i] + float(volt[i])) / 20.;  //Mean value. First Order Filter. Short Integration
    V = kV * voltM[i];
    Uef2 += sq(V);
    ampM[i] = (19. * ampM[i] + float(amp[i])) / 20.;  //Mean value. First Order Filter
    I = kI * ampM[i];
    Ief2 += sq(I);
    PWcal += V * I;
  }
  Uef2 = Uef2 / 100.;        //square of voltage
  Tension_M = sqrt(Uef2);    //RMS voltage
  Ief2 = Ief2 / 100.;        //square of current
  Intensite_M = sqrt(Ief2);  // RMS current
  PWcal = PfloatMax(PWcal / 100.);


Dans un but d'optimisation, il est souvent bon de troquer les divisions par des multiplications quand c'est possible (si le compilateur Arduino n'optimise pas déjà de lui-même) :

  for (int i = 0; i < 100; i++) {
    voltM[i] = (19. * voltM[i] + float(volt[i])) * .05;  //Mean value. First Order Filter. Short Integration
    V = kV * voltM[i];
    Uef2 += sq(V);
    ampM[i] = (19. * ampM[i] + float(amp[i])) * .05 ;  //Mean value. First Order Filter
    I = kI * ampM[i];
    Ief2 += sq(I);
    PWcal += V * I;
  }
  Uef2 = Uef2 * .01;        //square of voltage
  Tension_M = sqrt(Uef2);    //RMS voltage
  Ief2 = Ief2 * .01 ;        //square of current
  Intensite_M = sqrt(Ief2);  // RMS current
  PWcal = PfloatMax(PWcal * .01 );
Répondre
#4
J'ai tout corrigé dans une version V12.02 téléchargeable par webOTA.
Cdlt
Répondre
#5
(16-10-2024, 03:21 PM)F1ATB a écrit : J'ai tout corrigé dans une version V12.02 téléchargeable par webOTA.
Cdlt

Bonjour André,

  Avec le V12.01, pas de problème de mesure puissance, des que je passe en V12.02, toutes les mesures électriques reste a Zéro

  j'ai fais le swap 12.01 -> 12.02 -> 12.01  -> 12.02 -> 12.01

  c'est bien dans 12.02 qu'il y a un bug  

  Je suis en UxI, je suspecte la correction avec les float autour kI et kV

  ça fonctionnait dans la version précédente car l'opération démarre par l'utilisation d'un float (KV ou KI),
  en ajoutant les parenthèses autour de CalibU / 1000, on force un calcul en entier et on converti le résultat de la division obtenu en un réel  
  comme mon CalibI est inférieur à 1000, ça retourne 0 ...

Pour faire propre :
  kV = KV * CalibU / 1000.0;
  kI = KI * CalibI / 1000.0;

ou 
  kV = KV * (float)CalibU / 1000.0;
  kI = KI * (float)CalibI / 1000.0;


à la place de 
  kV = KV * float(CalibU / 1000);
  kI = KI * float(CalibI / 1000);
Merci André Smile ,
Routeur V12.06 (since V2.01) / 1xESP32 (IP fixe) / Source UxI / 5 actions
Panneaux 1680Wc
1 Triac : ECS 2000W
1 SSR (multi) : ECS 1800W
1 SSR (On-Off) : Circulateur plancher chauffant eau 50W
1 SSR (multi) : circuit d'eau 1500W
1 SSR (multi) : Ultime 2000W
Répondre
#6
J'ai mis à jour vers la v12 02, il y a bien un petit problème de coefficients multiplicateurs.
Répondre
#7
Bien vu. Je me suis bien planté... sur cette correction de la calibration. J'ai retiré la V12.02 et je l'ai remplacé par une V12.03

Merci
André/F1ATB
Répondre
#8
Bonjour, et merci André !
v12.03, énergies soutirées et énergies injectées réparées, c'est beau !
[Image: Soutirage-Jour-OK.png]
Répondre
#9
Hello,

je suis passé en 12.03 mais je trouve incohérent la consommation alors que presque rien ne tourne chez moi.
du coup je me demande si il n y a pas un pb? ou si j ai oublié de configurer qq chose de nouveau?

Merci

PS: pb résolu, a priori le routeur Source avait UxI comme config au lieu de UxIx3. Je ne sais pas si c lié à la maj ou une erreur de ma part.

   
   
ESP32 (v12.05): 1 Source UxIx3, 3 routeurs avec 1 SSR sur le CE (ESP Externe) dont 2 avec Sonde température, 1 routeur avec 2 SSRs: Pompe Piscine et PAC
16 panneaux 445WC avec Enphase 7 tri-phasé avec une idée d'extension de qqs PVs plug&play sur le pool house sous HomeAssistant 
Répondre
#10
Bonjour,

Savez vous pq la nouvelle durée reste à 0?

   

Avant mon sensor était: "routeur_f1atb_routeur3_duree_relais_1" maintenant le nouveau créé est: "routeur_f1atb_ce_buanderie_duree_equiv" mais il est tjs à 0:
   

Merci
XabiX
ESP32 (v12.05): 1 Source UxIx3, 3 routeurs avec 1 SSR sur le CE (ESP Externe) dont 2 avec Sonde température, 1 routeur avec 2 SSRs: Pompe Piscine et PAC
16 panneaux 445WC avec Enphase 7 tri-phasé avec une idée d'extension de qqs PVs plug&play sur le pool house sous HomeAssistant 
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)