Welche State Class hat den Dein Energy Sensor?
total oder total_increasing
Gruß Osorkon
Welche State Class hat den Dein Energy Sensor?
total oder total_increasing
Gruß Osorkon
Ne das geht auch anders,
aber das spielt jetzt ja keine Rolle.
Ja auch irgendwie zu Recht, aber dazu kann man aus der Ferne halt schlecht etwas sagen. Hier gab es schon User bei denen es zu solchen, oder ähnlichen Effekten kam, weil der IR-Lesekopf sich nur ganz minimal auf dem Zähler verschoben hatte, oder auf einmal als noch ein zweiter IR-Lesekopf mit ins Spiel kam.
Ich würde Dir empfehlen jetzt erst einmal die Sensoren im Blick zu behalten und z.B. zu schauen ob es ggf. zu Unterbrechungen bei der Wifi- oder der MQTT-Broker Verbindung kommt. Ich kann mir nicht vorstellen das HA selber für das Problem verantwortlich ist, denn schließlich kommen ja da scheinbar keine Daten von dem IR-Lesekopf.
Im schlimmsten Fall wäre ggf. ein neuer IR-Lesekopf fällig.
VG Jim
Ich behalte das mal im Auge. Jedenfalls vielen Dank für die Hilfe
Keine Problem dafür ist ein Forum und der Austausch der User untereinander, ja da.
Mal sehen ob und wann die KIs dafür sorgen das auch das dann nicht mehr passiert. ![]()
VG Jim
Hallo zusammen, ich hab hier ein ähnliches “Phänomen”. Der MQQT hat “Aussetzer” und dann passiert es, dass im Template zur “0” einfach der Zählerstand aufsummiert wird.
Gibt es hier eine Möglichkeit, das “Fehlertoleranter” zu gestalten?
Bevor ich jetzt die 45 Beiträge alle lese um zu verstehen, was du meinst, beschreib doch dein Problem einfach mal komplett. Was für Geräte hast du, bla, bla
ich hab von wattwaechter einen smart reader.
den hab ich per Tasmoata Integration und via template/helfer eingebunden.
In der Statistik ahb ich nun seit knapp 6 Wochen extreme Ausreisser auf diesem Sensor.
Und dann für die Statistik im Template yaml
sensor:
- name: “Stromzähler Verbrauch”
unique_id: StromzVerbrauch
unit_of_measurement: “kWh”
device_class: energy
state_class: total_increasing
state: >
{{ states(‘sensor.tasmota_wattwae_e_in’) | float(0) | round(3) }}
- name: “Stromzähler Erzeugung”
unique_id: StromzErzeugung
unit_of_measurement: “kWh”
device_class: energy
state_class: total_increasing
state: >
{{ states(‘sensor.tasmota_wattwae_e_out’) | float(0) | round(3) }}
Da scheint irgendwas dann schiefzulaufen, denn auf den Wert wird der Zählerstand und nicht die differenz aufgerechnet.
by HarryP: Code-/Logzeilen formatiert (bitte immer in </> einbinden)
s.a.: (Neues Update & Features - Hier in der Community 🫶)
Wenn ich dich richtig verstehe, hatte ich sowas mit nem Blutooth Plug, der ab und an mal die Verbindung verloren hat. Schau mal nach dem float (0)!
Wenn MQTT ausfällt, dann kommt unavailable zurück. float(0) macht daraus eine “Null”. HA sieht dann Zählerstand geht auf “0” um dannzurück auf 5000kWh als Beispiel und bucht die 5000kWh als “Verbrauch”. Das sind die Ausreißer.
Bei unavailable/unknown explizit unavailable zurückgeben anstatt “0”. HA sollte das dann überspringen.
- name: "Stromzähler Verbrauch"
unique_id: StromzVerbrauch
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
state: >
{% set v = states('sensor.tasmota_wattwae_e_in') %}
{% if v in ['unavailable', 'unknown'] %}
unavailable
{% else %}
{{ v | float | round(3) }}
{% endif %}
- name: "Stromzähler Erzeugung"
unique_id: StromzErzeugung
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
state: >
{% set v = states('sensor.tasmota_wattwae_e_out') %}
{% if v in ['unavailable', 'unknown'] %}
unavailable
{% else %}
{{ v | float | round(3) }}
{% endif %}
Man kann das Übel aber auch direkt an der Quelle bekämpfen.
Dazu muss man im Tasmota Script bei >B nur smlj=0 eintragen.
Beispiel:
>B
=>sensor53 r
smlj=0
Dann unter >S, wenn nicht vorhanden neu anlegen, das hier eintragen.:
Beispiel:
>S
if (sml[2]>0) {smlj=1}
Dabei ist sml[2] der Energiebezug bzw. Stromverbrauch, wobei ich mich schwer tue bei Energie von Verbrauch zu reden. Die Physiker / Wissenschaftler wissen was ich meine. ![]()
Wenn jemand neu ist, also noch keine Statistik in HA hat, kann er sich viel Arbeit sparen wenn er im Tasmota Script gleich die Entitäten richtig eingibt.:
Leistung = Power
Als Einheit ein “W”
Energiebezug (Verbrauch) = ImportActive
Einspeisung = ExportActive
Als Einheit “kWh”
Es macht auch keinen Sinn bei Leistung Werte hinterm Komma einzutragen.
Bei Energie würde ich das auf drei Kommastellen begrenzen.
Wenn man die Leistung (Power) in Echtzeit benötigt, kommt am Ende der Zeile statt der Kommastelle eine 16 hin. Das bewirkt das jede Änderung sofort per Mqtt gesendet wird. Wird benötigt um zum Beispiel eine PV Anlage zu regeln.
Alle anderen Werte werden standardmäßig alle 300 Sekunden gesendet, was in der Regel ausreicht. Dieser Wert kann aber bis auf min. 10 Sekunden reduziert werden.
Wer mehr Werte benötigt, für was auch immer, der kommt um das geYAML nicht herum.
Danke für die zahlreichen Tipps. auch an @Mercator (deine Templateänderung hab ich direkt mal übernommen)
Nun werde ich das Script im Sensor noch anpassen auf den Vorschlag von @Sir_Toby .
Aktuell so:
>D
>B
=>sensor53 r
>M 1
+1,3,o,16,9600,Wattwaechter
1,1-0:1.8.0*255(@1,Verbrauch,kWh,E_in,3
1,1-0:2.8.0*255(@1,Einspeisung,kWh,E_out,3
1,1-0:16.7.0*255(@1,akt. Leistung,W,Power,0
1,1-0:36.7.0*255(@1,Leistung L1,W,36_7_0,0
1,1-0:56.7.0*255(@1,Leistung L2,W,56_7_0,0
1,1-0:76.7.0*255(@1,Leistung L3,W,76_7_0,0
1,1-0:32.7.0*255(@1,Spannung L1,V,32_7_0,1
1,1-0:52.7.0*255(@1,Spannung L2,V,52_7_0,1
1,1-0:72.7.0*255(@1,Spannung L3,V,72_7_0,1
1,1-0:96.1.0*255(@#),Identifikation,,96_1_0,0
#
korrigiert dann so?
>D
>B
=>sensor53 r
smlj=0
>S
if (sml[2]>0) {smlj=1}
>M 1
+1,3,o,16,9600,Wattwaechter
1,1-0:1.8.0*255(@1,Verbrauch,kWh,E_in,3
1,1-0:2.8.0*255(@1,Einspeisung,kWh,E_out,3
1,1-0:16.7.0*255(@1,akt. Leistung,W,Power,0
1,1-0:36.7.0*255(@1,Leistung L1,W,36_7_0,0
1,1-0:56.7.0*255(@1,Leistung L2,W,56_7_0,0
1,1-0:76.7.0*255(@1,Leistung L3,W,76_7_0,0
1,1-0:32.7.0*255(@1,Spannung L1,V,32_7_0,1
1,1-0:52.7.0*255(@1,Spannung L2,V,52_7_0,1
1,1-0:72.7.0*255(@1,Spannung L3,V,72_7_0,1
1,1-0:96.1.0*255(@#),Identifikation,,96_1_0,0
#
Muss ich da bei der Formatierung etwas beachten?
Hab mir das ja bisher auch nur “zusammengetrickt” und muss zugeben wenn ich in die Tasmota Doku schaue, dass ich da echt noch einiges Wissen brauche…
smlj sorgt dafür dass der sensor nach einem reboot nicht direkt daten schickt, richtig?
Ja genau, Werte werden nur geschickt wenn größer 0.
Wenn du die Reihenfolge im Script nicht ändern möchtest musst du folgende Änderung machen.:
>S
if (sml[1]>0) {smlj=1}
Oder du musst die Zeilen von Verbrauch und Einspeisung tauschen.
Wenn du dann noch alles linksbündig ziehst sieht es gut aus.
Du kannst, wenn du auf Nummer sicher gehen willst die 0 durch deinen Zählerstand minus ein paar kWh ersetzen.
zum Beispiel, wenn du 5000kWh auf dem Zähler hast:
>S
if (sml[1]>4999) {smlj=1}
Hier mal dein korrigiertes Script:
>D
>B
=>sensor53 r
smlj=0
>S
if (sml[2]>0) {smlj=1}
>M 1
+1,3,o,16,9600,Wattwaechter
1,1-0:16.7.0*255(@1,akt. Leistung,W,Power,16
1,1-0:1.8.0*255(@1,Verbrauch,kWh,E_in,3
1,1-0:2.8.0*255(@1,Einspeisung,kWh,E_out,3
1,1-0:36.7.0*255(@1,Leistung L1,W,36_7_0,0
1,1-0:56.7.0*255(@1,Leistung L2,W,56_7_0,0
1,1-0:76.7.0*255(@1,Leistung L3,W,76_7_0,0
1,1-0:32.7.0*255(@1,Spannung L1,V,32_7_0,1
1,1-0:52.7.0*255(@1,Spannung L2,V,52_7_0,1
1,1-0:72.7.0*255(@1,Spannung L3,V,72_7_0,1
1,1-0:96.1.0*255(@#),Identifikation,,96_1_0,0
#
Danke @Sir_Toby .
Habs direkt umgesetzt. Dann kann ja nun kein Messfehler mehr auftreten.
Spannend wäre jetzt natürlich, wie ich meine Statistik bereinige. Das muss ich mir jetzt auch nochmal angucken.
Gibt es da Tipps bezüglich der SQL-Datenbanken, ob man das irgendwie einfacher gestalten kann? oder doch händisch die Ausreißer suchen und passende Verbrauchswerte eintragen.
Danke @Mercator dass meinte ich mit händisch.
Mein traum wäre mir die Tabellen aufzurufen und direkt die betroffenen Stellen zu ändern. Am besten durch einen Mittelwert der vorhergehenden und nachfolgenden Werts. - Das würde allerdings dann voraussetzen das eigentlich ja auch die Summenwerte neu berechnet werden müssten…
ich guck mal was ich mache.
Wahrscheinlich bin ich händisch schneller als nen bequemen Weg zu suchen ![]()
Super Infos, danke dafür!
Leider scheint es aber ein Problem zu geben:
nach der Erweiterung des Tasmota-Scripts durch
>B
smlj=0
bekomme ich anschließend via HTTP(S)/JSON keine gültige Antwort mehr auf ein get von
http://192.168.xxx.xxx/cm?cmnd=status%208/StatusSNS/eHZ/Power
Dies nutze ich um dem Hoymiles-Wechselrichter/OpenDTU-oB den aktuellen Leistungsbezug mitzuteilen.
Vorher:
12:59:53.600 MQT: stat/tasmota_38585C/STATUS8 = {"StatusSNS":{"Time":"2026-05-05T12:59:53","eHZ":{"E_in":20113.1,"E_out":63.7,"Power":237.4,"wirkenergie_total":63720.7}}}
Nachher:
13:06:17.716 MQT: stat/tasmota_38585C/STATUS8 = {"StatusSNS":{"Time":"2026-05-05T13:06:17"}}
Value 1: Unable to access JSON key 'eHZ' (JSON path 'StatusSNS/eHZ/Power', position 10)
Ein restart/reboot des Tasmota-Lesekopfes ändert leider nichts daran.
Ideen?
Hast du denn auch den Part unter >S eingetragen?
Hallo, ja.
Der Fehler tritt nach sukzessivem Rückbau aber bereits beim Abschnitt
>B
smlj=0
auf.
Tasmota 15.3.0 (bitShake)
Wenn du nur smlj=0 hast, wird nie etwas kommen.
Funktioniert nur in Verbindung mit >S, wobei du darauf achten musst das sml[2] die Zeile des Stromverbrauchs sein muss. Wenn dem nicht so ist, musst du das anpassen. Wie sieht denn die Ausgabe auf der Konsole aus?
Poste mal dein Script hier in einer Codebox.
Konsole:
13:24:42.278 MQT: stat/tasmota_38585C/STATUS8 = {"StatusSNS":{"Time":"2026-05-05T13:24:42","eHZ":{"E_in":20113.2,"E_out":63.7,"Power":139.7,"wirkenergie_total":63720.7}}}
13:24:42.295 MQT: tele/tasmota_38585C/SENSOR = {"Time":"2026-05-05T13:24:42","eHZ":{"Power":136.9}}
13:24:42.736 SCR: nv=0, tv=0, vns=0, vmem=16, smem=16384, gmem=624, pmem=0, tmem=17024, xvars=0
13:24:42.737 SCR: performs "sensor53 r"
13:24:42.738 SML: CRC reset
13:24:42.739 SML: CRC free buffer
13:24:42.740 SML: CRC reset
13:24:42.740 SML: CRC specialoptions (=soC) so_sml_crc='400'
13:24:42.740 SML: CRC active -> init
13:24:42.740 SML: CRC mode 0
13:24:42.741 SML: CRC active -> init
13:24:42.741 SML: CRC config change - reinit. Buffersize: 1024 mode: 0
13:24:42.742 SML: CRC mode 0
13:24:42.742 SML: uart used: 1
13:24:42.743 meters: 1 , decode lines: 4, memory used: 3809 bytes
13:24:42.747 MQT: stat/tasmota_38585C/RESULT = {"Time":"2026-05-05T13:24:42","SML":{"CMD":"restart"}}
13:24:43.524 MQT: tele/tasmota_38585C/STATE = {"Time":"2026-05-05T13:24:43","Uptime":"0T00:12:40","UptimeSec":760,"Heap":87,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":20,"MqttCount":1,"Berry":{"HeapUsed":59,"Objects":1008},"Wifi":{"AP":1,"SSId":"Fritz!Box 7490 5,0","BSSId":"38:10:D5:B6:D6:AB","Channel":11,"Mode":"HT20","RSSI":70,"Signal":-65,"LinkCount":1,"Downtime":"0T00:00:04"},"Hostname":"tasmota-38585C-6236","IPAddress":"192.168.178.128"}
13:24:44.607 MQT: tele/tasmota_38585C/SENSOR = {"Time":"2026-05-05T13:24:44","eHZ":{"Power":153.1}}
13:24:46.942 MQT: stat/tasmota_38585C/STATUS8 = {"StatusSNS":{"Time":"2026-05-05T13:24:46"}}
13:24:46.993 MQT: stat/tasmota_38585C/STATUS8 = {"StatusSNS":{"Time":"2026-05-05T13:24:46"}}
Nach Speichern des Scripts 13:24:42.x
Script:
>D
>B
=>sensor53 r
smlj=0
>S
if (sml[1]>0) {smlj=1}
>M 1
+1,5,s,0,9600,eHZ,1
1,=soC,1024,0
1,=so1,00010800,63,5,63,5,000f0700
1,77070100010800ff@1000,Verbrauch,kWh,E_in,1
1,77070100020800ff@1000,Einspeisung,kWh,E_out,1
1,77070100100700ff@1,akt. Leistung,W,Power,17
1,77070100020800FF@1,Wirkenergie Total,Wh,wirkenergie_total,1
#
Hast du mal versucht was passiert wenn du die ersten zwei Zeilen, also die mit 1,=so ans Ende des Scripts setzt?
Funktioniert denn sonst alles, also hast du Werte in HA?