Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SMA Sunny Island grid charge leads to illegal data value #17374

Closed
1 task done
deadrabbit87 opened this issue Nov 20, 2024 · 16 comments · Fixed by #17393
Closed
1 task done

SMA Sunny Island grid charge leads to illegal data value #17374

deadrabbit87 opened this issue Nov 20, 2024 · 16 comments · Fixed by #17393
Assignees
Labels
devices Specific device support

Comments

@deadrabbit87
Copy link
Contributor

deadrabbit87 commented Nov 20, 2024

Describe the bug

Grid charge with SMA Sunny Island over modbus leads to illegal data value

Steps to reproduce

n/a

Configuration details

meters:
  - name: my_battery
    type: template
    template: sma-si-modbus
    usage: battery
    modbus: tcpip
    id: 3
    host: 192.168.178.48
    port: 502 

Log details

Output of .\evcc.exe -c .\evcc.yaml meter -l trace --battery-mode charge:

[main  ] INFO 2024/11/20 20:17:52 evcc 0.131.6
[main  ] INFO 2024/11/20 20:17:52 using config file: .\evcc.yaml
[db    ] INFO 2024/11/20 20:17:52 using sqlite database: C:\Users\maximilian.hauser\.evcc\evcc.db
[db    ] TRACE 2024/11/20 20:17:52 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="settings" -1 <nil>
[db    ] TRACE 2024/11/20 20:17:52 SELECT sql FROM sqlite_master WHERE type IN ("table","index") AND tbl_name = "settings" AND sql IS NOT NULL order by type = "table" desc 1 <nil>
[db    ] TRACE 2024/11/20 20:17:52 SELECT * FROM `settings` LIMIT 1 -1 <nil>
[db    ] TRACE 2024/11/20 20:17:52 SELECT * FROM `settings` 6 <nil>
[db    ] TRACE 2024/11/20 20:17:52 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="devices" -1 <nil>
[db    ] TRACE 2024/11/20 20:17:52 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="device_details" -1 <nil>
[db    ] TRACE 2024/11/20 20:17:52 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="configs" -1 <nil>
[db    ] TRACE 2024/11/20 20:17:52 SELECT sql FROM sqlite_master WHERE type IN ("table","index") AND tbl_name = "configs" AND sql IS NOT NULL order by type = "table" desc 1 <nil>
[db    ] TRACE 2024/11/20 20:17:52 SELECT * FROM `configs` LIMIT 1 -1 <nil>
[db    ] TRACE 2024/11/20 20:17:52 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="config_details" -1 <nil>
[db    ] TRACE 2024/11/20 20:17:52 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="config_details" -1 <nil>
[db    ] TRACE 2024/11/20 20:17:52 SELECT * FROM `configs` WHERE `configs`.`class` = 2 0 <nil>
[my_battery] TRACE 2024/11/20 20:17:52 modbus: send 00 01 00 00 00 0b 03 10 9c d5 00 02 04 80 00 00 01
[my_battery] TRACE 2024/11/20 20:17:52 modbus: recv 00 01 00 00 00 03 03 90 03
[main  ] FATAL 2024/11/20 20:17:52 set battery mode: modbus: exception '3' (illegal data value), function '16'

What type of operating system are you running?

Windows

Nightly build

  • I have verified that the issue is reproducible with the latest nightly build

Version

0.131.6

@andig andig added question Rather clarification than issue devices Specific device support and removed question Rather clarification than issue labels Nov 20, 2024
@deadrabbit87
Copy link
Contributor Author

deadrabbit87 commented Nov 20, 2024

Hierzu gibts mehrere Issues, ich blicke da aber noch nicht ganz durch.

Nach der Doku passen die Register.

Hier #11909 wurde das ganze ja schon mal umgebaut.

Lässt sich bei dem Batteriewechselrichter nicht gleich Sunspec nutzen?

Ausgabe von .\evcc.exe -l trace --id 126 sunspec 192.168.178.48:502:
info.txt

Edit: Frage selbst beantwortet:

.\evcc.exe -c .\evcc.yaml meter -l trace --battery-mode charge
[main  ] INFO 2024/11/20 21:08:08 evcc 0.131.6
[main  ] INFO 2024/11/20 21:08:08 using config file: .\evcc.yaml
[db    ] INFO 2024/11/20 21:08:08 using sqlite database: C:\Users\maximilian.hauser\.evcc\evcc.db
[db    ] TRACE 2024/11/20 21:08:08 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="settings" -1 <nil>
[db    ] TRACE 2024/11/20 21:08:08 SELECT sql FROM sqlite_master WHERE type IN ("table","index") AND tbl_name = "settings" AND sql IS NOT NULL order by type = "table" desc 1 <nil>
[db    ] TRACE 2024/11/20 21:08:08 SELECT * FROM `settings` LIMIT 1 -1 <nil>
[db    ] TRACE 2024/11/20 21:08:08 SELECT * FROM `settings` 6 <nil>
[db    ] TRACE 2024/11/20 21:08:08 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="devices" -1 <nil>
[db    ] TRACE 2024/11/20 21:08:08 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="device_details" -1 <nil>
[db    ] TRACE 2024/11/20 21:08:08 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="configs" -1 <nil>
[db    ] TRACE 2024/11/20 21:08:08 SELECT sql FROM sqlite_master WHERE type IN ("table","index") AND tbl_name = "configs" AND sql IS NOT NULL order by type = "table" desc 1 <nil>
[db    ] TRACE 2024/11/20 21:08:08 SELECT * FROM `configs` LIMIT 1 -1 <nil>
[db    ] TRACE 2024/11/20 21:08:08 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="config_details" -1 <nil>
[db    ] TRACE 2024/11/20 21:08:08 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="config_details" -1 <nil>
[db    ] TRACE 2024/11/20 21:08:08 SELECT * FROM `configs` WHERE `configs`.`class` = 2 0 <nil>
[sunspec] TRACE 2024/11/20 21:08:08 modbus: send 00 01 00 00 00 06 03 03 9c 40 00 02
[sunspec] TRACE 2024/11/20 21:08:08 modbus: recv 00 01 00 00 00 03 03 83 02
[sunspec] TRACE 2024/11/20 21:08:08 modbus: send 00 02 00 00 00 06 03 03 c3 50 00 02
[sunspec] TRACE 2024/11/20 21:08:08 modbus: recv 00 02 00 00 00 07 03 03 04 ff ff ff ff
[sunspec] TRACE 2024/11/20 21:08:08 modbus: send 00 03 00 00 00 06 03 03 00 00 00 02
[sunspec] TRACE 2024/11/20 21:08:08 modbus: recv 00 03 00 00 00 07 03 03 04 ff ff ff ff
[main  ] FATAL 2024/11/20 21:08:08 cannot create meter 'my_battery': cannot create meter type 'template': cannot create meter type 'custom': power: not a SunSpec device

@Herbert23
Copy link
Contributor

Herbert23 commented Nov 21, 2024

Ich habe was den Sunny Island angeht diese Woche etwas herumprobiert und kam am ende dazu fcfdfb2

Mit der aktuellsten FW-Version 3.30.37.R auf dem SI sollte es ausreichen, wie beim Sunny Boy Storage, die Wirkleistungsbegrenzung zu setzen (Register 41255 beim SI).

@deadrabbit87
Copy link
Contributor Author

deadrabbit87 commented Nov 21, 2024

Konntest du das bei dir mit Erfolg testen?

Ich habe das mal so gebaut, Fehler erhalte ich da dennoch:
[main ] FATAL 2024/11/21 13:19:15 set battery mode: modbus: exception '2' (illegal data address), function '6'

Nach der Doku die ich gefunden habe, gibt es das Register 41255 gar nicht.

Nach der Doku passen die Register.

@Herbert23
Copy link
Contributor

Welche Firmware Version läuft denn auf deinem Sunny Island? Das Problem hatte ich glaub ich auch, bevor ich das FW-Update gemacht habe.

Bei mir läuft das jetzt seit dieser Woche und funktioniert so

@Herbert23
Copy link
Contributor

Herbert23 commented Nov 21, 2024

Konntest du das bei dir mit Erfolg testen?

Ich habe das mal so gebaut, Fehler erhalte ich da dennoch: [main ] FATAL 2024/11/21 13:19:15 set battery mode: modbus: exception '2' (illegal data address), function '6'

Nach der Doku die ich gefunden habe, gibt es das Register 41255 gar nicht.

Nach der Doku passen die Register.

Durch den edit:

Doku hab ich diese genutzt. Diese Register sollten ab FW 3.20.09.R exisitieren

@deadrabbit87
Copy link
Contributor Author

Danke. Ich überprüfe das nochmal und melde mich.

@deadrabbit87
Copy link
Contributor Author

Hm, die Firmware wäre sogar 4.0.0.R.

Sunny Island 6.0H-11 wäre das genaue Modell.

@Herbert23
Copy link
Contributor

Das erklärt das ganze, ich hab nen SI 80H-12, da ist die FW ne andere und dann auch die Modbusregister.

Die Doku, die du gelinkt hast, gilt aber auch nur für die 12er und 13er Serie.

Für die 11er Serie wäre dann hier die Doku mit der hab ich aber dementsprechend noch nicht gearbeitet

@deadrabbit87
Copy link
Contributor Author

Ja... das ist mir jetzt auch augefallen.

Allem Anschein nach, gibt es aber für -11 kein vergleichbares Register.

Was es aber gibt, ist das Register 10149 Active power setpoint. Allerdings verstehe ich dann nicht, warum der WR das nicht akzeptiert - das aktuelle Template spricht ja genau dieses Register an.

@deadrabbit87
Copy link
Contributor Author

deadrabbit87 commented Nov 21, 2024

Wenn ich im Template -4000 für die Wirkleistungvorgabe eintrage, funktioniert es. Dann lädt der WR mit 4000 Watt aus dem Netz.

Die Frage die sich mir stellt: Woher kommen die value: -2147483647 # Wirkleistungsvorgabe im Template?

@deadrabbit87
Copy link
Contributor Author

@premultiply Hier #15477 wurde der Wert für die Wirkleistungsvorgabe ja schon mal geändert.

Der Wert kommt wohl aus dem max. Wert den ein int32 annehmen kann.

Nach der Doku würde das Register auch int32 akzeptieren, tut er aber wohl nicht. Vermutlich ein Bug in der Firmware des WR.

Ich habe mich jetzt mit mbpoll an die Werte herangetastet, die der WR scheinbar akzeptiert.

-5100 Watt setzt der WR um:

.\mbpoll.exe 192.168.178.48 -0 -B -a 3 -v  -r 40149 -t4:int -- -5100
debug enabled
iGetIntList(40149)
Integer found: 40149
iCount=1
Set function=4
Set format=int
Set device=192.168.178.48
1 write data have been found
Set data=-5100
Int[0]=-5100
mbpoll 1.5-2 - ModBus(R) Master Simulator
Copyright (c) 2015-2023 Pascal JEAN, https://github.com/epsilonrt/mbpoll
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; type 'mbpoll -w' for details.

Connecting to [192.168.178.48]:502
Set response timeout to 1 sec, 0 us
Protocol configuration: ModBus TCP
Slave configuration...: address = [3]
                        start reference = 40149, count = 1
Communication.........: 192.168.178.48, port 502, t/o 1.00 s, poll rate 1000 ms
Data type.............: 32-bit integer (big endian), output (holding) register table

[00][01][00][00][00][0B][03][10][9C][D5][00][02][04][FF][FF][EC][14]
Waiting for a confirmation...
<00><01><00><00><00><06><03><10><9C><D5><00><02>
Written 1 references.

5101 Watt dann nicht mehr:

.\mbpoll.exe 192.168.178.48 -0 -B -a 3 -v  -r 40149 -t4:int -- -5101
debug enabled
iGetIntList(40149)
Integer found: 40149
iCount=1
Set function=4
Set format=int
Set device=192.168.178.48
1 write data have been found
Set data=-5101
Int[0]=-5101
mbpoll 1.5-2 - ModBus(R) Master Simulator
Copyright (c) 2015-2023 Pascal JEAN, https://github.com/epsilonrt/mbpoll
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; type 'mbpoll -w' for details.

Connecting to [192.168.178.48]:502
Set response timeout to 1 sec, 0 us
Protocol configuration: ModBus TCP
Slave configuration...: address = [3]
                        start reference = 40149, count = 1
Communication.........: 192.168.178.48, port 502, t/o 1.00 s, poll rate 1000 ms
Data type.............: 32-bit integer (big endian), output (holding) register table

[00][01][00][00][00][0B][03][10][9C][D5][00][02][04][FF][FF][EC][13]
Waiting for a confirmation...
<00><01><00><00><00><03><03><90><03>
ERROR Illegal data value
Write output (holding) register failed: Illegal data value

So ganz Sinn ergibt das irgendwie noch nicht. Hat da jemand noch ein Idee, wie ich weiter machen könnte?

@premultiply
Copy link
Member

Lass uns das dann bei allen WR konfigurierbar machen und als Default 4200W nehmen damit keine zusätzliche dynamische Dimmung nach §14a EnWG erforderlich ist.

Eigentlich müsste man das wohl auch perspektivisch dynamisch durch das LM regeln lassen...

@deadrabbit87
Copy link
Contributor Author

Und wie die Unterscheidung zwischen Version -11 und -12 des WR?

@Herbert23 oder funktioniert das bestehende Template bei dir auch, wenn du niedrigere Werte schreibst?

@andig
Copy link
Member

andig commented Nov 21, 2024

Lass uns das dann bei allen WR konfigurierbar machen und als Default 4200W nehmen damit keine zusätzliche dynamische Dimmung nach §14a EnWG erforderlich ist.

Ich wiederhole mich da- lasst uns die Themen bitte nicht mischen, zumal alte WR nicht betroffen sind. Danke.

Eigentlich müsste man das wohl auch perspektivisch dynamisch durch das LM regeln lassen...

So isses. Und wenn das notwendig werden sollte brauchen wir ohnehin einen Plan wie.

@premultiply
Copy link
Member

Das Ding ist halt dass SMA offensichtlich selbst den Überblick verloren hat welcher WR bzw. welche Hard- und Softwareversion was kann. Dazu gab es bei aktuelleren Versionen gerade in dem Bereich Änderungen bei manchen Modellen - gerade im Zusammenspiel mit dem SHM.
Die SMA-Doku ist leider abweichend, unvollständig und fehlerhaft.

Echt schwierig da einen Überblick zu behalten.

@andig
Copy link
Member

andig commented Nov 21, 2024

Dann lass uns die Dinge doch A und B nennen, dann wird klar dass man sich durchprobieren muss? Vielleicht liest ja auch jemand von SMA mit der den Durchblick noch hat (oder glaubt ihn zu haben) oder aus der Community gibts Kontakte dahin?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
devices Specific device support
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants