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

Neuer Charger 'AC Thor 9S' #18020

Closed
Lepidopteron opened this issue Jan 2, 2025 · 72 comments · Fixed by #18034 or #18175
Closed

Neuer Charger 'AC Thor 9S' #18020

Lepidopteron opened this issue Jan 2, 2025 · 72 comments · Fixed by #18034 or #18175
Labels
devices Specific device support

Comments

@Lepidopteron
Copy link

Derzeit werden von my-PV die Meter

my-PV bietet aber via AC Thor auch externe Heizstäbe an, die neu via API gesteuert werden können. Früher hatte AC Thor die Anbindung eines Smartmeters voraus gesetzt, jetzt kann man den Heizstab via dem API selber steuern: https://www.my-pv.com/de/info/my-pv-cloud/
Vorteil: Die Priorisierung des Stromüberschusses kann richtig verteilt werden.

Dokumentation AC Thor: https://download.my-pv.com/acthor/acthor_doc_de_a0021702.pdf
Swagger Doku des API: https://api.my-pv.com/api-docs/

Unser AC Thor 9s läuft mit einem 6 kW Heizstab
Ich hatte unseren Charger als elwa2 Heizstab konfiguriert, da stimmt aber die Watt-Zahl immer noch und er 'heizt' nur mit 15W

meters:
 - name: ACThor
   type: template
   template: thor
   usage: aux
   host: 192.168.4.18 # IP-Adresse oder Hostname

chargers:
 - name: my_ELWA_Heizstab
   type: template
   template: ac-elwa-2
   # Modbus TCP
   modbus: tcpip
   id: 1
   host: 192.168.4.18 # Hostname
   port: 502 # Port

loadpoints:
 - title: Heizstab # display name for UI
   charger: my_ELWA_Heizstab # Wallbox Referenz
   meter: ACThor
   mode: pv # charge mode (off, now, minpv, pv)
   phases: 1
   mincurrent: 0.125
   maxcurrent: 26 # (6 kW bei 230V ?)
   priority: 0
   enable:
    threshold: -300 # einschalten, wenn 1 Minute lang mindestens 300 W Uberschuss vorhanden ist
    delay: 1m
   disable:
    threshold: 300  # maximum import power (W)
    delay: 1m

Das API erscheint mir relativ einfach, vielleicht gibt es sonst auch eine andere Lösung?

@andig andig added the devices Specific device support label Jan 2, 2025
@andig
Copy link
Member

andig commented Jan 3, 2025

Ich finde in der Doku leider nichts zu Modbus Registern- die bräuchte es.

@Lepidopteron
Copy link
Author

Ich finde in der Doku leider nichts zu Modbus Registern- die bräuchte es.

Dann macht es wahrscheinlich eher Sinn einen POST mit 'generiertem Body' abzusetzen mit dem HTTP Plugin?
https://docs.evcc.io/docs/reference/plugins#http-lesenschreiben

Geht das Plugin denn auch für chargers?

Ansonsten geht Ansteuerung via Modbus RTU/TCP schon, aber dann halt mit den jewieligen Protokollen?
Dann müsste der AC Thor die Bezugsleistung wahrscheinlich bereinigt vom EVCC bekommen? (Siehe S. 36 https://download.my-pv.com/acthor/acthor_doc_de_a0020410.pdf). Also in den Steuerungseinstellungen nicht auf den Smartmeter/Wechselrichter eingestellt sein, sondern auf EVCC?

@andig
Copy link
Member

andig commented Jan 3, 2025

Dann müsste der AC Thor die Bezugsleistung wahrscheinlich bereinigt vom EVCC bekommen?

Nein. evcc ist master muss den Thor steuern. Dafür brauchts Modbus Register. Bisher fehlen die...

@Lepidopteron
Copy link
Author

Hm, vielleicht übersehen ich etwas, aber in der Dokumentation steht, dass sowohl Adjustable Modbus TCP als auch Adjustable Modbus RTU als Steueroption hinterlegt sind. Auf Seite 36 findet sich diese Einstellung
Screenshot

@andig
Copy link
Member

andig commented Jan 3, 2025

Da ist Thor der master. Das ist nicht was wir brauchen. Ausserdem scheint ja das Elwa Template fast zu laufen- also muss Modbus Slave möglich sein.

@Lepidopteron
Copy link
Author

Aber wenn die AC-THOR Nummer >1 ist, wäre er doch als Slave einstellbar?

@andig
Copy link
Member

andig commented Jan 3, 2025

Es braucht eine Doku der Modbusregister. Ich mache zu bis die vorliegt.

@andig andig closed this as completed Jan 3, 2025
@Lepidopteron
Copy link
Author

@andig andig reopened this Jan 3, 2025
@andig
Copy link
Member

andig commented Jan 3, 2025

Das hilft. Der einzige Unterschied zur Elwa scheint das Leistungsregister zu sein- 1060 statt 1074?

@Lepidopteron
Copy link
Author

Lepidopteron commented Jan 8, 2025

Mit der Version v0.132.1 jetzt verfügbar, vielen Dank.
Mit folgenden Einstellungen kann die Ansteuerung erfolgen:

1. AC Thor: Steuerungs-Einstellungen

Ansteuerungs-Typ: Modbus TCP
Zeitablauf Ansteuerung: 1m

2. Einstellungen EVCC

meters:
 - name: ACThor
   type: template
   template: thor
   usage: aux
   host: 192.168.178.2 # IP-Adresse oder Hostname
chargers
 - name: heizstab
   type: template
   template: ac-thor
   modbus: tcpip
   id: 1
   host: 192.168.178.2 # IP-Adresse oder Hostname
   port: 502 # Port
loadpoints:
 - title: Heizstab # display name for UI
   charger: heizstab # Charger reference
   meter: ACThor # Used for temperature
   mode: pv # charge mode (off, now, minpv, pv)
   priority: 0
   enable:
    threshold: -200 # einschalten, wenn 1 Minute lang mindestens 200 W Uberschuss vorhanden ist
    delay: 1m
   disable:
    threshold: 200  # maximum import power (W)
    delay: 1m

Hier ein Beispiel mit einem 6kW Heizstab, der bisher nie mehr als 5kW geschafft hat ... ;-)
Screenshot 2025-01-08 at 07 59 26
Screenshot 2025-01-08 at 07 59 32

Ein Punkt, der nicht geht: Er liefert auch bei 'Off'/'Solar', wenn keine Sonnenenergie zur Verfügung steht die minimal mögliche Leistung. Das müsste egtl. '0' sein @andig ?
image

@andig
Copy link
Member

andig commented Jan 8, 2025

Ein Punkt, der nicht geht: Er liefert auch bei 'Off'/'Solar', wenn keine Sonnenenergie zur Verfügung steht die minimal mögliche Leistung. Das müsste egtl. '0' sein

Ich verstehe die Frage nicht. Falsche minCurrent am Ladepunkt?

@Lepidopteron
Copy link
Author

Ein Punkt, der nicht geht: Er liefert auch bei 'Off'/'Solar', wenn keine Sonnenenergie zur Verfügung steht die minimal mögliche Leistung. Das müsste egtl. '0' sein

Ich verstehe die Frage nicht. Falsche minCurrent am Ladepunkt?

Also, wenn der Toggle auf 'Off' steht bzw. auf 'Solar' und KEIN Überschuss besteht, müsste bei Power eigentlich '0.0 kW' stehen, er lädt aber mit 28-30Watt permanent.
minCurrent ist ja 0.125 oder größer. Geht es nicht, dass er gar nicht lädt, wenn er 'Off' ist?

@andig
Copy link
Member

andig commented Jan 8, 2025

Schau bitte ins Logfile. Für "aus" wird Register 1000 auf 0 gesetzt. Der Rest ist vmtl. Eigenverbrauch des Gerätes.

@Lepidopteron
Copy link
Author

Schau bitte ins Logfile. Für "aus" wird Register 1000 auf 0 gesetzt. Der Rest ist vmtl. Eigenverbrauch des Gerätes.

Habe folgendes in den Logs:

[lp-3 ] DEBUG 2025/01/08 23:00:41 pv charge current: 0A = 0A + -3.39A (779W @ 1p)
[lp-3 ] DEBUG 2025/01/08 23:00:41 projected site power 779W >= 200W disable threshold
[lp-3 ] DEBUG 2025/01/08 23:00:41 pv disable timer start: 1m0s
[lp-3 ] DEBUG 2025/01/08 23:00:41 pv disable in 1m0s
[lp-3 ] DEBUG 2025/01/08 23:00:41 max charge current: 0.125A
[lp-3 ] DEBUG 2025/01/08 23:00:50 charge power: 28W
[lp-3 ] DEBUG 2025/01/08 23:01:00 charge power: 29W
[lp-3 ] DEBUG 2025/01/08 23:01:10 charge power: 30W
[lp-3 ] DEBUG 2025/01/08 23:01:11 charger status: B
[lp-3 ] DEBUG 2025/01/08 23:01:11 pv charge current: 0A = 0A + -3.36A (772W @ 1p)
[lp-3 ] DEBUG 2025/01/08 23:01:11 projected site power 772W >= 200W disable threshold
[lp-3 ] DEBUG 2025/01/08 23:01:11 pv disable in 30s
[lp-3 ] DEBUG 2025/01/08 23:01:11 pv disable timer remaining: 30s
[lp-3 ] DEBUG 2025/01/08 23:01:20 charge power: 30W
[lp-3 ] DEBUG 2025/01/08 23:01:30 charge power: 29W
[lp-3 ] DEBUG 2025/01/08 23:01:40 charge power: 29W
[lp-3 ] DEBUG 2025/01/08 23:01:42 charger status: B
[lp-3 ] DEBUG 2025/01/08 23:01:42 pv charge current: 0A = 0A + -3.35A (770W @ 1p)
[lp-3 ] DEBUG 2025/01/08 23:01:42 projected site power 770W >= 200W disable threshold
[lp-3 ] DEBUG 2025/01/08 23:01:42 pv disable in 0s
[lp-3 ] DEBUG 2025/01/08 23:01:42 pv disable timer elapsed
[lp-3 ] DEBUG 2025/01/08 23:01:42 charger disable
[lp-3 ] DEBUG 2025/01/08 23:01:42 wake-up timer: stop
[lp-3 ] DEBUG 2025/01/08 23:01:50 charge power: 29W

@docolli
Copy link
Contributor

docolli commented Jan 10, 2025

Ich habe evcc auf 0.132.1 und jetzt meinen ACThor auch mal drüber eingerichtet.
Leider wird der ACThor nicht deaktiviert, wenn Mode=Off.
Ich habe ein Out of Sync und er geht immer wieder mal auf 1,2kW.
grafik
grafik
grafik

[ac-thor] TRACE 2025/01/10 11:27:23 modbus: send 01 21 00 00 00 06 01 03 03 eb 00 01
[ac-thor] TRACE 2025/01/10 11:27:23 modbus: recv 01 21 00 00 00 05 01 03 02 00 09
[lp-3 ] DEBUG 2025/01/10 11:27:23 charger status: B
[ac-thor] TRACE 2025/01/10 11:27:23 modbus: send 01 22 00 00 00 06 01 03 03 e9 00 01
[ac-thor] TRACE 2025/01/10 11:27:23 modbus: recv 01 22 00 00 00 05 01 03 02 01 f8
[ac-thor] TRACE 2025/01/10 11:27:23 modbus: send 01 23 00 00 00 06 01 03 03 e8 00 01
[ac-thor] TRACE 2025/01/10 11:27:23 modbus: recv 01 23 00 00 00 05 01 03 02 04 e2
[lp-3 ] WARN 2025/01/10 11:27:23 charger out of sync: expected disabled, got enabled
[lp-3 ] DEBUG 2025/01/10 11:27:23 charger enable
[ac-thor] TRACE 2025/01/10 11:27:23 modbus: send 01 24 00 00 00 09 01 10 03 e8 00 01 02 00 00
[ac-thor] TRACE 2025/01/10 11:27:23 modbus: recv 01 24 00 00 00 06 01 10 03 e8 00 01
[lp-3 ] DEBUG 2025/01/10 11:27:23 charger disable
[lp-3 ] DEBUG 2025/01/10 11:27:23 wake-up timer: stop
[lp-3 ] DEBUG 2025/01/10 11:27:33 charge power: 5W
[lp-3 ] DEBUG 2025/01/10 11:27:43 charge power: 5W
[ac-thor] TRACE 2025/01/10 11:27:43 modbus: send 01 25 00 00 00 06 01 03 03 e8 00 01
[ac-thor] TRACE 2025/01/10 11:27:43 modbus: recv 01 25 00 00 00 05 01 03 02 00 05
[ac-thor] TRACE 2025/01/10 11:27:43 modbus: send 01 26 00 00 00 09 01 10 03 e8 00 01 02 05 27
[ac-thor] TRACE 2025/01/10 11:27:43 modbus: recv 01 26 00 00 00 06 01 10 03 e8 00 01
[lp-3 ] DEBUG 2025/01/10 11:27:53 charge power: 1249W
[ac-thor] TRACE 2025/01/10 11:27:53 modbus: send 01 27 00 00 00 06 01 03 03 eb 00 01
[ac-thor] TRACE 2025/01/10 11:27:53 modbus: recv 01 27 00 00 00 05 01 03 02 00 09
[lp-3 ] DEBUG 2025/01/10 11:27:53 charger status: B
[ac-thor] TRACE 2025/01/10 11:27:53 modbus: send 01 28 00 00 00 06 01 03 03 e9 00 01
[ac-thor] TRACE 2025/01/10 11:27:53 modbus: recv 01 28 00 00 00 05 01 03 02 01 f7
[ac-thor] TRACE 2025/01/10 11:27:53 modbus: send 01 29 00 00 00 06 01 03 03 e8 00 01
[ac-thor] TRACE 2025/01/10 11:27:53 modbus: recv 01 29 00 00 00 05 01 03 02 04 e1
[lp-3 ] DEBUG 2025/01/10 11:28:03 charge power: 1246W
[lp-3 ] DEBUG 2025/01/10 11:28:13 charge power: 1255W
[ac-thor] TRACE 2025/01/10 11:28:13 modbus: send 01 2a 00 00 00 06 01 03 03 e8 00 01
[ac-thor] TRACE 2025/01/10 11:28:13 modbus: recv 01 2a 00 00 00 05 01 03 02 04 df
[ac-thor] TRACE 2025/01/10 11:28:13 modbus: send 01 2b 00 00 00 09 01 10 03 e8 00 01 02 05 27
[ac-thor] TRACE 2025/01/10 11:28:13 modbus: recv 01 2b 00 00 00 06 01 10 03 e8 00 01
[lp-3 ] DEBUG 2025/01/10 11:28:23 charge power: 1246W
[ac-thor] TRACE 2025/01/10 11:28:23 modbus: send 01 2c 00 00 00 06 01 03 03 eb 00 01
[ac-thor] TRACE 2025/01/10 11:28:23 modbus: recv 01 2c 00 00 00 05 01 03 02 00 09
[lp-3 ] DEBUG 2025/01/10 11:28:23 charger status: B
[ac-thor] TRACE 2025/01/10 11:28:23 modbus: send 01 2d 00 00 00 06 01 03 03 e9 00 01
[ac-thor] TRACE 2025/01/10 11:28:23 modbus: recv 01 2d 00 00 00 05 01 03 02 01 f7
[ac-thor] TRACE 2025/01/10 11:28:23 modbus: send 01 2e 00 00 00 06 01 03 03 e8 00 01
[ac-thor] TRACE 2025/01/10 11:28:23 modbus: recv 01 2e 00 00 00 05 01 03 02 04 de
[lp-3 ] WARN 2025/01/10 11:28:23 charger out of sync: expected disabled, got enabled
[lp-3 ] DEBUG 2025/01/10 11:28:23 charger enable 

@andig
Copy link
Member

andig commented Jan 10, 2025

Hättest Du nochmal mehr Log vorher? Ich frage mich schon, woher das

charger out of sync: expected disabled, got enabled

kommt?

@docolli
Copy link
Contributor

docolli commented Jan 10, 2025

Ich melde mich heute Abend nochmals.

Eventuell hilft aber das hier generell weiter:
https://www.offgridtec.com/media/product_attachements/my-PV_AC-ELWA-2_Documentation-of-controls.pdf

Ich habe übrigens den ACThor 9s. Und ein E3DC System, das den ACThor automatisch gefunden (und konfiguriert ?) hat und ich kann den dort nicht entfernen. Aber der ACThor sollte nur noch vom evcc System Modbus Befehle entgegen nehmen, das ist auf 192.168.1.50.

@andig
Copy link
Member

andig commented Jan 10, 2025

Es kann nur einer steuern!

@docolli
Copy link
Contributor

docolli commented Jan 10, 2025

Es kann nur einer steuern!

Schon klar! Im E3DC habe ich dazu wenigstens den Haken bei "aktiviert" rausgenommen, aber komplett entfernen kann ich dort den ACThor nicht. Daher denke ich schon, dass nur evcc den ACThor steuert.
Auch im ACThor habe ich die Ansteuerung zurückgesetzt. Er merkt sich ja die IP Adresse der Ansteuerung (erste IP mit einem Modbus Befehl nach zurücksetzen), ich gehe davon aus, dass er dann nur noch von dieser IP Befehle entgegennimmt.

@docolli
Copy link
Contributor

docolli commented Jan 10, 2025

So, jetzt hier mal mehr Log. Wenn du eine spezifische Nachricht suchst, sag Bescheid, dann schau ich nomals ins Log.

Schau ich den ACTHOR 9s per Webinterface an (Update alle 10s), so ändert sich der Status ständig, wenn evcc läuft.
Ist evcc beendet, bleibt der Status stabil auf 4 (keine Verbindung):
grafik

Frage ich die Register 1000 bis 1009 direkt per Modbus ab
grafik
sehe ich, dass 1003 (status) bei mir den Wert 7 zurück gibt, auch wenn im Webinterface im Status "0, standby" steht.

Setze ich eine Leistung (100W) in Register 1000, so ändert sich der Status auf den Wert 9
grafik
Im Webinterface steht dann "1, Heizen".

Das Heizen hört aber nach ~60s auf, der Wert von Register 1000 fällt erst auf 5 und dann nach einigen weiteren Sekunden auf 0 ab. Muss die Heizleistung immer wieder zyklisch in Register 1000 geschrieben werden?
Ist der Timeout dazu der Wert hier?
grafik
Dann muss die Zeit in der evcc den Wert neu beschreibt und die im ACTHOR eingetragene Zeit zueinander passen, also im ACTHOR sollte ein größerer Wert stehen, als evcc braucht einen neuen Wert zu schreiben.

Edit: Ist es möglich, dass der Code in charger/mypv.go den Status des ACTHOR 9s nicht korrekt erkennt? Dort wird auf 2 geprüft (soweit ich den go-code verstehe) hier kommt aber 7 bzw. 9 zurück.

Hinweis: Das folgende Log ist im Modus "Off" aufgezeichnet worden.

[lp-3 ] DEBUG 2025/01/10 15:08:03 charger enable
[ac-thor] TRACE 2025/01/10 15:08:03 modbus: send 0a 8c 00 00 00 09 01 10 03 e8 00 01 02 00 00
[ac-thor] TRACE 2025/01/10 15:08:03 modbus: recv 0a 8c 00 00 00 06 01 10 03 e8 00 01
[lp-3 ] DEBUG 2025/01/10 15:08:03 charger disable
[lp-3 ] DEBUG 2025/01/10 15:08:03 wake-up timer: stop
[lp-3 ] DEBUG 2025/01/10 15:08:13 charge power: 5W
[ac-thor] TRACE 2025/01/10 15:08:13 modbus: send 0a 8d 00 00 00 06 01 03 03 e8 00 01
[ac-thor] TRACE 2025/01/10 15:08:13 modbus: recv 0a 8d 00 00 00 05 01 03 02 00 05
[ac-thor] TRACE 2025/01/10 15:08:13 modbus: send 0a 8e 00 00 00 09 01 10 03 e8 00 01 02 00 1c
[ac-thor] TRACE 2025/01/10 15:08:13 modbus: recv 0a 8e 00 00 00 06 01 10 03 e8 00 01
[lp-3 ] DEBUG 2025/01/10 15:08:23 charge power: 31W
[lp-3 ] DEBUG 2025/01/10 15:08:33 charge power: 5W
[ac-thor] TRACE 2025/01/10 15:08:33 modbus: send 0a 8f 00 00 00 06 01 03 03 eb 00 01
[ac-thor] TRACE 2025/01/10 15:08:33 modbus: recv 0a 8f 00 00 00 05 01 03 02 00 09
[lp-3 ] DEBUG 2025/01/10 15:08:33 charger status: B
[ac-thor] TRACE 2025/01/10 15:08:33 modbus: send 0a 90 00 00 00 06 01 03 03 e9 00 01
[ac-thor] TRACE 2025/01/10 15:08:33 modbus: recv 0a 90 00 00 00 05 01 03 02 02 0d
[ac-thor] TRACE 2025/01/10 15:08:33 modbus: send 0a 91 00 00 00 06 01 03 03 e8 00 01
[ac-thor] TRACE 2025/01/10 15:08:33 modbus: recv 0a 91 00 00 00 05 01 03 02 00 05
[lp-3 ] DEBUG 2025/01/10 15:08:43 charge power: 5W
[ac-thor] TRACE 2025/01/10 15:08:43 modbus: send 0a 92 00 00 00 06 01 03 03 e8 00 01
[ac-thor] TRACE 2025/01/10 15:08:43 modbus: recv 0a 92 00 00 00 05 01 03 02 00 05
[ac-thor] TRACE 2025/01/10 15:08:43 modbus: send 0a 93 00 00 00 09 01 10 03 e8 00 01 02 00 1c
[ac-thor] TRACE 2025/01/10 15:08:43 modbus: recv 0a 93 00 00 00 06 01 10 03 e8 00 01
[lp-3 ] DEBUG 2025/01/10 15:08:53 charge power: 36W
[lp-3 ] DEBUG 2025/01/10 15:09:03 charge power: 5W
[ac-thor] TRACE 2025/01/10 15:09:03 modbus: send 0a 94 00 00 00 06 01 03 03 eb 00 01
[ac-thor] TRACE 2025/01/10 15:09:03 modbus: recv 0a 94 00 00 00 05 01 03 02 00 09
[lp-3 ] DEBUG 2025/01/10 15:09:03 charger status: B
[ac-thor] TRACE 2025/01/10 15:09:03 modbus: send 0a 95 00 00 00 06 01 03 03 e9 00 01
[ac-thor] TRACE 2025/01/10 15:09:03 modbus: recv 0a 95 00 00 00 05 01 03 02 02 0d
[ac-thor] TRACE 2025/01/10 15:09:03 modbus: send 0a 96 00 00 00 06 01 03 03 e8 00 01
[ac-thor] TRACE 2025/01/10 15:09:03 modbus: recv 0a 96 00 00 00 05 01 03 02 00 05
[ac-thor] TRACE 2025/01/10 15:09:13 modbus: send 0a 97 00 00 00 06 01 03 03 e8 00 01
[ac-thor] TRACE 2025/01/10 15:09:13 modbus: recv 0a 97 00 00 00 05 01 03 02 00 05
[ac-thor] TRACE 2025/01/10 15:09:13 modbus: send 0a 98 00 00 00 09 01 10 03 e8 00 01 02 00 1c
[ac-thor] TRACE 2025/01/10 15:09:13 modbus: recv 0a 98 00 00 00 06 01 10 03 e8 00 01
[lp-3 ] DEBUG 2025/01/10 15:09:14 charge power: 5W
[lp-3 ] DEBUG 2025/01/10 15:09:23 charge power: 36W
[lp-3 ] DEBUG 2025/01/10 15:09:33 charge power: 5W
[ac-thor] TRACE 2025/01/10 15:09:33 modbus: send 0a 99 00 00 00 06 01 03 03 eb 00 01
[ac-thor] TRACE 2025/01/10 15:09:33 modbus: recv 0a 99 00 00 00 05 01 03 02 00 09
[lp-3 ] DEBUG 2025/01/10 15:09:33 charger status: B
[ac-thor] TRACE 2025/01/10 15:09:33 modbus: send 0a 9a 00 00 00 06 01 03 03 e9 00 01
[ac-thor] TRACE 2025/01/10 15:09:33 modbus: recv 0a 9a 00 00 00 05 01 03 02 02 0d
[ac-thor] TRACE 2025/01/10 15:09:33 modbus: send 0a 9b 00 00 00 06 01 03 03 e8 00 01
[ac-thor] TRACE 2025/01/10 15:09:33 modbus: recv 0a 9b 00 00 00 05 01 03 02 00 05
[lp-3 ] WARN 2025/01/10 15:09:33 charger out of sync: expected disabled, got enabled
[lp-3 ] DEBUG 2025/01/10 15:09:33 charger enable
[ac-thor] TRACE 2025/01/10 15:09:33 modbus: send 0a 9c 00 00 00 09 01 10 03 e8 00 01 02 00 00
[ac-thor] TRACE 2025/01/10 15:09:33 modbus: recv 0a 9c 00 00 00 06 01 10 03 e8 00 01
[lp-3 ] DEBUG 2025/01/10 15:09:33 charger disable
[lp-3 ] DEBUG 2025/01/10 15:09:33 wake-up timer: stop
[lp-3 ] DEBUG 2025/01/10 15:09:43 charge power: 5W
[ac-thor] TRACE 2025/01/10 15:09:43 modbus: send 0a 9d 00 00 00 06 01 03 03 e8 00 01
[ac-thor] TRACE 2025/01/10 15:09:43 modbus: recv 0a 9d 00 00 00 05 01 03 02 00 05
[ac-thor] TRACE 2025/01/10 15:09:43 modbus: send 0a 9e 00 00 00 09 01 10 03 e8 00 01 02 00 1c
[ac-thor] TRACE 2025/01/10 15:09:43 modbus: recv 0a 9e 00 00 00 06 01 10 03 e8 00 01
[lp-3 ] DEBUG 2025/01/10 15:09:53 charge power: 30W
[lp-3 ] DEBUG 2025/01/10 15:10:03 charge power: 5W
[ac-thor] TRACE 2025/01/10 15:10:03 modbus: send 0a 9f 00 00 00 06 01 03 03 eb 00 01
[ac-thor] TRACE 2025/01/10 15:10:03 modbus: recv 0a 9f 00 00 00 05 01 03 02 00 09
[lp-3 ] DEBUG 2025/01/10 15:10:03 charger status: B
[ac-thor] TRACE 2025/01/10 15:10:03 modbus: send 0a a0 00 00 00 06 01 03 03 e9 00 01
[ac-thor] TRACE 2025/01/10 15:10:03 modbus: recv 0a a0 00 00 00 05 01 03 02 02 0e
[ac-thor] TRACE 2025/01/10 15:10:03 modbus: send 0a a1 00 00 00 06 01 03 03 e8 00 01
[ac-thor] TRACE 2025/01/10 15:10:03 modbus: recv 0a a1 00 00 00 05 01 03 02 00 05
[lp-3 ] DEBUG 2025/01/10 15:10:13 charge power: 5W
[ac-thor] TRACE 2025/01/10 15:10:13 modbus: send 0a a2 00 00 00 06 01 03 03 e8 00 01
[ac-thor] TRACE 2025/01/10 15:10:13 modbus: recv 0a a2 00 00 00 05 01 03 02 00 05
[ac-thor] TRACE 2025/01/10 15:10:13 modbus: send 0a a3 00 00 00 09 01 10 03 e8 00 01 02 00 1c
[ac-thor] TRACE 2025/01/10 15:10:13 modbus: recv 0a a3 00 00 00 06 01 10 03 e8 00 01
[lp-3 ] DEBUG 2025/01/10 15:10:23 charge power: 34W
[lp-3 ] DEBUG 2025/01/10 15:10:33 charge power: 5W
[ac-thor] TRACE 2025/01/10 15:10:33 modbus: send 0a a4 00 00 00 06 01 03 03 eb 00 01
[ac-thor] TRACE 2025/01/10 15:10:33 modbus: recv 0a a4 00 00 00 05 01 03 02 00 09
[lp-3 ] DEBUG 2025/01/10 15:10:33 charger status: B
[ac-thor] TRACE 2025/01/10 15:10:33 modbus: send 0a a5 00 00 00 06 01 03 03 e9 00 01
[ac-thor] TRACE 2025/01/10 15:10:33 modbus: recv 0a a5 00 00 00 05 01 03 02 02 0d
[ac-thor] TRACE 2025/01/10 15:10:33 modbus: send 0a a6 00 00 00 06 01 03 03 e8 00 01
[ac-thor] TRACE 2025/01/10 15:10:33 modbus: recv 0a a6 00 00 00 05 01 03 02 00 05
[lp-3 ] DEBUG 2025/01/10 15:10:43 charge power: 5W
[ac-thor] TRACE 2025/01/10 15:10:43 modbus: send 0a a7 00 00 00 06 01 03 03 e8 00 01
[ac-thor] TRACE 2025/01/10 15:10:43 modbus: recv 0a a7 00 00 00 05 01 03 02 00 05
[ac-thor] TRACE 2025/01/10 15:10:43 modbus: send 0a a8 00 00 00 09 01 10 03 e8 00 01 02 00 1c
[ac-thor] TRACE 2025/01/10 15:10:43 modbus: recv 0a a8 00 00 00 06 01 10 03 e8 00 01
[lp-3 ] DEBUG 2025/01/10 15:10:53 charge power: 32W
[lp-3 ] DEBUG 2025/01/10 15:11:03 charge power: 5W
[ac-thor] TRACE 2025/01/10 15:11:03 modbus: send 0a a9 00 00 00 06 01 03 03 eb 00 01
[ac-thor] TRACE 2025/01/10 15:11:03 modbus: recv 0a a9 00 00 00 05 01 03 02 00 09
[lp-3 ] DEBUG 2025/01/10 15:11:03 charger status: B
[ac-thor] TRACE 2025/01/10 15:11:03 modbus: send 0a aa 00 00 00 06 01 03 03 e9 00 01
[ac-thor] TRACE 2025/01/10 15:11:03 modbus: recv 0a aa 00 00 00 05 01 03 02 02 0e
[ac-thor] TRACE 2025/01/10 15:11:03 modbus: send 0a ab 00 00 00 06 01 03 03 e8 00 01
[ac-thor] TRACE 2025/01/10 15:11:03 modbus: recv 0a ab 00 00 00 05 01 03 02 00 05
[lp-3 ] WARN 2025/01/10 15:11:03 charger out of sync: expected disabled, got enabled
[lp-3 ] DEBUG 2025/01/10 15:11:03 charger enable 

@andig
Copy link
Member

andig commented Jan 10, 2025

sehe ich, dass 1003 (status) bei mir den Wert 7 zurück gibt, auch wenn im Webinterface im Status "0, standby" steht.
Setze ich eine Leistung (100W) in Register 1000, so ändert sich der Status auf den Wert 9

evcc behandelt Status 2 als "laden". Sonst verbunden. Scheint als würde Thor ein anderes Mapping als die Elwa erfordern? Welches?

Edit: Ist es möglich, dass der Code in charger/mypv.go den Status des ACTHOR 9s nicht korrekt erkennt? Dort wird auf 2 geprüft (soweit ich den go-code verstehe) hier kommt aber 7 bzw. 9 zurück.

Gut möglich.

Das Heizen hört aber nach ~60s auf, der Wert von Register 1000 fällt erst auf 5 und dann nach einigen weiteren Sekunden auf 0 ab. Muss die Heizleistung immer wieder zyklisch in Register 1000 geschrieben werden?

Register 1000 wird alle 30s geschrieben solange der Ladepunkt enabled ist.

Fazit: wir brauchen wohl doch nochmal eine Doku der Register!

@docolli
Copy link
Contributor

docolli commented Jan 10, 2025

Bin dran...

Habe in Register 1000 eine Last von 8000W gesetzt und dann die Register 1000 bis 1079 ausgelesen. Der ACTHOR 9s hat 3 Ausgänge á 3000W. Das von Dir aktuell genutzte Register 1074 gibt nur den Wert für einen dieser Ausgänge zurück!

Edit: Und den Wert von Register 1060 kann ich auch nicht richtig mit der von mir gesetzten Leistung korrellieren...

grafik
grafik

Register 1000 gibt nach dem Schreiben lesend die Gesamtleistung zurück. Solange bis der Wert in "Zeitablauf Ansteuerung" abgelaufen ist, dann fällt die Leistung auf 0W ab. Standardmäßig sind das 10s, dieser Wert muss mindestens auf die 30s gesetzt werden, in der evcc die Werte neu schreibt. Am besten 60s nehmen, dann ist man auf der sicheren Seite.

Die Register 1074/1075/1076 geben die Leistungswerte der einzelnen Ausgänge (Phasen) zurück. Also entweder alle 3 auslesen, oder warum nicht zyklisch Register 1000 lesen und die aktuelle Gesamtleistung bekommen? Das sollte, wenn ich die Doku richtig verstehe, mit allen MyPV Komponenten funktionieren, egal ob 1p oder 3p Geräte.

Hast du schon Zeit gehabt dir dieses Dokument anzusehen? Dort ist eine gute Doku der Modbus Register der MyPV Serie.
https://www.offgridtec.com/media/product_attachements/my-PV_AC-ELWA-2_Documentation-of-controls.pdf

@andig
Copy link
Member

andig commented Jan 11, 2025

Die Elwa Doku nutzt nichts- der funktioniert ja. Und deckt z.B. 1074/75/76 auch nicht ab.

Und den Wert von Register 1060 kann ich auch nicht richtig mit der von mir gesetzten Leistung korrellieren

Das war das Register das mir genannt wurde. Ansonsten sieht du in mypv.go ja welche Register verwendet werden. Einfach anpassen bis es passt. Ich kann hier mangels Testobjekt nur nach Vorgabe arbeiten.

@walburgf
Copy link

walburgf commented Jan 11, 2025

Hier ist die Liste der Modbus Register, die der AC Thor und AC Thor 9s nutzt.
Documentation-Controls_AC-THOR_AC-THOR 9s_EN241205.pdf

Beim Status haben die Thors folgende Bedeutungen:
0….. Off
1-8… device start-up
9… operation
>=200 Error states power stage

Weiterhin kann man beim AC Thor 9s 1-3 Heizstäbe anschliessen mit 1-3 Temperaturfühlern. Die Anzahl der Temp-Fühler muss nicht gleich der Anzahl der Heizstäbe sein.
Die Temperaturfühler haben die Modbus Register 1001, 1030 und 1031
Da evcc momentan nur 1 Temperatur (= SOC) handeln kann nutze ich bisher eine manuelle Charger Config wo ich aus den 3 Temperaturen eine Median Temperatur ermittle, die ich aus dem Json vom Thor errechne. Das kann man natürlich auch per Modbus auslesen.
Dazu verwende ich folgende Formel:
jq: "[.temp1, .temp2, .temp3] | map(. | select (. != null)) | add / length" # parse response json, get the median temperature
Das wäre ein Vorschlag meinerseits... tbd.
Man kann natürlich über evcc auch alle 3 Temperaturen als 3 SOCs darstellen, die jeweils mit einem Limit versehen werden könnten, aber ich denke das ist erstens Aufwand und zweitens bringt das auch nicht wirklich viel.....

@andig
Copy link
Member

andig commented Jan 11, 2025

Danke! Danach is 1060 die aktuelle Leistung, 1000 scheint weiterhin die VORGABEleistung zu sein.

Die Temperaturfühler haben die Modbus Register 1001, 1030 und 1031

Kann man ermitteln, welche der 3 jeweils relevant sind? Andererseits: auch der Mittelwert ist ja eher falsch. Theoretisch könnten das sogar 3 einzelne Speicher sein???

Status: bei der Elwa ist 2==Heat. Was bedeutet die 9==Operation beim Thor? Operation = Heizbetrieb? Falls nein: woran erkennen wir Heizbetrieb (Status C)?

@Lepidopteron
Copy link
Author

Noch eine Info zum Verhalten von Register 1003 beim Setzen von "0" in Register 1000, also Abschalten des Heizstabs (erster Befehl im Log). evcc läuft hier NICHT, ich habe nur die Kontrolle über den AC THOR per Modbus Master. Hier das Log vom Modbus Master, ich lese die Register 1000 bis 1003 in einem Rutsch. Man sieht, dass die 03 c3 (=963W) rasch auf 00 05 (=5W) abfallen, aber der Status bleibt lange auf 00 09 (ganz hinten). Dann geht der Status für ein paar Sekunden auf 00 ca bis er endlich auf 00 07 abfällt.

Hat evcc damit ein Problem, dass nach Abschalten (setzen von Leistung 0) es noch >30s dauert, bis der Status vom AC THOR endlich von 9 auf 7 geht?

>18:16:31: TX: 01 03 00 00 00 06 ff 06 03 e8 00 00 
>18:16:31: RX: 01 03 00 00 00 06 ff 06 03 e8 00 00 
>18:16:31: Write succeeded: Function code:6
>18:16:31: TX: 01 04 00 00 00 06 ff 03 03 e8 00 04 
>18:16:31: RX: 01 04 00 00 00 0b ff 03 08 03 c3 02 13 02 58 00 09 
>18:16:31: Read succeeded: Function code:3.
>18:16:33: TX: 01 05 00 00 00 06 ff 03 03 e8 00 04 
>18:16:33: RX: 01 05 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:33: Read succeeded: Function code:3.
>18:16:34: TX: 01 06 00 00 00 06 ff 03 03 e8 00 04 
>18:16:34: RX: 01 06 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:34: Read succeeded: Function code:3.
>18:16:35: TX: 01 07 00 00 00 06 ff 03 03 e8 00 04 
>18:16:35: RX: 01 07 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:35: Read succeeded: Function code:3.
>18:16:36: TX: 01 08 00 00 00 06 ff 03 03 e8 00 04 
>18:16:36: RX: 01 08 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:36: Read succeeded: Function code:3.
>18:16:37: TX: 01 09 00 00 00 06 ff 03 03 e8 00 04 
>18:16:37: RX: 01 09 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:37: Read succeeded: Function code:3.
>18:16:38: TX: 01 0a 00 00 00 06 ff 03 03 e8 00 04 
>18:16:38: RX: 01 0a 00 00 00 0b ff 03 08 00 04 02 13 02 58 00 09 
>18:16:38: Read succeeded: Function code:3.
>18:16:39: TX: 01 0b 00 00 00 06 ff 03 03 e8 00 04 
>18:16:39: RX: 01 0b 00 00 00 0b ff 03 08 00 04 02 13 02 58 00 09 
>18:16:39: Read succeeded: Function code:3.
>18:16:40: TX: 01 0c 00 00 00 06 ff 03 03 e8 00 04 
>18:16:40: RX: 01 0c 00 00 00 0b ff 03 08 00 06 02 13 02 58 00 09 
>18:16:40: Read succeeded: Function code:3.
>18:16:41: TX: 01 0d 00 00 00 06 ff 03 03 e8 00 04 
>18:16:41: RX: 01 0d 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:41: Read succeeded: Function code:3.
>18:16:42: TX: 01 0e 00 00 00 06 ff 03 03 e8 00 04 
>18:16:42: RX: 01 0e 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:42: Read succeeded: Function code:3.
>18:16:43: TX: 01 0f 00 00 00 06 ff 03 03 e8 00 04 
>18:16:43: RX: 01 0f 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:43: Read succeeded: Function code:3.
>18:16:44: TX: 01 10 00 00 00 06 ff 03 03 e8 00 04 
>18:16:44: RX: 01 10 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:44: Read succeeded: Function code:3.
>18:16:45: TX: 01 11 00 00 00 06 ff 03 03 e8 00 04 
>18:16:45: RX: 01 11 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:45: Read succeeded: Function code:3.
>18:16:46: TX: 01 12 00 00 00 06 ff 03 03 e8 00 04 
>18:16:46: RX: 01 12 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:46: Read succeeded: Function code:3.
>18:16:47: TX: 01 13 00 00 00 06 ff 03 03 e8 00 04 
>18:16:47: RX: 01 13 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:47: Read succeeded: Function code:3.
>18:16:48: TX: 01 14 00 00 00 06 ff 03 03 e8 00 04 
>18:16:48: RX: 01 14 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:48: Read succeeded: Function code:3.
>18:16:49: TX: 01 15 00 00 00 06 ff 03 03 e8 00 04 
>18:16:49: RX: 01 15 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:49: Read succeeded: Function code:3.
>18:16:50: TX: 01 16 00 00 00 06 ff 03 03 e8 00 04 
>18:16:50: RX: 01 16 00 00 00 0b ff 03 08 00 04 02 13 02 58 00 09 
>18:16:50: Read succeeded: Function code:3.
>18:16:51: TX: 01 17 00 00 00 06 ff 03 03 e8 00 04 
>18:16:51: RX: 01 17 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:51: Read succeeded: Function code:3.
>18:16:52: TX: 01 18 00 00 00 06 ff 03 03 e8 00 04 
>18:16:52: RX: 01 18 00 00 00 0b ff 03 08 00 06 02 13 02 58 00 09 
>18:16:52: Read succeeded: Function code:3.
>18:16:53: TX: 01 19 00 00 00 06 ff 03 03 e8 00 04 
>18:16:53: RX: 01 19 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:53: Read succeeded: Function code:3.
>18:16:54: TX: 01 1a 00 00 00 06 ff 03 03 e8 00 04 
>18:16:54: RX: 01 1a 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:54: Read succeeded: Function code:3.
>18:16:55: TX: 01 1b 00 00 00 06 ff 03 03 e8 00 04 
>18:16:55: RX: 01 1b 00 00 00 0b ff 03 08 00 05 02 14 02 58 00 09 
>18:16:55: Read succeeded: Function code:3.
>18:16:56: TX: 01 1c 00 00 00 06 ff 03 03 e8 00 04 
>18:16:56: RX: 01 1c 00 00 00 0b ff 03 08 00 05 02 14 02 58 00 09 
>18:16:56: Read succeeded: Function code:3.
>18:16:57: TX: 01 1d 00 00 00 06 ff 03 03 e8 00 04 
>18:16:57: RX: 01 1d 00 00 00 0b ff 03 08 00 05 02 14 02 58 00 09 
>18:16:57: Read succeeded: Function code:3.
>18:16:58: TX: 01 1e 00 00 00 06 ff 03 03 e8 00 04 
>18:16:58: RX: 01 1e 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:58: Read succeeded: Function code:3.
>18:16:59: TX: 01 1f 00 00 00 06 ff 03 03 e8 00 04 
>18:16:59: RX: 01 1f 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:16:59: Read succeeded: Function code:3.
>18:17:00: TX: 01 20 00 00 00 06 ff 03 03 e8 00 04 
>18:17:00: RX: 01 20 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:17:00: Read succeeded: Function code:3.
>18:17:01: TX: 01 21 00 00 00 06 ff 03 03 e8 00 04 
>18:17:01: RX: 01 21 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:17:01: Read succeeded: Function code:3.
>18:17:02: TX: 01 22 00 00 00 06 ff 03 03 e8 00 04 
>18:17:02: RX: 01 22 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:17:02: Read succeeded: Function code:3.
>18:17:03: TX: 01 23 00 00 00 06 ff 03 03 e8 00 04 
>18:17:03: RX: 01 23 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:17:03: Read succeeded: Function code:3.
>18:17:04: TX: 01 24 00 00 00 06 ff 03 03 e8 00 04 
>18:17:04: RX: 01 24 00 00 00 0b ff 03 08 00 05 02 13 02 58 00 09 
>18:17:04: Read succeeded: Function code:3.
>18:17:05: TX: 01 25 00 00 00 06 ff 03 03 e8 00 04 
>18:17:05: RX: 01 25 00 00 00 0b ff 03 08 00 01 02 13 02 58 00 ca 
>18:17:05: Read succeeded: Function code:3.
>18:17:06: TX: 01 26 00 00 00 06 ff 03 03 e8 00 04 
>18:17:06: RX: 01 26 00 00 00 0b ff 03 08 00 01 02 13 02 58 00 ca 
>18:17:06: Read succeeded: Function code:3.
>18:17:07: TX: 01 27 00 00 00 06 ff 03 03 e8 00 04 
>18:17:07: RX: 01 27 00 00 00 0b ff 03 08 00 00 02 13 02 58 00 ca 
>18:17:07: Read succeeded: Function code:3.
>18:17:08: TX: 01 28 00 00 00 06 ff 03 03 e8 00 04 
>18:17:08: RX: 01 28 00 00 00 0b ff 03 08 00 00 02 13 02 58 00 ca 
>18:17:08: Read succeeded: Function code:3.
>18:17:09: TX: 01 29 00 00 00 06 ff 03 03 e8 00 04 
>18:17:09: RX: 01 29 00 00 00 0b ff 03 08 00 00 02 13 02 58 00 ca 
>18:17:09: Read succeeded: Function code:3.
>18:17:10: TX: 01 2a 00 00 00 06 ff 03 03 e8 00 04 
>18:17:10: RX: 01 2a 00 00 00 0b ff 03 08 00 00 02 13 02 58 00 07 
>18:17:10: Read succeeded: Function code:3.
>18:17:11: TX: 01 2b 00 00 00 06 ff 03 03 e8 00 04 
>18:17:11: RX: 01 2b 00 00 00 0b ff 03 08 00 00 02 13 02 58 00 07 
>18:17:11: Read succeeded: Function code:3.
>18:17:12: TX: 01 2c 00 00 00 06 ff 03 03 e8 00 04 
>18:17:12: RX: 01 2c 00 00 00 0b ff 03 08 00 00 02 13 02 58 00 07 
>18:17:12: Read succeeded: Function code:3.

Offtopic: Aber wie kann ich denn auf den Modbus einen Registerwert setzen und explizit auslesen? :)

@walburgf
Copy link

irgendwie funktioniert das Laden mit dem AC Thor 9s noch nicht korrekt.

Ich habe mal einen Film gedreht, bei dem ich parallel die Anzeige im AC Thor 9s, die evcc Oberfläche und die Inhalte der Register (in Home Assistant) aufgezeichnet habe.

Aufzeichnung.2025-01-12.120747.kompr.mp4

Ich habe in evcc den AC Thor vom Status "Aus" auf "Schnell" geändert. Meine Erwartung war nun, dass das Laden mit voller Leistung durchgeführt wird.
Man sieht auch im MyPV Fenster, dass die volle Leistung am Heizstab ankommt. Der Status (Reg. 1003) geht auch auf 9.
Danach alterniert jedoch die Leistung am AC Thor immer zwischen Maximalleistung und 5W hin und her. Dies heisst für mich, dass die Steuerung durch evcc noch nicht richtig funktioniert.

Nach Beendigung des Videos habe ich in evcc den AC Thor wieder auf "Aus" gestellt. Nun hat das Laden jedoch nicht gestoppt, sondern hat weiterhin zwischen Max-Leistung und 5W alterniert. Ich musste den Heizstab in der MyPV Oberfläche deaktivieren. Erst dann hat evcc erkannt, dass der Heizstab aus ist. Anscheinend sendet evcc keine Leistungsvorgabe 0W an den AC Thor...

@andig
Copy link
Member

andig commented Jan 12, 2025

Dies heisst für mich, dass die Steuerung durch evcc noch nicht richtig funktioniert.

Du siehst im trace log, welche Register geschrieben werden.

Ich denke das Problem hier ist wiefolgt: der Thor (anscheinend entgegen der Elwa) zeigt auf 1000 die echte Leistung an- das inkludiert auch den Standbyverbrauch. Die 1000 nutzen wir aber auch um zu schauen ob der Thor "enabled" ist, dafür wird mit 0 verglichen. Wenn da aber keine 0 kommt obwohl evcc eine rein geschrieben hat wirds schwierig... Das kann man dann im Logfile nachlesen...

Long story short: an welchem Register kann man ablesen, ob der Thor eine Ladefreigabe hat? Bei der Elwa scheint 1000=0 zu kommen und damit ist klar "keine Ladefreigabe". Wo sehen wir das beim Thor?

@walburgf
Copy link

was meinst Du mit Ladefreigabe?
Es soll immer geladen werden, solange "actual Soc" < "Soc Limit", d.h. die Temperatur im Speicher noch nicht die max. Temperatur erreicht hat. Das liest Du ja aus den Registern 1001 (Temp1) und 1002 (max Temp) aus.
im Modus PV soll dann der Überschuss in Register 1000 geschrieben werden, im Modus Schnell die durch maxcurrent definierte Leistung.
Beim AC Thor 9s, der 3 Temperaturfühler haben kann, sollte der "actual Soc" der Mittelwert der angeschlossenen Temperaturfühler sein.
Zusätzlich kann man im Status Register (1003) sehen, dass der AC Thor auf das Laden wartet (1 bis 8) oder heizt (9)

@pvssch
Copy link

pvssch commented Jan 12, 2025

Die "Ladefreigabe" müsste beim AC Thor9s das Register 1081 sein

Documentation-Controls_AC-THOR_AC-THOR 9s_EN231009.pdf

Die echte Leistung kommt von 1000

@andig
Copy link
Member

andig commented Jan 12, 2025

müsste

Bitte testen. Ich hab keine Lust mehr, dass noch 40 mal in beliebige Richtungen zu ändern, tut mir leid... Wenn ihr euch auf die richtigen Register geeinigt habt mache ich noch einen letzten Versuch.

@walburgf
Copy link

hab's gerade getestet.
Device State (1081) = 1 bedeutet, dass der AC Thor 9s angeschaltet ist und Kommandos empfangen kann.
Device State (1081) = 0 bedeutet, dass der AC Thor 9s ausgeschaltet ist und keine Kommandos entgegennimmt.
In der Regel ist ein AC Thor immer eingeschaltet, da er ja darauf "wartet" Leistungsvorgaben zu erhalten, um die Heizstäbe dann zu steuern. Wenn Device state = 0, kann evcc den AC THor ignorieren.
Bei Device state = 1 sollte die Regelung so laufen wie hier beschrieben

@docolli
Copy link
Contributor

docolli commented Jan 12, 2025

Bei mir ist das Register 1081 aber auch auf "1", wenn die Leistung im Register 1000 auf "0" ist. Das ist nicht das was wir hier suchen! Es geht um eine Rückmeldung vom AC Thor ob er gerade heizt oder nicht. Also analog zum Status einer Wallbox.

Meiner Meinung nach ist das Register 1003 die bessere Info zum Status. Leider ändert sich der Wert nach Schreiben von 0W ins Register 1000 erst nach >30s. Und auch der Wert von Register 1000 ist nach Schreiben von "0" erstmal eine ganze Weile bei 5W (vermutlich Standbyverbrauch) bis er nach >30s auf "0" abfällt.
evcc scheint aber nur 0W als "Status B" zu erkennen.
Könnte es helfen im Code für den AC Thor das Limit auf z.B. 10W hochzusetzen, also Verbrauch <10W ist Status B?

A= nicht verbunden
B= verbunden, nicht ladend
C= ladend

@andig
Copy link
Member

andig commented Jan 12, 2025

@docolli es geht um enable/disable, nicht um lädt/lädt nicht. Wenn Temperatur erreicht ist mag das also richtig sein mit 1081.

@walburgf
Copy link

Da Heizstäbe analoge Systeme sind, dauert es immer etwas bis sich Werte stabilisieren....

StatusC: Register 1003 = 9
StatusB: Register 1003 = 1 bis 8

@walburgf
Copy link

meiner Meinung nach ist der AC Thor9s ist immer enabled, wenn das Register 1081 auf 1 steht...

@andig
Copy link
Member

andig commented Jan 12, 2025

Laut deinem Post ja. Hilft also nicht.

@docolli
Copy link
Contributor

docolli commented Jan 12, 2025

@andig Was ist denn beim Heizstab der Unterschied zwischen enable/disable und heizt/heizt nicht?

Den AC THOR enablest du, indem du einen Wert >0 ins Register 1000 schreibst, dann heizt er. Register 1003 geht dann auf "9"
Zum disablen schreibst du "0" (Watt) ins Register 1000, dann hört er auf zu heizen, verharrt aber noch 30s auf im Register 1000 auf 5W und erst dann geht Register 1003 auf 7 zurück und Register 1000 auf 0.

grafik

Hinter dem Register 1000 steckt eine Regelung der Heizleistung. Schreiben ändert nur den Sollwert der Regelung und es dauert etwas bis der Istwert den Sollwert erreicht. Gerade bei Disablen durch Schreiben von "0". Also entweder mehr Wartezeit (>30s) bis der Status aus 1003 ausgewertet wird, oder bereits unter 10W die Heizung als deaktiviert ansehen.
ÜBRIGENS: 10W kann man nicht einstellen. Schreibe ich 10 ins Register 1000, so heizt er mit ~20W.
grafik

@andig
Copy link
Member

andig commented Jan 12, 2025

Alles schon 1000mal erklärt. Ladefreigabe beim Fahrzeug ist unabhängig davon, ob der Akku voll ist und damit ob wirklich geladen wird. Ist hier auch nicht anders. Es sind einfach unterschiedliche Dinge.

@andig
Copy link
Member

andig commented Jan 12, 2025

Wenns kein passwndes ein/aus Register gibt dann müssen wir uns den enable state halt merken.

@docolli
Copy link
Contributor

docolli commented Jan 12, 2025

Mein Sensor hat aktuell ~52°C, ich habe die max. Heiztemp herunter gesetzt auf 50°C. Selbst dann bleibt Register 1081 auf "1". Das Register zeigt nur, ob der AC THOR bereit ist Kommandos zu empfangen.
ABER:
Wenn ich dann z.B. "2500"(W) ins Register 1000 schreibe, und gleich danach wieder auslese, dann bleibt es auf "0". Der Heizstab bleibt also wie erwartet aus (disabled).
grafik

@walburgf
Copy link

Register 1081 hängt mit diesem Schalter des AC Thor zusamen:
Er aktiviert/deaktiviert den AC THor generell....

image

Ich denke die Steuerung des AC Thor sollte nur über die Temperaturen (1001, 1030, 1031) und das Register 1000 und 1003 gesteuert und überwacht werden

@docolli
Copy link
Contributor

docolli commented Jan 12, 2025

Wenns kein passwndes ein/aus Register gibt dann müssen wir uns den enable state halt merken.

Register 1003 geht sofort von 7 auf 9, wenn in Register 1000 ein Wert>0 geschrieben wird.
Aber nach Schreiben von 0 in Register 1000 dauert es bei mir (gibt es da noch was einstellbares im AC THOR Menu?) zwischen 30 und 50s bis der Wert von Register 1003 wieder von 9 auf 7 geht.

Ich habe im folgenden in den Modbus Nachrichten die relevanten Bytes für Leistung (1000) und Status (1003) markiert:
grafik

grafik

Er geht im Register 1003 sogar für 5s auf 202 (=Error power stages), dann auf 7

Kann man "0" ins Register 1000 schreiben und dann 60s warten bis man das Register 1003 für den Status auswertet? Dann sollte es doch korrekt laufen, oder?

@walburgf
Copy link

die Frage ist, ob es nicht einfacher ist, enable/disable beim AC Thor nicht zu verwenden und einfach enabled zu setzen, wenn das Register 1081 auf 1 steht. Der AC braucht nicht aktiviert zu werden, sondern kann über Register 1000 einfach gesteuert werden.
Der Status kann aus Register 1003 gelesen werden.
Und die Notwendigkeit einer Zuweisung von Leistung ergibt sich aus den Temperaturen....
... oder sehe ich das zu einfach?

@docolli
Copy link
Contributor

docolli commented Jan 12, 2025

Was haltet ihr von Register 1077?
Laut Doku und Fußnote 3 könnte uns dies die benötige Info bieten.

Ich teste mal, @walburgf kannst du auch mal schauen, ob es bei Dir was sinnvolles ausgibt?

grafik
grafik

@andig
Copy link
Member

andig commented Jan 12, 2025

Wenn ich dann z.B. "2500"(W) ins Register 1000 schreibe, und gleich danach wieder auslese, dann bleibt es auf "0". Der Heizstab bleibt also wie erwartet aus (disabled).

Erwartet ist enabled. Das versuche ich ja die ganze Zeit zu sagen. Denk einfach an die Wallbox…

Aber seis drum: entweder Status merken oder Schwellwert nutzen. Ein Register scheints ja nicht zu geben.

@walburgf
Copy link

@docolli : Register 1077 würde ich nicht nutzen, da es auch Dinge anzeigt, die mit der Steuerung nichts zu tun haben, sondern auch z.B. Netzwerkfehler angezeigt werden....

Ich würde wie oben beschrieben, enabled immer auf 1 setzen, wenn das Register 1081 1 ist.... das aktivie enable/disable nicht verwenden und den Rest über die Temperaturen, und Register 1000 und 1003 regeln/monitoren....

@docolli
Copy link
Contributor

docolli commented Jan 12, 2025

@andig Nach meinen Tests gerade eben, ist das Register 1077 das was wir suchen!

grafik
grafik
grafik

Das geht von "0" auf "1", wenn eine Heizleistung gesetzt wird und SOFORT wieder auf "0", wenn man die Heizleistung auf "0" setzt.
Ja, korrekt @walburgf , das Register hat noch mehr Bedeutungen, wir müssen nur die möglichen Registerwerte korrekt auf Status A / B / C mappen.

@docolli
Copy link
Contributor

docolli commented Jan 12, 2025

0 = Standby / Status B
1 = Heizt / Status C
3 = Heizt nicht, da Sollwert erreicht/überschritten / Status B
4 = Kein Modbus Steuersignal seit dem in der AC THOR Steuerung eingestellten Timeout empfangen / Status A
(sollte aber nie vorkommen, solange evcc per Modbus pollt)

Netzwerkfehler können wir sowieso nicht erkennen. Ohne Netzwerk keine Modbus Kommunikation von evcc aus. 😉

Kann mir hier mal jemand kurz helfen was ein Block ist und wie ich den im AC THOR setze, um zu testen, was Register 1077 dann ausgibt?
grafik

@docolli
Copy link
Contributor

docolli commented Jan 12, 2025

Noch ein wichtiger Hinweis für Schreibbefehle von evcc aus an den AC THOR!
grafik

@docolli
Copy link
Contributor

docolli commented Jan 12, 2025

Ich glaube mir wird so langsam klar, was enabled/disabled meint im Gegensatz zu heizen/nicht heizen.
Da ist, wie @walburgf meint, das Register 1081 das Richtige um zwischen Status A und B zu unterscheiden.
Und Register 1077 ist gut, um zwischen Status B und C (Heizen) zu unterscheiden.

WIr müssen aber daran denken, dass der AC THOR sein eigenes Temperaturlimit hat (was man mit Register 1002 schreiben könnte). Wenn das erreicht ist, lädt er nicht mehr, auch wenn evcc ein höheres Limit gesetzt hat und versucht eine Heizleistung ins Register 1000 zu schreiben. Da wird dann immer "0" als reale Leistung zurück kommen. Hier hilft Register 1077 um zu sehen, ob der AC THOR noch Heizen will.

@walburgf
Copy link

Block active weiss ich nicht, wie das erzeugt wird....

aber 4 image wird auch erzeugt, wenn man den AC Thor im Menu ausschaltet image

@andig
Copy link
Member

andig commented Jan 12, 2025

Ich glaube mir wird so langsam klar, was enabled/disabled meint im Gegensatz zu heizen/nicht heizen.
Da ist, wie @walburgf meint, das Register 1081 das Richtige um zwischen Status A und B zu unterscheiden.
Und Register 1077 ist gut, um zwischen Status B und C (Heizen) zu unterscheiden.

Prima. Mit b/c hatten wir aber gar kein Problem. Fehlt immer noch enable/disable.

Ich glaube mir wird so langsam klar, was enabled/disabled meint im Gegensatz zu heizen/nicht heizen.
Da ist, wie @walburgf meint, das Register 1081 das Richtige um zwischen Status A und B zu unterscheiden.
Und Register 1077 ist gut, um zwischen Status B und C (Heizen) zu unterscheiden.

immer noch nein. Status und enable/disable sind unterschiedliche Dinge.

@docolli
Copy link
Contributor

docolli commented Jan 12, 2025

immer noch nein. Status und enable/disable sind unterschiedliche Dinge.

Sorry, dann must du mir mal kurz erklären was bei der Wallbox (oder in evcc) mit enable/disable gemeint ist. 🤔

Edit: Sind das die enable/disable Bereiche in der Loadpoint Konfiguration? Und damit ob Laden (Heizen) freigegeben ist?

@docolli
Copy link
Contributor

docolli commented Jan 12, 2025

Das eigentlich Problem ist doch, dass evcc den AC THOR disabled (z.B. durch mode=off), aber noch nicht mit dem Verhalten des AC THOR zurecht kommt, da dieser selbst nicht aktiviert/deaktiviert werden kann. Und dann kommt komisches Verhalten, wie von @walburgf in seinem Video schön gezeigt.

Hier eine Analyse meines obigen Logs
grafik
Ich komme vom Heizen und setzen den Status in evcc auf "AUS".
evcc setzt 0x03e8 (1000) auf "0", das ist korrekt.
Register 0x3eb (1003) bleibt auf "9".
1000 liefert noch 5W zurück.
Dann setzt evcc ABER das Register 0x03e8 (1000) auf den Wert 0x001c. WARUM DAS DENN?
Klar dann bleibt Register 1003 auf "9" stehen und 30s später wird NOCHMALS Register 1000 auf 0x001c gesetzt. WARUM?

Dann läuft er logischerweise in den "Out of sync", weil der AC THOR durch das Setzen auf 0x01c natürlich weiter heizt und das auch so im Status ausgibt.

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.

5 participants