NEWS
Stromzähler über ioBroker auslesen und auswerten
-
Hallo liebe ioBroker-Gemeinde!
Ich habe nur auch einen digitalen Stromzähler bekommen. Diesen habe ich mit dem Hichi-Lesekopf ausgestattet. Den Zähler habe ich per Pin freigeschaltet. Auf dem Hichi ist Tasmota vorinstalliert (verbunden per WLAN) und ich habe diesen per MQTT angebunden. Die Daten kommen auch an.
Nun zu meinem Problem bzw. der Aufgabe, die ich erledigen will.
Per MQTT kommen in regelmäßigen kurzen Zeitabständen die Werte rein. Siehe hier ein Auszug:
10:10:06.756 MQT: esp/ESP01-02/tele/SENSOR = {"Time":"2024-09-14T10:10:06","eHZ":{"76_7_0":6.43}} 10:10:07.693 MQT: esp/ESP01-02/tele/SENSOR = {"Time":"2024-09-14T10:10:07","eHZ":{"16_7_0":218.60}} 10:10:07.714 MQT: esp/ESP01-02/tele/SENSOR = {"Time":"2024-09-14T10:10:07","eHZ":{"36_7_0":256.25}} 10:10:07.734 MQT: esp/ESP01-02/tele/SENSOR = {"Time":"2024-09-14T10:10:07","eHZ":{"56_7_0":-68.79}} 10:10:07.756 MQT: esp/ESP01-02/tele/SENSOR = {"Time":"2024-09-14T10:10:07","eHZ":{"76_7_0":31.14}} 10:10:08.692 MQT: esp/ESP01-02/tele/SENSOR = {"Time":"2024-09-14T10:10:08","eHZ":{"16_7_0":218.60}} 10:10:08.712 MQT: esp/ESP01-02/tele/SENSOR = {"Time":"2024-09-14T10:10:08","eHZ":{"36_7_0":256.25}} 10:10:08.733 MQT: esp/ESP01-02/tele/SENSOR = {"Time":"2024-09-14T10:10:08","eHZ":{"56_7_0":-72.49}}
Wie man am Timestamp sehen kann, kommen fünf Datenpakete direkt hintereinander rein: 16_7_0 bis 76_7_0. Wie wertet ihr diese Daten aus? In den Objekten sehe ich nur
{"Time":"2024-09-14T10:20:39","eHZ":{"76_7_0":-192.71}}
Das liegt wohl daran, dass das immer der letzte Wert in der Reihe ist und die anderen Daten vorab sehr schnell rein kommen. Löst ihr das per Blockly-Skript? Oder gibt es einen Adapter, der das für einen erledigt?
Wenn das per Blockly verarbeitet werden soll, habt ihr mal eine Beispielskript zur Hand?
Ich freue mich auf euer Feedback.
-
2 Tipps:
- les dir hier mal alles durch - da ist ein Link auch zum auswerten der Daten vom Zaehler..
https://ottelo.jimdofree.com/stromzähler-auslesen-tasmota/#GoogleScript
- nutze den Sonoff Adapter anstatt den MQTT, der loest die Daten schoener auf, wenn Tasmota drauf ist..
-
@ilovegym Vielen Dank. Ich werde mir das am WE mal in Ruhe ansehen und mich bei Fragen ggf. nochmal melden
-
@josh sagte in Stromzähler über ioBroker auslesen und auswerten:
Wie wertet ihr diese Daten aus?
Was mit Tasmota geflasht ist wird bei mir über den Sonoff-Adapter verbunden.
Der dröselt das JSON auch gleich fein auseinander.Wie sieht denn Dein SML aus?
-
@codierknecht @ilovegym Hier ist mein Skript:
Ich habe jetzt den SonOff-Adapter installiert und den eHZ-Lesekopf per MQTT an diesen angebunden. Allerdings bekomme ich lediglich diese Objekte:
Irgendwie ist das wohl etwas wenig. Was übersehe ich?
-
@josh Bei mir funktioniert das seit ca einem Jahr. Ist ein anderer Zähler und ein Node Mcu. Gehe auch über den Sonoff Adapter.
Die Werte habe ich über den influx Adapter in eine Influx DB geleitet. Da kriegt man die Messwerte dann schnell genug weggeschriebenSo sieht mein Tasmota Hauptmenu aus...
So der Tree im Sonoff ObjektbaumHier muss natürlich der Port des Sonoff Adapters eingetragen werden:
-
@josh
Mein Script sieht so aus:>D >B =>sensor53 r >M 1 +1,1,s,0,9600,eHZM 1,77070100100700ff@1,Leistung,W,Power_curr,0 1,77070100010800ff@1000,Verbrauch,KWh,Total_in,1 1,77070100010801ff@1,Tarif1,Wh,Tarif1_in,1 1,77070100010802ff@1,Tarif2,Wh,Tarif2_in,1 1,=h<hr/> 1,77070100020800ff@1000,Einspeisung,kWh,Einspeisung,4 #
Das sieht im Hauptmenü so aus:
Und in den Objekten so:
-
- zeig mal einen Screenshot von der Tasmotaoberfläche, gleich die Startseite mit den Werten die er anzeigt
- Poste mal das hinterlegte Skript für das Auslesen des Zählers.
Blos weil es Tasmota ist, heißt das nicht das der Sonoff-Adapter das auch schön auseinander dröseln kann. Das bekommt er ganz oft und schön hin, manchmal kann er aber nicht richtig erkennen was da kommt. Bei dir vermutlich nicht wegen "eHZ", er erwartet für so etwas - meine ich - "SML".
Bei mir - ich mache das auch direkt über MQTT - kommen aber zum Beispiel alle Werte in einem JSON:
{"Time":"2024-09-22T10:41:01","SML":{"Verbrauch_T1":8481.8923904,"Verbrauch_T2":0.2737477,"Verbrauch_Summe":8482.1661382,"Einspeisung_Summe":3798.6762921,"Watt_L1":-1207.49,"Watt_L2":1492.11,"Watt_L3":1360.93,"Watt_Summe":1645.55,"Volt_L1":237.3,"Volt_L2":236.2,"Volt_L3":235.8}}
und den zerlege ich dann.
Wenn man dein Skript das auf dem Hichi-Lesekopf läuft mal sieht, könnte man das wohl auch umbauen das alles in einem Rutsch gesendet wird. Vermutlich stehen bei dir ganz viele=>Publish ....
Anweisungen drin. Alternativ könnte man über diese das an verschiedene Datenpunkte senden, für schöner halte ich die Version mit alles in einem. Dazu müsstest du vermutlich einfach alle
=>Publish
auskommentieren in dem du ein;
davor setzt. Dann sollte wieder die normale Meldung gemäß derTeleperiod
kommen, per default dann alle 5 Minuten.
In der Console kannst du den Wert dann mitTeleperiod
abfragen und mitTeleperiod 60
z.B. auf alle 60 Sekunden setzen.Im Skript könnte man dann auch anpassen das da die Namen stehen statt "76_7_0"
-
Poste mal das hinterlegte Skript für das Auslesen des Zählers
Hat er doch weiter oben (im Spoiler) gepostet:
https://forum.iobroker.net/topic/76894/stromzähler-über-iobroker-auslesen-und-auswerten/5Ob da jetzt "SML" oder "eHZ" steht, sollte völlig Wumpe sein.
Bei mir steht "eHZM" ... macht keine Probleme.@Josh Welches Zählermodell ist das genau?
Meiner ist der hier:
Vielleicht kannst Du ja (testweise) mal mein Script versuchen. -
Mein Zähler ist der Typ eBZ DD3 2R06 DTA SMZ1.
Hier noch mein Startbildschirm in Tasmonta:
Ich habe zum Test mal 'eHZ' in 'SML' umbenannt. Keine Änderung. Geht also nicht.
Komisch ist auch, dass auf dem Startscreen 6 Werte angezeigt werden, aber per MQTT nur 4 Werte nacheinander übermittelt werden.
Mein Script ist, wie schon erwähnt, oben im Spoiler. Aber hier nochmal, aber um einige Kommentare gekürzt:
>D >B ;TelePeriod 30 =>sensor53 r >M 1 +1,3,s,16,9600,eHZ 1,77070100010800FF@100000000,kaufen,kWh,1_8_0,8 1,77070100020800FF@100000000,verkaufen,kWh,2_8_0,8 1,77070100100700FF@1,Leistung,W,16_7_0,18 1,77070100240700FF@1,Leistung L1,W,36_7_0,18 1,77070100380700FF@1,Leistung L2,W,56_7_0,18 1,770701004C0700FF@1,Leistung L3,W,76_7_0,18 #
Wo soll das =>publish stehen? Ich finde das nirgends. Und der Parameter teleperiod scheint keine Auswirkung zu haben. Die Daten kommen im Sekundenrhythmus vom Zähler und werden gleich per MQTT weitergegeben. Das sollte doch per teleperiod einstellbar sein?!?!
-
@josh sagte in Stromzähler über ioBroker auslesen und auswerten:
Und der Parameter teleperiod scheint keine Auswirkung zu haben
Das wird beim Logging konfiguriert:
Soweit ich das verstehe, wird mit dem 4ten Parameter (16) in Zeile 6 ein Mittelwert (Median) gebildet.
Da sollte eigentlich eine 0 stehen.+1,3,s,0,9600,eHZ
Hast Du das was der Sensor so von sich gibt mal in den Decoder geschmissen?
https://tasmota-sml-parser.dicp.net/Komisch ist auch, dass auf dem Startscreen 6 Werte angezeigt werden, aber per MQTT nur 4 Werte nacheinander übermittelt werden.
Du hast nur 4 Werte mit dem Flag für "immediately" versehen. Das ist die "18" am Ende der Zeile.
<precision> number of decimal places. Add 16 to transmit the data immediately. Otherwise it is transmitted on TelePeriod only.
Ich würde das Flag da entfernen und nur alle X Sekunden (wie in Teleperiod definiert) senden.
8 Stellen (bei den ersten beiden Einträgen) finde ich auch deutlich überdimensioniert. Das würde ich etwas reduzieren. -
@josh sagte in Stromzähler über ioBroker auslesen und auswerten:
Mein Script ist, wie schon erwähnt, oben im Spoiler. Aber hier nochmal, aber um einige Kommentare gekürzt:
>D >B ;TelePeriod 30 =>sensor53 r >M 1 +1,3,s,16,9600,eHZ 1,77070100010800FF@100000000,kaufen,kWh,1_8_0,8 1,77070100020800FF@100000000,verkaufen,kWh,2_8_0,8 1,77070100100700FF@1,Leistung,W,16_7_0,18 1,77070100240700FF@1,Leistung L1,W,36_7_0,18 1,77070100380700FF@1,Leistung L2,W,56_7_0,18 1,770701004C0700FF@1,Leistung L3,W,76_7_0,18 #
Wo soll das =>publish stehen? Ich finde das nirgends. Und der Parameter teleperiod scheint keine Auswirkung zu haben. Die Daten kommen im Sekundenrhythmus vom Zähler und werden gleich per MQTT weitergegeben. Das sollte doch per teleperiod einstellbar sein?!?!
Die 18 am Ende der Zeilen ist der Grund. Macht 2 Dezimalstellen + 16 für sofort senden.
Ändere man alle 18 am Ende zu 2 und er sollte nur noch zurTeleperiod
sendenSiehe auch https://tasmota.github.io/docs/Smart-Meter-Interface/#meter-metrics
-
Das sieht schon viel besser aus. Einfach die 18'er durch 2'er ersetzt. Jetzt werden mit einem MQTT-Datagramm alle Werte geschickt. Damit kann ich arbeiten.
Da wäre ich im Leben nicht drauf gekommen. Vielen Dank an euch. Ihr seid die Besten