Nutzbare Wattleistung unter Solarschätzung und Batterieladezustand

Hintergrund:
Es ist häufig Unsinn bei Solaranlagen zuerst die Batterie zu 100% voll zu machen und dann weitere Systeme anzuwerfen, die den weiteren Überschuss nutzen.
Zielführender wäre es auf Grundlage der Solarschätzung des Tages weitere Systeme bereits früher anzuwerfen, diese über den Tag damit breiter zu streuen und trotzdem am Ende der Solarerzeugung eine volle Batterie (aber langsamer geladen und später, was i.d.R. besser für die Zelle ist) zu haben.
Ziel ist hierbei also eine Berechnung von aktuell nutzbarer Wattleistung unter Beachtung des aktuellen Hausverbrauches, des Netzbezuges, des Batteriefüllstandes und der Solarertragsschätzung zu berechnen. Natürlich aufgrund der Solarertragsschätzung eine Schätzung.

Voraussetzungen:

  • Solarertragsschätzung des Tages
  • Überwachung Erzeugung Solar
  • bisherige Solarerzeugung des Tages
  • Überwachung Strom am Hausanschluss

Umsetzung:
Helfer - Template - Sensor

{% set hausanschluss = states('sensor.hausanschluss_summe')|float(0) %}
{% set verbrauch = states('sensor.hausverbrauch')|float(300) %}
{% set tagesschaetzung = (states('sensor.solarerzeugung_tagesschatzung')|float(0))*1000 %}
{% set tagesleistungBisher = (states('sensor.solarerzeugung_positives_tagesintegral')|float(0))*1000 %}
{% set batterieFrei = (states('sensor.qcell_bms_battery_capacity')|float(0) * (states('sensor.qcell_battery_soh')|float(0)/100)) - states('sensor.batterieinhalt')|float(0) %}
{% set uebrig = states('sensor.qcell_battery_power_charge')|float(0) - hausanschluss %}
{# Abschwächung aufgrund der nicht-linearen Verteilung der Solarerzeugung (0 ... 1 Abschwächung )#}
{% set tagessicherheitsfaktor = 0.8 %}
{# battery sollte um 17 Uhr voll sein #}
{% set tagesreststunden = 17 - now().hour %}
{% if tagesreststunden <0 %}
  {% set tagesreststunden = 0 %}
{% endif %}

{% set tagesrestschaetzung = tagesschaetzung - tagesleistungBisher %}
{% if tagesrestschaetzung < 0 %}
  {% set tagesrestschaetzung = 0 %}
{% endif %}

{#
{{ uebrig }}
{{ batterieFrei }}
{{ tagesrestschaetzung }}
#}

{% if uebrig<=0 %}
  0
{% else %}
  {# nur noch wenig Unterschied zur Schätzung oder Schätzung übertroffen #}
  {% if tagesrestschaetzung-batterieFrei < 1000 %}
    {% if hausanschluss < 0 %}
        {{ - hausanschluss }}
    {% else %}
       0
    {% endif %}
  {% else %}
    {% if tagesreststunden== 0 %}
      {{ uebrig - batterieFrei}} 
    {% else %}
      {{ uebrig - (batterieFrei)/(tagesreststunden*tagessicherheitsfaktor) }}
    {% endif %}
  {% endif %}
{% endif %}

Gerne weitere Ideen und Verbesserungen dazu.

Die Tagesreststunden (oben fix 17 Uhr) lassen sich auch noch berechnen:

{# Battterie sollte beim Sonnenuntergang sicher voll sein #}
{% set sonnenvoruntergang = ((state_attr('sun.sun', 'next_setting') | as_timestamp - 1.5*60*60) | timestamp_custom('%H')) |float(23) %}
{% set tagesreststunden = sonnenvoruntergang - now().hour %}
{% if tagesreststunden <0 %}
  {% set tagesreststunden = 0 %}
{% endif %}

:crayon:by HarryP: Zusammenführung Doppelpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen)

Hab nix sinnvolles beizutragen, aber

“Berechnung von aktuell nutzbarer Wattleistung

Da kräuseln sich ja einem die Fußnägel auf.

Watt [W] ist die Maßeinheit der elektrischen (Wirk)-Leistung.
So wie Volt [V] die Maßeinheit der elektrischen Spannung und
das Amperé [A] die Maßeinheit des elektrischen Stromes ist.
Die Maßeinheit [Ω] Ohm ist der elektrische Widerstand.

Sowas wie “Wattleistung” gibt es nicht.

Völlig korrekt. Alles Gute für deine Fußnägel.

@harryp : Kann es sein, dass ich nach deiner Bearbeitung jetzt nicht mehr bearbeiten kann? Stift-Icon erscheint nicht mehr. Gerne den ganzen Code oben durch diesen ersetzen.

Optimierung der Abschwächung

{% set hausanschluss = states('sensor.hausanschluss_summe')|float(0) %}
{% set verbrauch = states('sensor.hausverbrauch')|float(300) %}
{% set tagesschaetzung = (states('sensor.solarerzeugung_tagesschatzung')|float(0))*1000 %}
{% set tagesleistungBisher = (states('sensor.solarerzeugung_positives_tagesintegral')|float(0))*1000 %}
{% set batterieFrei = (states('sensor.qcell_bms_battery_capacity')|float(0) * (states('sensor.qcell_battery_soh')|float(0)/100)) - states('sensor.batterieinhalt')|float(0) %}
{% set uebrig = states('sensor.qcell_battery_power_charge')|float(0) - hausanschluss %}
{# Batterie sollte beim Sonnenuntergang sicher voll sein #}
{% set sonnenvoruntergang = ((state_attr('sun.sun', 'next_setting') | as_timestamp - 1.5*60*60) | timestamp_custom('%H')) |float(23) %}
{% set tagesreststunden = sonnenvoruntergang - now().hour %}
{% if tagesreststunden <0 %}
  {% set tagesreststunden = 0 %}
{% endif %}

{# Abschwächung aufgrund der nicht-linearen Verteilung der Solarerzeugung #}
{% set tagessicherheitsfaktor = 1 %}
{% if tagesreststunden > 12 %}
  {% set tagessicherheitsfaktor = 5 %}
{% elif tagesreststunden > 9 %}
  {% set tagessicherheitsfaktor = 3 %}
{% elif tagesreststunden > 6 %}
  {% set tagessicherheitsfaktor = 2 %}
{% elif tagesreststunden > 3 %}
  {% set tagessicherheitsfaktor = 1 %}
{% endif %}

{% set tagesrestschaetzung = tagesschaetzung - tagesleistungBisher %}
{% if tagesrestschaetzung < 0 %}
  {% set tagesrestschaetzung = 0 %}
{% endif %}

{#
{{ uebrig }}
{{ batterieFrei }}
{{ tagesrestschaetzung }}
{{ tagesreststunden }}
{{ (batterieFrei)/(tagesreststunden*tagessicherheitsfaktor)}}
{{ uebrig - (batterieFrei)/(tagesreststunden*tagessicherheitsfaktor)}}
#}


{% if uebrig<=0 %}
  0
{% else %}
  {# nur noch wenig Unterschied zur Schätzung oder Schätzung übertroffen #}
  {% if tagesrestschaetzung-batterieFrei < 1000 %}
    {% if hausanschluss < 0 %}
        {{ - hausanschluss }}
    {% else %}
       0
    {% endif %}
  {% else %}
    {% if tagesreststunden== 0 %}
      {{ uebrig - batterieFrei}} 
    {% else %}
      {{ (uebrig - (batterieFrei)/(tagesreststunden*tagessicherheitsfaktor)) | round(2)}}
    {% endif %}
  {% endif %}
{% endif %}
1 „Gefällt mir“