NEWS
JK BMS mit Modbus Adapter über RS485 zu TCP einbinden.
-
Ich hab in irgendeinem Forum gelesen das jemand die BMS mit einem ESP32 über Bluetooth ausliest und per MQTT verschickt.
Hab aber noch nicht so ganz gecheckt wie ich das installieren muss. Ein ESP32 hab ich sogar auch noch da.
-
@elektroniker86 Ja aber angeblich läuft es nicht so ganz stabil. Bei mir ist es etwas einfacher, mein Raspberry Pi ist gleich neben meiner Anlage, also USB-RS485 ist absolut kein Problem, hab ich ja jetzt auch im Einsatz.
Schlimmsten Fall bau ich mir einen Sniffer über Python damit ich die Werte raus bekomme.Mal sehen, die 2. Batterie sollte eigentlich eh bald kommen, ist ja schon 1,5 Monate unterwegs.
Wenn sie ankommt, dann wird weiter getüftelt bis es läuft -
@elektroniker86 Habe gestern endlich meine 2. Batterie bekommen.
Hat eh nur 3 Monate gedauertAlso, anscheinend geht es wirklich nicht dass man über einen RS485 Adapter die Packs ausliest.
Ich habe es nun mit 2 Stück USB-RS485 (liegen ja beim BMS bei) gelöst.
Man muss halt 2 Modbus-Instanzen machen, eine mit Adresse 0 und eine mit Adresse 1Die Anlage liest über CAN auch beide Batterien aus, funktioniert alles.
Sollte also mit 2 Stück RS485-TCP Adapter auch funktionieren, ansonsten sehe ich keine andere Lösung.
Grüsse
-
@elektroniker86
wo hast die Register belegung her. in den PDF daten stehen ganz andere Register drin die nur teilweise funktionieren. -
@KlausAnders
Um welche Register geht es?
Die PDF ist schon richtig... -
@sierra said in JK BMS mit Modbus Adapter über RS485 zu TCP einbinden.:
@KlausAnders
Um welche Register geht es?
Die PDF ist schon richtig...
im Pdf gibt es keine ungeraden Adressen, nur länge 2 oder 4. Zu deiner vorlage fehlen damit etliche Werte. Das auslesen mit deiner vorlage funzt, nur das schreiben von Schaltern, z.b. Laden Entladen bekomm ich nicht hin. -
@klausanders
Da gebe ich dir Recht.
Es ist schon verwirrend, in der PDF stehen auch die Längen.
Für Laden Ein/Aus sind 4 Bytes vorgesehen.
Im iobroker werden bei Länge 2 angezeigt, aber da werden vermutlich 1 Länge 2 Bytes verwendet, High und Low.Egal, ich habe mal versucht zu schreiben, also das funktioniert mit den Adressen die in der PDF steht.
Als Kontrolle ob wirklich Ein oder Aus mit den anderen Registern:
Balancer Ein/Aus zu schreiben funktioniert nicht so wirklich, da allein schon 1500 drin steht. Keine Ahnung
Da ich aber die ganzen Schreibbefehle nicht brauche, habe ich mich damit nicht wirklich beschäftigt.
Im Heimbereich ist das auch nicht wirklich Notwendig finde ich, warum sollte man da was laufend verstellen?
Einmal eingestellt und die Anlage läuft.
In einem Camper würde ich es verstehen wenn man da was abdrehen möchteIch habe auf meinem BMS die letzte Firmware drauf, neuere kann ich leider nicht mehr updaten da der Support für <V19 eingestellt wurde. Eine aktualisierte Registerliste wäre mal was tolles, ich denke da hat sich einiges getan die letzten Jahre.
-
@sierra Man sollte auch nicht zu oft schreiben. Je nachdem, ob das Gerät Parameter im Flash speichert, ist da früher oder später eben dieser hinüber.
-
@sierra @Elektroniker86
Danke für eure dokumentierte Vorarbeit!Habe gerade versucht zwei v19 BMS (Master-Slave-Verbund) über Buchse RS485-1 mit einem RS485 zu TCP Adapter auszulesen.
Klappt genau wie ihr es beschrieben habt.
Eine Geräte-ID in der Modbus-Adapterinstanz passen zum Steckplatz (ID:0 oder ID:1) funktioniert prima.
Mehrere Geräte IDs in der Adapterinstanz klappt bei mir gar nicht, egalwelche ID ich abfrage und wo es eingesteckt ist.
Habt ihr dazu noch etwas herausgefunden?
Müßte dazu nun einen zweiten RS485-TCP Converter spendieren und falls ein drittes Batteriepack kommt, noch einen, klingt aufwendig für ein BUSsystem
-
@dieter_p
Nein ich habe nichts mehr weiter getestet.Interessant wäre ob dies vielleicht mit einem RJ45 Splitter funktionieren würde.
Weiss aber nicht ob die Ports des BMS dafür gemacht sind, riskieren will ich das ehrlich gesagt nicht -
Hi,
ich habe bereits weiter getestet und habe es hinbekommen mit zwei instanzen und einem Modbusgateway 3 Batterien auszulesen.
Muss mir nur noch was einfallen lassen wie ich das noch schön mache damit das auch optisch was aussieht.
Wenn ich Zeit habe werde ich meine Lösung genauer beschreiben.
-
Wie versprochen meine Settings bzw. mein Testaufbau.
Werde das Gateway wahrscheinlich in ein Gehäuse einbauen und die RJ45 Buchsen auch .Batterie A (Adresse 0 (Master):
_address name description unit type len factor offset formula role room poll wp cw isScale 4608 Zelle 1 V uint16be 1 0.001 0 level true false false false 4609 Zelle 2 V uint16be 1 0.001 0 level true false false false 4610 Zelle 3 V uint16be 1 0.001 0 level true false false false 4611 Zelle 4 V uint16be 1 0.001 0 level true false false false 4612 Zelle 5 V uint16be 1 0.001 0 level true false false false 4613 Zelle 6 V uint16be 1 0.001 0 level true false false false 4614 Zelle 7 V uint16be 1 0.001 0 level true false false false 4615 Zelle 8 V uint16be 1 0.001 0 level true false false false 4616 Zelle 9 V uint16be 1 0.001 0 level true false false false 4617 Zelle 10 V uint16be 1 0.001 0 level true false false false 4618 Zelle 11 V uint16be 1 0.001 0 level true false false false 4619 Zelle 12 V uint16be 1 0.001 0 level true false false false 4620 Zelle 13 V uint16be 1 0.001 0 level true false false false 4621 Zelle 14 V uint16be 1 0.001 0 level true false false false 4622 Zelle 15 V uint16be 1 0.001 0 level true false false false 4623 Zelle 16 V uint16be 1 0.001 0 level true false false false 4676 Max_Zelle_Spannung V uint16be 1 0.001 0 level true false false false 4677 Zellen_Diff V uint16be 1 0.001 0 level true false false false 4678 Max_Zelle_Nummer uint8be 1 1 0 level true false false false 4678 Min_Zelle_Nummer uint8le 1 1 0 level true false false false 4746 TempMos °C uint16be 1 0.1 0 level true false false false 4749 Spannung V uint32be 2 0.001 0 level true false false false 4751 Watt W uint32be 2 0.001 0 level true false false false 4753 Strom A int32be 2 0.001 0 level true false false false 4755 Temperatur 1 °C int16be 1 0.1 0 level true false false false 4756 Temperatur 2 °C int16be 1 0.1 0 level true false false false 4757 Alarm uint32be 2 1 0 level true false false false 4759 BalanCurrent A uint16be 1 0.001 0 level true false false false 4760 BalanStatus uint8le 1 1 0 level true false false false 4760 SOC % uint8be 1 1 0 level true false false false 4761 ReCap Ah int32be 2 0.001 0 level true false false false 4763 MaxCap Ah uint32be 2 0.001 0 level true false false false 4765 Zyklen uint32be 2 0.001 0 level true false false false 4767 SOCCycleCap Ah uint32be 2 0.001 0 level true false false false 4769 SOCSOH % uint8le 1 1 0 level true false false false 4769 Precharge uint8be 1 1 0 level true false false false 4770 UserAlarm uint16be 1 1 0 level true false false false 4771 RunTime uint32be 2 1 0 level true false false false 4773 Laden_Erlaubt uint8le 1 1 0 level true false false false 4773 Entladen_Erlaubt uint8be 1 1 0 level true false false false 4836 BatVol V uint16be 1 0.01 0 level true false false false 4856 TempBat 3 °C int16be 1 0.1 0 level true false false false 4857 TempBat 4 °C int16be 1 0.1 0 level true false false false 4858 TempBat 5 °C int16be 1 0.1 0 level true false false false 5120 DeviceID string 8 1 0 level true false false false 5128 Hardware_Version string 4 1 0 level true false false false 5132 Software_Version string 4 1 0 level true false false false 5140 Name1 string 6 1 0 level true false false false 5156 Installationsdatum string 4 1 0 level true false false false 5160 SerienNummer string 8 1 0 level true false false false 5168 Name2 string 8 1 0 level true false false false 5176 Pin_Code string 8 1 0 level true false false false
Batterie B+C (Adresse 1 + 2 (Slaves):
_address deviceId name description unit type len factor offset formula role room poll wp cw isScale 4608 1 Zelle 1 V uint16be 1 0.001 0 level true false false false 4609 1 Zelle 2 V uint16be 1 0.001 0 level true false false false 4610 1 Zelle 3 V uint16be 1 0.001 0 level true false false false 4611 1 Zelle 4 V uint16be 1 0.001 0 level true false false false 4612 1 Zelle 5 V uint16be 1 0.001 0 level true false false false 4613 1 Zelle 6 V uint16be 1 0.001 0 level true false false false 4614 1 Zelle 7 V uint16be 1 0.001 0 level true false false false 4615 1 Zelle 8 V uint16be 1 0.001 0 level true false false false 4616 1 Zelle 9 V uint16be 1 0.001 0 level true false false false 4617 1 Zelle 10 V uint16be 1 0.001 0 level true false false false 4618 1 Zelle 11 V uint16be 1 0.001 0 level true false false false 4619 1 Zelle 12 V uint16be 1 0.001 0 level true false false false 4620 1 Zelle 13 V uint16be 1 0.001 0 level true false false false 4621 1 Zelle 14 V uint16be 1 0.001 0 level true false false false 4622 1 Zelle 15 V uint16be 1 0.001 0 level true false false false 4623 1 Zelle 16 V uint16be 1 0.001 0 level true false false false 4676 1 Max_Zelle_Spannung V uint16be 1 0.001 0 level true false false false 4677 1 Zellen_Diff V uint16be 1 0.001 0 level true false false false 4678 1 Max_Zelle_Nummer uint8be 1 1 0 level true false false false 4678 1 Min_Zelle_Nummer uint8le 1 1 0 level true false false false 4746 1 TempMos °C uint16be 1 0.1 0 level true false false false 4749 1 Spannung V uint32be 2 0.001 0 level true false false false 4751 1 Watt W uint32be 2 0.001 0 level true false false false 4753 1 Strom A int32be 2 0.001 0 level true false false false 4755 1 Temperatur 1 °C int16be 1 0.1 0 level true false false false 4756 1 Temperatur 2 °C int16be 1 0.1 0 level true false false false 4757 1 Alarm uint32be 2 1 0 level true false false false 4759 1 BalanCurrent A uint16be 1 0.001 0 level true false false false 4760 1 BalanStatus uint8le 1 1 0 level true false false false 4760 1 SOC % uint8be 1 1 0 level true false false false 4761 1 ReCap Ah int32be 2 0.001 0 level true false false false 4763 1 MaxCap Ah uint32be 2 0.001 0 level true false false false 4765 1 Zyklen uint32be 2 0.001 0 level true false false false 4767 1 SOCCycleCap Ah uint32be 2 0.001 0 level true false false false 4769 1 SOCSOH % uint8le 1 1 0 level true false false false 4769 1 Precharge uint8be 1 1 0 level true false false false 4770 1 UserAlarm uint16be 1 1 0 level true false false false 4771 1 RunTime uint32be 2 1 0 level true false false false 4773 1 Laden_Erlaubt uint8le 1 1 0 level true false false false 4773 1 Entladen_Erlaubt uint8be 1 1 0 level true false false false 4836 1 BatVol V uint16be 1 0.01 0 level true false false false 4856 1 TempBat 3 °C int16be 1 0.1 0 level true false false false 4857 1 TempBat 4 °C int16be 1 0.1 0 level true false false false 4858 1 TempBat 5 °C int16be 1 0.1 0 level true false false false 5120 1 DeviceID string 8 1 0 level true false false false 5128 1 Hardware_Version string 4 1 0 level true false false false 5132 1 Software_Version string 4 1 0 level true false false false 5140 1 Name1 string 6 1 0 level true false false false 5156 1 Installationsdatum string 4 1 0 level true false false false 5160 1 SerienNummer string 8 1 0 level true false false false 5168 1 Name2 string 8 1 0 level true false false false 5176 1 Pin_Code string 8 1 0 level true false false false 4608 2 Zelle 1 V uint16be 1 0.001 0 level true false false false 4609 2 Zelle 2 V uint16be 1 0.001 0 level true false false false 4610 2 Zelle 3 V uint16be 1 0.001 0 level true false false false 4611 2 Zelle 4 V uint16be 1 0.001 0 level true false false false 4612 2 Zelle 5 V uint16be 1 0.001 0 level true false false false 4613 2 Zelle 6 V uint16be 1 0.001 0 level true false false false 4614 2 Zelle 7 V uint16be 1 0.001 0 level true false false false 4615 2 Zelle 8 V uint16be 1 0.001 0 level true false false false 4616 2 Zelle 9 V uint16be 1 0.001 0 level true false false false 4617 2 Zelle 10 V uint16be 1 0.001 0 level true false false false 4618 2 Zelle 11 V uint16be 1 0.001 0 level true false false false 4619 2 Zelle 12 V uint16be 1 0.001 0 level true false false false 4620 2 Zelle 13 V uint16be 1 0.001 0 level true false false false 4621 2 Zelle 14 V uint16be 1 0.001 0 level true false false false 4622 2 Zelle 15 V uint16be 1 0.001 0 level true false false false 4623 2 Zelle 16 V uint16be 1 0.001 0 level true false false false 4676 2 Max_Zelle_Spannung V uint16be 1 0.001 0 level true false false false 4677 2 Zellen_Diff V uint16be 1 0.001 0 level true false false false 4678 2 Max_Zelle_Nummer uint8be 1 1 0 level true false false false 4678 2 Min_Zelle_Nummer uint8le 1 1 0 level true false false false 4746 2 TempMos °C uint16be 1 0.1 0 level true false false false 4749 2 Spannung V uint32be 2 0.001 0 level true false false false 4751 2 Watt W uint32be 2 0.001 0 level true false false false 4753 2 Strom A int32be 2 0.001 0 level true false false false 4755 2 Temperatur 1 °C int16be 1 0.1 0 level true false false false 4756 2 Temperatur 2 °C int16be 1 0.1 0 level true false false false 4757 2 Alarm uint32be 2 1 0 level true false false false 4759 2 BalanCurrent A uint16be 1 0.001 0 level true false false false 4760 2 BalanStatus uint8le 1 1 0 level true false false false 4760 2 SOC % uint8be 1 1 0 level true false false false 4761 2 ReCap Ah int32be 2 0.001 0 level true false false false 4763 2 MaxCap Ah uint32be 2 0.001 0 level true false false false 4765 2 Zyklen uint32be 2 0.001 0 level true false false false 4767 2 SOCCycleCap Ah uint32be 2 0.001 0 level true false false false 4769 2 SOCSOH % uint8le 1 1 0 level true false false false 4769 2 Precharge uint8be 1 1 0 level true false false false 4770 2 UserAlarm uint16be 1 1 0 level true false false false 4771 2 RunTime uint32be 2 1 0 level true false false false 4773 2 Laden_Erlaubt uint8le 1 1 0 level true false false false 4773 2 Entladen_Erlaubt uint8be 1 1 0 level true false false false 4836 2 BatVol V uint16be 1 0.01 0 level true false false false 4856 2 TempBat 3 °C int16be 1 0.1 0 level true false false false 4857 2 TempBat 4 °C int16be 1 0.1 0 level true false false false 4858 2 TempBat 5 °C int16be 1 0.1 0 level true false false false 5120 2 DeviceID string 8 1 0 level true false false false 5128 2 Hardware_Version string 4 1 0 level true false false false 5132 2 Software_Version string 4 1 0 level true false false false 5140 2 Name1 string 6 1 0 level true false false false 5156 2 Installationsdatum string 4 1 0 level true false false false 5160 2 SerienNummer string 8 1 0 level true false false false 5168 2 Name2 string 8 1 0 level true false false false 5176 2 Pin_Code string 8 1 0 level true false false false
-
@elektroniker86
Ganz herzlichen Dank!
Jetzt habe ich eine ZielvorgabeAuf den ersten Blick liegt die Lösung darin um mehrere BMS auszulesen, dass der Master und die Slaves anders aus der Instanz angesprochen werden: "Master" vs. "Mehrere IDs".
Ich hatte immer verstanden, dass der RS485-1 zur Kommunikation zu einem WR immer ein Slave sein kann. Im Fall vom Master (Adresse 0) scheint das aber ein Irrweg.
Werde mich mit der hoffentlich funktionierenden Lösung blad melden.
Liest du bei dir nur Werte oder kannst Du auch Schreiben und Werte ändern?