FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: cb2sela am 23 Februar 2019, 13:36:18

Titel: [gelöst] monotonic userReading funktioniert nicht und macht, was es will
Beitrag von: cb2sela am 23 Februar 2019, 13:36:18
Ich habe an der Ferraris-Scheibe meines Stromzählers einen TCRT5000 und einen NodeMCU, die mir die erkannten Pulse an FHEM senden. Das eigentliche Erkennen und Zählen funktioniert hervorragend.

Ich habe jetzt jedoch Tage damit immer wieder neu rumprobiert, ein monotonic userReading für den aktuellen Zählerstand hinzufummeln, aber es geht und geht einfach nicht. Das userReading Akt_Verbrauch funktioniert tadellos, aber das reading ZaehlerPulseTotal macht was es will.

Meine Definition für die userReadings (aus der Gui herauskopiert) sieht so aus:


Akt_Verbrauch:Total.* { sprintf("%.3f",ReadingsNum("ESPEasy_Ferraris_Strom","Count",0)*12/150);}, ZaehlerPulseTotal:Total.* monotonic { ReadingsNum("ESPEasy_Ferraris_Strom","Count",0);}


Im Logfile schauts aber zappenduster aus:


2019-02-23_12:34:14 ESPEasy_Ferraris_Strom Count: 4
2019-02-23_12:34:14 ESPEasy_Ferraris_Strom Total: 2480
2019-02-23_12:34:14 ESPEasy_Ferraris_Strom Akt_Verbrauch: 0.320
2019-02-23_12:34:14 ESPEasy_Ferraris_Strom ZaehlerPulseTotal: 55

2019-02-23_12:39:14 ESPEasy_Ferraris_Strom Count: 22
2019-02-23_12:39:14 ESPEasy_Ferraris_Strom Total: 2502
2019-02-23_12:39:14 ESPEasy_Ferraris_Strom Akt_Verbrauch: 1.760
2019-02-23_12:39:14 ESPEasy_Ferraris_Strom ZaehlerPulseTotal: 73

2019-02-23_12:44:14 ESPEasy_Ferraris_Strom Total: 2518
2019-02-23_12:44:14 ESPEasy_Ferraris_Strom Count: 16
2019-02-23_12:44:14 ESPEasy_Ferraris_Strom Akt_Verbrauch: 1.280
2019-02-23_12:44:14 ESPEasy_Ferraris_Strom ZaehlerPulseTotal: 73

2019-02-23_12:49:14 ESPEasy_Ferraris_Strom Total: 2524
2019-02-23_12:49:14 ESPEasy_Ferraris_Strom Count: 6
2019-02-23_12:49:14 ESPEasy_Ferraris_Strom Akt_Verbrauch: 0.480
2019-02-23_12:49:14 ESPEasy_Ferraris_Strom ZaehlerPulseTotal: 73

2019-02-23_12:54:14 ESPEasy_Ferraris_Strom Count: 8
2019-02-23_12:54:14 ESPEasy_Ferraris_Strom Total: 2532
2019-02-23_12:54:14 ESPEasy_Ferraris_Strom Akt_Verbrauch: 0.640
2019-02-23_12:54:14 ESPEasy_Ferraris_Strom ZaehlerPulseTotal: 75

2019-02-23_12:59:14 ESPEasy_Ferraris_Strom Count: 10
2019-02-23_12:59:14 ESPEasy_Ferraris_Strom Total: 2542
2019-02-23_12:59:14 ESPEasy_Ferraris_Strom Akt_Verbrauch: 0.800
2019-02-23_12:59:14 ESPEasy_Ferraris_Strom ZaehlerPulseTotal: 77

2019-02-23_13:04:14 ESPEasy_Ferraris_Strom Total: 2544
2019-02-23_13:04:14 ESPEasy_Ferraris_Strom Count: 2
2019-02-23_13:04:14 ESPEasy_Ferraris_Strom Akt_Verbrauch: 0.160
2019-02-23_13:04:14 ESPEasy_Ferraris_Strom ZaehlerPulseTotal: 77


Um 12:34 Uhr ist ZaehlerPulseTotal: 55. Mit dem nächsten lauf um 12:39 Uhr hätten eigentlich 22 Pulse draufkommen müssen und der Wert damit 77 werden. De facto wird er 73.
73 + 16 sollte im nächsten Lauf eigentlich 89 werden und nicht 73 bleiben.
73 + 6 sollte 79 werden und nicht 73.
73 + 8 sollte 81 werden und nicht 75.
75 + 10 sollte 85 werden und nicht 77.

Danke für die Hilfe vorab.
Titel: Antw:monotonic userReading funktioniert nicht und macht, was es will
Beitrag von: justme1968 am 23 Februar 2019, 13:55:04
monotonic geht von einem kontinulierlich laufenden zähler aus und verhindert das dieser plötzlich rückwärts läuft weil extern irgendetwas auf 0 gesetzt wurde.

d.h. die interpretation ist so:
- von 4 bis 22 sind 18 dazu gekommen. 55+18 = 73.
- von 22 nach 16 ist irgendetwas passiert das dazu geführt hat das der zähler zurück gesetzt wurde oder zumindest nicht nur vorwärts lief. es ist nur anhand dieser beiden werte nicht möglich rauszufinden was genau passiert ist -> diese runde wird ignoriert.
- von 16 zu 6 ebenfalls
- von 6 zu 8: es sind zwei dazu gekommen. 73+2 = 75
usw.


dein count fängt aber für jedes intervall immer wieder bei 0 an. d.h. musst die werte einfach aufsummieren. entweder selber oder über integral.
Titel: Antw:monotonic userReading funktioniert nicht und macht, was es will => gelöst
Beitrag von: cb2sela am 23 Februar 2019, 14:18:23
Herzlichen Dank dafür, das wars.

Ich musste also einfach das ebenfalls vorhandene Reading Total auswerten, damit alles wie erwartet funktioniert.


Akt_Verbrauch:Total.* { sprintf("%.3f",ReadingsNum("ESPEasy_Ferraris_Strom","Count",0)*12/150);}, ZaehlerPulseTotal:Total.* monotonic { ReadingsNum("ESPEasy_Ferraris_Strom","Total",0);}


Danke nochmal.