DISCLAMER: Alles auf eigene Gefahr! Ich übernehme keine Verantwortung für Schäden oder Probleme die hiermit entstehen. Dieses Projekt wird in keinster Weise von der Firma SMA begleitet oder supported.
Neue Betafirma seit 16.07.2024 stellt wieder die alte Funktionalität her, dass der Wechselrichter direkt über Modbus gesteurt werden kann Grid Guard Code usw. nicht mehr notwendig!
(work in progress, noch nicht vollständig!)
Was macht das hier eigentlich?
Akkuladesteuerung über den WR selbst (wenn man die Updates früh genug deaktiviert hat ODER die neue Betafirmware für den SHM 2.0 hat)
Ein Part ist die Reine Akku Lade-/Entladesteuerung die man manuell auswählen kann, der andere Part die Opti-Automatik welche die Ladestärke auf 0.2C (oder einen gewünschte Ladestärke) begrenzt, den Akku morgens erstmal auf 50% lädt und dann pausiert bis die gewünschte Restproduktionsprognose erreicht ist. Dann wird der Akku bis 90% weiter mit 0.2C beladen, danach mit 1kW bis 100%.
Es sollte die SMA Integration von HA eingerichtet werde um den SoC des Akkus auslesen zu können sowie ein Solcast Account für die Prognose der PV-Erträge!
opti-automatik.yaml - Hiermit wird über den SHM 2.0 und freigeschaltetem GGC der Akku mittels der weiteren Automation gezielt geladen, pausiert und zuende geladen mit 0.2C bzw. 1kW.
sma-se-akku-steuerung.yaml - Falls man den WR noch direkt ansteuern kann und die letzten Updates nicht hat / die neue Beta Firmware (siehe oben) kann man diese Steuer-Automatik nutzen.
configuration.yaml - Eintrag zum Wechselrichter. Den Sensor für die Temperatur bitte mitnehmen, ohne Sensor funktioniert die Modbus Integration nicht zuverlässig.
Wer erstmal nur die reine Akkusteuerung möchte, braucht nur die "sma-se-akku-steuerung.yaml" als Automation anlegen und u.g. Helfer und Überschuss Akkuladung anlegen.
ToDo:
- Akku im Winter mindestens 1x die Woche automatisch auf 100% Laden
- Evtl. Ladegeschwindigkeit ab 95-98% auf 500 Watt begrenzen
- SBS Version
- HACS Version für die reine Akkusteuerung
- English Version of this?
Den Eintrag aus der configuration.yaml bei Homeassistant in die gleichnamige einfügen.
Man benötigt einen Sensor der den möglichen Überschuss für den Akku berechnet und einen für den aktuellen Hausverbrauch.
Zum Beispiel für den möglichen Akku-Ladeüberschuss:
- unique_id: maximaler_ueberschuss_akkuladung
device_class: power
state_class: measurement
name: Maximaler Ueberschuss fuer Akkuladung Watt
unit_of_measurement: W
state: "{{ (states('sensor.pv_generation_komplett_watt') | float) - (states('sensor.home_energy_usage_watt') | float) - (states('sensor.sn_xxxxxxx_metering_power_absorbed') | float) + ((states('sensor.goecharger_wallbox_hinten_p_all') | float )* 1000) }}"
Zum Beispiel für PV Überschuss warp3_2asq_powernow ist meine Wallbox
- unique_id: maximaler_ueberschuss_akkuladung
device_class: power
state_class: measurement
name: Maximaler Ueberschuss fuer Akkuladung Watt
unit_of_measurement: W
state: "{{ (states('sensor.pv_generation_komplett_watt') | float) - (states('sensor.home_energy_usage_watt') | float) - (states('sensor.sn_3015*****_battery_power_charge_total') | float) + (states('sensor.sn_3015*****_metering_power_absorbed') | float) + ((states('sensor.warp3_2asq_powernow') | float )) }}"
Zum Beispiel für den PV-Überschuss um ggf. die 70% Kappung zu erkennen
- unique_id: akkusteuerung_ueberschuss_pv
device_class: power
state_class: measurement
name: Ueberschuss PV Watt
unit_of_measurement: W
state: "{{ (states('sensor.pv_generation_komplett_watt') | float(0) - (states('sensor.home_energy_usage_watt') | float) - (states('sensor.sn_3017XXXXXX_metering_power_absorbed') | float) ) }}"
Zum Beispiel für den Hausverbrauch:
- unique_id: home_energy_usage_w
device_class: power
state_class: measurement
name: Home Energy Usage Watt
unit_of_measurement: W
state: "{{ (states('sensor.sn_3017XXXXXX_metering_power_absorbed') | float) + (states('sensor.sn_3017XXXXXX_grid_power') | float) - (states('sensor.sn_3017XXXXXX_metering_power_supplied') | float)}}"
Hier als Extra zwei Sensoren die Wirkungsgrad und Akku_Zyklen in HA trackien
- unique_id: byd_akku_wirkungsgrad_lade_entlade
name: BYD Akku Wirkungsgrad Ladung und Entladung
unit_of_measurement: factor
state: "{{ ((states('sensor.sn_3017XXXXXX_battery_discharge_total') | float) / (states('sensor.sn_3017XXXXXX_battery_charge_total') | float) * 100) | round(2) }}"
- unique_id: byd_akku_zyklen
name: BYD Akku Zyklen
unit_of_measurement: factor
state: "{{ (((((states('sensor.sn_3017XXXXXX_battery_discharge_total') | float) + (states('sensor.sn_3017XXXXXX_battery_charge_total') | float)) / 100 ) * (states('sensor.sn_3017XXXXXX_battery_capacity_total')) | float) / (2*10.2) ) | round(1) }}"
Hier Restlaufzeit berechnen, ich weiss nicht von wem das herkam aber:
- unique_id: "house_battery_runtime_raw"
name: "House Battery Runtime Raw"
unit_of_measurement: "hours"
state: >
{% set battery_load = -1 * float(states('sensor.house_battery_load_30_mins')) if states('sensor.house_battery_load_30_mins')|is_number else 0 %}
{% if battery_load == 0 %}
{% set runtime = 0 %}
{% else %}
{% set solis_remaining_capacity = states('sensor.sn_30156*****_battery_soc_total') %}
{% set remaining_capacity = 12.8 - (0.1280 * (100.0 - float(solis_remaining_capacity) if solis_remaining_capacity != 'unknown' and solis_remaining_capacity|float >= 0 else 0)) %}
{% set runtime = remaining_capacity / (battery_load/1000) %}
{% endif %}
{{ runtime }}
** zum vorherigen braucht man noch einen Statistik Sensor, bei mir unter sensor/statistik.yaml **
- platform: statistics
name: "House Battery Load 30 mins"
entity_id: sensor.sn_3015*****_battery_power_discharge_total
state_characteristic: mean
max_age:
minutes: 30
dieser HA-Helfer zur Auswahl des Akku-Modus muss angelegt werden:
Dann noch einen Schalter akku_opti_automatik ob diese Ladeoptimerung überhaupt laufen darf anlegen:
Vier Input Numbers anlegen, Minimaler Wert 100, maximaler Wert 10000 (Watt) für:
- input_number.akkusteuerung_ladestaerke_soll und
- input_number.akkusteuerung_entladestaerke_soll
- input_number.akkusteuerung_02c_ladestaerke
Dieser Helfer sollte den Wert oder einen leicht niedrigeren Wert enthalten der die 70% Abregelung enthält. (z.B. 7000 Watt bei einer 10kW Watt Anlage oder leicht drunter, etwa 6800 Watt)
- input_number.akkusteuerung_wr_70proz_ueberschuss_grenze
Dieser Helfer bekommt den Wert der maximalen AC Einspeiseleistung des Wechselrichters. Bei einem SMA STP SE 10.0 also 10000 Watt bzw. leicht drunter etwa 9900. Die Soll-Ladestärke wird dann auf 100 Watt gesetzt und so autoamtisch der AC-Überschuss in den Akku geladen (falls dieser noch nicht voll ist)
- input_number.akkusteuerung_wr_ac_ueberschuss_grenze
für den letzten z.B. 1-100kWh, dies steuert die Schwelle ab wann der Akku von 50% aufwärts geladen wird.
- input_number.akkusteuerung_ab_welchem_restertrag_vollladen
So schaut es im HA aktuell aus. Hab noch einen Dummy-Schalter für den Fall das die Module/Anlage mal ausfällt. Da ist aber noch nichts aktives in der Automation enthalten.
type: vertical-stack
cards:
- type: custom:mushroom-title-card
title: Akkusteuerung SMA STP-SE
- type: custom:mushroom-chips-card
chips:
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.sn_30XXXXXXXX_battery_power_discharge_total
above: 0.001
chip:
type: template
entity: sensor.sn_30XXXXXXXX_battery_power_discharge_total
content: '{{( states(entity) | float / 1000) | round(2) }} kW '
icon: mdi:battery-minus
icon_color: red
- type: conditional
conditions:
- condition: numeric_state
entity: sensor.sn_30XXXXXXXX_battery_power_charge_total
above: 0.001
chip:
type: entity
entity: sensor.sn_30XXXXXXXX_battery_power_charge_total
icon: mdi:battery-positive
icon_color: green
- type: entity
entity: sensor.sn_30XXXXXXXX_battery_soc_total
icon_color: blue
- type: template
entity: sensor.byd_12_8_akku_wirkungsgrad_ladung_und_entladung
content: '{{ states(entity) | round (1)}}% η'
icon: mdi:vector-difference
icon_color: orange
- type: template
entity: sensor.byd_12_8_akku_zyklen
content: '{{ states(entity)}}'
icon: mdi:counter
icon_color: yellow
- type: entity
entity: sensor.sn_30XXXXXXXX_battery_temp_a
icon: mdi:battery-charging-wireless-outline
- type: entity
entity: sensor.sma_stp_se_temperatur
icon: mdi:power-socket-it
- type: custom:mushroom-select-card
entity: input_select.akkusteuerung_sma_wr
name: Akkusteuerung
primary_info: name
secondary_info: last-changed
- type: tile
entity: input_boolean.akku_opti_automatik
- type: tile
entity: input_boolean.akku_nach_preis_laden
- type: tile
entity: input_boolean.pv_module_nicht_verfugbar
name: PV-Module NA (z.B. Schnee bedeckt)
- type: horizontal-stack
cards:
- type: tile
entity: sensor.sn_30XXXXXXXX_battery_discharge_total
name: Entladen Watt
- type: tile
entity: sensor.sn_30XXXXXXXX_battery_charge_total
name: Laden Watt
- type: entities
entities:
- entity: input_number.akkusteuerung_ladestaerke_soll
- entity: input_number.akkusteuerung_entladestaerke_soll
name: Entladestärke
- entity: input_number.akkusteuerung_ab_welchem_restertrag_vollladen
name: Restladeschwelle
- entity: input_number.akkusteuerung_02c_ladestaerke
name: Ladestärke 0.2C
- entity: input_number.akkusteuerung_wr_ac_ueberschuss_grenze
name: WR AC-Grenze
- entity: input_number.akkusteuerung_wr_70proz_ueberschuss_grenze
name: 70% Grenze
- entity: sensor.house_battery_runtime_raw
name: Akkulaufzeit
- entity: sensor.ueberschuss_pv_watt