Balkonsolar Eigenverbrauchszähler Werte springen

Hallo zusammen,

ich bin folgendem (wunderbarem) Tutorial gefolgt:

Und die Sensoren funktionen soweit auch sehr gut.
Jedoch erzeugt mir der Sensor „Balkonsolar Vorteil“ gelegentlich sehr wilde werte:


Diese springen teilweise auch stark ins Negative.
Woran könnte das liegen? Liegt es eventuell an stark schwankenden Eingangsgrößen und der zu langsamen Verarbeitung in HAOS?

Vielen Dank schon einmal und liebe Grüße
Felix

Ganz übersehen: Der Eingangssensor ist der „solar_eigenverbrauch_watt“ der ebenfalls stark ins Negative ausschlägt:


Aber dies eben auch nicht immer.

Zeige mal bitte genau deinen Code
und wo hast du ihn eingefügt?

der von @SteuerDeinLeben passt

Spielt eigentlich keine Rolle, aber von welchem Gerät kommt der Power Sensor

Wenn du Netzbezug hast ist klar das er ins negative geht! Wo hängt das Smartmeter?

Dies ist der Abschnitt. Eingefügt natürlich in der Configuration yaml.

  - sensor:
      - name: "Solar Eigenverbrauch (Watt)"
        unique_id: solar_eigenverbrauch_watt
        state_class: measurement
        icon: mdi:transmission-tower
        unit_of_measurement: W
        device_class: power
        state: >
          {% if states('sensor.power_total') | float(0) < 0 %}
              {{ ( (states('sensor.power_total') | float(0) ) + (states('sensor.fritz_dect_210_1_leistung') | float(0) ) ) | round (3) }}
          {% else %}
              {{ states('sensor.fritz_dect_210_1_leistung') | round (3) }}
          {% endif %}
        availability: >
          {{ 
             [ states('sensor.power_total'),
               states('sensor.fritz_dect_210_1_leistung') ] | map('is_number') | min }}

  # Ersparnis in Euro pro Stunde:
  - sensor:
      - name: "Balkonsolar Vorteil"
        unique_id: balkonsolar_vorteil
        unit_of_measurement: EUR/h
        state: >
          {{ states('sensor.solar_eigenverbrauch_watt')|float(0) * states('input_number.strompreis')|float(0)/1000 }}

Der Sensor „power total“ kommt ebenfalls von Steuer dein leben und holt sich Die Werte von einem Shelly Pro 3EM:

  - sensor:
      - name: "Power Total"
        unique_id: power_total
        state: >
          {{ states('sensor.shellypro3em_phase_a_active_power')|float(0) +
             states('sensor.shellypro3em_phase_b_active_power')|float(0) +
             states('sensor.shellypro3em_phase_c_active_power')|float(0) }}
        unit_of_measurement: W
        device_class: power
        state_class: measurement
        availability: >
          {{
             [ states('sensor.shellypro3em_phase_a_active_power'),
               states('sensor.shellypro3em_phase_b_active_power'),
               states('sensor.shellypro3em_phase_c_active_power') ] | map('is_number') | min }}

  - sensor:
      - name: "Energy Total"
        unique_id: energy_total
        state: >
          {{ states('sensor.shellypro3em_phase_a_total_active_energy')|float(0) +
             states('sensor.shellypro3em_phase_b_total_active_energy')|float(0) +
             states('sensor.shellypro3em_phase_c_total_active_energy')|float(0) }}
        unit_of_measurement: kWh
        device_class: energy
        state_class: total_increasing
        attributes:
          last_reset: "1970-01-01T00:00:00+00:00"
        availability: >
          {{ 
             [ states('shellypro3em_phase_a_total_active_energy'),
               states('shellypro3em_phase_b_total_active_energy'),
               states('shellypro3em_phase_c_total_active_energy') ] | map('is_number') | min }}

Diese Werte sind auch eigentlich immer recht plausibel.

Der Solar Eingangsmesser ist eine Fritz Deckt 210 aussensteckdose.

Danke und viele Grüße

Das passt ja alles, also der zweite Absatz

Was Du hier dann nicht gemacht hast => diesen aufzuteilen in Positive/Negative
Also Netzbezug und Einspeisung aus diesem Power Total Sensor

Das berechnest du aus den 2 Neuen

1 „Gefällt mir“

Hier mal ein Beispiel für eine Netzeinspeisung mit Erklärungen im Code was da gemacht wird: Im Anschluss kannst du mit dem Sensor für Solarertrag und Netzeinspeisung den tatsächlichen Solarverbrauch (Tag) errechnen.

# Shelly 3em
# Stromverbrauch Shelly 3em Pro auslesen. Die aktuellen Verbräuche/Erträge je Phase werden in einen Wert zusammengefasst
- sensor:
  - name: "Total Power"
    device_class: power
    state_class: measurement
    unit_of_measurement: "W"
    state: >
      {{
        (
          states('sensor.shellypro3em_08d1f9130908_phase_a_active_power')|float(0) +
          states('sensor.shellypro3em_08d1f9130908_phase_b_active_power')|float(0) +
          states('sensor.shellypro3em_08d1f9130908_phase_c_active_power')|float(0)
        ) | round(1)
      }}

# Dann wird ermittelt ob sich der Sensor im positiven Bereich bewegt, was Verbrauch
# bedeutet. Bei negativen Werten (Netzeinspeisung), wird der Sensor auf 0 gesetzt
- sensor:
  - name: "Total Power Nur Verbrauch" #Das ist der reine Verbrauch ohne Einspeisungen ins Netz
    unique_id: Stromleistung_nur_Verbrauch
    device_class: power
    unit_of_measurement: "W"
    state: "{{ states('sensor.total_power')|float(0) if states('sensor.total_power')| int > 0 else 0 }}"

# Die folgenden beiden Sensoren ermitteln Netzeinspeisung anhand eines negativen
# Wertes. Ansonsten wird der Sensor auf 0 gestellt. In einem weiteren Sensor wird dann
# der negative Wert in einen positiven umgewandelt und wir haben den tatsächlichen
# Netzeinspeisewert
- sensor:
  - name: "Solar Einspeisung Ausgelesen-negativ" #Das sind die reinen Einspeisungen ins Netz
    device_class: power
    unit_of_measurement: "W"
    state: "{{ states('sensor.total_power')|float(0) if states('sensor.total_power')| int < 1 else 0 }}"
- sensor:
  - name: "Solar Einspeisung Normiert-positiver_wert" #Das sind die reinen Einspeisungen ins Netz in einen positiven Wert verwandelt
    device_class: power
    unit_of_measurement: "W"
    state: "{{ states('sensor.solar_einspeisung_ausgelesen_negativ')|float(0) * -1 | round (3) }}"
1 „Gefällt mir“

Danke für eure Hinweise. Ich bin erst jetzt auf die Idee gekommen einmal Google Gemini nach einer Lösung zu fragen und tatsächlich, das funktioniert sogar erstaunlich gut.

Für alles die es Interessieren sollte:

Mögliche Ursachen für negative Werte
Zeitversatz (Timing-Probleme):
Die wahrscheinlichste Ursache ist, dass die beiden Sensoren (sensor.power_total und sensor.balkonsolar_ertrag_switch_0_power) ihre Werte nicht exakt zum selben Zeitpunkt aktualisieren.

Szenario: Ihr Balkonsolar-Sensor meldet gerade eine hohe Leistung (z. B. 300 W). In diesem Moment schalten Sie einen großen Verbraucher ein (z. B. eine Kaffeemaschine). Ihr power_total Sensor aktualisiert sich daraufhin, aber bevor sich der Balkonsolar-Sensor wieder aktualisiert.

Rechenbeispiel:

balkonsolar_ertrag ist noch auf 300 W (alter Wert).

power_total springt auf -150 W (Einspeisung), weil der Verbraucher nun läuft.

Die Logik wird ausgelöst: Eigenverbrauch = -150 + 300 = 150 W. Das ist korrekt.

Problem-Szenario: Nehmen wir an, es ist Abend. Ihr Balkonsolar-Sensor meldet 5 W. Plötzlich schaltet er auf 0 W, aber der power_total Sensor hat sich noch nicht aktualisiert und meldet -10 W.

Falsche Berechnung: Eigenverbrauch = -10 (alter Wert von power_total) + 5 (alter Wert von balkonsolar_ertrag) = -5 W.

Dies kann zu kurzzeitigen "Glitches" führen, bei denen die Werte der beiden Sensoren nicht synchron sind und eine Momentaufnahme zu einer falschen Berechnung führt.

Fehlerhafte Sensorwerte:
Einer der beiden zugrunde liegenden Sensoren (insbesondere sensor.balkonsolar_ertrag_switch_0_power) könnte manchmal kurzzeitig einen falschen, negativen Wert liefern, z. B. aufgrund eines Kommunikationsfehlers oder einer fehlerhaften Messung. Wenn Ihr power_total Sensor dann ebenfalls einen kleinen negativen Wert hat, könnte das Ergebnis negativ werden.

Fehlinterpretation von power_total:
Es ist wichtig zu prüfen, wie genau sensor.power_total den Wert interpretiert.

Netzbezug: Ist der Wert positiv, wenn Sie Strom aus dem Netz beziehen?

Einspeisung: Ist der Wert negativ, wenn Sie Strom in das Netz einspeisen?

Wenn die Logik Ihres power_total Sensors anders ist (z. B. Einspeisung ist positiv, Bezug ist negativ), würde Ihre gesamte Logik umgekehrt funktionieren und zu falschen Ergebnissen führen. Die von Ihnen verwendete Logik ist jedoch die gängigste Konvention.

Verbesserter Code:

  - sensor:
      - name: "Solar Eigenverbrauch (Watt)"
        unique_id: solar_eigenverbrauch_watt
        state_class: measurement
        icon: mdi:transmission-tower
        unit_of_measurement: W
        device_class: power
        state: >
          {% set power_total = states('sensor.power_total') | float(0) %}
          {% set solar_leistung = states('sensor.fritz_dect_210_1_leistung') | float(0) %}

          {% if power_total < 0 %}
              {{ (power_total + solar_leistung) | round(3) | max(0) }}
          {% else %}
              {{ solar_leistung | round(3) | max(0) }}
          {% endif %}
        availability: >
          {{ 
             [ states('sensor.power_total'),
               states('sensor.fritz_dect_210_1_leistung') ] | map('is_number') | min }}

Ich werden diesen Code jetzt einmal so laufen lassen und sehen ob sich dadurch die Werte verbessern.

1 „Gefällt mir“