Seite 1 von 1

Subtraktion zweier Sensorwerte

Verfasst: Fr 23. Jul 2021, 13:17
von Markus
Hallo,

ich möchte die Werte von zwei Sensoren subtrahieren. Leider erhalte ich immer ein
Invalid config for [sensor.template]: expected dictionary for dictionary value
Was mache ich falsch?

Ansatz:

Code: Alles auswählen

- platform: template
    sensors:
      friendly_name: Hausverbrauch
      unit_of_measurement: W
      value_template: "{{ (states('sensor.solaredgemod_ac_power') | float) - (states('sensor.einspeise_max') | float)}}
Einheiten der Sensoren wären gleich:

sensor.solaredgemod_ac_power
unit_of_measurement: W

sensor.einspeise_max
unit_of_measurement: W

Re: Subtraktion zweier Sensorwerte

Verfasst: Fr 23. Jul 2021, 13:31
von Osorkon
Du hast vergessen die Sensor Entität anzugeben.

Code: Alles auswählen

- platform: template
  sensors:
    hausverbrauch:
      friendly_name: Hausverbrauch
      unit_of_measurement: W
      value_template: "{{ (states('sensor.solaredgemod_ac_power') | float) - (states('sensor.einspeise_max') | float)}}"

Re: Subtraktion zweier Sensorwerte

Verfasst: Fr 23. Jul 2021, 16:51
von Markus
Danke! Funktioniert....

Re: Subtraktion zweier Sensorwerte

Verfasst: Sa 24. Jul 2021, 21:45
von Markus
Eine Frage noch, ich müsste die Formel etwas erweitern...wenn nämlich das Ergebnis negativ ist, sollte der hausverbrauch nämlich folgenden Wert von

Code: Alles auswählen

sensor.volkszaehler_max
darstellen
Irgendwie funktionert diese If Anweisung aber nicht

Code: Alles auswählen

value_template: "{{ (states('sensor.solaredgemod_ac_power') | float | round(0)) - (states('sensor.einspeise_max') | float | round(0) )}} 
                        { if sensor.hausverbrauch > 0 }
                            {{ sensor.hausverbrauch }}
                        { else }
                            {{ sensor.volkszaehler_max }}
                        { endif  }"

Re: Subtraktion zweier Sensorwerte

Verfasst: Sa 24. Jul 2021, 22:53
von Osorkon
So sollte es funktionieren. 😀

Code: Alles auswählen

value_template: >-
  {% if (states('sensor.solaredgemod_ac_power') | float | round(0)) - (states('sensor.einspeise_max') | float | round(0) ) > 0 %}
  {{ (states('sensor.solaredgemod_ac_power') | float | round(0)) - (states('sensor.einspeise_max') | float | round(0) )}}
    {%- else -%}
  {{ states('sensor.volkszaehler_max ') | float }}
    {%- endif %}
Willst Du wirklich die Einzelwerte aufrunden und dann erst von einander abziehen?
Oder sollten das Ergebnis der Subtraktionen aufgerundet werden?

Re: Subtraktion zweier Sensorwerte

Verfasst: So 25. Jul 2021, 10:25
von Markus
richtig wäre wohl nur das Ergebnis zu runden, nur wie schaffe ich das?

Bzgl. Code
sensor.solaredgemod_ac_power ist gerade > 0
sensor.hausverbrauch zeigt aber 0 (sensor.einspeise_max auch > 0 ist)

Re: Subtraktion zweier Sensorwerte

Verfasst: So 25. Jul 2021, 11:15
von Osorkon
Markus hat geschrieben: So 25. Jul 2021, 10:25 richtig wäre wohl nur das Ergebnis zu runden, nur wie schaffe ich das?

Code: Alles auswählen

{{ ((states('sensor.solaredgemod_ac_power') | float ) - (states('sensor.einspeise_max') | float )) | round(0)}}
Markus hat geschrieben: So 25. Jul 2021, 10:25 Bzgl. Code
sensor.solaredgemod_ac_power ist gerade > 0
sensor.hausverbrauch zeigt aber 0 (sensor.einspeise_max auch > 0 ist)
Beschreibe mal in eigenen Worten, was genau den der sensor.hausverbrauch den Anzeigen soll.

A = sensor.solaredgemod_ac_power
B = sensor.einspeise_max
C = sensor.volkszaehler_max
D = sensor.hausverbrauch

Aktuell wird D folgendermaßen berechnet:

Wenn A-B > 0 Dann D = A-B
Sonst D = C

Re: Subtraktion zweier Sensorwerte

Verfasst: So 25. Jul 2021, 11:39
von Markus
A = sensor.solaredgemod_ac_power
= Leistung der PV Anlage am Dach

B = sensor.einspeise_max
= Wert den der Smart-Meter in das Stromnetz einspeist

C = sensor.volkszaehler_max
= Wert den der Smart-Meter aus dem Stromnetz bezieht

D = sensor.hausverbrauch
= Leistung PV Anlage mins Einspeisewert, sollte der Bedarf des Hauses sein
wenn die Leistung PV Anlage < 0 ist, wird sämtliche Energie aus dem Netz bezogen
es gäbe jetzt noch den Fall, das der Hausverbrauch höher als die PV Anlagenleistung ist und zusätzlich noch Energie aus dem Netz bezogen werden muss (dieser Fall bildet die Formel noch nicht ab)

Re: Subtraktion zweier Sensorwerte

Verfasst: So 25. Jul 2021, 16:18
von Osorkon
Solange Du Strom ins Netzt einspeisen tust, ist dann C=0?
Wenn ja, dann müsste es so ausschauen, oder?

Wenn A-B > 0 dann D = A-B -> Du erzeugst mehr Strom als Du Verbrauchst. Die Differenz ist Dein Hausverbrauch.
Sonst D = A+C -> Du Erzeugst Strom und beziehst zusätzlich welche aus dem Netz.

Re: Subtraktion zweier Sensorwerte

Verfasst: So 25. Jul 2021, 20:54
von Markus
eigentlich müsste es so lauten:
  • A-B > 0 dann sensor.hausverbrauch = A-B
  • A-B <= 0 dann sensor.hausverbrauch = C
  • A-B >0 und C > 0 dann sensor.hausbrauch = A-B + C

Re: Subtraktion zweier Sensorwerte

Verfasst: So 25. Jul 2021, 22:14
von Osorkon
Markus hat geschrieben: So 25. Jul 2021, 20:54 A-B <= 0 dann sensor.hausverbrauch = C
Das ist doch auch mit dieser Formel ausreichend beschrieben, oder nicht?

"Sonst D = A+C -> Du Erzeugst Strom und beziehst zusätzlich welche aus dem Netz."

Alles was nicht > 0 ist <=0
Außerdem kann A-B doch nur >= 0 sein, oder? Dann würdest Du ja mehr Strom ins Netzt einspeisen als als die Solaranlage erzeugt?!

Markus hat geschrieben: So 25. Jul 2021, 20:54 A-B >0 und C > 0 dann sensor.hausbrauch = A-B + C
Diesen Zustand kann es doch gar nicht geben, oder?
Du speist Strom ins Netz ein (A-B>0) und beziehst gleichzeitig auch Strom aus dem Netz?

Habe keine Solaranlage, deshalb kann es sein, dass ich nur Mist verzapfe. 🤷‍♂️

Du kannst ja aber auch Deine Gedanken umsetzen. Das Handwerkszeug hast Du ja nun. 😀
Teste das ganze Template erst mal im Template Editor, bevor Du Deinen Template Sensor anpassen tust.

Re: Subtraktion zweier Sensorwerte

Verfasst: Fr 30. Jul 2021, 20:45
von Osorkon
Servus @Markus und wie hast Du es schlussendlich umgesetzt?

Vielleicht bring die neue HA Version was interessantes für Dich mit?

https://rc.home-assistant.io/blog/2021/ ... ase-20218/

😀

Re: Subtraktion zweier Sensorwerte

Verfasst: Sa 31. Jul 2021, 23:19
von Markus
Mein Fehler war das ich zu sehr in mathematischen Operationen als Bedingungen dachte, gelöst hab ich es nun so:

Code: Alles auswählen

value_template: >-
          {% if (states('sensor.solaredgemod_ac_power') | float ) > 0 and (states('sensor.einspeise_max') | float ) > 0  %}
          {{ (states('sensor.solaredgemod_ac_power') | float ) - (states('sensor.einspeise_max') | float ) | round(0) }}
          {% elif (states('sensor.solaredgemod_ac_power') | float ) > 0  and (states('sensor.volkszaehler_max') | float ) > 0  %}
          {{ (states('sensor.solaredgemod_ac_power') | float ) + (states('sensor.volkszaehler_max') | float ) | round(0) }}
          {% elif (states('sensor.solaredgemod_ac_power') | float ) < 0  and (states('sensor.volkszaehler_max') | float ) > 0  %}
          {{ (states('sensor.volkszaehler_max') | float ) | round(0) }}
              {%- else -%}
          {{ (states('sensor.volkszaehler_max') | float ) | round(0) }}
            {%- endif %}
Danke auch für den Hinweis zu der neuen HA Version bzgl. Energy!