msussek / arduino

13 stars 9 forks source link

Feature Request: Zählerstand nach Reboot wieder herstellen #7

Open burningmind opened 3 years ago

burningmind commented 3 years ago

Hi @msussek ,

mir ist aufgefallen, dass nach einer Stromunterbrechung, der Zählerstand bei Null beginnt. Ich habe hierzu mehrere Ideen und würde gerne ein bisschen brainstormen, weil ich zu wenig von MQTT und den Signalflüssen weiß:

Möglichkeit a) Einen Datenpunkt für den (Gesamt-)Zählerstand erzeugen, der sowohl manuell im iobroker gesetzt werden kann (und dann in den ESP übernommen wird) und der dann mit den Impulsen hochgezählt und per MQTT aktualisiert wird, also eine Read-Write Chain.

Möglichkeit b) Bei einem Restart den letzten Delta-Zählerstand einmalig aus dem iobroker auslesen und als Startwert für die Zählung verwenden

Leider bin ich zu doof dazu, das selbst hinzubekommen, bzw. bin nicht tief genug in MQTT und Deinen Code eingestiegen. HAst Du ne schnelle Idee dazu?


Topic 2: Ich fände es cool im iobroker einen Datenpunkt vom Typ Button "Counter Reset" zu haben, der den Zähler zurücksetzt. Hast Du ne Idee dazu?

Vielen Dank für Dein Feedback.

Trrw commented 2 years ago

Habe das Projekt zufällig gefunden. Würde mich auch sehr interessieren, wie die Lösung A) umsetzbar ist. Vorteil hierbei wäre auch, wenn der ioBroker nicht erreichbar ist, auch dann der Zählerstand weiter gezählt wird. Sobald die Zentrale wieder erreichbar ist, würde automatisch der korrekte Zählerstand angezeigt werden.

msussek commented 2 years ago

Hi zusammen,

eigentlich macht ein Reeboot nichts aus, denn der aktuelle Gesamtzählerstand bleibt ja im Iobroker gespeichert in den Datenpunkten javascript.0.Gas.Verbrauch_Energie sowie javascript.0.Gas.Verbrauch_Volumen.

Beim Neustart des Wemos wird zwar dessen Impulszählerstand wieder auf 0 zurück gesetzt und damit auch der Datenpunkt mqtt.0.SmartHome.Sensor.Haustechnikraum.Impulszaehler.Zaehler_0.Impulse, jedoch kann das Javascript in Iobroker damit problemlos umgehen.

Sobald der Wemos wieder hochgefahren ist und sich der Impulszählerstand wieder von 0 auf 1 auf 2 usw. erhöht, addiert das Javascript einfach den anhand der Impulse ermittelten Verbrauch auf die Gesamtzählerstände javascript.0.Gas.Verbrauch_Energie sowie javascript.0.Gas.Verbrauch_Volumen.

Das heißt, es gehen nur die Impulse verloren die auftraten, während der Wemos nicht verfügbar war. Die Gesamtzählerstände bleiben aber unbeeinflusst und werden nicht genullt.

Umgekehrt, falls der Iobroker neu startet und der Wemos weiter läuft, gibt es auch keine Probleme.

Denn dann zählt der Wemos einfach weiter die Impulse und sobald der Iobroker wieder verfügbar ist, empfängt er den neuen Impulszählerstand vom Wemos per MQTT und addiert den anhand der Impulse ermittelten Verbrauch auf die Gesamtzählerstände.

Man kann übrigens die Gesamtzählerstände in Iobroker problemlos auch manuell korrigieren, einfach den tatsächlichen Zählerwert in javascript.0.Gas.Verbrauch_Volumen eintragen. Dann wird das Javascript den eingetragenen Wert als neuen Zählerstand berücksichtigen und von diesem ausgehend weiter den Verbrauch hoch zählen.

Ich denke also, eigentlich sind die genannten Anforderungen schon umgesetzt oder habe ich hier etwas übersehen?

Trrw commented 2 years ago

Super danke für die Antwort! Ich muss zugeben, ich hatte mir das Projekt nur grob angeschaut. Werde das gerne mal bei mir testen. Genau so etwas habe ich gesucht :) Nun muss ich nur noch herausfinden, wie ich die .ino auf dem Wemos flashen kann.

Danke :)