PV Speicher Steuerung via Modbus (SMA SUNNY TRIPOWER 8.0 SE | BYD HVS)

@adfx
Besten Dank dir für die schnelle Hilfe.
Den Timeout im WR hatte ich nicht auf dem Schirm.

Hallo,
hier ist ja schon mehrfach nach einer Schritt für Schritt Anleitung für HA Anfänger gefragt worden. Gibt es die mittlerweile irgendwo oder wird es die hier noch geben? Ich komme mit den Code Schnipseln und den Angaben im Repo einfach nicht klar.
Gruß
oelidoc

1 „Gefällt mir“

Moin oelsidoc,

Ich denke eine schritt für schritt Anleitung wird es nicht geben. Das macht auch wenig sinn, da jeder ein klein wenig anderes setup hat. Am Ende ist es auch so, dass man in die Materie eintauchen muss. Ich helfe Dir gerne. Dafür brauchen wir hier aber mehr details zu deiner Anlage und eine art ist/soll-vergleich.
Als einstieg für dich und so bin ich auch vorgegangen:

  • bring die modbus-steuerung von opti zum laufen.
    Das ist dreh und angelpunkt der ganzen steuerung. Ganz grob aus dem Gedächtnis:
  • modbus im WR aktivieren
  • modbus automation in HA implementieren
  • helferentitäten zu der automation erstellen und damit erst mal etwas rumspielen. ZB akku auf pause, akku mit 1000W laden/entladen usw. Wenn das funktioniert geht es weiter mit der eigentlichen automation. Und da wird es dann komplex. Einfach das von opti zu kopieren wird nicht funktionieren. Nimm das aber als anhaltspunkt und guck was davon für dich brauchbar ist. Viel erfolg und ich bin gespannt auf deine fragen :slight_smile:
    VG
1 „Gefällt mir“

OK, die wichtigste Automation wäre:

alias: Akkusteuerung
description: ""
triggers:
  - entity_id:
      - input_select.akkusteuerung_sma_wr
      - input_number.akkusteuerung_ladestaerke_soll
      - input_number.akkusteuerung_entladestaerke_soll
    from: null
    to: null
    for:
      hours: 0
      minutes: 0
      seconds: 1
    trigger: state
  - minutes: /11
    enabled: true
    trigger: time_pattern
  - event: start
    trigger: homeassistant
conditions: []
actions:
  - alias: Wenn Akku schnell Laden ...
    if:
      - condition: state
        entity_id: input_select.akkusteuerung_sma_wr
        state: Akku schnell laden
    then:
      - data:
          hub: sma
          address: 40151
          slave: 4
          value:
            - 0
            - 802
        action: modbus.write_register
      - delay:
          hours: 0
          minutes: 0
          seconds: 5
          milliseconds: 0
      - data:
          hub: sma
          address: 40149
          slave: 4
          value:
            - 65535
            - >-
              {{ 65535 - states('input_number.akkusteuerung_ladestarke_soll') |
              int }}
        action: modbus.write_register
  - alias: Wenn Akku schnell Entaden ...
    if:
      - condition: state
        entity_id: input_select.akkusteuerung_sma_wr
        state: Akku schnell entladen
    then:
      - data:
          hub: sma
          address: 40151
          slave: 4
          value:
            - 0
            - 802
        action: modbus.write_register
      - delay:
          hours: 0
          minutes: 0
          seconds: 5
          milliseconds: 0
      - data:
          hub: sma
          address: 40149
          slave: 4
          value:
            - 0
            - >-
              {{ states('input_number.akkusteuerung_entladestaerke_soll') | int
              }}
        action: modbus.write_register
  - alias: Wenn Akku Pause ...
    if:
      - condition: state
        entity_id: input_select.akkusteuerung_sma_wr
        state: Akku Pause
    then:
      - data:
          hub: sma
          address: 40151
          slave: 4
          value:
            - 0
            - 802
        action: modbus.write_register
      - delay:
          hours: 0
          minutes: 0
          seconds: 5
          milliseconds: 0
      - data:
          hub: sma
          address: 40149
          slave: 4
          value:
            - 0
            - 0
        action: modbus.write_register
  - alias: Wenn Akku Automatik
    if:
      - condition: state
        entity_id: input_select.akkusteuerung_sma_wr
        state: Akku Automatisch
    then:
      - data:
          hub: sma
          address: 40151
          slave: 4
          value:
            - 0
            - 803
        action: modbus.write_register
mode: single

Den Input Select als Helfer erstellen mit den Optionen:
Akku Automatik
Akku schnell laden
Akku Pause
Akku schnell entladen

erstelle 2 input-Numbers:
akkusteuerung_ladestaerke_soll
min: 0, max: maximale Ladeleistung deines Batteriewechselrichters und stelle dieses erst einmal auf Max
akkusteuerung_entladestaerke_soll:
min: 0, max: maximale Entladeleistung deines Batteriewechselrichters und stelle dieses erst einmal auf Max

Definiere außerdem deinen Batteriewechselrichter per Modbus in der configuration.yaml
Falls du einen anderen Solarwechselrichter noch hast: den brauchst du hier nicht unbedingt.

modbus:
  - name: sma
    type: tcp
    host: 192.168.x.x #<- IP des Batteriewechselrichters
    port: 502
    delay: 2
    message_wait_milliseconds: 60
    timeout: 5
    sensors:
      - name: SMA_Power_AC
        unique_id: SMA_Power_AC
        state_class: measurement
        device_class: "power"
        unit_of_measurement: W
        slave: 4
        address: 30775
        data_type: int32
      - name: SMA_Power_Day
        unique_id: SMA_Power_Day
        state_class: total
        device_class: "energy"
        unit_of_measurement: Wh
        slave: 4
        address: 30517
        data_type: uint64
        min_value: 0

Ersetze in beiden Codeschnipseln die Adressen durch deine korrekten Modbus - Register
Passe ggf. die Slave-Konfiguration an.
Wie das alles geht, ist hier in den Threads öfter beschrieben.

Danach testest du mit dem Input-Select. Stelle auf Akku schnell laden und dein Akku sollte sich aus dem Grid (oder halt bei genug PV auch nur daher) laden. Bei Pause sollte der Akku gehalten werden → Netzbezug.
Bitte habe Geduld, die Wechselrichter schalten zeitverzögert. Warte also bitte ca. 30 Sekunden, bis sich ne Änderung einstellt.

Danach baust du die Automationen, die diesen Select und die Input-Numbers steuert.
Mache dir vorher Gedanken über:
→ was will ich erreichen?
→ macht das überhaupt Sinn?
Fallback option: Akku Automatik

Beispiele sind:
Automation mit Choose:
Option 1: Tibber Preis negativ oder unter gewünschter Schwelle (ggf. auch input.number manuell setzen oder berechnen (z.B. 10. Perzentil vom Preis) → Akku schnell laden
Option 2: Tibber Preis sehr teuer → Akku Automatik (Speicher wird entladen)
Option 3: Akku über 80% und gerade billig, teure Phase heute Abend erwartet: Akku Pause (bis zur teuren Phase, dann wieder Automatik)

uups, überschnitten :smiley:
ich sollte mir nicht so viel Zeit lassen

Hallo adfx,
hallo crusader85
vielen Dank für eure Hilfe, da hab ich jetzt erstmal dran zu kauen…
Was ich schon gemacht habe:
Die sma-se-akku-steuerung.yaml hab ich der automations.yaml hinzugefügt.
Den WR habe ich in der configuration.yaml angelegt.
Den Input Select Helfer habe ich angelegt.

Da weiss ich nicht, wie das geht, weil ich nicht weiss, was das in HA ist.

Was will ich erreichen? => Den Akku netzdienlich und schonend in Abhängigkeit einer Prognose mit wechselnden Leistungen laden. Tibber interessiert mich (noch) nicht.

Mein Setup: SMA Hybridwechselrichter STP8SE, SunnyHomeManager2.0, BYD HVS 7.7kWh

Gruß und Dank

oelsidoc

Du musst Dir dafür Helfer-Entitäten erstellen:
Einstellungen->Geräte & Dienste->Dann oben Helfer->Helfer erstellen ist dann unten rechts der blaue button. Damit erstellst Du Dir dann alle benötigten Helfer wie Crusader geschrieben hat.
Baue Dir eine Karte mit den Helfern und vllt mit einigen Anzeigen. Also PV, Akku und wenn Du hast Dein Netzzähler um zu sehen, ob die ModBus-Steuerung funktioniert. Das ist auf jeden Fall das erste was Du umsetzen musst. Viel Erfolg

Das hier sind die input_numbers:
grafik

Ah ja, das hilft weiter!
Vielen Dank

Alsooo: nach Umstellung auf slave 3 funktionieren Batterie Automatik und Pause, Schnell Laden und Entladen nicht :cold_sweat:
Wo muss ich suchen?
LG
oelsidoc

Wie heißen deine Entitäten für laden und entladen? Genau wie im akkusteuerung.yaml? Der name muss identisch sein. Evtl im steuer.yaml anpassen. Ist n schuss ins dunkle. Ohne infos kann ich nicht sagen wo du suchen sollst. Sonst schick mal die enstprechenden Auszüge aus den configs

poste mal deinen Code für die Automation und die Definition vom Modbus in der configuration. yaml

Okay, ihr seid ja fix - vielen Dank!

- id: '1747911403278'
  alias: Akkusteuerung
  description: ''
  triggers:
  - entity_id:
    - input_select.akkusteuerung_sma_wr
    - input_number.akkusteuerung_ladestaerke_soll
    - input_number.akkusteuerung_entladestaerke_soll
    from:
    to:
    for:
      hours: 0
      minutes: 0
      seconds: 1
    trigger: state
  - minutes: /11
    enabled: true
    trigger: time_pattern
  - event: start
    trigger: homeassistant
  conditions: []
  actions:
  - alias: Wenn Akku schnell Laden ...
    if:
    - condition: state
      entity_id: input_select.akkusteuerung_sma_wr
      state: Akku schnell laden
    then:
    - data:
        hub: sma
        address: 40151
        slave: 3
        value:
        - 0
        - 802
      action: modbus.write_register
    - delay:
        hours: 0
        minutes: 0
        seconds: 5
        milliseconds: 0
    - data:
        hub: sma
        address: 40149
        slave: 3
        value:
        - 65535
        - '{{ 65535 - states(''input_number.akkusteuerung_ladestarke_soll'') | int
          }}'
      action: modbus.write_register
  - alias: Wenn Akku schnell Entladen ...
    if:
    - condition: state
      entity_id: input_select.akkusteuerung_sma_wr
      state: Akku schnell entladen
    then:
    - data:
        hub: sma
        address: 40151
        slave: 3
        value:
        - 0
        - 802
      action: modbus.write_register
    - delay:
        hours: 0
        minutes: 0
        seconds: 5
        milliseconds: 0
    - data:
        hub: sma
        address: 40149
        slave: 3
        value:
        - 0
        - '{{ states(''input_number.akkusteuerung_entladestaerke_soll'') | int }}'
      action: modbus.write_register
  - alias: Wenn Akku Pause ...
    if:
    - condition: state
      entity_id: input_select.akkusteuerung_sma_wr
      state: Akku Pause
    then:
    - data:
        hub: sma
        address: 40151
        slave: 3
        value:
        - 0
        - 802
      action: modbus.write_register
    - delay:
        hours: 0
        minutes: 0
        seconds: 5
        milliseconds: 0
    - data:
        hub: sma
        address: 40149
        slave: 3
        value:
        - 0
        - 0
      action: modbus.write_register
  - alias: Wenn Akku Automatik
    if:
    - condition: state
      entity_id: input_select.akkusteuerung_sma_wr
      state: Akku Automatisch
    then:
    - data:
        hub: sma
        address: 40151
        slave: 3
        value:
        - 0
        - 803
      action: modbus.write_register
  mode: single

# Loads default set of integrations. Do not remove.
default_config:

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

modbus:
  - name: sma
    type: tcp
    host: 192.168.178.48 #<- IP des Batteriewechselrichters
    port: 502
    delay: 2
    message_wait_milliseconds: 60
    timeout: 5
    sensors:
      - name: SMA_Power_AC
        unique_id: SMA_Power_AC
        state_class: measurement
        device_class: "power"
        unit_of_measurement: W
        slave: 4
        address: 30775
        data_type: int32
      - name: SMA_Power_Day
        unique_id: SMA_Power_Day
        state_class: total
        device_class: "energy"
        unit_of_measurement: Wh
        slave: 4
        address: 30517
        data_type: uint64
        min_value: 0

Die Namen der drei Entitäten hab ich mehrmals gecheckt - sind gleich wie in der Automations.yaml

:crayon:by HarryP: Zusammenführung Doppelpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen)

bei der Definition ist die slave-id auf 4. Die müsste dann auch 3 sein

bitte auch gerne einen Trace deiner Akkusteuerung mitgeben

Okay, slave-id in der Definition auf drei geändert (Mann bin ich blind…)
Leider keine Änderung.
Trace in welcher Form posten? Sorry, hab ich noch nie gemacht

Trace findest du in der jeweiligen auto oben rechts.
Ich bin nach wie vor dabei, dass die Entitäten nicht korrekt sind wenn alles andere geht. Prüfe das noch mal genau fur die beiden input_number:
Jeweils anklicken und dann auf das zahnrad. Da findest du auch n copy button um den exakten namen in die Steuerung zu kopieren. Alle Entitäten sind case-sensitiv.
Die slave adresse mit 4 würde auch nur die beiden Entitäten poer-day/power_ac “ungültig” machen. Die modbus-steuerung benutzt die korrekte adresse 3 laut deinem post. Daran liegt es nicht. Hast du mal beobachtet ob der akku auch über minuten in zB pause bleibt oder setzt der sich wieder auf automatik?

Interessant wäre noch das Modell deines Wechselrichters. Ggf. sind es andere Modbus-Register.

Model ist der 8SE also der kleine Bruder von meinem. register sollten passen :slight_smile:
Traces sind hier oben rechts:

Steuer den Akku in alle Modi: Pause/Auto/Laden/Entladen. Innerhalb der traces kannst du dann vor und zurück gehen. bitte einen screenshot von allen 4 modi schicken:
oben im bild siehst due die beiden pfeile zu den vergangenen traces

Und mir fehlt auch noch der yaml zu den helfer. da sehen wir ob tatsächlich der name stimmt. Viel Erfolg

Okay, fange mal von hinten an:
Es ist ein Hybrid-WR von SMA STP8SE, der Akku bleibt dauerhaft im Modus Pause. Die Entitäten habe ich noch mal mittels c&p eingefügt - sollten also passen. Traces kommen gleich, hab nebenbei noch was zu tun :innocent:

Hallo adfx und crusader85,
tut mir leid, aber der WR reagiert jetzt gar nicht mehr und ich habe keine Zeit mehr, weil ich jetzt übers Wochenende nach Berlin muss. Ich würde mich dann gerne Anfang nächster Woche wieder melden und einen neuen Versuch starten.
Bis hier her schon mal einen herzlichen Dank für euer Engagement und eure prompte Hilfe - ich weiß das sehr zu schätzen.
Bis nächste Woche
oelsidoc

Nimm alles mit nach Berlin, ich fahre auch morgen früh, dann machen wir das eben fix dort :rofl: Allerdings darf ich im Norden über Berlin bleiben und muss diesmal nicht durch bis in den Süden. Melde Dich, ich werde über Neuigkeiten hier im thread per mail benachrichtigt… HF in Berlin

Hast Du einen Sunny HomeManager 2 in der Anlage verbaut?

1 „Gefällt mir“