Benachrichtigungen
Alles löschen

Seplos per RS485 auslesen

52 Beiträge
18 Benutzer
7 Likes
3,592 Ansichten
(@meisterq)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 141
Themenstarter  

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..


   
Zitat
(@wmrakku)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 35
 

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.


   
AntwortZitat
 ks4z
(@ks4z)
Vorsichtiger Stromfühler
Beigetreten: Vor 3 Jahren
Beiträge: 34
 

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


   
AntwortZitat
(@meisterq)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 141
Themenstarter  

Habe mitlerweile gute Fortschritte gemacht, weil der BSC gut Dokumentiert ist.

Daran kann man sich orientieren.


   
AntwortZitat
DaDeppa
(@dadeppa)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 115
 

   
Soul_man reacted
AntwortZitat
(@soul_man)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 5
 

@dadeppa 

Yeah super danke das werde ich testen!

 

Klappt das auch wenn man 2 seplos Packs hat mit dem Protokoll?


   
AntwortZitat
DaDeppa
(@dadeppa)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 115
 

Veröffentlicht von: @soul_man

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.

 


   
AntwortZitat
(@soul_man)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 5
 

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.

 


   
AntwortZitat
DaDeppa
(@dadeppa)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 115
 

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!


   
AntwortZitat
(@meisterq)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 141
Themenstarter  

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


   
AntwortZitat
DaDeppa
(@dadeppa)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 115
 

Im SEPLOS BMS Communication Protocol Handbuch findest du in Tabelle 7 die Telemetrie-Anfrage für die verschiedenen Adressen:

Table 7 Telemetry command examples:
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


   
AntwortZitat
(@marsol)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 54
 

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


   
AntwortZitat
(@meisterq)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 141
Themenstarter  

@marsol

Mein Programm stellt die Daten im JSON Format über MQTT bereit. Weiß nicht ob dir das hilft, da ich IObroker nutze.


   
AntwortZitat
 mola
(@mola)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 78
 

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)


   
AntwortZitat
ThomasW69
(@thomasw69)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 89
 

@mola 

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.


   
AntwortZitat
Seite 1 / 4
Teilen: