Benutzer-Werkzeuge

Webseiten-Werkzeuge


smarthome:ha_regel

Dies ist eine alte Version des Dokuments!


Dynamische Einspeisung

Für meine Anker Solix Solarbank E1600 versuche ich soviel Energie wie möglich direkt zu verbrauchen. Dazu passe ich über Home Assistant mit der Anker Solix Erweiterung den Einspeisewert dynamisch an.

Zuerst habe ich mir ein Template angelegt, das den gewünschten Wert ermittelt.

input_number:
    einspeisehelfer_min:
        name: Minimale Einspeisung
        min: 100
        max: 800
        step: 10
        mode: slider
    einspeisehelfer_max:
        name: Maximale Einspeisung
        min: 100
        max: 800
        step: 10
        mode: slider
    einspeisehelfer_start:
        name: Schwellwert Regelung
        min: 10
        max: 800
        step: 10
        mode: slider
    einspeisehelfer_tresh:
        name: Grenzwert Regelung
        min: 10
        max: 100
        step: 10
        mode: slider
    einspeisehelfer_step:
        name: Aufschlag
        min: -50
        max: 50
        step: 10
        mode: slider
    einspeisehelfer_delay:
        name: Verzögerung
        min: 0
        max: 60
        step: 10
        mode: slider
template:
  - sensor:
      - name: "Dynamische Einspeisung"
        unique_id: "dynamische_einspeisung"
        unit_of_measurement: "W"
        state: >
            {% set einspeisehelfer_min = states.input_number.einspeisehelfer_min.state | float(0) %}
            {% set einspeisehelfer_max = states.input_number.einspeisehelfer_max.state | float(0) %}
            {% set einspeisehelfer_start = states.input_number.einspeisehelfer_start.state | float(0) %}
            {% set einspeisehelfer_tresh = states.input_number.einspeisehelfer_tresh.state | float(0) %}
            {% set einspeisehelfer_step = states.input_number.einspeisehelfer_step.state | float(0) %}
            {% set einspeisehelfer_delay = states.input_number.einspeisehelfer_delay.state | float(0) %}
            {% set einspeisehelfer_cursol = states.sensor.solar_power.state %}
            {% set einspeisehelfer_curin = states.sensor.system_ankerprime_system_einspeisevorgabe.state %}
            {% set einspeisehelfer_destin = states.sensor.tasmota_sml_power_curr.state | float(0) + (einspeisehelfer_cursol | float(0)) | abs %}
            {% if (einspeisehelfer_cursol | float(0) > 0 and einspeisehelfer_cursol | float(0) < einspeisehelfer_start | float(0))%}
                {{ einspeisehelfer_min | float(0) }}
            {% elif (einspeisehelfer_destin | float(0) - einspeisehelfer_curin | float(0)) | abs > einspeisehelfer_tresh %}
              {% if states.sensor.system_ankerprime_sb_solarleistung.state | float(0) | abs > 0 %}
                {% if states.sensor.system_ankerprime_sb_solarleistung.state | float(0) < einspeisehelfer_destin | float(0) %}
                  {% set einspeisehelfer_destin = states.sensor.system_ankerprime_sb_solarleistung.state | float(0) %}
                {% endif %}
              {% elif states.sensor.system_ankerprime_sb_akkuleistung.state | float(0) < 0 %}
                {% set einspeisehelfer_destin = states.sensor.tasmota_sml_power_curr.state | float(0) + (einspeisehelfer_cursol | float(0)) | abs + einspeisehelfer_step | float(0) %}
              {% endif %}
              {% if einspeisehelfer_destin | float(0) < einspeisehelfer_min | float(0) %}
                {% set einspeisehelfer_destin = einspeisehelfer_min - einspeisehelfer_step %}
              {% elif einspeisehelfer_destin | float(0) > einspeisehelfer_max | float(0) %}
                {% set einspeisehelfer_destin = einspeisehelfer_max - einspeisehelfer_step %}
              {% endif %}
              {% set einspeisehelfer_destin = (einspeisehelfer_destin / 100) | round(1) %}
              {% set einspeisehelfer_destin = (einspeisehelfer_destin * 100) | int(0) %}
              {% if (einspeisehelfer_destin | float(0) - einspeisehelfer_curin | float(0)) | abs > einspeisehelfer_tresh %}
                {% if as_timestamp(now()) - as_timestamp(states.sensor.dynamische_einspeisung.last_changed) > einspeisehelfer_delay %}
                    {{ einspeisehelfer_destin | float(0) + einspeisehelfer_step }}
                {% else %}
                    {{ states.sensor.dynamische_einspeisung.state }}
                {% endif %}
              {% else %}
                {{ states.sensor.dynamische_einspeisung.state }}
              {% endif %}
            {% else %}
                {% if states.sensor.dynamische_einspeisung.state | float(0) < einspeisehelfer_cursol | float(0) | abs %}
                    {{ states.sensor.dynamische_einspeisung.state }}
                {% elif states.sensor.system_ankerprime_sb_akkuleistung.state | float(0) < 0 %}
                  {{ states.sensor.dynamische_einspeisung.state }}
                {% else %}
                  {% set einspeisehelfer_destin = einspeisehelfer_cursol | float(0) | abs %}
                  {% set einspeisehelfer_destin = (einspeisehelfer_destin / 100) | round(1) %}
                  {% set einspeisehelfer_destin = (einspeisehelfer_destin * 100) | int(0) %}
                  {{ einspeisehelfer_destin | int(0) + einspeisehelfer_step }}
                {% endif %}
            {% endif %}

Beschreibung Konfiguration

einspeisehelfer_min

Minimale Einspeisung - Das ist der Wert, der mindestens eingespeist werden soll. Kleinere Werte werden darauf korrigiert. Je nach Wechselrichter sollten das 100 oder 150 Watt sein.

einspeisehelfer_max

Maximale Einspeisung - Das ist der maximale Wert mit dem eingespeist werden soll. Größere Werte werden darauf korrigiert.

einspeisehelfer_start

Schwellwert Regelung - Erst wenn dieser Wert überschritten wird beginnt die Regelung. Da bei kleinen Solarleistungen oft zwischen Einspeisung und Ladung gewechselt wird kann man so Ruhe in die Regelung bringen. 80 Watt sind ein guter Wert.

einspeisehelfer_tresh

Grenzwert Regelung

einspeisehelfer_step

Aufschlag

einspeisehelfer_delay

Verzögerung

Beschreibung Quellen

states.sensor.solar_power.state

states.sensor.system_ankerprime_*

states.sensor.tasmota_sml_power_curr.state

Jedes mal wenn sich der Wert ändert wird dann über eine Automation versucht diesen zu schreiben.

service: number.set_value
target:
  entity_id: dacdd0526f45e92a79461cbb582b0654
data:
  value: "{{ states.sensor.dynamische_einspeisung.state | float(0) }}"

Das kann scheitern weswegen ich eine weitere Automation alle paar Minuten laufen lasse, die kontrolliert ob der gewünschte Wert geschrieben ist und gegebenenfalls setzt.

service: number.set_value
target:
  entity_id: dacdd0526f45e92a79461cbb582b0654
data:
  value: "{{ states.sensor.dynamische_einspeisung.state | float(0) }}"

smarthome/ha_regel.1715950200.txt.gz · Zuletzt geändert: 2024/05/17 14:50 von robin