Addition in Notify erzeugt falsche Werte

Begonnen von Antimaster, 20 November 2018, 23:22:55

Vorheriges Thema - Nächstes Thema

Antimaster

Hallo,
Ich bin gerade dabei aus einem SDM 630 die Summe für den Import / Export des EVU-Zählerstand berechnen zu wollen. Der Zähler ist nach dem EVU-Zähler eingebaut und ich habe zusätzlich eine PV-Anlage an L1 laufen. Da der Zähler keinen Gesamt-Zählerstand sondern nur Import /Export einzeln erzeugt muss ich den saldierten Zählerstand berechnen. Dafür lese ich die Werte mittels Modbus aus und erhalte alle 10 Sekunden den aktuelle Leistungswert. Daraus berechne ich die verbrauchten Watt in den Sekunden und möchte diese einfach auf den Gesamt-Zählerstand addieren. Leider bekomme ich komplett falsche Werte bei der Addition. Hier der Code vom Notify.


ESPEasy_EspEasy_Stromzaehler:.* {
my $StromUmlaufzeit= ReadingsVal("ESPEasy_EspEasy_Stromzaehler","PowerTotal","0")/360;
my $StromImport=0;
my $StromExport=0;
my $StromImportAktuell=0;
my $StromExportAktuell=0;


if($StromUmlaufzeit>0){
$StromImport=$StromUmlaufzeit;;
$StromImportAktuell=ReadingsVal("ESPEasy_EspEasy_Stromzaehler","PowerTotal","0");

}

else{
$StromExport=($StromUmlaufzeit)*(-1);
$StromExportAktuell=ReadingsVal("ESPEasy_EspEasy_Stromzaehler","PowerTotal","0")*(-1);
}

my $SummeImport = ReadingsVal("StromZaehlerStand","state","0") + ReadingsVal("Strom","Offset","0")+$StromImport;
my $SummePruefen = ReadingsVal("TestStromzaehlerstand","state","0") +$StromUmlaufzeit;
my $SummeNeu= $SummeImport - 88932000;
my $SummeExport = ReadingsVal("StromZaehler_Export","state","0") + ReadingsVal("StromZaehler_Export","Offset","0")+ $StromExport;

fhem("set StromZaehler_Export $SummeExport ");;
fhem("set StromZaehlerStand $SummeImport ");;
fhem("set StromZaehlerStand_Neu $SummeNeu");;
fhem("set Strom StromAktuell $StromImportAktuell");;
fhem("set StromZaehler_Export StromAktuell $StromExportAktuell");;
fhem("set StromverbrauchAktuell $StromUmlaufzeit");;
fhem("set TestStromzaehlerstand $SummePruefen");;
}


Die StromUmlaufzeit sind die Watt in den 10 Sekunden. Dabei wird ein Wert von ca. 1.3 errechnet mit jeder menge Nachkommastellen. Addiere ich den Wert mit dem Wert aus dem Dummy TestStromzaehlerstand (0) erhalte ich statt 1.3 den Wert 6.12342345. Die genauen Werte sind in dem angehängten Bild zu sehen. Wieso ergibt sich die Addition von StromUmlaufzeit +TestStromzaehlerstand (0) ein Ergebnis von 6......????

Otto123

Hi,

mach mal bitte den Eventmonitor auf und setze das Filter ESPEasy_EspEasy_Stromzaehler:.*
Dann poste mal bitte die Events, die pro 10 sec auftauchen.

Ich vermute, dein notify wird "100 mal" getriggert und du liest zu irgendwelchen Zeitpunkten Readings aus die nichts mit einander zu tun haben.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Antimaster

Vielen Dank! So wie es aussieht wurde wirklich für jeden einzelnen Wert das Notify aufgerufen und ausgeführt. Da die Werte jedoch Zeitgleich kommen ist das nicht aufgefallen.
Hab das Notify jetzt auf ESPEasy_EspEasy_Stromzaehler:PowerTotal:.* geändert und schon funktioniert es so wie es soll.
Manchmal könnte es so einfach sein.  ::)