Původně jsem se ptal, jestli nemá někdo zkušenosti s propojením JK BMS ve verzi CAN-bus s Victron Cerbo GX. Dostalo se mi řady reakcí, které často přehlížely zásadní informaci, že BMS není v běžné verzi s RS485, ale umí přímo CAN. Po pár příspěvcích už bylo jasné, že konkrétní zkušenost zatím nikdo nemá, proto jsem diskuzi tehdy uzavřel s tím, že se to pokusím zprovoznit i za cenu, že bych si driver do Cerbo GX napsal sam a dám sem vědět.
Nyní jsem se dostal do stavu, že to umím zprovoznit. Ještě to sice není ve finálním stavu, ale CAN komunikace s JK BMS funguje, BMS posílá data a na Cerbo mám testovací kód, který umí komunikaci poslouchat a interpretovat. Data zatím nejsou předávána do Venus OS D-Bus, ale i to už mám promyšlené.
Ale popořadě.
Nejprve jsem zkusil JK BMS propojit CAN-busem s Cerbo GX a ve Venus OS měnit parametry komunikace, jestli to bude alespoň něco dělat. To bylo dost naivní a neúspěšné, ale alespoň jsem si tím vyřešil a následně vyrobil propojovací CAN-bus kabel.
Následně jsem zkusil, asi trochu z lenosti, zprovoznit ostatními doporučovanou variantu propojení od Louise Van Der Walta dbus-serialbattery. No, a to taky nefungovalo!
Začal jsem mít podezření, že moje BMS JK-B2A20S20P-H-C (H označuje připojitelnost heating padu pro vyhřívaní článků a C verzi s CAN čipem) nemá oba čipy (RS485 i CAN), ale jen CAN. Mám dvě BMS, jednu v provozu a druhou rezervní, tak jsem rezervní kuchl a ... místo pro čip RS485 je prázdné.
Takže rozum do hrsti a jak z toho ven - líná varianta přes serialbattery je neprůchozí, takže nezbývá než zprovoznit CAN.
Pro začátek byla výhoda, že Venus OS standardně obsahuje Python 3.8.13, dá se poměrně snadno přes opkg nainstalovat python3-pip pro instalaci knihovny python-can a ta už umí pracovat se systémovými porty socketcan can0 a can1.
Tady se projevila výhoda Cerbo GX, protože CAN HW už obsahuje a má vyřešené drivery. Prošel jsem si sice chvílí pátrání, který CAN port použít, protože na BMS-Can portu Cerba sice běžely nějaké zprávy, ale ty jsem rychle identifikoval jako zprávy vysílané samotným Cerbem.
Tady je potřeba zmínit, že pro JK BMS existuje 4 stránkový dokument popisující CAN komunikaci, ale až do této chvile se mi zdál málo srozumitelný, až toteď !
V tomto momentu jsem v dokumentu našel vše potřebné - nejprve komunikační rychlost sběrnice 250kbps. Cerbo BMS-Can port používá rychlost 500kbps a nedá se to jednoduše (přes GUI změnit).
Naproti tomu VE.Can port je možné nastavit na variantu "VE Can + CAN-bus BMS 250kpbs". Tak jsem to zkusil a nic. Stačilo ale do druhého VE.Can portu připojit k Cerbo dodávaný terminátor (RJ45 konektor se zabudovaným odporem) a šup už se mi do konzole valily CAN zprávy z BMS (BMS totiž neposlouchá, ale jen vysílá a Status zprávy posílá s intervalem 20ms

Následně už stačilo prostudovat zmíněný dokument o CAN komunikaci JK BMS a napsat jednoduchý interpret CAN zpráv k dekodování informací z BMS.
Dostal jsem se tak do stavu, kdy (konečně!) umím zjistit informace z BMS kdykoli a odkudkoli (VPN, SSH na Cerbo, spuštění skriptu a je to), ale informace nejsou zatím ve Venus OS dostupné. A mám dilema. Mám (zkušební) baterii složenou z 16x135Ah článků a hlídanou JK-B2A20S20P-H-C. Chci to rozšířit, takže se nabízí postavit ještě jednu identickou se stejnou BMS, ale jak potom řešit komunikaci s Cerbo GX?
Vidím v tom 2 problémy:
- JK BMS má takovou zvlášnost, CAN Arbitration_ID je složeno z ID typu zprávy a Source Address BMS, které je (dle suchého konstatování dokumentace) "fixed as 0Xf4". To prakticky znamená, že na CAN-busu chodí zprávy z různých JK BMS se stejnou Source Address, a to je dost nanic.
- Jak si případně Cerbo GX, ESS atd. poradí se dvěmi paralelně připojenými bateriemi/BMS? V tomhle zatím nemám moc jasno.
V každém případě mám plán, jak tento svůj custom CAN-bus driver zpropagovat do Venus OS. Rozhodl jsem se nevymýšlet kolo a jednoduše forknout Louisuv dbus-serialbattery projekt, kompletně ho vykuchat při zachování totožného konceptu (např. možnost dopisovat drivery pro další BMS atd.) a zpřístupnit ho jako dbus-canbusbattery projekt.
Jen teď přemýšlím, jestli jsem se zbytečně nevydal s kanónem na vrabce?
