Kommentare: Fronius & BYD Akku über Modbus steuern, Home Assistant

Fragen / Kommentare zu Fronius & BYD Akku über Modbus steuern, Home Assistant

(neueste zuerst)


✍anonym
21.12.2024 13:47
Hi,
ich habe ein Problem mit der Umsetzung.
Das script Force Charging habe ich so angelegt:
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

Sobald ich gespeichert habe, sieht das beim nächsten öffnen dann so aus: 
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

Ich bekomme immer beim ausfführen:
Fehler: value must be at least 0 @ data['value'][0]

Was mache ich falsch?
Vielen Dank für das script!
✍FlyByWire
gepostet am 23.12.2024 11:10
Noch eine Info hierzu:
Wenn ich das script "Force charging" starte kommt im trace der Fehler "value must be at least 0 @ data['value'][0]"
Der value Wert zeigt hier "-15934464"
Ich denke das kann nicht stimmen?! Die anderen scripte, wie z.b. "Reset charging 30%" funktionieren. Hier wird auch geladen.
Auch habe ich nicht so richtig verstanden, was das script " Charge limit" tut?

Beitrag erstellt von FlyByWire
✍Bernhard
gepostet am 23.12.2024 14:12
Den Input-Helfer (Nummer) hast du angelegt: input_number.charging_power ?
Habs nochmal kontrolliert: Mein Script schaut identisch aus und wenn ich den Helfer auf 500 stelle, lädt mein Akku mit 500 Watt.
Charge Limit sollte die maximale Ladeleistung limitieren .. Also, wenn der Input-Helfer auf 500 wird die Ladeleistung auf 500 Watt limitiert.

Beitrag erstellt von Bernhard
✍FlyByWire
gepostet am 23.12.2024 22:32
Hallo Bernhard,
ja, den Input helper habe ich angelegt.  Wenn ich chargin_power verändere, änder sich auch der Wert von BYD.InWRte. Denke das funktioniert soweit?! Leider funktioniert das script Force charging aber weiterhin nicht. Bekomme immer  die selbe Fehlermeldung für diese Sequenz:

 - 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

Fehler: value must be at least 0 @ data['value'][0]

Wie sieht denn der value Wert bei Dir im trace von dem script aus?

Beitrag erstellt von FlyByWire
✍anonym
gepostet am 06.03.2025 21:03
Moin,
Ich war eben auch am basteln und stand vor der gleichen Herausforderung.

Lösung bei mir:
Der Sensor für wchamax heißt bei mir im HA „sensor.storage_wchamax“ (im Skript steht sensor.wchamax). Schau mal in deinen Entitäten, wie er bei dir heißt und ändere dies manuell im Skript ab.

Beitrag erstellt von anonym

✍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
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

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

✍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,

✍anonym
27.01.2024 09:26
Danke für die super Anleitung ich möchte gerne das Register ChaGriSet auslesen was muss ich dazu in den Template Sensor für einen Code schreiben (bin leider nicht der Programmierer), bei den andren konnte ich es mir durch die Beispielcodes zusammenreimen.
Ich hätte diesen Ansatz getroffen:
{% set ChaGriSet_mod= states('sensor.reading_battery_settings').split(',')[15] | int%}
{{ "NETZ AUS" if ChaGriSet_mod == 0 else
"NETZ EIN" if ChaGriSet_mod == 1 else
else "Fehler"  }}
Ich bekomme jedoch folgende Anzeige in der Vorschau:
Dieses Template überwacht keine Ereignisse und wird nicht automatisch aktualisiert.
Danke für deine Unterstützung
✍Bernhard
gepostet am 27.01.2024 09:37
Hallo,
 
auf Anhieb sehe ich 2mal else: am Ende der vorletzten und zu Beginn der letzten Zeile. 
Ansonsten kannst dich mal schrittweise nähern indem du mal nur {{ChaGriSet_mod}} ausgibts und die Ausgabe nach und nach erweiterst.

Beitrag erstellt von Bernhard
✍anonym
gepostet am 28.01.2024 11:13
Servus, vielen lieben Dank für die rasche Rückmeldung!
Du hattest natürlich recht mit dem else richtig schaut das Yaml so aus:
{% set ChaGriSet_mod= states('sensor.reading_battery_settings').split(',')[15] | int%}
{{ "Netzladen erlaubt" if ChaGriSet_mod == 0 else
"Netzladen nicht erlaubt" if ChaGriSet_mod == 1
else "FEHLER"  }}
Schönen Tag noch, sonnige Grüße aus Österreich

Beitrag erstellt von anonym

✍anonym
26.01.2024 12:16
Hallo! Danke für die tolle Anleitung. Funktioniert, jedoch wenn ich den Akku aus dem Netz laden möchte, lädt der Akku nur mit deutlich unter 1kW. Gesetzt habe ich aber 40356 = 10000 (also 100%). Ist noch ein anderes Limit einzustellen?

✍anonym
18.01.2024 23:15
Fronius und BYD Akku über Modbus steuern, vielen Dank es ist eine super Beschreibung, auch die Detail finde ich echt Top!!! Ich hätte eine Frage zum Punkt:
 „Für das Setzen der Register bietet sich ein Skript an: "Einstellungen", "Automatisierungen & Szenen", "Skripte", "NEUES SKRIPT ERSTELLEN":“
Welchen Punkt muss ich wählen bei Sequenz Aktion hinzufügen, ich habe schon einiges probiert wie Szene usw. wäre über eine Unterstützung sehr dankbar.
✍Bernhard
gepostet am 19.01.2024 06:52
Danke für dein Feedback.
Als Aktion für die Sequenz benötigst du hier meist: "Modbus: Register schreiben" oder alternativ den vorbereiten YAML-Text kopieren und gegebenenfalls anpassen.

Beitrag erstellt von Bernhard
✍anonym
gepostet am 19.01.2024 08:37
Danke für die rasche Antwort, ich habe mich wahrscheinlich nicht gut ausgedrückt. Ich würde gerne deinen Code verwenden (welcher unter Inhalt steht), aber ich weiß nicht, wie ich den Yaml einfügen kann. Wenn ich beim Punkt Sequenz hinzufügen anklicke, geht ein Fenster auf wo ich zu Auswahl folgende Punkte habe: Auswählen/Bedingung/Dienste Ausführen usw. welchen Punkt muss ich nehmen um den Inhalt 
„alias: Reset charging
sequence:
  - service: modbus.write_register…
einfügen zu können.
Danke Liebe Grüße Roman

Beitrag erstellt von anonym
✍Bernhard
gepostet am 19.01.2024 08:41
Rechts oben im Editor auf Ebene der Überschrift, bei den 3 Punkten "⁝" und "als YAML bearbeiten"

Beitrag erstellt von Bernhard
✍anonym
gepostet am 19.01.2024 10:55
Danke für die rasche Antwort, das war die Lösung. Wirklich sehr gute Beschreibung vielen Dank dafür!!! Du kannst damit sicher nicht nur mir sondern vielen helfen, den Speicher gut zu nutzen.

Beitrag erstellt von anonym

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