Closed premultiply closed 2 months ago
@premultiply Lass mich wissen, wenn Du das angehst. Habe mittlerweile in der Integration einiges geändert. Siehe auch: https://homeassistant-solax-modbus.readthedocs.io/en/latest/sofar-energy-storage-modes/, insbesondere dieser Abschnitt: https://homeassistant-solax-modbus.readthedocs.io/en/latest/sofar-energy-storage-modes/#prevent-battery-discharging
Sofar erlaubt hier dann auch die Entladung zu verhindern - die Ladung aber weiterhin zuzulassen (falls jemand mehr vom Dach bekommt als in das Auto+Haus hineingeht)
@cschlipf wäre es möglich hier kurz die relevanten Register und Werte zu beschreiben? Dann ist das schnell gemacht. Danke!
Gerne.
Um den Passive Mode zu setzen ist dieses Register zu schreiben:
Mit dem Wert 3 geht es in den Passive Mode. Wenn man die Batterie wieder aktiviert, sollte das Register wieder zurück auf 0 (Self-Use) gesetzt werden.
Nun könnte es noch sein, dass im Passive Mode die Werte nicht stimmen, weil sie zuvor auf irgendwas anderes gesetzt worden sind. Dazu müssen diese Register zusammen in einer Schreiboperation gesetzt werden:
SOFAR Modbus Protocol G3_2023-12-22_1.22_en-INT.xlsx
Bei der Gelegenheit hier die aktuellsten ModBus Register.
Nun könnte es noch sein
Ich brauche bitte einfach die Liste der Register mit Wert je Modus. Keine Screenshots, keine Textaufgabe. Danke!
OK, ich dachte das hätte ich schon genau genug beschrieben.
Hoffe das war kurz und prägnant genug.
Danke, das hilft dem Entwickler mit wenig Zeit- Netzladung gibts nicht?
Gerne testen
Netzladung geht genauso, nur mit anderen Werten:
\<Ladeleistung> ist hier der Wert in W mit der der Akku geladen werden soll. Beim BTS Speicher ist das die Hälfte der Kapazität (z.B. ein BTS Speicher mit 10 kWh Kapazität braucht hier einen Wert von 5000 für die maximale Ladeleistung)
Gerne testen
Muss leider warten: Morgen früh geht es in den Urlaub.
Gerne testen
How can I test? Can I install this branch in Docker?
@cschlipf @andig
Gilt dies nicht auch für die anderen Wechselrichter von Sofar funktionieren, die das -g3 Template benutzen. Im Code von Solax_Modbus sehe ich keine anderen Register für die anderen Wechselrichter. ( Insbesonder HYD xKTL-3PH ) ?!?!
Genau, sollte nicht eigentlich sofarsolar-g3.yaml angepasst werden? Bei mir tauchen die Einstellungen nicht auf. Ich glaube auch, dass mit der Anpassung die Register einzeln geschrieben werden, das wird vermutlich nicht funktionieren. Damit es funktioniert, sollten aber 3 Register gleichzeitig geschrieben werden. Hier noch mein Diskussionsbeitrag als Querverweis https://github.com/evcc-io/evcc/discussions/15722#discussion-7098388
Sollen wir ein neues Ticket aufmachen für das sofarsolar-g3.yaml Template ? @andig @cschlipf ?
Jetzt wäre es doch prima, diesen PR überhaupt mal zu testen. Dann können wir ihn ja einfach kopieren falls die Register identisch sind.
Werde ich machen. Bin aber nicht vor Donnerstag am HYD
Das sofarsolar.yaml Template scheint zu HYD 10KTL-3ph nicht zu passen
[site ] ERROR 2024/09/24 19:17:46 battery 1 power: read failed: modbus: exception '2' (illegal data address), function '3'
[site ] ERROR 2024/09/24 19:17:55 pv 1 power: read failed: modbus: exception '2' (illegal data address), function '3'
[site ] ERROR 2024/09/24 19:17:56 battery 1 power: read failed: modbus: exception '2' (illegal data address), function '3'
[site ] ERROR 2024/09/24 19:18:06 pv 1 power: read failed: modbus: exception '2' (illegal data address), function '3'
[site ] ERROR 2024/09/24 19:18:06 battery 1 power: read failed: modbus: exception '2' (illegal data address), function '3'
[site ] ERROR 2024/09/24 19:18:15 pv 1 power: read failed: modbus: exception '2' (illegal data address), function '3'
[site ] ERROR 2024/09/24 19:18:16 battery 1 power: read failed: modbus: exception '2' (illegal data address), function '3'```
Genau. Das wurde im falschen Template eingebaut. Der HYD braucht das G3 Template. Ich wurde empfehlen den PR zu reverten. Die Register der alten Wechselrichter sind komplett anders. So kann ich das auch leider nicht testen.
Neues Nightly in 20min
Hello, I'm trying to accomplish the same thing (first aid topic #15798) but for the HYD5000-ES inverter. The addresses don't match with those of the sofarsolar nor with the G3 template. I've posted the modbus comms documentation Here
I got the grid, pv & battery reads covered. Only the battery control is getting the better of me...
Anyone able to assist me on this? thx!
Hier das versprochene Feedback... Setup: HYD 15 KTL mit 20kw BTS Batterie EVCC-Version: 0.130.12+1727247451
Szenario:
Ergebnis:
[site ] ERROR 2024/09/25 20:22:31 battery mode: modbus: response data size '18' does not match count '4'
Das Log hänge ich an, SKI.Keys wurden entfernt.
Vielen Dank für eure tolle Arbeit!
I have a HYD 5000-EP, and getting this error when trying to charge my battery from the grid:
[site ] ERROR 2024/09/25 21:14:01 battery mode: modbus: response data size '18' does not match count '4'
@wardwygaerts yes, that is also my observation (see the post before), but switching off the battery works!
@sahomm sorry, didn't saw your last post. As soon as I set it to charge from the grid, the Storage Mode indeed changes to Self Use. Other question: if it would work, with how much watts will it charge the battery?
@sahomm and @wardwygaerts
You both are using the LSE-3, right? Then this response is expected as the LSE-3 os returning in invalid response length on write. See https://www.photovoltaikforum.com/thread/217362-sofar-hyd-serie-kommunikation-%C3%BCber-modbus-tcp-erfahrungen/?postID=3873925#post3873925
@andig Any change we could change the severity of this message to a warning? It's still working fine.
If modbus is a marketed feature then thats a bug and should be fixed. We cannot just ignore arbitrary messages.
You both are using the LSE-3, right?
I am yes. Currently I don't have a car connected, so I'm only trying to use it to charge my home battery. But when setting a high price limit (higher than my tarriff), nothing happens (except setting storage mode to Self Use, of this was not the case), only this error.
If modbus is a marketed feature then thats a bug and should be fixed. We cannot just ignore arbitrary messages.
Not sure it's a marketed feature of the LSE-3. I think it's rather unofficial.
Please note that I did not say 'ignore'. That would be wrong and I agree. My suggestion was just to lower the severity to Warning. In general an invalid response to a write request does not necessarily mean it's a hard error.
It does. It means the write did not succeed in the general case.
You both are using the LSE-3, right?
I am yes. Currently I don't have a car connected, so I'm only trying to use it to charge my home battery. But when setting a high price limit (higher than my tarriff), nothing happens (except setting storage mode to Self Use, of this was not the case), only this error.
@cschlipf Did you try to load the battery ?
there might be a regression, related to introduction of battery control, ref. #16432
I use waveshare adapters for communication, but I still get the error messages in the log. The system switches between passive mode and selfuse mode, but the values for passive mode are not adjusted. I think the values are sent separately to the inverter and not as a data packet as the inverter expects
Hier das versprochene Feedback... Setup: HYD 15 KTL mit 20kw BTS Batterie EVCC-Version: 0.130.12+1727247451
Szenario:
- Fahrzeug anschließen im PV-Mode
- Umschalten auf Schnell
- nach ca 2 Minuten zurück auf PV
Ergebnis:
- Das Fahrzeug wurde erkannt und nicht geladen, da kein PV-Überschuss. >> OK
- Nach Umschaltung auf "Schnell" wurde das Fahrzeug geladen und der Akku abgeschaltet (HYD im Passive-Mode) >> OK Hier wird aber zyklisch folgende Fehlermeldung geworfen:
[site ] ERROR 2024/09/25 20:22:31 battery mode: modbus: response data size '18' does not match count '4'
- Die Umschaltung zurück auf PV wird von EVCC ordnungsgemäß durchgeführt, die Umschaltung des HYD auf "SelfUse" um die Akkunutzung wieder zu aktivieren jedoch nicht. >>notOK
Das Log hänge ich an, SKI.Keys wurden entfernt.
Vielen Dank für eure tolle Arbeit!
Bei mir verhält es sich exakt genau so.
@Pitchen84 Lse3? Laut https://github.com/evcc-io/evcc/issues/12220#issuecomment-2375131718 geht das nicht, also bitte an den Hersteller wenden.
Und: gibts nur Fehler oder wird nicht umgeschaltet?
@andig
Es fliegen nur Fehler wegen der ungültigen Response des LSE-3. Es wird aber durchgeführt. Die Error Logs kann man im Sofar Fall also ignorieren. Die Umschaltung auf Passive funktioniert ja.
Prinzipiell funktioniert es ja, nur bei schalten auf Self Use scheint noch ein Problem zu sein.
Also hier der Case 1 (funktioniert nicht) sollte genau dasselbe machen wie Case 2 (funktioniert). Nur eben mit dem Wert 0 (self-use), statt 3 (passive)
switch:
- case: 1 # normal
set:
source: const
value: 0 # self-use
set:
source: modbus
{{- include "modbus" . | indent 8 }}
register:
address: 0x1110
type: writemultiple
decode: int16
- case: 2 # hold
set:
source: sequence
set:
- source: const
value: 3 # passive
set:
source: modbus
{{- include "modbus" . | indent 10 }}
register:
address: 0x1110
type: writemultiple
decode: int16
Dinge die mir hier auffallen:
set:
. Fehlt hier ein -
vor source: const
?Int/uint ist bei positiven Werten egal. case 1 braucht keine Liste weil nur 1 Wert gesetzt wird, in allen anderen Cases aber mehrere.
Prinzipiell funktioniert es ja, nur bei schalten auf Self Use scheint noch ein Problem zu sein.
Das Problem hier ist dann ein rein optisches? Was spricht dagegen, sich einfach an den Hersteller zu wenden? Hat das überhaupt schonmal jemand probiert?
Also hier der Case 1 (funktioniert nicht) sollte genau dasselbe machen wie Case 2 (funktioniert). Nur eben mit dem Wert 0 (self-use), statt 3 (passive)
switch: - case: 1 # normal set: source: const value: 0 # self-use set: source: modbus {{- include "modbus" . | indent 8 }} register: address: 0x1110 type: writemultiple decode: int16 - case: 2 # hold set: source: sequence set: - source: const value: 3 # passive set: source: modbus {{- include "modbus" . | indent 10 }} register: address: 0x1110 type: writemultiple decode: int16
Dinge die mir hier auffallen:
- Case 1 ist keine Liste unter
set:
. Fehlt hier ein-
vorsource: const
?- Laut Protokoll ist das Register 0x1110 ein uint16 wert. Aber warum tut dann Case 2?
Mit dem fehlenden - in Case 1 wirst du recht haben, es wird vermutlich dadurch einfach nicht ausgeführt. Es gibt auch keine Fehlermeldung im Log.
In Case 1 wird zwar "pasive mode" mit dem Register 0x1110 gesetzt, die Leistungswerte werden aber nicht angepasst, d.h. Register 0x1187, 0x1189 und 0x118b bleiben unverändert und es wird eine Fehlermeldung im battery mode: modbus: exception '3' (illegal data value), function '16'
geworfen. Wie gesagt, ich verwende Waveshare nicht LSE3
Es ist wichtig, dass die 3 Register mit einem Befehl an den WR geschickt wird und nicht mit 3 einzelnen aufrufen, anderer falls wird vom WR ein Fehler zurück gegeben.
Hier sieht man, dass die 3 Werte nicht verändert worden sind, sondern auf meine vor eingestellten Werten geblieben sind. Hier hatte ich auch schon das Schnellladen wieder ausgeschaltet, d.h. Modus hätte sich wieder auf "self use" ändern sollen.
Dann verstehe ich ehrlich gesagt nicht, warum Case 1 nicht funktioniert, aber Case 2.
Ja, ist ein rein optisches Problem im Log. Deswegen habe ich oben ja vorgeschlagen das in eine Warning zu ändern, aber ich verstehe auch Deine Argumente dagegen.
Ich habe das schon an meine Kontakte von Sofar Deutschland weitergeleitet. Aber
Der LSE-3 Stick wird nicht von Sofar hergestellt, sondern von einem dritten Hersteller (IGEN Tech, Solarman), welcher auch noch andere Wechselrichter unterstützt.
Das ändert nix dran, dass das Teil Schrott ist. Dann bei diesem Hersteller beschweren.
Die von Sofar unterstützte Schnittstelle ist RS 485.
...oder einfach auf eine funktionierende Schnittstelle umsteigen. Wir halten fest: evcc funktioniert wie erwartet.
In Case 1 wird zwar "pasive mode" mit dem Register 0x1110 gesetzt, die Leistungswerte werden aber nicht angepasst, d.h. Register 0x1187, 0x1189 und 0x118b bleiben unverändert und es wird eine Fehlermeldung im battery mode: modbus: exception '3' (illegal data value), function '16' geworfen. Wie gesagt, ich verwende Waveshare nicht LSE3 Es ist wichtig, dass die 3 Register mit einem Befehl an den WR geschickt wird und nicht mit 3 einzelnen aufrufen, anderer falls wird vom WR ein Fehler zurück gegeben.
@Zwer2k das ist spannend. Die Vorgabe war:
Energystorage mode auf Self-Use setzen: U16 Register 1110 auf 0
Du sagst das funktioniert so nicht? Was muss stattdessen geschrieben werden? Dann frage ich mich natürlich auch, warum es bei einigen Anwendern anscheinend funktioniert???
@Pitchen84 Lse3? Laut #12220 (comment) geht das nicht, also bitte an den Hersteller wenden.
Und: gibts nur Fehler oder wird nicht umgeschaltet?
LSE3, HYD15 KTL mit 10 kWh BTS und 61er Firmware
Der LSE-3 Stick wird nicht von Sofar hergestellt, sondern von einem dritten Hersteller (IGEN Tech, Solarman), welcher auch noch andere Wechselrichter unterstützt.
@cschlipf was mich jetzt wirklich irritiert ist der Text im Template:
Es wird empfohlen die Verbindung über einen LSE-3 Logger Stick mittels ModBus TCP herzustellen (LSW-3 WLAN Stick wird nicht unterstützt). Bei seriellem Anschluss via RS485 mit entsprechendem Adapter am COM Port ist zu beachten, dass wechselrichterseitig für eine Terminierung des RS485 Busses zu sorgen ist.
Wenn der LSE Schrott ist müssten wir das korrigieren?
Case 1 (also zurückschalten auf "self use") funktioniert bei mir nicht. So wie ich es verstanden habe, auch bei anderen funktioniert es nicht.
Aus meiner Sicht liegt es so wie @cschlipf beschrieben hat an fehlenden -
in Template
@andig Wie gesagt - es ist nur eine falsche Fehlermeldung. Es tut ja trotzdem.
Energystorage mode auf Self-Use setzen: U16 Register 1110 auf 0
Doch, das ist richtig. Und dieses eine Register kann auch alleine für sich geschrieben werden. Ich verstehe daher nicht, warum der Self-Use nicht wieder aktiviert wird. Wie gesagt: Meine Vermutung war die fehlende Liste.
Hier nochmal die Specs:
Was 0x1187, 0x1189 und 0x118b betrifft: Hier ist offensichtlich das Problem, dass diese nicht zusammen in einer Write Operations geschrieben werden:
(siehe letzte Spalte unter Remarks)
Der LSE-3 Stick wird nicht von Sofar hergestellt, sondern von einem dritten Hersteller (IGEN Tech, Solarman), welcher auch noch andere Wechselrichter unterstützt.
@cschlipf was mich jetzt wirklich irritiert ist der Text im Template:
Es wird empfohlen die Verbindung über einen LSE-3 Logger Stick mittels ModBus TCP herzustellen (LSW-3 WLAN Stick wird nicht unterstützt). Bei seriellem Anschluss via RS485 mit entsprechendem Adapter am COM Port ist zu beachten, dass wechselrichterseitig für eine Terminierung des RS485 Busses zu sorgen ist.
Wenn der LSE Schrott ist müssten wir das korrigieren?
Bisher haben wir nur ausgelesen. Da funktioniert der LSE-3 wunderbar und ist die einfachste Methode. Beim Schreibzugriff kommt eben der falsche Response Code zurück - das ist nicht schön. Aber nochmal: Das hat nun mit den Problemen hier nichts zu tun. In Home Asssistant ignoriere ich den fehlerhaften Return Code eben und es tut alles.
RS485 ware die sauberste Methode. Ja. Nur ist das eben für unbedarfte einiges an zusätzlicher Komplexität: Richtige Terminierung, richtige Verkabelung, kompatiblen Adapter finden (hier gibt es zig Forumspost dazu), korrekte Adaptereinstellungen,... wenn das alles passt, die bessere Lösung - nur kannst das halt nicht jedem zumuten.
Wie gesagt: Meine Vermutung war die fehlende Liste.
Da gibts nix zu vermuten. Ob das passiert ist ja im Logfile zu sehen. Und es wird ja geschrieben denn sonst gäbe es den Fehler nicht.
Was 0x1187, 0x1189 und 0x118b betrifft: Hier ist offensichtlich das Problem, dass diese nicht zusammen in einer Write Operations geschrieben werden:
Verstehe ich- auch bei gutem Willen- nicht. Das mag so sein. Aber: Wollen wir jetzt diskutieren, dass das Feature gar nicht funktioniert? Das habe ich zumindest oben noch nicht raus hören können.
Long story short: ich hab keinen Überblick mehr, worum es hier eigentlich geht und würde mich daher ausklingen. Fehlerhafte Hardware/Firmware ist bitte beim Hersteller zu reklamieren.
In Home Asssistant ignoriere ich den fehlerhaften Return Code eben und es tut alles.
Prima. Dann ist das die Lösung. Die Alternative habe ich jetzt schon x-mal beschrieben und die besteht darin ein fehlerhaftes Produkt zu reklamieren.
Also ich sehe aktuell 2 Fehler:
Wie gesagt: Meine Vermutung war die fehlende Liste.
Da gibts nix zu vermuten. Ob das passiert ist ja im Logfile zu sehen. Und es wird ja geschrieben denn sonst gäbe es den Fehler nicht.
Das ist es ja, in case 1 gibt es keine Fehlermeldung. Fehler Wird nur in case 2 geworfen, wegen der falschen Behandlung von den 3 Registern (0x1187, 0x1189 und 0x118b).
@cschlipf @Zwer2k erlaubt die Doku auch die beiden letzten Register zusammen zu schreiben? Liest sich für mich so. Dann könnte auch https://github.com/evcc-io/evcc/pull/16509 helfen. Auch das müsste aber mal jemand probieren...
Drei Register zu schreiben gibt unsere Modbuslösung aktuell nicht her, dann müssten wir das Feature reverten.
@Zwer2k du trägst leider auch nicht zur Klarheit bei. Erst hiess es:
Case 1 (also zurückschalten auf "self use") funktioniert bei mir nicht.
und jetzt:
Fehler Wird nur in case 2 geworfen, wegen der falschen Behandlung von den 3 Registern (0x1187, 0x1189 und 0x118b).
Das ist ein Supportalptraum!
https://www.photovoltaikforum.com/thread/221806-sofar-hyd-mit-evcc-akkuentladung-verhindern/?postID=3598510#post3598510
in Template übersetzen