[gelöst] merkwürdiges Verhalten in userreading

Begonnen von Nobbynews, 21 Juni 2020, 08:54:18

Vorheriges Thema - Nächstes Thema

Nobbynews

Guten Morgen,

ich habe mir für den Stromzähler neben der Summation über die Funktion monotonic zu Testzwecken noch eine eigenen Methode zunächst über ein notify und dann über ein userreading definiert.

Count: Zählimpulse Umdrehungen von einem ESPEasy-Counter
energyTotalTest: Zählerstand
Zählerkonstante: 96 U/kWh

hier das notify:
ESPEasy_ESP_05_Strom:Count:.* {
my $count = ReadingsNum ("ESPEasy_ESP_05_Strom","Count",0);
if ($count != 0){
my $stand = ReadingsNum("ESPEasy_ESP_05_Strom","energyTotalTest",0);
fhem ("setreading ESPEasy_ESP_05_Strom energyTotalTest ".($stand+($count/96)));
}
}


hier das userreading:
energyTotalTest {if (ReadingsNum($name,"Count",0) !=0)
{sprintf("%.9f",(ReadingsNum($name,"energyTotalTest",0)+
(ReadingsNum($name,"Count",0)/192)))} else {}


Es ergeben sich nur die gleichen Werte (auch im Vergleich zu Funktion monotonic) wenn ich im userreading anstatt durch 96 mit 192, also Faktor 2, rechne.
Das notify habe ich natürlich auf disabled gesetzt.

Hat jemand eine Idee, woher und wieso der Faktor 2 erforderlich ist?
Ich stehe auf dem Schlauch.....

Norbert

Edit 1:
Die Ursache für den Faktor 2 habe ich jetzt durch eine Log-Datei gefunden:
2020-06-21_10:08:13 ESPEasy_ESP_05_Strom energyTotal: 176370.27375
2020-06-21_10:08:23 ESPEasy_ESP_05_Strom energyTotal: 176370.284166667
2020-06-21_10:08:23 ESPEasy_ESP_05_Strom energyTotalTest: 176370.278958330
2020-06-21_10:08:23 ESPEasy_ESP_05_Strom energyTotalTest: 176370.284166663
2020-06-21_10:08:33 ESPEasy_ESP_05_Strom energyTotal: 176370.284166667

Jetzt stellt sich nur die Frage: Wo kommt der zweite Log-Eintrag her???

Edit 2:
Das komplette userreading sieh so aus:
energyTotal:Total.* monotonic
{ReadingsVal($name,"Total",0)/96},
Leistung {if (ReadingsNum($name,"Count",0) !=0)
{
  Log 1, "Leistung aus Count !=0";
(ReadingsNum($name,"Count",0)*625/(ReadingsNum($name,"Time",1)/60000))} else {}},
energyTotalTest {if (ReadingsNum($name,"Count",0) > 0)
{
  Log 1, "eneregyTotalTest aus Count > 0";
  sprintf("%.9f",(ReadingsNum($name,"energyTotalTest",0)+
(ReadingsNum($name,"Count",0)/192)))} else {}
}

Es werden also insgesamt 3 userreadings erzeugt.
Kann es sein, dass für jedes einzelne Userreading das ganze Attribut komplett abgearbeitet wird?
Darauf deuten jedenfalls die erzeugten Log-Einträge:
2020.06.21 10:22:23 1: Leistung aus Count !=0
2020.06.21 10:22:23 1: eneregyTotalTest aus Count > 0
2020.06.21 10:22:23 1: Leistung aus Count !=0
2020.06.21 10:22:23 1: eneregyTotalTest aus Count > 0
2020.06.21 10:23:33 1: Leistung aus Count !=0
2020.06.21 10:23:33 1: eneregyTotalTest aus Count > 0
2020.06.21 10:23:33 1: Leistung aus Count !=0
2020.06.21 10:23:33 1: eneregyTotalTest aus Count > 0
2020.06.21 10:24:43 1: Leistung aus Count !=0
2020.06.21 10:24:43 1: eneregyTotalTest aus Count > 0
2020.06.21 10:24:43 1: Leistung aus Count !=0
2020.06.21 10:24:43 1: eneregyTotalTest aus Count > 0
2020.06.21 10:25:53 1: Leistung aus Count !=0
2020.06.21 10:25:53 1: eneregyTotalTest aus Count > 0
2020.06.21 10:25:53 1: Leistung aus Count !=0
2020.06.21 10:25:53 1: eneregyTotalTest aus Count > 0


Edit 3:
Des Rätsels Lösung waren die fehlenden Trigger in der def der Userreadings.
So klappt es jetzt:

Leistung:Count:.* {if (ReadingsNum($name,"Count",0) !=0)
{
  (ReadingsNum($name,"Count",0)*625/(ReadingsNum($name,"Time",1)/60000))} else {}},
energyTotalTest:Count:.* {if (ReadingsNum($name,"Count",0) > 0)
{
   sprintf("%.9f",(ReadingsNum($name,"energyTotalTest",0)+
(ReadingsNum($name,"Count",0)/96)))} else {}
}