Verrechnung der Stromerzeugungen

Moin

Folgende Situation habe ich. Ich habe 3 Solar Panels und einen Solarakku. 2 Panels ( ost und West) gehen auf den Akku und der auf den WR und das 3. Solarpanel geht auf den WR direkt. Am Wechselrichter ist eine Shelly . Vom Akku bekomme ich den der Ladung ( als Plus Werte ) und Entladung als Minus Werte. und die Leistung der Ost/West Panels. Ich würde jetzt gerne den auch die Leistung des Süd Panels errechnen ( ja ich weis es wird in der Formel gewisse ungenauigkeiten durch den Shelly Messpunkt geben).

Dazu habe ich 4 Sensoren angelegt:

  - sensor:        
      - name: "Solarleistung S kWh"
        unique_id: "solar_s_kwh"
        unit_of_measurement: "kWh"
        device_class: energy
        state_class: total_increasing
        state: "{{ states('sensor.dr_bkw_shellyplusplugs_b0b21c19dea4_switch_0_energy') | float -
                   states('sensor.battery-power-out') | float -
                   states('sensor.Solarleistung_o_w_kwh') | float | round(4) }}"   
        
  - sensor:        
      - name: "Solarleistung O/W kWh"
        unique_id: "Solarleistung_o_w_kwh"
        unit_of_measurement: "kWh"
        device_class: energy
        state_class: total_increasing
        state: "{{ states('sensor.solarbank_e1600_solarleistung') | float / 1000 }}"  

        
  - sensor:
      - name: "Battery Power In"
        unique_id: "battery-power-in"
        unit_of_measurement: "kWh"
        device_class: energy
        state_class: total_increasing
        state: >
          {% if states('sensor.solarbank_e1600_akkuleistung')|float >= 0 %}
            {{ states('sensor.solarbank_e1600_akkuleistung') /1000 | round(4)}}
          {% else %}
            0
          {% endif %}

  - sensor:
      - name: "Battery Power Out"
        unique_id: "battery-power-out"
        unit_of_measurement: "kWh"
        device_class: energy
        state_class: total_increasing
        state: >
          {% if states('sensor.solarbank_e1600_akkuleistung')|float(0) < 0 %}
            {{ states('sensor.solarbank_e1600_akkuleistung')|float(0)|abs /1000}}
          {% else %}
            0
          {% endif %}

Das Problem ist, dass er den Battery In und den Solar S nicht berechnet

Deine Formatierung stimmt nicht…

Das - vor name muss unter das s von sensor.
Alle Einrückungen korrigieren und nochmals prüfen.

Und du greifst im 1. Sensor auf einen Sensor zu der zu diesem Zeitpunkt noch gar nicht definiert ist. Uhhhhh ganz ganz unschön.

Viel Erfolg

Claudius

habe ich entsprechend geändert, HA neu gestartet, aber keine Veränderung.

Habe mal in den Entwicklerwerkzeugen geschaut, da sind keine Entitäten mit “battery-p” vorhanden.

Im Energie Dashboard kann ich sie aber auswählen.

Unter Entitäten:

wenn sie nun da sind, dann schau doch bitte mal in den Entwicklerwerkzeugen ob da etwas zu finden ist, wenn du nur battery eingibst.
Oder schau mal in der Statistik ob da Fehler angezeigt werden, oder unter dem Reiter Entitäten wo du auch den Reiter Helfer hast.

Eine weitere Fehlerquelle, aber da kenne ich mich nicht so aus, da ich meine yaml-Dateien verteilt habe. Es sollte auch gehen wenn du

- sensor:
  -name:


  -name:


  -name:

machst. Ich bin mir nicht sicher, es kann aber sein, dass das mehrmalige definieren von sensor auch Probleme machen könnte, aber so tief bin ich in yaml nicht zuhause.

Ich meine, es darf nur einmal SENSOR stehen und dann halt nur mit NAME weiterarbeiten. Also je Sensor, ein “-name” …

- sensor:
    - name: Solarleistung S kWh
      unique_id: solar_s_kwh
      unit_of_measurement: kWh
      device_class: energy
      state_class: total_increasing
      state: >-
        {{ states('sensor.dr_bkw_shellyplusplugs_b0b21c19dea4_switch_0_energy')
        | float - states('sensor.battery-power-out') | float -
        states('sensor.Solarleistung_o_w_kwh') | float | round(4) }}
    - name: Solarleistung O/W kWh
      unique_id: Solarleistung_o_w_kwh
      unit_of_measurement: kWh
      device_class: energy
      state_class: total_increasing
      state: '{{ states(''sensor.solarbank_e1600_solarleistung'') | float / 1000 }}'
    - name: Battery Power In
      unique_id: battery-power-in
      unit_of_measurement: kWh
      device_class: energy
      state_class: total_increasing
      state: |
        {% if states('sensor.solarbank_e1600_akkuleistung')|float >= 0 %}
          {{ states('sensor.solarbank_e1600_akkuleistung') /1000 | round(4)}}
        {% else %}
          0
        {% endif %}
    - name: Battery Power Out
      unique_id: battery-power-out
      unit_of_measurement: kWh
      device_class: energy
      state_class: total_increasing
      state: |
        {% if states('sensor.solarbank_e1600_akkuleistung')|float(0) < 0 %}
          {{ states('sensor.solarbank_e1600_akkuleistung')|float(0)|abs /1000}}
        {% else %}
          0
        {% endif %}

Mit Best YAML Formatter Online: Advance YAML Formatter formatiert…

1 „Gefällt mir“

habe ich entsprechend geändert
Vorher hatte ich in der Status Liste Battery Out mit Wert und Battery In mit unavailible

Jetzt gibt es beide in der Liste der Zustände nicht mehr.

Bei den Entitäten sieht es so aus:

Als erstes würde ich mal die Namen ohne Leerstellen wählen…

    - name: Battery Power In

Das wird also z. B. BatteryPowerIn oder Battery_Power_In.

1 „Gefällt mir“

Deine Formatierung stimmt immer noch nicht.
das „-„ vor Name steht unterm „n“ von sensor und muss aber unter das „s“ von sensor.
Und Deine ID Definition ist falsch. „-„ geht nicht da muss ein „_“ sein. Meiner Meinung nach sind „-„ in IDs nicht zulässig.

das war der zitierte Text (Code) im Post vorher, bei mir war es schon gerade gezogen und auch die Reihenfolge gerade gezogen.

Da ich nur noch ein Sensor habe steht dieses 4 Sensoren, vor den hier 4 betroffenen

    - name: "TotalPower"
      unique_id: "totalpower_kwh"
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      state: "{{ states('sensor.tasmota_sm_1_8_0') | float / 1000 }}"   

    - name: Battery_Power_In
      unique_id: battery-power-in
      unit_of_measurement: kWh
      device_class: energy
      state_class: total_increasing
      state: |
        {% if states('sensor.solarbank_e1600_akkuleistung')|float >= 0 %}
          {{ states('sensor.solarbank_e1600_akkuleistung') /1000 | round(4)}}
        {% else %}
          0
        {% endif %}
      
    - name: Battery_Power_Out
      unique_id: battery-power-out
      unit_of_measurement: kWh
      device_class: energy
      state_class: total_increasing
      state: |
        {% if states('sensor.solarbank_e1600_akkuleistung')|float(0) < 0 %}
          {{ states('sensor.solarbank_e1600_akkuleistung')|float(0)|abs /1000}}
        {% else %}
          0
        {% endif %}   

    - name: Solarleistung_O-W_kWh
      unique_id: Solarleistung_o_w_kwh
      unit_of_measurement: kWh
      device_class: energy
      state_class: total_increasing
      state: '{{ states(''sensor.solarbank_e1600_solarleistung'') | float / 1000 }}'
        
    - name: Solarleistung_S_kWh
      unique_id: solar_s_kwh
      unit_of_measurement: kWh
      device_class: energy
      state_class: total_increasing
      state: >-
        {{ states('sensor.dr_bkw_shellyplusplugs_b0b21c19dea4_switch_0_energy')
        | float - states('sensor.battery-power-out') | float -
        states('sensor.Solarleistung_o_w_kwh') | float | round(4) }}

Namensgebung ist auch angepasst.

Aber keine Veränderung

Dazu habe ich festgestellt, dass der Battery_Power_Out zwar Werte hat, diese aber falsch generiert:
aus 1 h mit 200 W abgegebener Leistung z.B. von 2-3 Uhr
image
macht er über 400 WH ( 0,4kWh)

:crayon:by HarryP: Zusammenführung Doppelpost

Du hast aber echt einen Murks in Deinem Code!! Einmal “-”, einmal “_”, einmal mit “”, meistens ohne “”.

Da muss dringend aufgeräumt werden. Wie wäre es, wenn Du erstmal einen zum laufen kriegst und verstehst warum, dann nach und nach die Anderen…

1 „Gefällt mir“

kannst du mal bitte von Allen Sensoren und auch dessen Ausgangssensoren Screenshots von denen auf den Entwicklerwerkzeugen machen?
Also Entwicklerwerkzeuge, Zustände und dann mal nach Batterie filtern (wäre spannend zu sehen was da dann alles auftaucht) und vom Wert der für die Berechnungen der neuen Sensoren herangezogen wird.

Sollte dein Sensor „solarbranche-akkuleistung“ ein Watt-Sensor sein, dann machst du da eh etwas sehr sonderbares. Man kann Watt nicht einfach in kWh umrechnen indem man durch 1000 teilt.
Sensor Akkuleistung = Power-Sensor
Sensor Batterie = Energy-Sensor
—> Du musst zuerst den Sensor Akkuleistung in kWh umformatieren oder die neuen Sensoren sind Power-Watt-Sensoren die du danach um kWh Sensoren umwandeln musst.

Der Screenshot war einfach. unter Zustände gab es keinen von ihnen.
Habe jetzt erstmal zur Vereinfachung alles auf Wh umgestellt.

    - name: "TotalPower"
      unique_id: "totalpower_kwh"
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      state: "{{ states('sensor.tasmota_sm_1_8_0') | float / 1000 }}"   

    - name: "Battery_Power_In_W"
      unique_id: "battery_power_in_W"
      unit_of_measurement: "Wh"
      state: |
        {% if states('sensor.solarbank_e1600_akkuleistung')|float >= 0 %}
          {{ states('sensor.solarbank_e1600_akkuleistung') }}
        {% else %}
          0
        {% endif %}
      
    - name: "Battery_Power_Out_W"
      unique_id: "battery_power_out_w"
      unit_of_measurement: "Wh"
      state: |
        {% if states('sensor.solarbank_e1600_akkuleistung')|float(0) < 0 %}
          {{ states('sensor.solarbank_e1600_akkuleistung')|float(0)|abs /1000}}
        {% else %}
          0
        {% endif %}   

    - name: "Solarleistung_O-W_kWh"
      unique_id: "solarleistung_o_w_kwh"
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      state: '{{ states(''sensor.solarbank_e1600_solarleistung'') | float / 1000 }}'
        
    - name: "Solarleistung_S_Wh"
      unique_id: "solar_s_wh"
      unit_of_measurement: "Wh"
      state: >-
        {{ states('sensor.dr_bkw_shellyplusplugs_b0b21c19dea4_switch_0_energy') | float *-1 ')
        | float - states('sensor.battery_power_out_w') | float -
        states('sensor.solarbank_e1600_solarleistung') | float | round(4) }}

Die erste Erkenntis, jetzt rechnet er.
Die zweite, es ist das falsche Vorzeichen. Dann das *-1 ergänzt.

Ist richtig, Akku ist voll und genug Solarenergie, das nichts vom Akku ausgespeichert wird.

Wh ist immer noch die falsche Einheit.
Du hast „device_class“ entfernt und nun mach HA hat wie es lustig ist.
Die korrekte Einheit ist W oder kW.
:man_shrugging:

Du mischst 2 Einheiten, die 2 komplett andere „Aussagen“ treffen.

Du musst erst einen Sensor in Watt ermitteln/berechnen und dann per Helfer (Summen-Integral) einen kWh oder Wh-Wert bgenerieren. :man_shrugging:
Dein Versuch einen Sensor zu erzeugen indem du in der Definition unsauber wirst, ist zu scheitern verurteilt. Man sollte Sensoren so gut es geht und so umfangreich wie möglich definieren. Es gibt schließlich Gründe warum es device_class etc gibt.

Es gibt Sprachen da geht folgendes…

a = int
……
a = „test“
…..
set b = a + 5
—> error oder schlimmer ohne error
print b
—> 0 oder 5

das ist einfach unsauber und führt nur zu Problemen.

Mach Deinen Code sauber.

W zu kWh ist nicht W/1000. Wenn du so rechnest, hast du aus W nur kW gemacht.

Erstelle dir für diese Umrechnung einen entsprechenden Riemann-Sensor als Helfer.

Überhaupt empfehle ich die Erstellung von Sensoren über die GUI. Dann sind viele Formatierungsfehler vermeidbar :).

ok Danke für die Infos.

Also alles erstmal in W und wenn es funktioniert, dann über die GUI die Riemann Sensoren für kWh.

    - name: "Battery_Power_In_W"
      unique_id: "battery_power_in_W"
      unit_of_measurement: "W"
      device_class: power
      state: |
        {% if states('sensor.solarbank_e1600_akkuleistung')|float >= 0 %}
          {{ states('sensor.solarbank_e1600_akkuleistung') }}
        {% else %}
          0
        {% endif %}
      
    - name: "Battery_Power_Out_W"
      unique_id: "battery_power_out_w"
      unit_of_measurement: "W"
      device_class: power
      state: |
        {% if states('sensor.solarbank_e1600_akkuleistung')|float(0) < 0 %}
          {{ states('sensor.solarbank_e1600_akkuleistung')|float(0)|abs /1000}}
        {% else %}
          0
        {% endif %}   

scheint zu funktionieren:


Das hier funktioniert, aber nicht richtig:

    - name: "Solarleistung_S_W"
      unique_id: "solar_s_w"
      unit_of_measurement: "W"
      device_class: power
      state: >-
        {{ states('sensor.dr_bkw_shellyplusplugs_b0b21c19dea4_switch_0_energy') | float -
        states('sensor.battery_power_out_w') | float -
        states('sensor.solarbank_e1600_solarleistung') | float | round(4) }}

also 135,1- 0 -104 = 31,1

Home Assistant meint aber:

In deinen Screenshots zeigst zu den Sensor sensor.dr_bkw_shellyplusplugs_b0b21c19dea4_switch_0_power, was korrekt ist
In der Brerechnung verwenset du aber sensor.dr_bkw_shellyplusplugs_b0b21c19dea4_switch_0_energy, der die Energie nicht die Leistung ist.
Daher kommt logischerweise auch ein anderes Ergebnis raus.

1 „Gefällt mir“

Ich denke es könnte SEHR hilfreich sein, die Sensoren mal umzubenennen…

1 „Gefällt mir“

Ok Danke für die Hinweise.
Irgendwie bin ich dazu aber noch zu blöd.
Ich habe erstmal alles in kleine Schritt zerlegt um die relevanten Fehler finden zu können.
Das Bild zeigt wie es sein sollte bzw. wo Probleme sind Oberer reihe ein Ergebnis mittlere reihe ein Ergebnis und die 3. Spalte ein Ergebnis:

Den Code habe ich soweit mir möglich korrigiert und kommentiert

   # Summenbildung aus den Stromzählerwerten
    - name: "TotalPower"
      unique_id: "totalpower_kwh"
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      state: "{{ states('sensor.tasmota_sm_1_8_0') | float / 1000 }}"   

    # Trennung der Akkuleistung in Einspeiseleistung 
    - name: "Battery_Power_In_W"
      unique_id: "battery_power_in_W"
      unit_of_measurement: "W"
      device_class: power
      state: |
        {% if states('sensor.solarbank_e1600_akkuleistung')|float >= 0 %}
          {{ states('sensor.solarbank_e1600_akkuleistung') }}
        {% else %}
          0
        {% endif %}
    
     # Trennung der Akkuleistung in Ausgabeleistung
    - name: "Battery_Power_Out_W"
      unique_id: "battery_power_out_w"
      unit_of_measurement: "W"
      device_class: power
      state: |
        {% if states('sensor.solarbank_e1600_akkuleistung')|float(0) < 0 %}
          {{ states('sensor.solarbank_e1600_akkuleistung')|float(0)|abs /1000}}
        {% else %}
          0
        {% endif %}   
        
    # Summenbildung der Solarleistung am Eingang des Ankerspeichers aus dem Ost und West Panel
    - name: "Solarleistung_O-W_kWh"
      unique_id: "solarleistung_o_w_kwh"
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      state: '{{ states(''sensor.solarbank_e1600_solarleistung'') | float / 1000 }}'

    # Abzug der Ausgabeleistung des Anker Akku von der Gesamtleistung des BKW. ->  reine Solarleistung
    - name: "BKW_ohne_Akku_Out_W"
      unique_id: "bkw_ohne_akku_out_w"
      unit_of_measurement: "W"
      device_class: power
      state: >-
        {{ states('sensor.dr_bkw_shellyplusplugs_b0b21c19dea4_switch_0_power') | float -
        states('sensor.battery_power_out_w') | float }}
    
    # Abzug der Akkun Einspeiseleistung von der Solarleitsung der OST/West Panel -> Solarleistung O/W an Wechselrichter
    - name: "Solar_ohne_Akkueinspeisung_W"
      unique_id: "solar_ohne_akkuin_w"
      unit_of_measurement: "W"
      device_class: power
      state: >-
        {{ states('sensor.solarbank_e1600_solarleistung') | float -
        states('sensor.battery_power_in_w') | float }}
    
    # Bildung Solarleistung des Süd Panels -> Abzug der Solarleistung O/W ohne Akku einspeisung von Leistung Ausgang Wechselrichter ohne Akku-Ausgangsleistung
    - name: "Solarleistung_S_W"
      unique_id: "solar_s_w"
      unit_of_measurement: "W"
      device_class: power
      state: >-
        {{ states('sensor.bkw_ohne_akku_out_w') | float -
        states('sensor.solar_ohne_akkuin_w') | float }}

Ohne die unique_ids zu sehen kann man mit den Grafiken nichts anfangen und analysieren.

Der folgende Sensor ist immer noch falsch.

Du kannst keinen W-Wert in einen Wh Wert umrechnen. Das ist nicht einfach /1000. Du musst dir dafür einen Helfer anlegen einen Riemann-Summenintegral Helfer. Alles andere ist Murks.

Vorgehensweise.
Du nimmst Dir den ersten Wert der nicht korrekt ist und versuchst ausschliesslich diesen hier zu posten und zu reparieren. Dann nimmst Du Dir den nächsten vor und arbeitest Dich in Deinem Code langsam von oben nach unten durch. An mehreren Baustellen gleichzeitig zu arbeiten kann nur im Chaos enden.

Und NOCHMAL
W und Wh sind 2 ganz verschiedene SensorClassen. W muss man in Wh umformulieren und NICHT einfach durch etwas teilen oder mit etwas multiplizieren.

W geteilt durch 1000 gibt mW aber NIE kWh oder Wh.

ok

folgender Sensor funktioniert nicht:

    # Abzug der Ausgabeleistung des Anker Akku von der Gesamtleistung des BKW. ->  reine Solarleistung
    - name: "BKW_ohne_Akku_Out_W"
      unique_id: "bkw_ohne_akku_out_w"
      unit_of_measurement: "W"
      device_class: power
      state: >-
        {{ states('sensor.dr_bkw_shellyplusplugs_b0b21c19dea4_switch_0_power') | float -
        states('sensor.battery_power_out_w') | float }}

In Zahlen rechnet er:


Minus

Gleich

Der "BKW Shelly… " Wert kommt direkt vom Shelly,

der Akku Out kommt von folgendem Sensor:

     # Trennung der Akkuleistung in Ausgabeleistung
    - name: "Battery_Power_Out_W"
      unique_id: "battery_power_out_w"
      unit_of_measurement: "W"
      device_class: power
      state: |
        {% if states('sensor.solarbank_e1600_akkuleistung')|float(0) < 0 %}
          {{ states('sensor.solarbank_e1600_akkuleistung')|float(0)|abs /1000}}
        {% else %}
          0
        {% endif %}   

Was er da nicht rechnet ist für mich nicht nachvollziehbar