Hallo hier mein Weg/IrrWeg BMS HomeAssistant via ESPHome.
Ich wollte mein Gobel Power Akku mit Pace BMS (PC200) welches am DEYE 12 hängt in meinem HomeAssistant monitoren. Der DEYE hängt bereits via esphome über esp32 RS485/ModBus im HomeAssistant und ist voll auslesbar/konfigurierbar.
Das Projekt esphome-pace-bms bietet alles was man braucht, allerdings hatte ich Probleme dem BMS das PACE-Modbus Protokoll beizubringen. Mit etwas frickellei hats dann auch geklappt.
1. Hardware
ich habe einen ESP WROOM 32 verwendet, der hat bissel mehr Power als die D1Minis, das hilft dem Modbus Protokoll habe ich so das Gefühl. https://www.amazon.de/gp/product/B0BXZVB5XL/ref=ppx_yo_dt_b_asin_title_o09_s00?ie=UTF8&psc=1
An dem ESP hängt ein RS485 <> Modbus Platinchen
https://www.amazon.de/gp/product/B083943T9J/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1
Anleitung zum Anschluss gibts hier: https://github.com/syssi/esphome-pace-bms
An der Stelle: VIELEN DANK FÜR DAS PROJEKT !
Wichtig ! in der yaml des esp muss natürlich die BMS ID eingestellt werden, für gewöhnlich DIP1 auf on -> 0x01. Die GPIOS korrekt setzen, in meinem Fall mit diesem ESP32
Kabel dran (altes LAN Kabel abgeschnitten und am RS485 Board angelötet
Pin 1 B- (orange/weiss)
Pin 2 A+ (orange)
Pin 3 GND (grün/weiss)
2. BMS Konfiguration
Um das BMS zu konfigurieren braucht man eine serielle Verbindung. Beim Gobel lag ein entsprechender USB<>RS232 (RJ11) Adapter bei.
Die Software bekommt man bei Gobel, ich habe die HS2.03 Version benutzt.
Hier mein Problem: bei meinem BMS, bzw. bei der originalen Software von Gobel fehlt das passende RS485 Protokoll "Pace_Modbus" was man immer wieder liest.
Man kann recht einfach der Software einen neue DropDown Eintrag hinzufügen und das funktioniert tatsächlich O_o !
InverterList.xml editieren (liegt im Config/xml Ordner der BmsTools Software)
Ich habe stumpf einen Eintrag mit Value 0 Pace_Modbus eingefügt. Man sieht auf diversen Screenshots, dass das Pace Protokoll auf value 0 liegt.
<Param type="485" value="0" name="PACE_MODBUS" />
<Param type="485" value="1" name="DEYE" />
<Param type="485" value="1" name="PYLON" />
<Param type="485" value="2" name="GROWATT" />
...
Software neu starten, verbinden und auf Tab "System Config" das Passwort eintragen (siehe im Software Ordner). Mein Akku hängt via CAN am DEYE 12K hier habe ich bei CAN Protocol "DEYE" eingetragen.
Immer vorher mit Read die Werte auslesen, sonst kann man nicht schreiben "Write" !
RS458 Protocol kann man jetzt "0. PACE_MODBUS" auswählen und mit Write speichern.
Und in diese Moment hat mein ESP Daten empfangen
Auf die schnelle ins HomeAssistant Dashboard gepackt:
Der Thread ist schnell runtergetippt, wird noch schön gemacht 😉
Hier mein Problem: bei meinem BMS, bzw. bei der originalen Software von Gobel fehlt das passende RS485 Protokoll "Pace_Modbus" was man immer wieder liest.
Man kann recht einfach der Software einen neue DropDown Eintrag hinzufügen und das funktioniert tatsächlich O_o !
Hab gerade mal in der Inverter List HS203 Backup geschaut: da ist der Eintrag für das Pace Protokoll schon drinnen. Noch mit dem Zusatz in der Originalsprache..
<Param type="485" value="0" name="PACE_MODBUS(沛城)"/>
Es scheint sehr viele Varianten zu geben, hab selbst einige rumfliegen. bei mir war der Eintrag in keiner Version drin. Mag auch an den verschiedenen Herstellern liegen.
Jedenfalls ist ein Versuch wert ;-). Viel einfacher kommt man fast nicht an ein BMS Überwachungssystem ran.
Moin,
Aktuell wird bei mir Unbekannt angezeigt im Sensor
@KalleKnall danke für deinen Thread, ich möchte meine PC200 auch auslesen, die HW ist bestellt.
der ESP ist für mich neu, welche SW braucht der? Danke!
Hallo @KalleKnall, danke für deine Anleitung! Ich hänge mich hier mal rein und das ist auch schon genau das Stichwort. ICH HÄNGE!
Vorne weg: Ich hatte mit ESPHome noch keine Berührungspunkte, bin hier also völliger Noob.
Habe mir die die von dir genannten Komponenten gegönnt. Unterschied ich habe kein HomeAssistant laufen sondern einen iobroker. Soll hier aber nicht Thema sein, denn ich scheine schon deutlich vorher zu scheitern. Und mein GobelPack hängt an einem Victron-System via CAN.
Im github-Projekt ist ja beschrieben RX auf RX und TX auf TX. Ist ja eigentlich unüblich, passt das so?
Du benutzt am ESP32 die Pins auf einer Seite, richtig? habe sie im folgenden Screenshot mal markiert.
Du nutzt den RS485 Port direkt neben dem Can-Port?
Du hast die Adern für den RJ45-Stecker dem Screenshot entsprechend Pin1 = links beginnend aufgelegt?
Die Einstellungen auf dem BMS
<Param type="485" value="0" name="PACE_MODBUS" />
hab ich gemacht und natürlich gespeichert.
Wenn das alles passt, MUSS mein Problem softwareseitig liegen. Ich compile via ESPHome im iobroker und der schiebt das dann OTA per Wlan drauf. Als Logmode habe ich in der yaml "VERY_VERBOSE" eingestellt. Ich sehe dass er dort anfragt, aber keine Antwort erhält (so interpretiere ich das jedenfalls).
MQTT hatte ich auskommentiert und dafür den API-Teil reingenommen (aus meiner vorher compilten yaml).
was hast du denn unter esp32?
esp32:
sry, konnte den Logauszug nicht als "Code" einfügen:
[18:05:17][V][mdns:121]: TXT: network = wifi
[18:05:17][V][mdns:121]: TXT: api_encryption = Noise_NNpsk0_25519_ChaChaPoly_SHA256
[18:05:17][V][mdns:121]: TXT: project_name = syssi.esphome-pace-bms
[18:05:17][V][mdns:121]: TXT: project_version = 1.0.0
[18:05:17][V][modbus_controller:047]: Sending next modbus command to device 1 register 0x00 count 8
[18:05:17][VV][uart.arduino_esp32:180]: Flushing...
[18:05:18][V][modbus:199]: Modbus write: 01.03.00.00.00.08.44.0C (8)
[18:05:18][V][modbus_controller:509]: Command sent 3 0x0 8
[18:05:18][C][ota:097]: Over-The-Air Updates:
[18:05:18][C][ota:098]: Address: esphome-web-f31cb0.local:3232
[18:05:18][C][api:139]: API Server:
[18:05:18][C][api:140]: Address: esphome-web-f31cb0.local:6053
[18:05:18][C][api:142]: Using noise encryption: YES
[18:05:18][D][uart_debug:114]: >>> 01:03:00:00:00:08:44:0C
[18:05:18][D][modbus_controller:043]: Modbus command to device=1 register=0x00 countdown=0 no response received - removed from send queue
[18:05:18][V][modbus_controller:047]: Sending next modbus command to device 1 register 0x09 count 4
[18:05:18][VV][uart.arduino_esp32:180]: Flushing...
[18:05:18][V][modbus:199]: Modbus write: 01.03.00.09.00.04.94.0B (8)
[18:05:18][V][modbus_controller:509]: Command sent 3 0x9 4
[18:05:18][D][uart_debug:114]: >>> 01:03:00:09:00:04:94:0B
[18:05:18][V][modbus_controller:047]: Sending next modbus command to device 1 register 0x09 count 4
[18:05:18][VV][uart.arduino_esp32:180]: Flushing...
[18:05:18][V][modbus:199]: Modbus write: 01.03.00.09.00.04.94.0B (8)
[18:05:18][V][modbus_controller:509]: Command sent 3 0x9 4
[18:05:18][D][uart_debug:114]: >>> 01:03:00:09:00:04:94:0B
[18:05:18][V][modbus_controller:047]: Sending next modbus command to device 1 register 0x09 count 4
[18:05:18][VV][uart.arduino_esp32:180]: Flushing...
[18:05:18][V][modbus:199]: Modbus write: 01.03.00.09.00.04.94.0B (8)
[18:05:18][V][modbus_controller:509]: Command sent 3 0x9 4
[18:05:18][D][uart_debug:114]: >>> 01:03:00:09:00:04:94:0B
[18:05:18][V][modbus_controller:047]: Sending next modbus command to device 1 register 0x09 count 4
[18:05:18][VV][uart.arduino_esp32:180]: Flushing...
[18:05:18][V][modbus:199]: Modbus write: 01.03.00.09.00.04.94.0B (8)
[18:05:18][V][modbus_controller:509]: Command sent 3 0x9 4
[18:05:19][D][uart_debug:114]: >>> 01:03:00:09:00:04:94:0B
[18:05:19][V][modbus_controller:047]: Sending next modbus command to device 1 register 0x09 count 4
[18:05:19][VV][uart.arduino_esp32:180]: Flushing...
[18:05:19][V][modbus:199]: Modbus write: 01.03.00.09.00.04.94.0B (8)
[18:05:19][V][modbus_controller:509]: Command sent 3 0x9 4
[18:05:19][D][uart_debug:114]: >>> 01:03:00:09:00:04:94:0B
[18:05:19][D][modbus_controller:043]: Modbus command to device=1 register=0x09 countdown=0 no response received - removed from send queue
[18:05:19][V][modbus_controller:047]: Sending next modbus command to device 1 register 0x0F count 22
[18:05:19][VV][uart.arduino_esp32:180]: Flushing...
[18:05:19][V][modbus:199]: Modbus write: 01.03.00.0F.00.16.F4.07 (8)
[18:05:19][V][modbus_controller:509]: Command sent 3 0xF 22
[18:05:19][D][uart_debug:114]: >>> 01:03:00:0F:00:16:F4:07
[18:05:19][V][modbus_controller:047]: Sending next modbus command to device 1 register 0x0F count 22
[18:05:19][VV][uart.arduino_esp32:180]: Flushing...
[18:05:19][V][modbus:199]: Modbus write: 01.03.00.0F.00.16.F4.07 (8)
[18:05:19][V][modbus_controller:509]: Command sent 3 0xF 22
[18:05:19][D][uart_debug:114]: >>> 01:03:00:0F:00:16:F4:07
[18:05:19][V][modbus_controller:047]: Sending next modbus command to device 1 register 0x0F count 22
[18:05:19][VV][uart.arduino_esp32:180]: Flushing...
[18:05:19][V][modbus:199]: Modbus write: 01.03.00.0F.00.16.F4.07 (8)
[18:05:19][V][modbus_controller:509]: Command sent 3 0xF 22
[18:05:20][D][uart_debug:114]: >>> 01:03:00:0F:00:16:F4:07
[18:05:20][V][modbus_controller:047]: Sending next modbus command to device 1 register 0x0F count 22
[18:05:20][VV][uart.arduino_esp32:180]: Flushing...
[18:05:20][V][modbus:199]: Modbus write: 01.03.00.0F.00.16.F4.07 (8)
[18:05:20][V][modbus_controller:509]: Command sent 3 0xF 22
[18:05:20][D][uart_debug:114]: >>> 01:03:00:0F:00:16:F4:07
[18:05:20][V][modbus_controller:047]: Sending next modbus command to device 1 register 0x0F count 22
[18:05:20][VV][uart.arduino_esp32:180]: Flushing...
[18:05:20][V][modbus:199]: Modbus write: 01.03.00.0F.00.16.F4.07 (8)
[18:05:20][V][modbus_controller:509]: Command sent 3 0xF 22
[18:05:20][D][uart_debug:114]: >>> 01:03:00:0F:00:16:F4:07
[18:05:20][D][modbus_controller:043]: Modbus command to device=1 register=0x0F countdown=0 no response received - removed from send queue
[18:05:20][V][modbus_controller:047]: Sending next modbus command to device 1 register 0x3C count 55
das ist jetzt nur ein kurzer Ausschnitt. Es werden noch mehr Register durchgegangen und loopt dann. Was dann "hintenraus" zum iobroker passiert, sollte an der Stelle hier noch egal sein. Ich würde erwarten im Log irgendwas zu sehen, das nach empfangenen Werten aussieht.
Würdest du deine *.yaml (wlan und api secret natürlich ausgeixxt, wenn dus überhaupt drin hast) zur Verfügung stellen damit wir unwissenden vielleicht spicken können?
Gruß eierbeifel
okay ich habs gefunden, war alles richtig, nur hat er beim Verbinden mit dem Akku nicht das PACE_MODBUS ordentlich gespeichert. Das ist mir aber erst heute aufgefallen, als ich es nochmal versuchen wollte. Und wie so oft: Kaum macht man es richtig, schon gehts!
@eierbeifel bin gerade am verkabeln von dem ESP und RS485 board
hast du RS485 pin 1/8 und 2/7 beide angehängt?
Hey Leute,
Kann mir bitte wer die Software zur Verfügung stellen. Das wäre echt super
danke
Mike
Schöne Grüße aus Niederösterreich 😀
@eierbeifel ja, bei mir funktioniert es jetzt mit dein RS485/Lan Adapter wunderbar, bekomme die Daten in den ioBroker geliefert
möchte aber das mit dem ESP, wenn ich ihn schon gekauft habe, auch hinbekommen.
was ich nicht kapiere, wie programmiere ich den ESP
die Arduino SW erkennt das Board nicht ? würdest du mich da bitte erleuchten, danke!
Du musst dir eine ESP-Home config.yml machen/zusammenkopieren und dann eine Firmware kompilieren.
Grüße aus Niederösterreich
Mike
Schöne Grüße aus Niederösterreich 😀
@m1k3f15h Hallo Mike, ok davon habe ich noch keine Ahnung. Ist dir ein YT Vid bekannt, das das mal von Grund auf zeigt, sonst muss ich das weit nach hinten schieben (Zeit)
Vielen Dank an alle fuer diese Loesung. hat auch be mir mit GOBEL 48V Batterie (200A Pace BMS) sehr gut funktioniert. Nur aufpassen dass man TX mit TX verbinded, hat mich tatsaechlich ene Stunde suchen gekostet:) Freedom...