Ich versuche falsche Werte des Stromsensors abzufangen, dazu habe ich folgenden Sensor angelegt:
- sensor:
- name: Zählerstand
unique_id: Zaehlerstand
unit_of_measurement: kWh
state_class: total_increasing
device_class: energy
state: >
{% set temp = states('sensor.stromzaehler_lk13be_total') | float(0) + 10 %}
{% if states('sensor.stromzaehler_lk13be_total') == 'unavailable' or states('sensor.stromzaehler_lk13be_total') < '1' %}
{{ states('sensor.zahlerstand') }}
{% elif states('sensor.stromzahler_lk13be_total')| float(0) > temp %}
{{ states('sensor.zahlerstand') }}
{% else %}
{{ states('sensor.stromzaehler_lk13be_total') }}
{% endif %}
Irgendwo habe ich scheinbar einen Fehler drin den ich nicht sehe denn es werden keine Spitzen abgefangen.
Eigentlich sollten doch bei Werten die höher sind als Aktueller Wert +10 der alte Wert eingetragen werden und nicht der falsche zu hohe Wert ?
Du vergleichst sensor.stromzaehler_lk13be_total immer mit sich selbst. Da du den Wert vorher in temp schreibst, haben beide den gleichen Wert.
kann ich das im Template-Editor irgendwie besser kontrollieren ?
Aktuell sind Temp und Sensor.stromzaehler im Editor immer gleich, egal ob ich temp mit Zaehlerstand oder Stromzaehler belege.
Auch mit dem geänderten Sensor werden weiterhin zu hohe Werte eingetragen.
Reload und kompletter Neustart habe ich versucht.
Es sind immer wieder Peaks mit 8165xx.xxx Werten da.
Es wirkt so als ob die ifl Abfrage ignoriert wird.
Aus meiner Sicht machst du es dir zu kompliziert.
Versuch es mal so:
- sensor:
- name: Zählerstand
unique_id: Zaehlerstand
unit_of_measurement: kWh
state_class: total_increasing
device_class: energy
state: >
{% if states.sensor.stromzaehler_lk13be_total.state|float(0) >= states.sensor.zahlerstand.state|float(0) or states('sensor.zahlerstand') in ['unavailable'] %}
{{ states('sensor.stromzaehler_lk13be_total') | float(0) }}
{% else %}
{{ states('sensor.zahlerstand') }}
{% endif %}
Damit fange ich aber keine Ausreisser ab da ja nur auf größer = geprüft wird oder ?
Ich habe inzwischenmal ganz einfach nur :
- sensor:
- name: Zählerstand
unique_id: Zaehlerstand
unit_of_measurement: kWh
state_class: total_increasing
device_class: energy
state: >
{% set temp = states('sensor.zahlerstand') | float(0) + 10 %}
{% if states('sensor.stromzahler_lk13be_total')| float(0) > temp %}
{{ states('sensor.zahlerstand') }}
{% else %}
{{ states('sensor.stromzaehler_lk13be_total') }}
{% endif %}
benutzt.
Hier hätte doch eigentlich alles was höher als zahlerstand + 10 ist durch Zaehlerstand ersetzt werden müssen oder ?
Irgendwie schein die ganze If Abfrage nicht ausgeführt zu werden oder zu einem anderen Ergebniss als erwartet zu führen.
Fehler 1 gefunden
{% if states('sensor.stromzahler_lk13be_total')
muss sein ist
{% if states('sensor.stromzaehler_lk13be_total')
neue Variante
- sensor:
- name: Zählerstand
unique_id: Zaehlerstand
unit_of_measurement: kWh
state_class: total_increasing
device_class: energy
state: >
{% set temp = float(states('sensor.zahlerstand'),0) + 10 %}
{% if states('sensor.stromzaehler_lk13be_total') == 'unavailable' or states('sensor.stromzaehler_lk13be_total') < '1' %}
{{ states('sensor.zahlerstand') }}
{% elif float(states('sensor.stromzaehler_lk13be_total'),0) < float(states('sensor.zahlerstand'),0) %}
{{ states('sensor.zahlerstand') }}
{% elif float(states('sensor.stromzaehler_lk13be_total'),0) > float(temp,0) %}
{{ states('sensor.zahlerstand') }}
{% else %}
{{ states('sensor.stromzaehler_lk13be_total') }}
{% endif %}
hier scheint nur noch die elif 3 ausgeführt zu werden da er nur noch zahlerstand schreibt und der wert sich nicht mehr ändert.
Im Template Editor funktioniert diese Variante , was mich ratlos macht.
Osorkon
14. Dezember 2025 um 20:51
7
Verstehe ich Dich richtig?
Du möchtest einen Template Sensor, der den Wert vom Original Sensor übernimmt, aber nur wenn der Neue Wert > dem alten ist aber auch nicht größer als 10.
{% set new = states('sensor.stromzaehler_lk13be_total') | float(0) %}
{% set current = states('sensor.zahlerstand') | float(0) %}
{% if current == 0 %}
{{ new }}
{% elif new > current and current > 0 and not (new - current) > 10 %}
{{ new }}
{% else %}
{{ current }}
{% endif %}
Gruß Osorkon
Genau und er soll noch Werte unterhalb abfangen, da manchmal auch solche Fehlablesungen kommen.
Ich werde das gleich mal testen.
Scheint zu laufen ich beobachte mal bis Morgen.
Kannst du mir sagen warum mein alter Code ausgestiegen ist und bei der Prüfung ob zu hoch nur noch Zaehlerstand eingetragen hat ?
Die Prüfung auf < hat ja funktioniert nur der dritte elif hat den Fehler produziert.
Danke dir schonmal.
Osorkon
14. Dezember 2025 um 21:45
9
Habe mir diesen ehrlich gesagt gar nicht genau angeschaut.
Was allerdings schon mal nicht funktionierten kann, wenn Du einen mathematischen Vergleichsoperatoren in Verbindung mit einem String verwenden tust.
Thomassh:
< '1'
Gruß Osorkon
Stimmt, manchmal ist man vom ganzen drüberschauen und neu schreiben blind für Fehler
Die Lösung funktioniert, Danke sehr
1 „Gefällt mir“