Kurzer Aussetzer führt zu "Spike" bei Summenbildung

Hallo Zusammen,

ich versuche die Gesamtenergie meiner Beleuchtung zu bestimmen. Dazu verwende ich unter anderem PowerCalc und dieses Template:

- sensor:
      - name: "Gesamtenergie Beleuchtung"
        unique_id: "GesamtenergieBeleuchtung"
        state_class: total_increasing
        icon: mdi:transmission-tower
        unit_of_measurement: kWh
        device_class: energy
        state: >
            {{ 
            (states('sensor.fensterlicht1_energy') | float(2)) + 
            (states('sensor.fensterlicht3_device_energy')| float(2)) + 
            (states('sensor.fensterlicht4_energy')| float(2)) + 
            (states('sensor.deckenlicht_wz_channel_1_energy')| float(2))+ 
            (states('sensor.deckenlicht_wz_channel_2_energy')| float(2))+ 
            (states('sensor.regalbeleuchtung_device_energy')| float(2))+ 
            (states('sensor.philips_hue_go_energy')| float(2))+ 
            (states('sensor.esszimmer_licht_channel_1_device_energy')| float(2))+ 
            (states('sensor.shelly_kuche_channel_1_energy')| float(2))+ 
            (states('sensor.kuchenunterschrank_1_device_energy')| float(2)) + 
            (states('sensor.kuchenunterschrank_2_device_energy')| float(2))+ 
            (states('sensor.kuchenunterschrank_3_device_energy')| float(2))+ 
            (states('sensor.flurlicht_energy')| float(2))+ 
            (states('sensor.schlafzimmer_lichtschalter_channel_1_energy')| float(2))+ 
            (states('sensor.schlafzimmer_lichtschalter_channel_2_energy')| float(2))+ 
            (states('sensor.kellertreppe_energy')| float(2))+ 
            (states('sensor.keller_energy')| float(2))| 
            round (1) 
            }}
        availability: >
            {{ 
            states('sensor.fensterlicht1_energy') | is_number and
            states('sensor.fensterlicht3_device_energy') | is_number and
            states('sensor.fensterlicht4_energy') | is_number and
            states('sensor.deckenlicht_wz_channel_1_energy') | is_number and
            states('sensor.deckenlicht_wz_channel_2_energy') | is_number and
            states('sensor.regalbeleuchtung_device_energy') | is_number and
            states('sensor.philips_hue_go_energy') | is_number and
            states('sensor.esszimmer_licht_channel_1_device_energy') | is_number and
            states('sensor.shelly_kuche_channel_1_energy') | is_number and
            states('sensor.kuchenunterschrank_1_device_energy') | is_number and
            states('sensor.kuchenunterschrank_2_device_energy') | is_number and
            states('sensor.kuchenunterschrank_3_device_energy') | is_number and
            states('sensor.flurlicht_energy') | is_number and
            states('sensor.schlafzimmer_lichtschalter_channel_1_energy') | is_number and
            states('sensor.schlafzimmer_lichtschalter_channel_2_energy') | is_number and
            states('sensor.kellertreppe_energy') | is_number and
            states('sensor.keller_energy') | is_number
            }}

Leider gibt es bei PowerCalc kurze aussetzer, die dann zu einem Spike führen, was mir dann das Energy Dashboard kaputt macht:

Ich hätte gedacht das der “availability” Eintrag im template das verhindert, scheint aber nicht so zu sein…

Kann mir hier jemand weiterhelfen?
Gruß

Ripperle

Wenn ich mich recht erinnere gibt es in den Einstellungen zu Energiesensoren irgedwas mit “links” und “rechts”, was man einstellen kann und dann das Messverhalten ändert.

Stichwort: Linker Riemann Helfer

Ich kenne Powercalc nicht aber ich weiß, daß Verbauchszähler anfällig beim Ausfall eines Sensors sind.

Wenn Du der Theorie folgst, daß beim Ausfall bereits eines einzelnen Sensors gar keine Summe gebildet werden soll (wegen dem folgendem Ausreißer), dann könntest Du alternativ den Weg in der configuration.yaml eine trigger-based template entity anlegen, siehe Template - Home Assistant

Hier die Kurzform eines Test Sensors “gesamtenergie_beleuchtung_test”

template:
  - trigger:
      - platform: state
        entity_id:
          - sensor.fensterlicht1_energy
          - sensor.fensterlicht3_device_energy
          - sensor.fensterlicht4_energy
    sensor:
      - name: "Gesamtenergie Beleuchtung (Test)"
        unique_id: gesamtenergie_beleuchtung_test
        device_class: energy
        state_class: total_increasing
        unit_of_measurement: kWh
        icon: mdi:lightbulb-group
        state: >
          {# In diese Liste alle Sensor Entities rein #}
          {% set sensors = [
            'sensor.fensterlicht1_energy',
            'sensor.fensterlicht3_device_energy',
            'sensor.fensterlicht4_energy'
          ] %}

          {# Prüfe ob alle! Sensoren ein gültige Zahl liefern und nur dann berechne die Summe  #}
          {% if sensors | map('states') | select('is_number') | list | count == sensors | count %}
            {{ sensors | map('states') | map('float') | sum | round(3) }}
          {# Sobald ein Sensor nicht liefert, nehme letzten Summenwert nicht einzelnen Sensorwert #}
          {% else %}
            {{ this.state }}
          {% endif %}

Versuche mal und berichte.

PS: Ich nutze normalerweise auch die Availibility Kriterien, nebenbei gesagt nehme ich has_value aber is_number ist auch ok … aber ich nutze sie nicht bei Verbrauchszählern. Da gab es hier im Forum schon öfters ähnliche Problemberichte über die Sprünge danach.

@klaus123

Ja das hatte ich auch mal gelesen, gilt aber nur für diese Integrator Helfer. In diesem Fall addiere ich ja nur bereits erstellte Energiewerte (ich muss also nichts mehr integrieren)

@Bacardi

Danke für die Tipps… Das mit der Funktion has_value hatte ich ebenfalls gelesen und werde ich als Nächstes mal ausprobieren… wenn das nichts hilft dann die Idee mit Trigger based…

Aktuell läuft erstmal alles, ich beobachte weiter, danke für die Tipps!

Das wird nicht helfen weil das Problem woanders liegt. Aber Schritt für Schritt durch Probieren.

Also ich hatte bis jetzt keine Probleme mehr… Kann nicht sagen woran es lag.

Du könntest, wenn Du Dir wirklich sicher sein willst, unter Entwicklerwerkzeuge den Zustand eines Deiner Energy Sensoren “kurzschließen” (einen Textwert speichern) und schauen wie dann Dein Sensor “GesamtenergieBeleuchtung” damit umgeht.

Du kannst auch einfach abwarten, bis Du das nächste Mal so einen Ausschlag hast und dann an diesen Post denken und die Alternative probieren.