Templates zeitlich gesteuert ausführen

Hallo zusammen,

ich verzweifele seit Tagen an Berechnungen die ich mittels templates ausführe.

Aufgabe: Ich möchte den Anteil meiner selbst genutzten PV Leistung berechnen. Dazu habe ich mehrere Shellys verbaut. Ich messe den shellyproem_eg_total_active_energy und den shellyproem_eg_total_active_energy. Zusätzlich steht die PV Leistung zur Verfügung.

z.B. sensor:

Total used PV energy EG (manuelle Berechnung)

- name: (HE) Used PV energy EG
  unique_id: "sensor.used_pv_energy_eg"
  unit_of_measurement: 'kWh'
  device_class: energy
  state_class: total_increasing
  state: >-
      {{ (float(states('sensor.stp5_0_3av_40_842_daily_yield'))) + (float(states('sensor.pv_gartenhaus_akku_1_entladung'))) + (float(states('sensor.he_pv_akku_2_entladen_energiedashboard_2'))) - (float(states('sensor.shellyproem_eg_total_active_returned_energy'))) | round(2) }}



Theoretisch funktioniert das auch ganz gut. Nun ist mir aber aufgefallen, das der von mir dazu erstellte Verbrauchssensor unplausible Werte ausgibt. Ich habe herausgefunden, das es daran liegt, das je nach Zeitpunkt der Aktualisierung für einen sehr kurzen Moment zuerst der eine Werte steigt, dann schon gerechnet wird und einen Augenblick später der andere Wert zu Verfügung steht.
Als Beispiel:

Sekunde 1: PV generiert 5000 - returned 2000 = 3000 Eigenverbrauch
Sekunde 2: PV generiert 5001 - returned 2000 = 3001 Eigenverbrauch
Sekunde 3: PV generiert 5001 - returned 2001 = 3000 Eigenverbrauch

Das führt in Folge dazu, das der Verbrauchszähler +1 rechnet und das toggelt dann.

Frage: Gibt es eine Möglichkeit nur in bestimmten Momenten, also z.B, nur wenn entität A sich ändert die Berechnung auszuführen? Oder hat jemand eine andere Idee zur Lösung meines Problems?


Ja, gibt es.
Stichwort Trigger based Template Sensor. Hier die Dokumention.

Gruß Osorkon

Zunächst mal Danke das du dir die Zeit nimmst.

Ich stehe aber gerade etwas auf dem Schlauch… Der triggerd ja ob es einen valide Zahl ist. Das ist ja in meinem Fall immer valid, nur ist das mathematische Ergebnisse kurzzeitig falsch.

Nachtrag:
Habe jetzt eine für aktzeptable Lösung. Ich frage getriggered immer um ss.mm.30 ab.

Hier mein code aus der template.yaml für die Nachwelt:

# getriggerte Sensoren

- trigger:
  - platform: time_pattern
  seconds: “30”
  sensor:
  - name: (HE) EG Total active energy triggered
    unique_id: “sensor.eg_total_active_energy_triggered”
    unit_of_measurement: ‘kWh’
    device_class: energy
    state_class: total_increasing
    state: >-
    {{ (float(states(‘sensor.shellyproem_eg_total_active_energy’))) + (float(states(‘sensor.he_used_pv_energy_eg’))) | round(2) }

ohne Trigger:

mit Trigger:

:crayon:by HarryP:
. Zusammenführung Doppelpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen)
. Code-/Logzeilen formatiert (bitte immer in </> einbinden)
. s.a.: (Neues Update & Features - Hier in der Community 🫶)