Prüfung Plausibiltät in Template-Sensor

schlozzepino

New member
Hallo,
ich messe meinen Stromverbrauch mit einem Tasmota Sensor und der liefert ab und zu Quatschwerte, die mir die Statistik versauen. Ich habe jetzt herausgefunden, dass der kWh Wert einfach ab und zu deutlich unter dem tatsächlichen liegt und dann die Berechnung mit dem nächsten Wert, der wieder stimmt, nicht mehr funktioniert.
Ich habe mir überlegt, einfach den Wert vom Tasmota mit dem aktuellen (und somit letzten Wert) meines Sensors zu vergleichen und nur zu speichern, wenn der Wert nicht mehr als 1 kWh abweicht.
Ich habe also aus diesem bestehenden Sensor
YAML:
template:
    - sensor:
      - name: "Stromzähler Verbrauch"
        unique_id: "StromzVerbrauch"
        unit_of_measurement: 'kWh'
        device_class: "energy"
        state_class: "total_increasing"
        state: >-
            {{ float(states('sensor.tasmota_sml_verbrauch_summe')) | round(3) }}
Diesen gemacht:
YAML:
 - sensor:
      - name: "Stromzähler Verbrauch"
        unique_id: "StromzVerbrauch"
        unit_of_measurement: 'kWh'
        device_class: "energy"
        state_class: "total_increasing"
        state: >-
            {% if (float(states('sensor.stromzahler_verbrauch'))-float(states('sensor.tasmota_sml_verbrauch_summe'))|round(3)) < 1 %}
                {{ float(states('sensor.tasmota_sml_verbrauch_summe')) | round(3) }}
            {% else %}
                states('sensor.stromzahler_verbrauch')
            {% endif %}

Beim Konfig-Check bekomme ich keinen Fehler angezeigt, nach der Änderung ist jedoch der Sensor nicht mehr verfügbar. Was mach ich falsch oder hab ich einen groben Denkfehler?

Grüße
Schlozz
 
Die Frage ist für mich eher warum nimmst du nicht den originalen Sensor von Tastmota, sondern bildest du überhaupt einen neuen?
Weil der nicht die passenden Attribute hat?
 
Was passiert denn wen du den Code mal in den Entwickler-Tools unter Template eingibst.
Dort kann man das doch sehr schön sehen und beobachten.
 
Ich verstehe leider nicht, weshalb der Sensor nicht mehr verfügbar ist, wenn ich den State mit der If Bedingung setze. Vielleicht muss die Syntax da irgendwie anders sein?
 
Naja, wenn es das erste Mal "unavailable" ist rennt die Prüfung auf jeden Fall in einen Syntaxfehler, da Du dann versuchst, den String "unavailable" mittels float zu konvertieren, was natürlich nicht funktioniert - dann kann er nicht mehr aus dem Zustand herauskommen. Ich fürchte, der Sensor kann während der Initialisierung noch nicht auf sich selbst zugreifen, soweit jedenfalls die Ergebnisse von meinen Versuchen, das nachzustellen.

Was bei mir funktioniert:
YAML:
      state: >-
          {% if states('sensor.stromzahler_verbrauch') | float (0) - states('sensor.tasmota_sml_verbrauch_summe') | float(0) | round(3) < 1 %}
              {{ states('sensor.tasmota_sml_verbrauch_summe') | float(0) | round(3) }}
          {% else %}
              {{ states('sensor.stromzahler_verbrauch') | float(0) }}
          {% endif %}
Also float mit Fallback, um die Fehlermeldung zu verhindern, die Initialisierung erfolgreich zu beenden und dann die gewünschten Daten bereitzustellen. Ist jetzt aber nur kurz auf technische Funktionalität geprüft :)
 

Letzte Anleitungen

Statistik des Forums

Themen
4.660
Beiträge
47.631
Mitglieder
4.309
Neuestes Mitglied
jocz126
Zurück
Oben