Stromzähler mit SMR IR Lesekopf jede Sekunde auslesen

Hallo zusammen,
ich möchte hier meine Lösung präsentieren, wie ich die per IR Lesekopf am Stromzähler ausgelesenen Leistungsdaten (aktueller Verbrauch/Bezug) jede Sekunde in Home Assistant zur Verfügung stelle, um eine Nulleispeisung zu verwirklichen.

Das Problem
Nachdem ich den SMR von bitshake am freigeschalteten Zähler montiert und in Home Assistant eingebunden hatte, stellt ich fest, dass die Daten nur alle 5 Minuten an Home Assistant übergeben wurden, obwohl im Web-Interface des Lesekopfs etwa alle 500ms neue Daten angezeigt wurden.

Das Ziel
Die Nulleinspeisung. Für eine Nulleinspeisung brauche ich die Informationen über den aktuellen Stromfluss möglichst in Echtzeit, also bestenfalls immer dann, wenn der Lesekopf einen neuen (geänderten) Wert erkennt.

Der Weg zur Lösung
Nach einiger Zeit bei der Websuche fand ich die Möglichkeit, die teleperiod zu reduzieren. Der minimale Wert ist jedoch auf 10 Sekunden begrenzt. Das ist schonmal besser, aber noch nicht optimal, denn wenn Heißluftfriteuse, Herd, Backofen oder ähnliches im Intervall heizen, verschwende ich Energie oder kaufe unnötigerweise zu viel Strom ein.
Dann soll es noch die Möglichkeit von Rules geben, mit denen man auf Trigger-Basis Befehle ausführen kann. Nur leider bekomme ich immer die Rückmeldung, dass Rule ein unbekannter Befehl sei. Also geht das auch nicht.

Die Lösung
Letztendlich habe ich eine Lösung, den Status des Sensors als Command per MQTT anzufragen. In der tasmota Dokumentation sind unter Management die verschiedenen Statuswerte zu finden. Hier wird Status 10 = show connected sensor information benötigt. Über das Terminal der Weboberfäche des SMR führt also der command cmnd/tasmota_UniqueID/Status 10 zu einer MQTT Nachricht, die den aktuellen Status des Lesekopfs ausgibt.
In Home Assistant kann dieser Command per mqtt.publish nun an den Lesekopf gesendet werden. Dabei wird als Topic cmnd/tasmota_UniqueID/Status angegeben und 10 als Payload.

Hier meine Automatisierung:

  • Trigger: Jede Sekunde
  • Bedingung: Aktuelle Leistung darf nicht “nicht verfügbar” sein
  • Aktion: MQTT-Nachricht veröffentlichen
alias: SMR - Stromfluss pollen
description: ""
triggers:
  - trigger: time_pattern
    seconds: /1
conditions:
  - condition: not
    conditions:
      - condition: state
        entity_id: sensor.bitshake_smartmeterreader_emh_power
        state: unavailable
actions:
  - action: mqtt.publish
    data:
      qos: 0
      retain: false
      topic: cmnd/tasmota_UniqueID/Status
      payload: "10"
mode: single

:information_source:
UniqueID bzw. tasmota_UniqueID muss natürlich durch eure eigene eindeutige ID bzw. durch euer jeweiliges Topic ersetzt werden.

Falls ihr eine bessere Lösung habt, die nicht auf polling basiert, klärt mich gerne auf :slight_smile:

1 „Gefällt mir“

Ich weiß zwar nicht warum das bei Dir so ist, aber bei mir werden die sich am Iskra Stromzähler veränderten Werte im Sekundentakt per IR Lesekopf von BitShake auch bei HA aktualisiert und angezeigt. Ohne dafür irgendwelche extra Automatisierungen per MQTT oder Ähnliches zu nutzen. Woher ich das weiß: Weil ich unter HA die sich quasi im Sekundentakt ändernde (Einspeise)Werte meiner PV-Anlage sehen. :slightly_smiling_face:
Beispiel

Bzg. Tasmota Telemetry period und den 5 Minuten bzw. 300 Sek. hatte ich ja gerade erst hier ein Posting erstellt.

VG JIm

(Beitrag vom Verfasser gelöscht)

Tatsächlich… Das funktioniert. Aber wieso funktioniert das? :smiley:

(Beitrag vom Verfasser gelöscht)

Ich muss mich hier mal als unwissend outen: wie stelle ich das wo ein?

(Beitrag vom Verfasser gelöscht)

1 „Gefällt mir“

Das von mir verwendete Script für den Iskra MT176

>D
>B
->sensor53 r
>M 1
+1,5,s,16,9600,MT176
1,77070100010800ff@1000,Gesamtverbrauch,kWh,E_in,3
1,77070100020800ff@1000,Gesamteinspeisung,kWh,E_out,3
1,77070100100700ff@1,Aktueller Verbrauch,W,P,18
#

Wie man sieht 18 bei P. :wink:

VG Jim

1 „Gefällt mir“

Über das Interface des SMR in Werkzeuge → Skript
Dann in dem Skript die Werte für Nachkommastelle (das sind jeweils die letzten Werte je Zeile) +16 dazu addieren. In meinem Fall war die Leistung (Power) mit 0 Nachkommastellen eingestellt, also habe ich sie auf 16 gestellt. Jetzt bekomme ich etwa jede Sekunde die aktuellen Werte per MQTT veröffentlicht.

>D
>B
->sensor53 r
>M 1
+1,5,s,16,9600,EMH,4
1,77070100010800ff@1000,Verbrauch,kWh,E_in,3
1,77070100020800ff@1000,Einspeisung,kWh,E_out,3
1,77070100100700ff@1,akt. Leistung,W,Power,16
1,77070100240700FF@1,Leistung L1,W,Power L1,16
1,77070100380700FF@1,Leistung L2,W,Power L2,16
1,770701004C0700FF@1,Leistung L3,W,Power L3,16
#

Sieht man auch schön in der Konsole:

17:06:11.234 MQT: tele/tasmota_ID/SENSOR = {"Time":"2024-11-03T17:06:11","EMH":{"Power L1":453}}
17:06:11.246 MQT: tele/tasmota_ID/SENSOR = {"Time":"2024-11-03T17:06:11","EMH":{"Power L2":10}}
17:06:11.283 MQT: tele/tasmota_ID/SENSOR = {"Time":"2024-11-03T17:06:11","EMH":{"Power L3":226}}
17:06:11.333 MQT: tele/tasmota_ID/SENSOR = {"Time":"2024-11-03T17:06:11","EMH":{"Power":690}}
17:06:12.245 MQT: tele/tasmota_ID/SENSOR = {"Time":"2024-11-03T17:06:12","EMH":{"Power L1":453}}
17:06:12.256 MQT: tele/tasmota_ID/SENSOR = {"Time":"2024-11-03T17:06:12","EMH":{"Power L2":10}}
17:06:12.265 MQT: tele/tasmota_ID/SENSOR = {"Time":"2024-11-03T17:06:12","EMH":{"Power L3":226}}
17:06:12.293 MQT: tele/tasmota_ID/SENSOR = {"Time":"2024-11-03T17:06:12","EMH":{"Power":690}}
17:06:13.243 MQT: tele/tasmota_ID/SENSOR = {"Time":"2024-11-03T17:06:13","EMH":{"Power L1":452}}
17:06:13.254 MQT: tele/tasmota_ID/SENSOR = {"Time":"2024-11-03T17:06:13","EMH":{"Power L2":10}}
17:06:13.265 MQT: tele/tasmota_ID/SENSOR = {"Time":"2024-11-03T17:06:13","EMH":{"Power L3":226}}
17:06:13.293 MQT: tele/tasmota_ID/SENSOR = {"Time":"2024-11-03T17:06:13","EMH":{"Power":690}}
1 „Gefällt mir“

Jungs und Mädels, ihr seid die Besten! Auf den Shice wäre ich alleine nie gekommen! Jetzt läuft das Ding völlig synchron mit dem Shelly Pro 3EM.

Aber mal im Ernst: ist das irgendwo so dokumentiert oder wie hast du das rausbekommen? Das Script hatte ich zwar mit der Hand am Arm selbst erweitert, weil im offiziellen Script die Leistung der einzelnen Phasen nicht enthalten war, aber diese Funktion, dass die Anzahl der Nachkommastellen die Aktualisierungsrate beeinflusst, habe ich nirgends gesehen. Wahrscheinlich war ich aber auch nur zu blöde oder zu blind (btw. hatte ich bei dem Post von @Nein_danke nicht weit genug nach unten gescrollt und nicht geschnallt, dass es das Script war…)

(Beitrag vom Verfasser gelöscht)

Auweia, manchmal hilft rtfm doch… Ich bezweifel zwar, dass ich es ohne euch gefunden hätte, aber trotzdem schon ein wenig peinlich für mich…

Was mich betrifft habe ich mich damals (vor ein oder zwei Jahren) an den entsprechenden Beispiel-Scripten die es ja auf der Tasmota Webseite gibt orientiert. Z.B. an dem für einen Iskra MT175.

>D
>B
->sensor53 r
>M 1
+1,3,s,16,9600,MT175
1,77070100010800ff@1000,E_in,kWh,E_in,1
1,77070100020800ff@1000,E_out,kWh,E_out,1
1,77070100100700ff@1,P,W,P,18
1,77070100240700ff@1,L1,W,L1,18
1,77070100380700ff@1,L2,W,L2,18
1,770701004C0700ff@1,L3,W,L3,18
1,77070100000009ff@#,Server_ID,,Server_ID,0
#

Was so für meinen Iskra MT176 natürlich nicht passte, aber was auch schon die 18 als Wert enthielt. Das habe ich dann in Kombination mit dem Tasmota SML Dekoder entsprechend angepasst.

VG Jim

(Beitrag vom Verfasser gelöscht)

Mein Stromzähler stellt das gar nicht so genau zur Verfügung. Da werden nur volle Watt ausgegeben. Reicht ja auch, der Rest wird vermutlich ohnehin Messtoleranz sein.

Jepp aber die Kommastellen werden ja eigentlich eh ignoriert da sie der Zähler ja wohl auch nicht liefert und somit Tasmota da auch nichts außer Nullen anzeigt. :slightly_smiling_face:
Tasmota_WebGUI_Kommarstellen

Aber darüber hatte ich mir damals auch gar keine Gedanken gemacht. :laughing:

VG Jim

Danke, da war ich wohl blind unterwegs…