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, dass 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) < states.sensor.solar_power.state | 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 = states.sensor.solar_power.state | 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.1715868162.txt.gz · Zuletzt geändert: 2024/05/16 16:02 von robin