Optic00 / ha-akkusteuerung-sma

Homeassistant Automation und Sensoren Templates für Akkusteuerung über SMA Smart Energy
20 stars 4 forks source link

Prognosebasierte & Manuelle Steuerung für Homeassistant von SMA STP SE Hybrid-Wechselrichter

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!)

Anleitung

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:

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

dieser HA-Helfer zur Auswahl des Akku-Modus muss angelegt werden:

image

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:

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)

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)

für den letzten z.B. 1-100kWh, dies steuert die Schwelle ab wann der Akku von 50% aufwärts geladen wird.

image

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.

image
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