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

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.1715878381.txt.gz · Zuletzt geändert: 2024/05/16 18:53 von robin