Moin,
kennt sich hier jemand mit der RS485 Kommunikation vom Seplos aus?
Ich habe mir eine Platine gebaut mit einem MAX3485 und einem ESP32 um das Seplos auszulesen.
Meine ersten Erfolge waren, dass irgendwas zurück kam wo ich den String ~20004642E00200FD37\r (Telemetriedaten) an das BMS geschickt habe.
Die Antwort sollte etwas umfangreicher sein. Allerdings kommt nur mist zurück, der keinen Sinn ergibt.
Laut einem Github Projekt https://github.com/syssi/esphome-seplos-bms nutze ich die passenenden Offsetz von der Rückgabe vom BMS. Da wo eigentlich die Zellenanzahl stehen sollte (Byte 8 ist auch im Protokoll 2.0 Dokument so erläutert) kommt bei mir nur 49 zurück.
Es gibt zwar das Projekt vom BavarianSuperGuy, aber ich brauche mehr funktionen als dem sein Projekt kann. Er ist aber leider auch zu Eingebildet und gibt seinen Sourcecode nicht raus.
Meine größte hoffnung wäre jetzt, jemand hat ein Projekt auf lager, am besten in C (Oder Arduino) für den ESP8266 oder ESP32, was ich Adaptieren könnte.
Ich habe mir um das DalyBMS auszulesen schon viel mühe gemacht. https://github.com/MeisterQ/Daly_SMA_Gateway
Aber beim Seplos komme ich aktuell nicht weiter..
Auskennen ist sicherlich zu viel gesagt, aber ich hab die letzten Tage gerade eine Umsetzung in Python implementiert, weil ich mit den Informationen was auf CAN vorhanden ist nicht zufrieden war und hab das deswegen in den dbus-serialbattery-Treiber für Victron eingebaut. Das Protokoll ist krude, weil die Hex-Codes der einzelnen Bytes jeweils nochmal ASCII-kodiert. Das heißt Deine 49 ist vermutlich das erste Byte (Ascii "1"), das nächste wird bei einem 16-Zell BMS dann eine 48 sein ("0"), macht 0x10 = 16.
Auslesen ist bei mir mehr oder weniger vollständig, mich würde jetzt noch die schreibende Seite interessieren, also das Setzen von Limits z.B. Dazu hab ich aber leider keine Doku gefunden.
Hi,
schau mal hier:
https://github.com/kscholty/SolarControl/tree/E3DC
Da gibts auch eine Implementierung für das Seplos BMS. Ist Teil eine größeren Projekts, das sich eigentlich damit beschäftigte, SUN 100 Inverter zu steuern.
Unterstützt neben Seplos auch QUCC und JK BMS.
Ist für einen ESP32 gemacht.
Viel Spaß damit
Gruß
Karsten
Habe mitlerweile gute Fortschritte gemacht, weil der BSC gut Dokumentiert ist.
Daran kann man sich orientieren.
Yeah super danke das werde ich testen!
Klappt das auch wenn man 2 seplos Packs hat mit dem Protokoll?
Klappt das auch wenn man 2 seplos Packs hat mit dem Protokoll?
Ohne Anpassung nicht. Also die Auswertung an und für sich schon, aber nicht das ganze Skript.
Habe mir jetzt den Aufbau des Befehls nicht en Detail angeschaut, aber ich denke, du musst ihm sagen, gib mir die Telemetriedaten von Pack 1, dann auswerten, dann Pack 2 abfragen. Und dann bei der Auswertung die pack Nummer mit berücksichtigen und den namespace um diese Nummer ergänzen.
Wie würde denn der Abfragestring fürs zweite Pack aussehen?
Pack1: ist da irgendwo eine Id versteckt?
const stringToSend = "~20004642E00200FD37\r";
Ich denke den Rest könnte ich hinbekommen 😊
Soweit ich weiß kann man alle Slave Packs (1, 2, 3, etc) mit einem rs485 to eth adapter auslesen.
Das Masterpack muss mit einem separaten Adapter abgefragt werden.
MeisterQ hat ja schon den Hinweis auf den BatterySafetyController gegeben, dort findest du u.a. folgenden Code:
static void getDataFromBms(uint8_t address, uint8_t function) { /* Beispieldaten * ->: 7E 32 30 30 30 34 36 34 32 45 30 30 32 30 30 46 44 33 37 0D * <-: 7E 32 30 30 30 34 36 30 30 31 30 39 36 30 30 30 31 31 30 30 43 43 30 30 43 43 33 30 43 43 32 30 43 42 46 30 43 43 33 30 43 43 30 30 43 43 30 30 43 43 31 30 43 43 31 30 43 43 30 30 43 43 32 30 43 43 33 30 43 43 37 30 43 43 35 30 43 43 35 30 43 43 36 30 36 30 42 36 46 30 42 37 32 30 42 37 32 30 42 37 31 30 42 39 36 30 42 37 43 46 44 37 46 31 34 36 41 32 38 33 45 30 41 34 45 32 30 30 32 30 33 34 45 32 30 30 30 31 35 30 33 45 38 31 34 36 43 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 44 44 30 31 0D */ uint16_t lenid = lCrc(2); const uint16_t frame_len = 7; uint8_t u8_lData[9]; uint8_t u8_lSendData[20]; u8_lData[0]=0x20; // VER u8_lData[1]=address; // ADDR u8_lData[2]=0x46; // CID1 u8_lData[3]=function; // CID2 (0x42) u8_lData[4]=(lenid >> 8); // LCHKSUM (0xE0) u8_lData[5]=(lenid >> 0); // LENGTH (0x02) u8_lData[6]=0x0; // VALUE (0x00) convertByteToAsciiHex(&u8_lSendData[1], &u8_lData[0], frame_len); uint16_t crc = calcCrc(&u8_lSendData[1], frame_len*2); #ifdef SEPLOS_DEBUG ESP_LOGD(TAG,"crc=%i", crc); #endif u8_lData[7]=(crc >> 8); // CHKSUM (0xFD) u8_lData[8]=(crc >> 0); // CHKSUM (0x37) convertByteToAsciiHex(&u8_lSendData[15], &u8_lData[7], 2); u8_lSendData[0]=0x7E; // SOF (0x7E) u8_lSendData[19]=0x0D; // EOF (0x0D)
(...) unter https://github.com/shining-man/bsc_fw/blob/main/src/devices/SeplosBms.cpp
Musst halt aufpassen, dass im Beispiel noch auf die Umwandlung von ASCII und Hex zu achten ist.
Ich kann das leider nicht testen, da ich nur ein Pack in Betrieb habe.
Als Gateway habe ich ein pusr iot RS485 zu Ethernet gateway. Dafür gibt es virtuelle COM Port Treiber, d.h. der stimuliert einen COM Port über Netzwerk und kann dann mit der Originalsoftware einem Befehl Absenden und mitschreiben.
Dann kann man mit PuTTY oder PacketSender selbst Befehle senden (letzteres Programm kann ich sehr empfehlen!!!).
Vielleicht helfen dir die Brotkrumen ein wenig.
Viele Grüße!
Hi,
ich habe ein komplett funktionierendes Programm, wo die Daten per JSON über MQTT gepollt werden mitlerweile.
Es geht allerdings nur ein BMS bisher.
Wenn jemand interesse hat, gerne Melden.
Das ganze läuft auf einem ESP32 und nutzt einen MAX485
Im SEPLOS BMS Communication Protocol Handbuch findest du in Tabelle 7 die Telemetrie-Anfrage für die verschiedenen Adressen:
Address | Telemetry Command Info Frame (ASCII) | ASCII -> Zeichen |
---|---|---|
0 | 7E 32 30 30 30 34 36 34 32 45 30 30 32 30 30 46 44 33 37 0D | ~20004642E00200FD37 |
1 | 7E 32 30 30 31 34 36 34 32 45 30 30 32 30 31 46 44 33 35 0D | ~20014642E00201FD35 |
2 | 7E 32 30 30 32 34 36 34 32 45 30 30 32 30 32 46 44 33 33 0D | ~20024642E00202FD33 |
3 | 7E 32 30 30 33 34 36 34 32 45 30 30 32 30 33 46 44 33 31 0D | ~20034642E00203FD31 |
4 | 7E 32 30 30 34 34 36 34 32 45 30 30 32 30 34 46 44 32 46 0D | ~20044642E00204FD2F |
5 | 7E 32 30 30 35 34 36 34 32 45 30 30 32 30 35 46 44 32 44 0D | ~20054642E00205FD2D |
6 | 7E 32 30 30 36 34 36 34 32 45 30 30 32 30 36 46 44 32 42 0D | ~20064642E00206FD2B |
7 | 7E 32 30 30 37 34 36 34 32 45 30 30 32 30 37 46 44 32 39 0D | ~20074642E00207FD29 |
8 | 7E 32 30 30 38 34 36 34 32 45 30 30 32 30 38 46 44 32 37 0D | ~20084642E00208FD27 |
9 | 7E 32 30 30 39 34 36 34 32 45 30 30 32 30 39 46 44 32 35 0D | ~20094642E00209FD25 |
10 | 7E 32 30 30 41 34 36 34 32 45 30 30 32 30 41 46 44 31 35 0D | ~200A4642E0020AFD15 |
11 | 7E 32 30 30 42 34 36 34 32 45 30 30 32 30 42 46 44 31 33 0D | ~200B4642E0020BFD13 |
12 | 7E 32 30 30 43 34 36 34 32 45 30 30 32 30 43 46 44 31 31 0D | ~200C4642E0020CFD11 |
13 | 7E 32 30 30 44 34 36 34 32 45 30 30 32 30 44 46 44 30 46 0D | ~200D4642E0020DFD0F |
14 | 7E 32 30 30 45 34 36 34 32 45 30 30 32 30 45 46 44 30 44 0D | ~200E4642E0020EFD0D |
15 | 7E 32 30 30 46 34 36 34 32 45 30 30 32 30 46 46 44 30 42 0D | ~200F4642E0020FFD0B |
Ich habe mal die "Zeichen-Konvertierung" hier als Spalte ergänzt. Wenn du die sendest, dann solltest du die jeweiligen infos bekommen. Man könnte den Sendestring zwar auch berechnen... aber ich hab's "stumpf" implementiert...
Viele Grüße
Hallo zusammen,
Ich versuche seit längerem das Seplos BMS und Home Assistant über einen ESP32 auszulesen mit einem rs485 zu TTL Adapter.
Leider komme ich irgendwie nicht weiter.
Könnte mir jemand mal seine funktionierende yaml für ESPHome zur Verfügung stellen?
@meisterq würde dein Programm hier funktionieren?
Vielen Dank
Viele Grüße
Mein Programm stellt die Daten im JSON Format über MQTT bereit. Weiß nicht ob dir das hilft, da ich IObroker nutze.
Nutze seit einem halben Jahr https://github.com/Lu-Fi/tasmota-seplos-driver - ist auch hier im Forum besprochen. Die Daten bekomme ich per MQTT und verarbeite sie in IP Symcon weiter. Passt.
3,5kWp Solarwatt - SMA SB-3000TL (04/11)
48V 280Ah LFP Seplos Mason 280, Neey v4 (12/22) - SMA SI 6.0H-11, SMA EM (02/13)
Smart ForTwo Cabrio ED 451 (11/12)
Tern Verge - Gboost Gold - 48V 14Ah LiIon DIY (03/21)
Da hier gerade von IPSymcon die Rede ist. Da habe ich auch ein Modul geschrieben. Hast du ein oder zwei Batterien installiert.
Ich habe nämlich das Problem, dass ich ich per CAN mit dem WR Kommuniziere und die beiden Batterien die ich habe über RS485 verbunden sind. Sobald ich aber CAN aktiviere sehe ich über RS485 nur noch eine Batterie.