Leistung Wärmepumpe aus kaskadiertem Stromzähler berechnen, und wenn das dann richtige Werte zeigt auch den Verbrauch berechnen

Hallo liebe Kommunität!

Ich habe eine Photovoltaikanlage mit Speicher und 2 kaskadierte Stromzähler wo dazwischen die Wärmepumpe hängt. Diese ist so alt… (17 Jahre), dass sie mir ihren Verbrauch leider nicht mitteilen kann.

Die Stromzähler greife ich mittels iobroker und dem smartmeter aus und übermittle die Werte dann per mqtt an Home Assistant. Wie berechne ich jetzt die aktuelle Leistung der Wärmepumpe aus der “Differenz” der zwei Zähler?

Mein lokales gemma3:12b gibt mir das hier aus, aber mein HomeAssistant sagt: nö


template:

* sensor:
  * name: “Leistung Wärmepumpe”
    unit_of_measurement: W
  * device_class: power
  * unique_id: leistung_wp
    state: >
    {% set wp_leistung = states(‘sensor.mqtt_zähler_leistung_mit_wp’) | float %}
    {% set ohne_wp_leistung = states(‘sensor.mqtt_zähler_leistung_ohne_wp’) | float %}
    {% if wp_leistung < 0 and ohne_wp_leistung < 0 %}
    {{ wp_leistung - ohne_wp_leistung }}  {#  Addiere, wenn beide negativ sind #}
    {% elif wp_leistung < 0 %}
    {{ wp_leistung }}  {# Nur Wärmepumpe hat Einspeisung #}
    {% elif ohne_wp_leistung < 0 %}
    {{ -ohne_wp_leistung }}  {# Nur Zähler ohne WP hat Einspeisung #}
    {% else %}
    {{ wp_leistung - ohne_wp_leistung }}  {# Standardsubtraktion #}
    {% endif %}

Kann mir jemand den Fehler bitte zeigen?
Vielen Dank im voraus

Fehlt da etwas vor dem Minus? Oder willst du einen negativen Wert ausgeben?
Wenn letzteres, dann multipliziere mit -1 oder baue dir einen String zusammen.

ich glaube die lokale “KI” (besser stochastische Mustererkennung) versteht nicht :wink:
beide Zähler können negativ oder positiv sein, also 4 Kombinationen sind möglich. Hier möchte ich aber immer den Abstand der 2 Zähler berechnet haben.
Und ich weiß nicht wie ich es formulieren soll, damit es (der Verbrauch der Wärmepumpe) stimmt

Nachtrag1:

ups:

template:
  - sensor:
      - name: "Wärmepumpe Bezug (Betrag)"
        unit_of_measurement: W
        device_class: power
		unique_id: leistung_wp
        state: >
		 {% set wp_leistung = states('sensor.stromzahler_leistung_mit_wp') | float %}
         {% set ohne_wp_leistung = states('sensor.stromzaehler_leistung_ohne_wp') | float %}
		 
         {% if wp_leistung > 0 and ohne_wp_leistung > 0 %}
           {{ wp_leistung - ohne_wp_leistung }}  {# Standard: Beide verbrauchen #}
         {% elif wp_leistung < 0 and ohne_wp_leistung < 0 %}
            {{ abs(ohne_wp_leistung) - abs(wp_leistung) }}  
          {% elif wp_leistung > 0 and ohne_wp_leistung < 0 %}
            {{ wp_leistung + abs(ohne_wp_leistung) }} 
         {% else %}
            "Unbekannt"  {# Falls ein Zähler keinen Wert hat #}
         {% endif %} 

ich nähere mich:

'abs' is undefined
template:
  - sensor:
      - name: "Wärmepumpe Bezug (Betrag)"
        unit_of_measurement: W
        device_class: power
		unique_id: leistung_wp
        state: >	      
            "Unbekannt"

Nachtrag2:
Es wird besser. Wenn beide Werte positiv sind, kommen schon richtige Berechnungen. Nur bei negativen “states” erscheint immer “Unbekannt”

template:
  - sensor:
      - name: "Wärmepumpe Bezug (Betrag)"
        unit_of_measurement: W
        device_class: power
		unique_id: leistung_wp
        state: >
		 {% set wp_leistung = states('sensor.stromzahler_leistung_mit_wp') | float %}
         {% set ohne_wp_leistung = states('sensor.stromzaehler_leistung_ohne_wp') | float %}
		 
         {% if wp_leistung > 0 and ohne_wp_leistung > 0 %}
           {{ wp_leistung - ohne_wp_leistung }}  {# Standard: Beide verbrauchen #}
         {% elif wp_leistung < 0 and ohne_wp_leistung < 0 %}
            {{ float(ohne_wp_leistung) - float(wp_leistung) }}  
          {% elif wp_leistung > 0 and ohne_wp_leistung < 0 %}
            {{ wp_leistung + float(ohne_wp_leistung) }} 
         {% else %}
            "Unbekannt"  {# Falls ein Zähler keinen Wert hat #}
         {% endif %} 

Ich vermute das hier ist die Lösung, ich teste noch:

- name: "Wärmepumpe Bezug (Leistung)"
        unit_of_measurement: W
        device_class: power
        state_class: measurement
        unique_id: leistung_wp
        state: >
          {# Wir tauschen hier die Rollen der Sensoren #}
          {% set messpunkt_netz = states('sensor.stromzaehler_leistung_ohne_wp') | float(0) %}
          {% set messpunkt_haus = states('sensor.stromzahler_leistung_mit_wp') | float(0) %}
          
          {# Differenz: Netzbezug minus das, was im Haus/PV passiert #}
          {% set diff = messpunkt_netz - messpunkt_haus %}
          
          {# Ergebnis muss positiv sein, da WP nur verbraucht #}
          {{ [0, diff] | max | round(2) }}
        availability: >
          {{ is_number(states('sensor.stromzahler_leistung_mit_wp')) and 
             is_number(states('sensor.stromzaehler_leistung_ohne_wp')) }}

: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 🫶)

Ich habe es früher auch über yml gemacht. Inzwischen nutze ich den Helfer „Kombinationssensor“, über den ich die Differenz der beiden Zähler ermittle.

Geht so natürlich auch für alle anderen Zählergrößen.