Home Assistant Einbindung vom Deye 12k und baugleiche (Sunsyk, solarman...)

Hallo @Eugenius, ich habe deine Frage hierher versetzt, in dem anderen Thread sind wir falsch mit dem Modbus.

Ich weiß nicht, was du unter holding meinst, der Deye kennt nur zwei Befehle 03 – Lesen und 10 – schreiben. Was macht dein Programm im Hintergrund? Ich benutze Solarman oder DeyeCloud, da kann ich die Befehle selbst vergeben. Hier einige Befehle, mit der Spannung in dem Register 10040 passt irgendwie nicht, aber der Deye antwortet auf die Anfrage.

@amiko deine Befehle, wie setzen sich die zusammen? Interessantes Format.

Nutze ja HA, und darum geht es ja eigentlich hier. Der Übersichtlichkeit wegen, wenn ihr andere Software nutzt, macht doch dazu einen eigenen Beitrag auf, dann gehen Informationen dazu auch nicht verloren unter fremden Beiträgen.

Der user @Eugenius verwendet doch auch HA, deswegen denke ich, dass das richtige Thread ist.

Mit den Befehlen wollte ich nur zeigen, dass der WR in dem Registerbereich ab 10032 auf die Anfragen antwortet. Und wenn es nicht über Home Assistant geht, dann liegt das Problem eventuell beim HA.

Ich nutze HA, aber die lesen tue ich Deye über Modbus (BMS-Buche) mit ESPHome auf ESP32. HA spricht dann mit ESPHome.

@amiko, aus deinem Screenshot lese ich folgendes aus:

Deye hat Adresse 0x01

Du liest aus Holding-Register mit 0x03 functioncode

und Adresse 0x2474 => 10055

https://rapidscada.net/modbus/

Muss ich noch mal probieren. Es könnte sein, dass diese Register nur auf RS232 und nicht auf RS485 verfügbar sind.

Da du über den Solarman liest, nutzt er RS232 und nicht RS485...

Edit:

ich sende komplett gleiches Telegramm (sieht man bei uart_debug):

[13:40:32][D][uart_debug:114]: >>> 01:03:27:47:00:01:3E:AB [13:40:32][W][modbus_controller:030]: Modbus device=1 set offline [13:40:32][D][modbus_controller:043]: Modbus command to device=1 register=0x2747 countdown=0 no response received - removed from send queue [13:40:38][W][modbus_controller:064]: Modbus device=1 back online
WR weigert sich aber. Somit gibt es die Daten wohl nicht auf MODBUS :/

Ich habe mehrere Register ausgelesen, unter anderen auch 10040 DEC (0x2738), der WR antwortet mit 0213 hex, was würde dann bedeuten 5,31 V (weil das Register in der Tabelle mit 2 Nachkommastellen eingegeben ist) 53,1 V würde besser passen. Mit dem Strom, das Register 10041 ist noch komplizierter, ich bekomme als die Antwort FFB1 hex, es sollte eine negative Zahl sein. Ich weiß noch nicht, wie ich die umrechnen soll.

Probier mal 65535 (0xFFFF) - 0xFFB1 ob dann der Strom passt. (oder so ähnlich und mal Faktor von 0.01 oder 0.1)

1 „Gefällt mir“

Na ja, bei den Werten über 10000 scheinen sich erst mal nur auf die Deye Akkus zu beziehen, diese senden scheinbar ihre Werte zum WR.
Habe die aktuelle Version vom Modbus Protokoll 104 wo diese Werte beschrieben sind. Seplos BMS sendet scheibar keine Daten zu den Packs mit oder man müsste mal ein anderes Protokoll testen BMS <--> WR

mag ja sein, ich habe deye rw-m6.1

@amiko ich habe auch 3xDeye RW-M6.1

Ich vermute mit anderen Akkus kann Deye nicht so viel Anfangen. Die werden auch nicht in Solarman App angezeigt.

ich versuche mich da in das CAN Bus reinzuhacken...

Theoretisch, können die Akkus auch parallel über RS485 kommunizieren. Die Kontakte sind laut der Bedienungsanleitung ja da...

Ich habe gerade in dem Online Solarman probiert, da kann ich mit deinen Kommandos tatsächlich alles abfragen.

Checksum kann man hier schnell generieren CRC-16 (MODBUS) big endian:

Ansonsten wird das Telegramm (0103273900015EB3) so aufgebaut:

0x01 Deye Adresse

0x03 lesen

0x2739 Register (=10041 in dec)

0x0001 einen Register lesen

0x5EB3 = Checksum

Als Antwort kommt dann 010302FFE3B83D zurück als Beispiel

Online Modbus RTU Parser & Modbus TCP Parser (Response)

Strom ist in "2's complement" codiert und muss mit Faktor 0.1 multipliziert werden.

01 03 02 FFE3 B83D => -2.8A

01 03 02 0000 B844 => 0 A

01 03 02 0010 B988 => 1,6 A

01 03 02 000D 7981 => 1,3 A

das sind nicht meine Befehle, das sind die Befehle die der WR versteht, HA nutzt auch diese Befehle. HA macht es Bedienerfreundlicher, aber im Hintergrund werden die gleiche Befehle generiert und die Antworten vom WR ausgewertet. Wie die Befehle zusammengesetzt werden hat @Eugenius bereits beschrieben. Man kann mit einem Befehl, soweit ich weiß, bis zu 256 Register auslesen. Z.B. mit dem Befehl 010327300026CEAB werden alle 38 Register vom Batterie Pack 1 ab Register 10032 ausgelesen.

noch eine kleine Ergänzung bei den Befehlen um die Register zu beschreiben, der Befehl ist um 3 Byte länger als der Lese-Befehl

function code: 10

nach der Anzahl Register die gelesen oder geschrieben werden sollen (2 Byte, 4 Stellen) werden noch die 3 Byte angehängt

  • Anzahl Bytes die geschrieben werden (1 Byte, 2 Stellen)

  • Wert, auf den das Register geschrieben werden soll hex Kodiert (2 Byte, 4 Stellen)

also Fazit? Ist die Kommunikation das Problem? Die Daten von den Batterien sind ja da.

ich berechne CRC direkt bei Solarman

Danke, jetzt weiß ich wie das geht.

Meine Vermutung, und das habe ich schon mal im Netz gelesen: RS232 (WLAN Stick) hat mehr Daten als RS485.

D.h. wenn ich an Akku daten ran will, entweder CAN hacken oder Solarman Schnittstelle nutzen...

hast du schon eine Idee wie?

Manuell die Befehle eingeben und die Daten auswerten irgendwie auch nicht der Sinn der Sache.

@amiko so ähnlich... aber kein Bock darauf. Die Daten kommen ja nur jede Minute...

Ich muss mal meine CAN Transceiver ausgraben und mich in die Batteriekommunikation als Zuhörer einklinken.

Das habe ich schon mal mit meinem Auto gemacht, schwer sollte es also nicht sein... nur die Zeit dafür brauche ich...

@linuxdep Könntest du hier mal die aktuelle Version des Modbus Protokolls veröffentlichen? bzw. einen Link posten?

@DIWI

ich habe in dem falschen Thread das Modbus Protokolls gepostet

https://www.akkudoktor.net/forum/anleitungen-tutorials/firmwareupdate-deye-sun-12k-sg04lp3-eu-selber-durchfuehren-anleitung-mit-fw-dateien/paged/49/#post-182877

1 „Gefällt mir“

Das sagte mir der SolarAssistant Support auch, ich habe mir nun auch RS232 Kabel bestellt,

über den Western Stecker kann man...wenn überhaupt... lt. Support nur sehr schwierig auch Daten SENDEN.
Empfang hie rkein Problem.

Über RS232 angeblich auch senden null problemo.

@higgy über MODBUS (BMS Port) kann ich vieles Senden und so meinen WR steuern. Oder war meinst du mit Western Stecker?

Ich habe diese:

https://solar-assistant.io/shop/products/sunsynk_rs485

Und damit kann ich zwar versuchen was zu senden von der Software, aber es kommt nicht am WR an / wird nicht übernommen ...
( steht ja auch so auf deren Seiten ) daher wechsel ich grad auf :

https://solar-assistant.io/shop/products/sunsynk_rs232

Und werde den wlanstick ( den ich ja eh nur noch im Support-Fall für den Hersteller benötige ) dann danebenlegen und im GAU Fall wieder reinstöpseln,
damit die DEYE Leute dran könnten ... ( wie gesagt nur einmal beim ersten update nach dem Kauf vom Support benötigt worden ).