Verrechnung der Stromerzeugungen

Das ist super konfus und es ist schwer so zu helfen, weil du an drölfzig Sensoren mehrere Probleme gleichzeitig bearbeiten willst. Da blickt keiner durch aus der Ferne. Konzentriere dich auf einen Sensor. Was genau funktioniert denn an diesem Sensor nicht? Du musst ganz konkret sagen, was du erwartest und was nicht geht. Nur „funktioniert nicht“ ist zu schwammig.

Ja das ist schon klar.

Aber den Fehler den du siehst, verstehe ich nicht:

Dafür ist ja der Sensor da und ich hatte bisher verstanden, dass die Umformulierung W in Wh durch das total increase erfolgt.

total_increasing:
Similar to total , with the restriction that the state represents a monotonically increasing positive total which periodically restarts counting from 0, e.g. a daily amount of consumed gas, weekly water consumption or lifetime energy consumption. Statistics of the accumulated growth of the sensor’s value since it was first added is updated every 5 minutes. A decreasing value is interpreted as the start of a new meter cycle or the replacement of the meter.

state_class: total_increasing
      state: '{{ states(''sensor.solarbank_e1600_solarleistung'')

Da der Wert vom sensor in W kommt wir aber mit

unit_of_measurement: "kWh"

sagen, dass der Wert nicht Wh sondern kWh sind ist dieser um den Faktor 1000 zu hoch.
Daher das teilen durch 1000

Watt in Wh oder kWh kannst du nur mit einem Riemann Summenintegral umrechnen.

ok, dann hatte ich das falsch verstanden.
Sensor aus der Configuration.yaml entfernt und über die GUI eingerichtet

@ 73ymw

Der Sensor ist das erste Problem.
Eigentlich ist es eine einfache Formel: Ziehe vom Wert A Wert B ab.

Das Problem ist das das Ergebnis Mathematisch für mich nicht nachvollziehbar ist.
317,1 - 0 = 256,1 → kann ich nicht nachvollziehen
Richtig müsste es doch lauten:
317,1 - 0 = 317,1

Demnach vermute ich einen Fehler in der Formel, den ich nicht finde.

gib mal folgenden Code in Entwicklerwerkzeuge - Template ein und schau was der dort berechnet.

also wie folgt.

states('sensor.dr_bkw_shellyplusplugs_b0b21c19dea4_switch_0_power') | float(0) -
        (states('sensor.battery_power_out_w') | float(0)

Man kann die Formeln toll testen in den Entwicklungswerkzeugen - Template und anpassen und bekommt sofort ein Feedback.

eventuell musst du die {{ und }} noch mitnehmen.

Jupp, musst du.

Das ist eine Mega Hilfe. ich glaube hier gibt es ein vorzeichen Thema

Lass dir doch einfach beiden Sensoren im selben Tool ausgeben und darunter dann die Berechnung.


{{ states('sensor.dr_bkw_shellyplusplugs_b0b21c19dea4_switch_0_power') | float(0) }}

{{ states('sensor.battery_power_out_w') | float(0) }}

{{ states('sensor.dr_bkw_shellyplusplugs_b0b21c19dea4_switch_0_power') | float(0) -
        states('sensor.battery_power_out_w') | float(0) }}

{{ (states('sensor.dr_bkw_shellyplusplugs_b0b21c19dea4_switch_0_power') | float(0)) -
        (states('sensor.battery_power_out_w') | float(0)) }}


mit dem Tool konnte ich den Fehler beheben:

Was ich nicht aufgelöst bekomme ist folgendes:
image

Der sensor dazu ist:

    # 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 }}

Teste ich die Formel kommt folgendes heraus:

Das Problem scheint der hier zu sein:

Die Formel scheint richtig zu sein:

Aber irgendetwas im Code muss dann ncoh falsch sein:

    # Abzug der Akku 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 }}

Hat einer eine Idee wo da der Fehler liegt ?

  1. es wäre schon, wenn jetzt etwas bei dir klappt, wenn du dann nicht nur schreibt „es klappt“, sondern auch zeigst wie die Formel nun richtig war und was falsch war. Denn das hilft dann auch uns.

Dann Dein 2. Problem.
Wenn das Dein Problem zu sein scheint

dann gebe dann probiere das mal und lasse | float mal weg. Wenn der Sensor nämlich tatsächlich „unavailable“ als Wert liefert, dann kannst du mit ihm auch nicht rechnen.

Ich weiß es ist nervig, aber es bleibt nichts anderes übrig als sich Schritt für Schritt der finalen Formel zu nähern und da muss du halt wirklich jeden einzelnen Bestandteil rausfiltern und aufbauen.

Wenn Dein Sensor „unavailable“ ist, dann musst du das eventuell abfangen.
Hier mal ein Beispielcode


    {% if states('sensor.sensor1') in ['unavailable', 'unknown', 'none'] %}
      {{ states('sensor.sensor2') |float(0) * (-1) }}
    {% elif states('sensor.sensor2') in ['unavailable', 'unknown', 'none'] %}
      {{ states('sensor.sensor1') |float(0) }}
    {% else %}
      {{
        states('sensor.sensor1')|float(0) -
        states('sensor.sensor2')|float(0)
      }}
    {% endif %}

So richtig weiß ich eigentlich nicht warum es eigentlich jetzt funktioniert.

Das ist der endgültige Code

    - 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 }}

Eine Rolle spielte wohl auch die Änderung von:

     # 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 }}
        {% else %}
          0
        {% endif %}   

Hmm genau das ist das Problem.
Warum ist der Wert unavaible. Er müsste nämlich verfügbar sein. Bzw er ist unavailable, weil vorher in der rechenkette ein unknown ist, das aber auch nicht sein dürfte.

Die Kette ist ja wie folgt:
Sensor der unavaiable ist:

    - 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 }}

{{ states('sensor.bkw_ohne_akku_out_w') | float }} liefert den Wert → OK

{{ states('sensor.solar_ohne_akkuin_w') | float }} liefert den Fehler.

ValueError: Template error: float got invalid input ‘unknown’ when rendering template ‘{{ states(‘sensor.solar_ohne_akkuin_w’) | float }}’ but no default was specified

ohne float:

Die Formel von solar_ohne_akkuin_w liefert aber das richtige Ergebnis:

Die Frage ist, wenn die Formel für den Wert des Sensors das richtige Ergebnis gibt, warum hat der Sensor dann “unknown” und nicht den berechneten Wert.

Hier muss irgendein Fehler sein, der dazu führt, dass “solar_ohne_akkuin_w” nicht den Wert als Typ Number bekommt, den die Formel errechnet.

    - 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 }}

An dem state scheint es nicht zu liegen, woran könnte es noch liegen ?

Sensoren von diversen können auch einmal unknown oder unavailable haben, wenn z.B. nach einem HA Restart keine Verbindung zum Sender besteht bis dann der Sender liefert.
Mein zigee2mqtt liefert nach einem HA Restart auch die ersten 20-30sec erst einmal nichts.

Darum arbeite ich immer so…

Neuen Sensor anlegen und schauen ob es funktioniert, dann erst den nächsten. Ist aufwendiger aber sicherer und sobald ein Sensor mal unknown/unavailable liefert und das zu Problemen führt fange ich den Sensorzustand ab.
Mein AhoyDTU oder OpenDTU liefert z.B. nachdem die Sonne untergegangen ist auch unavailable oder unknown. Dann hat früher alles angefangen zu spinnen. Das passiert nun. ich mehr.

Und immer darauf achten, dass Sensoren in der richtigen Reihenfolge angelegt werden.

Und dann hast du ja jetzt die Entwicklerwerkzeuge - Template kennen gelernt wo man super alles in Schritten ausprobieren kann. Dass man da alles Schritt für Schritt aufbauen oder zerlegen kann, ist super, weil man HA nicht dauernd restarten muss um einen Sensor zu prüfen.

P.S. eventuell werden heute Nacht/Abend wieder Sensoren unknown oder unavailable liefern, da ich nicht weiß wie deine Solaranlage ausgelesen wird und was sie ohne Solarstromproduktion liefert. Wenn es dann wieder los geht, dann muss du es abfangen.
Achja… lass das was du in Entwicklerwerkzeugen - Template ausprobiert hast stehen als Hilfe bei weiteren Tests dort.

Ich wünsche dir viel Erfolg

Claudius

1 „Gefällt mir“

Es geht weiter voran.
Ich hatte eine alte Version des Solar ohne Akku Eingang in den Zuständen gefunden, der richtig funktionierte. Komischerweise gab es dazu aber keine Definition mehr in der config yaml.

Ein neu Laden der Konfigurationen und Neustarten des Systems brachte keine klare definition dafür.
Ich habe den Sensor, dann wieder die in System bekannten Namen gegeben und seit dem funktioniert die berechnung an sich gut. Die werte sind noch nicht ganz plausibel, wie andere Werte auch noch nicht.

Details folgen.

Richtig klar ist mir die Lösung immer noch nicht aber sie funktioniert grundsätzlich . Leidglich gibt es durch Runddungsdifferenzen mal negative werte, die finde ich ziemlich unschön.
Das teste ich gerade mit einer IF Schliefe.

Was aber noch nicht funktioniert ist die Integralsummenbildung der Ladeleistung des Akkus.

Das sagt der Watt sensor:
image

Das sagt der integralsensor:

und so ist er konfiguriert:
image

so sieht es dann im Dashboard aus:

Woran könnte das liegen, dass der Integralsensor nicht die richtigen Werte zu den richtigen Zeiten bildet, bzw was müsste ich anders konfigurieren?

Du hast den Integralsensor in MWh angelegt. Umgerechnet lag der Verbrauch zwischen 8 und 11 Uhr also bei 11 KWh. Klingt ja eigentlich plausibel.
Lösche den mal und lege ihn neu mit Kilo an.

1 „Gefällt mir“

Vielen Dank, Damit hat es jetzt wunderbar funktioniert