Benutzer-Werkzeuge

Webseiten-Werkzeuge


smarthome:ha_regel

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. 600 Watt, 800 Watt oder mehr? 800 Watt sind aktuell erlaubt (für Steckersolargeräte). Ein kleinerer Wert kann dennoch sinnvoll sein um durch die Nacht zu kommen.

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 - Dieser Wert bestimmt die Regelung. Eine Abweichung zwischen Solareingang und Verbrauch, die größer ist lässt die Regelung anspringen. Für meine Anlage machen 20-30 Watt Sinn.

einspeisehelfer_step

Aufschlag - Dieser Wert wird pauschal auf-/abgeschlagen um zu steuern ob man eher ins Netz einspeisen möchte oder aus dem Netz beziehen. Bei mir verschiebe ich es mit +10 und tendiere damit leicht zu mehr Einspeisung.

einspeisehelfer_delay

Verzögerung - Zwischen den Veränderungen soll mindestens diese Verzögerung in Sekunden vergehen. Da die Werte der Solix nur etwa jede Minute geupdated werden machen hier kleine Werte kaum Sinn. 30 Sekunden reichen imo aus.

Beschreibung Quellen

states.sensor.solar_power.state

Diese Entität kommt von einer Shelly EM1. Sie liefert die aktuelle Solarleistung, die im Haus ankommt. Dieser Wert ist wesentlich aktueller und genauer als die Werte der Ankercloud.

states.sensor.system_ankerprime_*

Diese Entitäten stammen von der Anker Solix Erweiterung. AnkerPrime ist dabei der Name meines Systems.

states.sensor.tasmota_sml_power_curr.state

Wie der Name vermuten lässt handelt es sich um einen Lesekopf für meinen Stromzähler. Diese Entität liefert den aktuellen „Stromverbrauch“ (Leistung, saldiert) meines Anschlusses.

Affiliatelink: Tasmota Lesekopf

Beschreibung Automation

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

Links [ Anker Balkonsolar | Anlagendaten | Ertragsdaten | HA Anpassung ] edit

smarthome/ha_regel.txt · Zuletzt geändert: 2024/05/17 15:18 von robin