Fronius und BYD Akku über Modbus steuern

 

Der Fronius-Wechselrichter kann über die integrierte Modbus-Schnittstelle ausgelesen und gesteuert werden. So kann zum Beispiel das Laden oder Entladen erzwungen werden, oder eine Lade bzw. Entladebegrenzung eingestellt werden. Warum? Um noch mehr aus der Anlage heraus zu holen.

Normalerweise funktioniert die automatische Eigenverbrauchs-Optimierung von Fronius für nahezu alle Alltagssituationen.

Ein Grund, warum ich dennoch in das Ladeverhalten eingreifen wollte, war die Tatsache, dass meine PV-Module zu Spitzenzeiten mehr DC-Leistung liefern könnten, als der Wechselrichter AC-seitig verarbeiten kann. Leider ist der Gen24 DC-seitig aber limitiert. Auch wenn die maximale Panel-Leistung des Gen24 10.0 Plus mit 15kW angegeben ist, kann der Gen24 nur ein klein wenig mehr DC Leistung verarbeiten als AC: bei insgesamt 11kW DC ist trotz Batterieladung Schluss. 

Ohne Batterieladung ist  bei ca. 10,3 KW DC Schluss.

Als Voraussetzung für das Steuern der PV-Anlage muss Modbus am Wechselrichter aktiviert werden, siehe: Fronius: Daten & Einstellungen übers Netzwerk (Modbus)

Für die Steuerung des Ladeverhaltens habe ich in einem Home-Assistant Lovelance-Dashboard Buttons zusammengestellt für folgende Betriebsmodus:

  • Erzwungenes Laden: "Force charging"
  • Erzwungenes Entladen: "Force discharge"  und
  • Ladeleistung auf einen definierten Wert limitieren: "Charge-limit" und "charging_power"

Der Knopf "Reset charging" setzt etwaige Einstellungen wieder auf Standard zurück:

Auf dieser Basis kann die Batterie natürlich auch über eine Automation gesteuert werden, zum Beispiel anhand der PV-Vorhersage für den jeweiligen Tag.

Voraussetzung Modbus-Setup

Für Modbus gibt es zwei verschiedene SunSpec Model Type: "int + SF" und "float":

Mit der aktuellen Firmware wurden die Begriffe etwas umbenannt: "Master" / "Slave" wurde zu "Modbus Client und "Modbus Server":

Alle in diesem Artikel erwähnten Register beziehen sich auf den SunSpec Model Type "int + SF". 

Damit sich Home Assistant auf die Modbus-Schnittstelle verbindet, habe ich folgende Zeilen in der configuration.yaml hinzugefügt.

modbus:
  - type: tcp
    # Put your Gen24 IP address here
    host: 192.168.1.137
    port: 502
    name: gen24
    sensors:
      - name: reading_battery_settings
        slave: 1
        count: 24
        address: 40345
        scan_interval: 5
        data_type: custom
        structure: ">10H2h4H8h"
Wer den SunSpec Model Type auf "float" gesetzt hat, muss zu den hier verwendeten Registern 10 addieren.
z.B ist die Start-Adresse für das Lesen der Batterie 40345 für "int + SF",
bei "float" müsste 40355 als Adresse verwendet werden: "address: 40355". +10 gilt für alle in diesem Artikel erwähnten Register.

Der Sensor "sensor.reading_battery_settings" liest alle relevanten Modbus-Register ein und dient als Basis für die später erwähnten Template-Sensoren:

Aus dem Sensor "reading_battery_settings", können die einzelnen Werte über ein value_template extrahiert werden:

[+]

Array Nr.

Wert

Einheit

Beschreibung

0

WChaMax

W

Sollwert für maximale Ladung, Die Voreinstellung ist MaxChaRte.

1

WChaGra

% WChaMax/sec

Sollwert für die maximale Laderate. Standardwert ist MaxChaRte.

2

WDisChaGra

% WChaMax/sec

Sollwert für die maximale Entladungsrate. Standardwert ist MaxDisChaRte.

3

StorCtl_Mod

bit 0: CHARGE

bit 1: DiSCHARGE

Aktiviert den Kontrollmodus für das Halten/Entladen/Laden des Speichers. Bitfeld-Wert.

4

VAChaMax

VA

Sollwert für maximalen Lade-VA.

5

MinRsvPct

% WChaMax

Sollwert für die Mindestreserve für die Speicherung in Prozent des nominalen Höchstspeichers.

6

ChaState

% AhrRtg

Currently available energy as a percent of the capacity rating.

7

StorAval

AH

State of charge (ChaState) minus storage reserve (MinRsvPct) times capacity rating (AhrRtg).

8

InBatV

V

Interne Batteriespannung.

9

ChaSt

1: OFF

2: EMPTY

3: DISCHAGING

4: CHARGING

5: FULL

6: HOLDING

7: TESTING

Ladestatus des Speichergeräts. Aufzählungswert.

10

OutWRte

% WChaMax

Prozentsatz der maximalen Entladungsrate.

11

InWRte

% WChaMax

Prozentsatz der maximalen Ladeleistung.

12

InOutWRte_WinTms

Secs

Zeitfenster für die Änderung der Lade-/Entladerate.

13

InOutWRte_RvrtTms

Secs

Timeout-Zeit für die Lade-/Entladerate.

14

InOutWRte_RmpTms

Secs

Rampenzeit für den Übergang vom aktuellen Sollwert zum neuen Sollwert.

15

ChaGriSet

0: PV (Charging from grid disabled)

1: GRID (Charging from grid enabled)

Sollwert zum Aktivieren/Deaktivieren des Ladens vom Netz

16

WChaMax_SF

  Skalierungsfaktor für die maximale Aufladung.

17

WChaDisChaGra_SF

  Skalierungsfaktor für die maximale Lade- und Entladerate.

18

VAChaMax_SF

  Skalierungsfaktor für den maximalen Lade-VA.

19

MinRsvPct_SF

  Skalierungsfaktor für den Mindestreservesatz.

20

ChaState_SF

  Skalierungsfaktor für die verfügbare Energie in Prozent.

21

StorAval_SF

  Skalierungsfaktor für den Ladezustand.

22

InBatV_SF

  Skalierungsfaktor für die Batteriespannung.

23

InOutWRte_SF

  Skalierungsfaktor für die prozentuale Lade-/Entladerate.

Quelle / Inspiriert von: github.com/bigramonk/byd_charging und forum.iobroker.net/topic/65205/modbus-fronius-gen24

In das Ladeverhalten eingreifen: BYD Charging ändern

Das Ändern der Einstellungen erfolgt über Modbus-Register. 

Relevante Modbus-Register für das Steuern des Ladeverhaltens

Für das Steuern des Akkus sind im Wesentlichen diese 4 Register relevant:

Laut Fronius Dokumentation: Register Wert Beschreibung Home Assistant Template Sensor
StorCTLMod 40348

0 .. keine Begrenzung
1 .. Ladebegrenzung
2 .. Entladebegrenzung
3 .. Lade/Entladeleistung

Begrenzungsmodus

bit 0: CHARGE

bit 1: DiSCHARGE

Template Sensor Name: BYD.StorCTL_Mod
{% set storCTL_mod= states('sensor.reading_battery_settings').split(',')[3] | int%}
{{ "in" if storCTL_mod == 1 else
"out" if storCTL_mod == 2 else
"in and out" if storCTL_mod == 3 
else "auto"  }}
MinRsvPct 40350  

Sollwert für die maximale Entladungsrate. Standard ist MaxDisChaRte

WChaMax %

Template Sensor Name: BYD.MinRsvPct

{{ states('sensor.reading_battery_settings').split(',')[5]|int / 100 }}
OutWRte 40355   Entladeleistung in %

 Template Sensor Name: BYD.OutWRte

{{ states('sensor.reading_battery_settings').split(',')[10]|int / 100 }}
InWRte 40356   Ladeleistung in %

Template Sensor Name: BYD.InWRte

{{ states('sensor.reading_battery_settings').split(',')[11]|int / 100 }}

Damit die Register in HA einzeln angezeigt werden können, habe ich für jeden der Register im Menü "Einstellungen", "Helfer" jeweils einen Template-Sensor erstellt: "BYD.StorCTL_Mod", "BYD.MinRsvPct", "BYD.OutWRte", "BYD.InWRte". Der Inhalt für den Template-Sensor kann aus der vorigen Tabelle entnommen werden.

Um mehrere Register in einem Ablauf zu ändern, habe ich Skripte für die einzelnen Aktionen angelegt:

Home Assistant Skripts 

Ladeeinstellungen auf Standard setzen

Folgende Register setzten das Ladeverhalten auf die Standardwerte:

  Register Wert Beschreibung
StorCTLMod 40348 0 keine Begrenzung
MinRsvPct 40350

500

Setzt MinRsvPct auf 5,0 % WChaMax
OutWRte 40355

10000

 setzt outwrte auf 100%
InWRte 40356

10000

  setzt inwrte auf 100%

Für das Setzen der Register bietet sich ein Skript an: "Einstellungen", "Automatisierungen & Szenen", "Skripte", "NEUES SKRIPT ERSTELLEN":

Inhalt:

[+]
alias: Reset charging
sequence:
  - service: modbus.write_register
    data:
      slave: 1
      address: 40348
      value: 0
      hub: gen24
  - service: modbus.write_register
    data:
      address: 40355
      slave: 1
      value: 10000
      hub: gen24
  - service: modbus.write_register
    data:
      slave: 1
      address: 40350
      value: 500
      hub: gen24
  - service: modbus.write_register
    data:
      address: 40356
      slave: 1
      value: 10000
      hub: gen24
mode: single
icon: mdi:home-battery

SoC (untere Ladegrenze) auf 30% stellen

Um etwas mehr Reservekapazität im Akku zu behalten, können die Standardwerte leicht angepasst werden, indem der Wert für MinRsvPct auf z.B. 3000 für 30% Ladereserve gesetzt wird. Der gesetzte Wert über Modbus konkurriert mit den Einstellungen in der Fronius Weboberfläche: Der höhere Wert gewinnt:

Folgende Register setzten das Ladeverhalten auf die Standardwerte mit 30% Ladereserve (SoC):

  Register Wert Beschreibung
StorCTLMod 40348 0 keine Begrenzung
MinRsvPct 40350

3000

Setzt MinRsvPct auf 30,0 % WChaMax
OutWRte 40355

10000

 setzt outwrte auf 100%
InWRte 40356

10000

  setzt inwrte auf 100%

Für das Setzen der Register kann ein zusätzliches Skript angelegt werden: "Einstellungen", "Automatisierungen & Szenen", "Skripte", "NEUES SKRIPT ERSTELLEN":

Inhalt:

[+]
alias: Reset charging 30%
sequence:
  - service: modbus.write_register
    data:
      slave: 1
      address: 40348
      value: 0
      hub: gen24
  - service: modbus.write_register
    data:
      address: 40355
      slave: 1
      value: 10000
      hub: gen24
  - service: modbus.write_register
    data:
      slave: 1
      address: 40350
      value: 3000
      hub: gen24
  - service: modbus.write_register
    data:
      address: 40356
      slave: 1
      value: 10000
      hub: gen24
mode: single
icon: mdi:home-battery

Batterie vom Netz laden

Um die Batterie unabhängig vom aktuellen Stromverbrauch oder der aktuellen PV-Leistung zu laden, können die folgenden 3 Register wie folgt gesetzt werden. Damit die Ladeleistung über das Lovelance-Dashboard geändert werden kann, habe ich vorab einen Input-Helfer erstellt:

Eingebunden im Dashboard kann die Ladeleistung komfortabel in der Oberfläche angepasst werden:

Hier die notwendigen Register-Einstellungen für ein erzwungenes Laden:

  Register Wert Beschreibung
StorCTLMod 40348 2 2 = Entladebegrenzung
MinRsvPct 40350 9900 Setzt MinRsvPct auf 99,0 % WChaMax
OutWRte 40355 {{ 65536 - (states('input_number.charging_power')|int(0) / states('sensor.wchamax')|int(1) * 10000)|int }}  
InWRte 40356  {{ (states('input_number.charging_power')|int(0) / states('sensor.reading_battery_settings').split(',')[0]|int(1) * 10000) | int }}  
[+]
alias: Force charging
sequence:
  - data:
      slave: 1
      address: 40348
      value: 2
      hub: gen24
    action: modbus.write_register
  - data:
      address: 40355
      slave: 1
      hub: gen24
      value: "{{ 65536 - (states('input_number.charging_power')|int(0) / states('sensor.wchamax')|int(1) * 10000)|int }}"
    action: modbus.write_register
  - data:
      address: 40356
      slave: 1
      hub: gen24
      value: "{{ (states('input_number.charging_power')|int(0) / states('sensor.reading_battery_settings').split(',')[0]|int(1) * 10000) | int }}"
    action: modbus.write_register
  - data:
      slave: 1
      address: 40350
      value: 9900
      hub: gen24
    action: modbus.write_register
mode: single
icon: mdi:battery-charging

Ladeleistung limitieren

Für das Limitieren der Ladeleistung auf den zuvor erstellten Helfer, können folgende Register über ein weiteres Script gesetzt werden:

  Register Wert Beschreibung
StorCTLMod 40348 1 1 = Ladebegrenzung
InWRte 40356

"{{  states('input_number.charging_power') | int(100) * 100 }}"

 
[+]
alias: Charge-limit
sequence:
  - service: modbus.write_register
    data:
      address: 40356
      slave: 1
      hub: gen24
      value: "  {{ (states('input_number.charging_power')|int(0) / states('sensor.reading_battery_settings').split(',')[0]|int(1) * 10000) | int }}"
  - service: modbus.write_register
    data:
      slave: 1
      address: 40348
      value: 1
      hub: gen24
mode: single
icon: mdi:battery-charging

Batterie mit einer bestimmten Leistung entladen (erzwingen)

Hier die notwendigen Register-Einstellungen für ein erzwungenes Entladen:

  Register Wert Beschreibung
StorCTLMod 40348 3 3 = Lade und Endladebegrenzung
OutWRte 40355

  {{ (states('input_number.charging_power')|int(0) /
   states('sensor.reading_battery_settings').split(',')[0]|int(1) * 10000) | int
   }}

 
InWRte 40356

  {{ 65536 - (states('input_number.charging_power')|int(0) /
  states('sensor.reading_battery_settings').split(',')[0]|int(1) * 10000) | int
  }}

 
[+]
alias: ForceDischarge
sequence:
  - service: modbus.write_register
    data:
      address: 40356
      slave: 1
      hub: gen24
      value: >-
        {{ 65536 - (states('input_number.charging_power')|int(0) /
        states('sensor.reading_battery_settings').split(',')[0]|int(1) * 10000)
        | int }}
  - service: modbus.write_register
    data:
      address: 40355
      slave: 1
      value: |-
        {{ (states('input_number.charging_power')|int(0) /
         states('sensor.reading_battery_settings').split(',')[0]|int(1) * 10000) | int
         }}
      hub: gen24
  - service: modbus.write_register
    data:
      slave: 1
      address: 40348
      value: 3
      hub: gen24
mode: single
icon: mdi:home-battery

Beispiele

Die folgenden Beispiele stammen aus der Fronius-Dokumentation: 42,0410,2649.pdf und wurden für die Verwendung mit den Register-Nummern ergänzt:

Nur Laden des Energiespeichers erlauben

Dieses Verhalten kann durch Limitierung der maximalen Entladeleistung auf 0% erreicht werden => resultiert in Fenster [-3300 W, 0 W]

  Register Wert Beschreibung
StorCTLMod 40348 2 schaltet Entladegrenzwert aktiv, Bit-Muster: 10
OutWRte 40355

0

setze Entladelimit auf 0% von WchaMax
InWRte 40356

ist in diesem Fall nicht relevant

 

Quelle: 42,0410,2649.pdf

Nur Entladen des Energiespeichers erlauben

Dieses Verhalten kann durch Limitierung der maximalen Ladeleistung auf 0% erreicht werden => resultiert in Fenster [0 W, 3300 W]

  Register Wert Beschreibung
StorCTLMod 40348 1 Bit 1 schaltet Ladegrenzwert aktiv, Bit-Muster: 01
OutWRte 40355

ist in diesem Fall nicht relevant

 
InWRte 40356

0

setze Ladelimit auf 0% von WchaMax

Weder Laden noch Entladen erlauben 

Dieses Verhalten kann durch Limitierung der maximalen Ladeleistung auf 0% und Limitierung der maximalen Entladeleistung auf 0% erreicht werden => resultiert in Fenster [0 W, 0 W]

  Register Wert Beschreibung
StorCTLMod 40348 3 schalte beide Grenzwerte aktiv, Bit-Muster: 11
OutWRte 40355

0

setze Entladelimit auf 0% von WchaMax
InWRte 40356

0

setze Ladelimit auf 0% von WchaMax

Quelle: 42,0410,2649.pdf

Laden und Entladen mit maximal 50% der nominalen Leistung

Dieses Verhalten kann durch Limitierung der maximalen Ladeleistung auf 50% und Limitierung der maximalen Entladeleistung auf 50% erreicht werden => resultiert in Fenster [-1650 W, 1650 W]

  Register Wert Beschreibung
StorCTLMod 40348 3 schalte beide Grenzwerte aktiv, Bit-Muster: 11
OutWRte 40355

50

setze Entladelimit auf 50% von WchaMax
InWRte 40356

50

setze Ladelimit auf 50% von WchaMax

Quelle: 42,0410,2649.pdf

Laden im Bereich von 50% bis 75% der nominalen Leistung

Dieses Verhalten kann durch Limitierung der maximalen Ladeleistung auf 75% und Limitierung der maximalen Entladeleistung auf -50% erreicht werden => resultiert in Fenster [1650 W, 2475 W]

  Register Wert Beschreibung
StorCTLMod 40348 3 schalte beide Grenzwerte aktiv, Bit-Muster: 11
OutWRte 40355

-50

setze Entladelimit auf -50% von WchaMax
InWRte 40356

75

setze Ladelimit auf 75% von WchaMax

Der Batteriestatus in Fronius Solar.web wechselt zu „Erzwungene Nachladung“

Quelle: 42,0410,2649.pdf

Entladen mit 50% der nominalen Leistung

Dieses Verhalten kann durch Limitierung der maximalen Ladeleistung auf -50% und Limitierung der maximalen Entladeleistung auf 50% erreicht werden => resultiert in Fenster [-1650 W, -1650 W] 44

  Register Wert Beschreibung
StorCTLMod 40348 3 schalte beide Grenzwerte aktiv, Bit-Muster: 11
OutWRte 40355

50

setze Entladelimit auf 50% von WchaMax
InWRte 40356

-50

setze Ladelimit auf -50% von WchaMax

Quelle: 42,0410,2649.pdf

Laden mit 50% bis 100% der nominalen Leistung

Dieses Verhalten kann durch Limitierung der maximalen Entladeleistung auf -50% erreicht werden => resultiert in Fenster [1650 W, 3300 W]

  Register Wert Beschreibung
StorCTLMod 40348 3 schalte beide Grenzwerte aktiv, Bit-Muster: 11
OutWRte 40355

-50

setze Entladelimit auf -50% von WchaMax
InWRte 40356

ist in diesem Fall nicht relevant

 

Der Batteriestatus in Fronius Solar.web wechselt zu „Erzwungene Nachladung“ 

Quelle: 42,0410,2649.pdf

Einsatz in der Praxis: Home Assistant - Automatisierung

Um im Winter eine Restkapazität von 30 % im Akku zu behalten und damit im Notfall den PV-Point nutzen zu können und zudem möglichst keine Akkukapazität zu verschwenden, habe ich mir folgende Automatisierung überlegt: 

Aktion Beschreibung

Beim Erreichen von 30 % Akkufüllstand -> Skript: SoC (untere Ladegrenze) auf 30% stellen

An Tagen, an dem der Akku nicht vollständig geladen wird, soll dieser auch nur bis 30 % entladen werden.

Akku voll geladen -> Skript: Ladeeinstellungen auf Standard setzen

Sollte der Akku voll geladen werden, soll auch die komplette Kapazität des Akkus zur Verfügung stehen, entsprechend soll das Ladelimit beim Erreichen eines Füllstands von 100 % auf den Standardwert von 5 % gesetzt werden.

PV-Vorhersage in der Nacht größer 20kW -> Skript: Ladeeinstellungen auf Standard setzen

Damit die eventuell gesetzte 30 % Ladereserve an sonnigen Tagen nicht verschenkt wird, könnte das Limit anhand der PV-Vorhersage in der Nacht auf den Standardwert von 5 % gesetzt werden: Die 30 % Ladereserve könnten dadurch noch konsumiert werden, bevor die PV-Anlage Strom produziert und den Akku wieder befüllt.

Die Automatisierung als YAML-Code:

[+]
alias: Batterie Management
description: ""
trigger:
  - platform: numeric_state
    entity_id:
      - sensor.byd_battery_box_premium_hv_ladezustand
    above: 99
    id: voll
  - platform: numeric_state
    entity_id:
      - sensor.byd_battery_box_premium_hv_ladezustand
    above: 30
    id: 30p
  - platform: time
    at: "03:00:00"
    id: Nacht
condition: []
action:
  - if:
      - condition: trigger
        id:
          - voll
    then:
      - service: script.reset_byd_charging
        metadata: {}
        data: {}
  - if:
      - condition: trigger
        id:
          - 30p
    then:
      - service: script.reset_charging_25
        data: {}
  - if:
      - condition: trigger
        id:
          - Nacht
      - condition: numeric_state
        entity_id: sensor.pv_remaining_today
        above: 20
    then:
      - service: script.reset_byd_charging
        metadata: {}
        data: {}
mode: single

Der Sensor für die PV-Vorhersage stammt dabei von der Integration Forecast.Solar.

Details zu den Automatisierungen, siehe: Home Assistant Automatisierung - Möglichkeiten & Basics

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!

Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(am besten bewertete zuerst)]

✍anonym
17.12.2024 09:45
ich bin soweot das erste Script zu erstellen. Leider kann nicht gespeichert werden
folgende Meldung:
Message malformed: extra keys not allowed @ data['sequence'][0]['mode']
hier der Yaml code:  (die register sind auf den Fronius symo Hybrid angepasst)
alias: Reset charging
  sequence:
    - service: modbus.write_register
      data:
        slave: 1
        address: 40309
        value: 0
        hub: fronius modbus
    - service: modbus.write_register
      data:
        address: 40316
        slave: 1
        value: 10000
        hub: fronius modbus
    - service: modbus.write_register
      data:
        slave: 1
        address: 40311
        value: 500
        hub: fronius modbus
    - service: modbus.write_register
      data:
        slave: 1
        address: 40317
        value: 10000
        hub: fronius modbus
  mode: single
  icon: mdi:home-battery
✍Bernhard
gepostet am 17.12.2024 11:56
schaut so aus als wäre vor mode und icon eine extra Einrückung? mode und ico sollte auf der selben Ebene wie alias sein ..

Beitrag erstellt von Bernhard

✍anonym
10.12.2024 19:56
Erstmal vielen Dank für die geniale Anleitung, ich hätte aber noch eine Frage zu dem Input-Helfer für die Ladeleistung. Und zwar wie man auf die in der Anleitung verwendeten Werte 500 bis 5000 kommt, meines Verständnisses nach müsste ja am Ende ein Prozentwert übergeben werden? Was genau wird denn mit  {{ (states('input_number.charging_power')|int(0) / states('sensor.reading_battery_settings').split(',')[0]|int(1) * 10000) | int }} ausgerechnet, wenn ich den Input-Helfer wie in der Anleitung erstelle und dann z.B. 5000 einstelle? Bei mir wird dann das Register, wenn ich es richtig sehe, nämlich auf 0 gestellt.
✍Bernhard
gepostet am 11.12.2024 18:47
Der Template-Sensor rechnet Prozent aus: 
Ladeleistung / Akku-Kapazität * 10000
z.B. bei einer Akkukapazität von 10240Wh und einer Ladeleistung von 500Watt: 10240/500 * 10000 = 488
Sollte 4,88 % bedeuten.

Beitrag erstellt von Bernhard

✍anonym
07.12.2024 15:27
Hallo zusammen, 

meine Frage hat nur teilweise etwas mit der Steuerung des Akkus zu tun. Folgendes Problem: wen ich den Akku aus dem Netz lade, wird der Ladevorgang nicht dem Hausverbrauch (Energiedashboard in HA) zugeordnet, sodass merkwürdige Autarkiegrade angezeigt werden (z.B. -42%). Hat jemand noch das Problem, bzw. auch schon eine Lösung?

VG 

Jannick

✍anonym
14.11.2024 16:27
Hallo,

vielen Dank für die Anleitung! Fast alles hat wie beschrieben funktioniert. Ich habe jedoch das Problem, dass beim Aktivieren des Scripts "FastCharging" mein Akku mit voller Leistung geladen wird. Wenn ich einen Wert über input_number setze und dann das Script "Limit Charging" ausführe, passiert leider nichts.

Hat vielleicht jemand eine Idee, woran das liegen könnte?

Viele Grüße!
Andre
✍anonym
gepostet am 20.11.2024 21:20
Hey, ich habe leider das gleiche Problem. Folgendes ist mir aufgefallen: Wenn der Akku mittels Skript erzwungen geladen wird und ich danach das Skript "Charge-limit" ausführe, wird egal welche Zahl unter input_number.charging_power erfasst war die Ladeleistung auf 500 w gestellt.

Wenn ich das Skript "Charge-limit" als erstes ausführe und danach erst "Force charging". Klappt es manchmal (z. B. bei Eingabe von 2000) und manchmal nicht (z. B. bei Eingabe von 3570).

Mache ich/wir (gruß an Andre) etwas falsch?
Gibts hier eine Lösung?

LG
Robert

Beitrag erstellt von anonym
✍Bernhard
gepostet am 20.11.2024 21:41
Hallo Andre, Hallo  Robert,
hilft das Ausführen von "Reset Charging" vor dem Start von z.B. Force Charging oder Charge Limit?

Beitrag erstellt von Bernhard
✍anonym
gepostet am 23.11.2024 21:30
Hallo, habe es eben probiert.
1. Reset charging Skript
2. 1500w bei Input…….
3. charge-Limit Skript
4. force charging
5. Abbruch, da die Ladeleistung auf über 2kw gestiegen ist
6. nochmaliger Test, Ladeleistung steigt aufs Maximum an

Ich glaube dass der Akku immer mit voller Leistung lädt, egal was ich eingebe.
Wenn ich das Skript charge-Limit nach force charging ausführe, wird wie gesagt immer auf 0,5kw limitiert - egal was ich unter Input….. eingegeben habe.

Hast du noch einen Tipp?
LG Robert

Beitrag erstellt von anonym
✍Bernhard
gepostet am 24.11.2024 13:55, geändert: 24.11.2024 13:59
Nach dem Reset sollte nur ein Script für die jeweilige Aktion ausgeführt werden.
Lass mal 3 weg, force charge sollte eigenständig die 1500 von Input verwenden.

Beitrag erstellt von Bernhard
✍anonym
gepostet am 26.11.2024 20:57
Hallo Bernhard, danke für deine Hilfe.

Leider klappt dass auch nicht, habe es wie oben beschrieben getestet, jedoch wie vorgeschlagen ohne dem charge-Limit Skript.
Getestet wurde zb 1100 als Input, die Leistung stieg jedoch wieder weiter an, habe dann bei 2800 wieder abgebrochen.

Was kann ich denn kontrollieren um auf einen Fehler auf meiner Seite zu kommen?
Der battery reading Sensor meldet (meiner Meinung nach) korrekte Werte zb im Hinblick auf die Speichergröße. 

Lg Robert

Beitrag erstellt von anonym
✍Bernhard
gepostet am 27.11.2024 08:25
Hallo Robert,
sorry da hätte ich schon früher nochmal genauer testen sollen.  Ich habe das Template "alias: Force charging" anhand der Dokumentation nochmal neu aufgebaut und hier aktualisiert: Eventuell kannst du damit nochmal testen, ob es jetzt funktioniert. Wäre super, wenn du kurz ein Feedback geben könntest, ob es mit dem neuen Template klappt?

Beitrag erstellt von Bernhard
✍anonym
gepostet am 28.11.2024 21:55
Hallo Bernhard,

danke für deine Hilfe/Arbeit! :)

Die ersten paar Tests waren alle erfolgreich. Ich denke also dass es nun funktioniert.
Ablauf:
1. Skript "Reset charging" ausführen
2. Gewünschte Leistung bei "input_number.charging_power" erfassen
3. Skript "Force charging" (in aktualisierter Version) ausführen
4. Klappt!

Ich habe auf Basis deiner Änderungen eine zweite Version des Skripts "Force charging erstellt". Dazu war noch die Anlage eines weiteren Sensors (sensor.wchamax) nötig. Diesen habe ich mit Infos aus der verlinkten Github Seite erstellt. -> "{{ states('sensor.reading_battery_settings').split(',')[0]|int(0) }}"
Sollte so passen denke ich? Wenn ja, solltest du es in der Anleitung ergänzen, da ohne diesen Sensor das Skript bei mir nicht funktioniert hat.

Wofür ist dann das Skript "Charge-limit" eigentlich vorgesehen?
Um die Leistung (Ladung und Entladung?) generell zu limitieren? Kann dadurch bspw. die Ladung des Akkus durch die PV Anlage oder aber die Entladeleistung beschränkt werden?

Nochmals danke für diese Anleitung und deine Hilfe!
LG Robert

Beitrag erstellt von anonym

✍Michael
31.10.2024 12:24
Hi ihr,
bisher habe ich nur ein kleines Problemchen beim Einrichten. Bei mir ist "float" eingestellt. Wo kann ich denn bei den Template-Sensoren die Register-Werte um +10 ändern? Wie komme ich an diese Werte ran?
Was ist denn genau der Unterschied zwischen "float" und "int+SF"? Sonst könnte ich ja das auch einfach umstellen oder?
LG
Michael
✍Bernhard
gepostet am 07.11.2024 07:28
Die Werte können im Template frei gewählt werden. Also für die Template-Sensoren um 10 höhere Werte als angegeben verwenden. Oder alternativ: einfach umstellen und die angegebenen Werte verwenden.

Beitrag erstellt von Bernhard

✍anonym
07.10.2024 05:28
Hallo Bernhard,

Vielen Dank für den tollen Artikel und deine Mühen, was du hier umgesetzt hast, ist schon wirklich Klasse. 
Ich bin in HA noch ziemlich neu und mich würde mal dein Dashboard interessieren, wie du die Akkussteuerung anzeigen lässt bzw. wie du das realisiert hast. Hättest du da eventuell einen Code. 

Liebe Grüße, Stefan

✍anonym
26.09.2024 09:13
Hallo! Danke für das coole Tutorial, leider bin ich mit meinen minimalen Fähigkeiten nicht in der Lage es in HA umzusetzen. Jetzt habe ich mit hilfe von KIs ein Python Script geschrieb, welches mir das erzwungene Laden vom Speicher übers Netz ermöglicht. Das funktioniert Grundsätzlich auch, aber die Ladeleistung beträgt nie mehr als 500 W, egal was ich einstelle. Kannst du mir vielleicht einen Tipp geben was ich falsch konfiguriert habe? 
Das sind meine Einstellungen für die Register:
        # Setze die Register für die erzwungene Ladung
        client.write_register(40360, 1)  # ChaGriSet: Ladung aus dem Netz erlaubt
        client.write_register(40348, 2)  # StorCtl_Mod: Speicherbetrieb aktiv
        client.write_register(40355, to_twos_complement(-60))  # OutWRt: Ausgangsleistung auf -60 #  (--> da kommt sonst eine Fehlermeldung wenn man nur '-60' schreibt.
        client.write_register(40356, 10000)  # InWRte: Eingangsladung
        client.write_register(40350, 9800)  # MinRsvPct

Ich würde mich über jede Hilfe freuen, wenn nicht ist es natürlich auch ok!
Danke und LG
Alex
✍Bernhard
gepostet am 26.09.2024 19:30
Hallo Alex, 

ich würde das hier beschriebene Template für Register 40355 so ummünzen:
Für 500 Watt und 10240 Batteriekapazität: 
65536 -  (500 / 10240) * 10000 = 65048
also: client.write_register(40355, 65048)
-> für 1000 Watt dann entsprechend: 64560

Und ich vermute, dass du die Register 40356 und 40360 für das erzwungene Laden nicht benötigst. Register 440348 steht bei mir auch auf 2 und 40350 ist auf 9900 (Setzt MinRsvPct auf 99,0 % WChaMax)

Beitrag erstellt von Bernhard

✍anonym
16.08.2024 00:17
Hallo Bernhard,

Vielen Dank für die super Anleitung.
Ich war schon lange auf der Suche, wie ich dies realisieren könnte - Danke dafür!!!

✍anonym
13.04.2024 06:39
Hallo Bernhard,
meine Hochachtung für Deine Arbeit und Mühe.
Genau solch eine Steuerung suchte ich bereits seit geraumer Zeit.
Ich habe 2 Gen24 10.0, einen mit 3 x BYD 10.2 HVS und den anderen mit 2 x BYD 22.1 HVM, jeweils paralell geschaltet
Ich habe zunächst einen mit Deiner Anleitung integriert.
Ich habe mich mit strickt an den Vorgaben gehalten.
Erhalte aber, wenn ich ein Skript "ForceDischarge" ausführe, eine Fehlermeldung.
In den Step Details wird folgende angezeigt. Fehler: 'H' format requires 0 <= number <= 65535
Ich bin leider nicht so der Freak und komme nicht weiter.

Wenn ich beide einbinde, selbstverständlich haben diese unterschiedliche IP, muss ich in der modbus.yaml diese unterschiedlich bezeichnen?
Vielen Dank im voraus für Deine Mühe.

Gruß Steffen

✍anonym
01.04.2024 12:11
Vielen Dank für das tolle Tutorial!

✍anonym
29.02.2024 12:01
Hallo Bernhard,
ich habe gerade ein ganz anderes Szenario in der Verbindung Fronius / ByD Batterie im Kopf.
Ich wechsle zu Tibber und hab mir überlegt wenn im Winter die PV-Anlage nicht genügend Strom erzeugt um die Batterie zu befüllen, könnte ich die Batterie doch nachts günstig aufladen, die Speicherverluste muss ich natürlich berücksichtigen.
Ich steuere daheim alles über Homematic und habe auch die Möglichkeit http / https Requests abzuschicken. Wäre es möglich ein entsprechendes Skript hierzu zu erstellen?
Gruß
Michael

✍solarstation
14.02.2024 06:25
All real registers +1 except 40345, means:
40349 StorCtl_Mod,
40356 OutWRte
40357 InWRte

From fronius doc:
40349	40349	1	RW	0x03 0x06 0x10	StorCtl_Mod	
40356	40356	1	RW	0x03 0x06 0x10	OutWRte
40357	40357	1	RW	0x03 0x06 0x10	InWRte	


Fault comes from HA 40345 declaration i guess.

Wbr,

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details