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)
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
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...
Mit dem Strom, das Register 10041 ist noch komplizierter,
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:
https://www.scadacore.com/tools/programming-calculators/online-checksum-calculator/
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
https://rapidscada.net/modbus/ <(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
deine Befehle, wie setzen sich die zusammen? Interessantes Format.
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)
Ich habe gerade in dem Online Solarman probiert, da kann ich mit deinen Kommandos tatsächlich alles abfragen.
also Fazit? Ist die Kommunikation das Problem? Die Daten von den Batterien sind ja da.
Checksum kann man hier schnell generieren CRC-16 (MODBUS) big endian:
ich berechne CRC direkt bei Solarman
Strom ist in "2's complement" codiert und muss mit Faktor 0.1 multipliziert werden.
01 03 02 FFE3 B83D => -2.8A
Danke, jetzt weiß ich wie das geht.
also Fazit?
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...
@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?
also Fazit?
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...
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.
2 Stück 8 K Deye mit 22 kwp und 24 kwh Pylontech, Solarassistant auf RS232