Отже. Я завершив всі основні налаштування, які мені було необхідно зробити, тож тепер можу розповісти, як я все реалізував. Для початку - дані та специфікація:
Плата БМС JK-BD6A32S10P, підтримує 32с збірки, струм балансування - 0.6А (буває також 1А, але в момент замовлення технічної можливості придбати таку не було). Придбати можна під замовлення, в мене час очікування виготовлення зайняв приблизно 10 днів, ще 10 - доставка. Підкреслюю - більше ніде я не знайшов взагалі, де можна знайти цю плату, дуже рідка специфікація, аж до 118.4 вольта в номіналі, а взагалі - які і інші плати цього бренду, її можна налаштувати під різні типи батареї. Замовляв у цього продавця (відповідала дівчина Luna):
https://www.alibaba.com/product-detail/JK-BD6A32S10P-JK-BMS-for-Home_1601601691783.html
Вартість плати з пересилкою вийшла 4500 грн (маленький лайфхак - на алібаба, якщо аккаунт вперше замовляє, алібаба дарує знижку на доставку 20$, тому раджу робити так, адже на алі доставка дуже недешева). В комплекті з платою було наступне - Плата, проводи балансування, гвинти для кріплення силових кабелів, кабель для підключення RS485/UART, та невеликий силовий провід для підключення підігріву батареї (на платі є окремий силовий вивід для підігріву батареї самою батареєю). Також в комплект окремо продавець поклала кнопку увімкнення у подарунок. Для включення БМС без кнопки потрібно після підключення її до аккумулятора подати напругу (наприклад, включити зарядку), АЛЕ НЕ МЕНШЕ, НІЖ НА АКБ, бо може не увімкнутись. Плата - топ. Документацію, включаючи характеристики до неї - вклав до запису в pdf файлі. Якщо по платі будуть запитання, пишіть, за можливості одразу відповім.
Робочий сервер - Asus rs300-e7/ps4, OS Ubuntu 24.04.3 LTS
Адаптер USB - RS485 - перехідник "свисток" на чіпі max485 (в мене ще жодного разу не сбоїв, дуже стабільний), коштував 60 грн, купляв тут
РКС-компоненти
ПЗ - Telegraf, Grafana, InfluxDB та в моєму випадку, ModBus, який вже йде з убунтою у комплекті, якщо не помиляюсь.
ПК на ОС Windows 11 - для перевірки
Задача - зв'язати бмс з сервером та підключити її до системи моніторингу серверу.
Я не буду описувати весь треш, з яким я зустрівся, поки це все зробив, а одразу розкажу, як саме в мене це вийшло
1. Спочатку я взяв кабель, який був у комплекті з платою (4 піни, жовтий, білий (для 485) та червоний+чорний для UART, якщо не помиляюсь - просто жовтий та білий проводи підключив до свистка, як того потребує зазвичай. (А та В піни). Червоний та чорний я просто залишив, бо вони не для потрібного мені інтерфейсу. Іншу сторону роз'єму, відповідно підключив до бмс.
2. Спочатку підключив цей свисток до ПК в звичайний юсб порт для перевірки правильності підключенні та успішного читання даних з плати в офіційній програмі моніторингу від виробника "JK-BMS-MONITOR 2.7.0"
Сторінка виробника.
Потім я зі смартфону підключився по блютуз до бмс, що б налаштувати підключення по RS485. Поставив так:
device adrr: 1
Протокол uart 1: 001 - JK BMS RD485 Modbus V1.0
Протокол uart 2: 001 - JK BMS RD485 Modbus V1.0.
Все запрацювало. Окремо дякую
RomanN за пораду з тестом.
Важливо - програма JK-BMS-MONITOR написана для 64-бітних систем, на старому залізі з процесорами 32 біти, навіть на віндовс 8.1 в мене на ноуті не запрацювала!
3. Після успішного випробування я переключив юсб свисток на сервер та почав роботу з ПЗ.
В першу чергу я перевірив правильність розпізнавання інтерфейсу, та одразу подивився, який саме порт в меня з'явився, у моєму випадку USB1. Після цього я дууууже довго мучився, щоб залізо "розуміло" один одного по цьому протколу, тому що інфи в інтернеті майже немає для мого випадку (так я опинився на цьому форумі

Якимось дивом ШІ мені зміг написати скрипт Python, який почав перебирати всі блоки, регістри і все це (я в цьому нічого не розумію) com-порту, щоб зрозуміти, по яким саме точкам йдуть дані та через день-два я отримав всі, необхідні мені потоки (Напруга (вона там не загальна, а по кожній комірці, потім складається), SOC, струм, температури та потужність. Там є набагато більше всієї інфи, але мені потрібна була тільки ця.
4. Після успішного отримання необхідних мені, даних, далі все залишилось за технікою - був написаний готовий Python-скрипт, який нарешті зіставив дані, запрацював, як "перекладач" для БД та ПЗ системи моніторингу. Саме цей скрипт я не міг дуже довго нормально зробити і він його створення в мене забрало найбільше часу:
Скрипт Python:
Python:
from pymodbus.client import ModbusSerialClient
client = ModbusSerialClient(
port="/dev/ttyUSB1",
baudrate=115200,
parity="N",
stopbits=1,
timeout=0.5
)
if not client.connect():
exit(1)
try:
# Напряжение
r = client.read_holding_registers(address=4832, count=4)
voltage = r.registers[2] / 100.0 if not r.isError() else 0
# Ток
r = client.read_holding_registers(address=4762, count=1)
val = r.registers[0] if not r.isError() else 0
current = (val if val <= 32767 else val - 65536) / 1000.0
power = voltage * current
# Полная ёмкость
r = client.read_holding_registers(address=4776, count=4)
capacity = r.registers[3] / 1000.0 if not r.isError() else 40.0
# Остаток
r = client.read_holding_registers(address=4772, count=4)
remain = r.registers[3] / 1000.0 if not r.isError() else 0
soc = remain / capacity * 100 if capacity > 0 else 0
# Температуры
r = client.read_holding_registers(address=4764, count=4)
t1 = r.registers[0] / 10.0 if not r.isError() else 0
t2 = r.registers[1] / 10.0 if not r.isError() else 0
r = client.read_holding_registers(address=4744, count=4)
mosfet = r.registers[1] / 10.0 if not r.isError() else 0
# Вывод в Influx Line Protocol
print(
f"battery,device=jk_bms "
f"voltage={voltage},"
f"current={current},"
f"power={power},"
f"soc={soc},"
f"capacity_ah={capacity},"
f"remain_ah={remain},"
f"temp_t1={t1},"
f"temp_t2={t2},"
f"temp_mosfet={mosfet}"
)
except:
pass
client.close()
5. І нарешті, цей скрипт я вже підключив до БД InfluxDB, яка все записую в собі, а ПЗ для моніторингу Grafana вже з БД бере всі дані.
Та вже потім, в створив всі, необхідні для мене показники, сценарії та інше. В бонус створив телеграм-бота, який повідомляє мені, якщо в системі зафіксовано задані мною події (Наприклад, що батарея повністю заряджена, чи почались стрибки напруги, чи взагалі пропала напруга і т.д.). І тепер нарешті в мене з'явився час написати свій шлях до реалізації цієї ідеї та поділитись своїм досвідом з іншими, бо я впевнений, що комусь він дуже полегшить реалізацію подібних ідей. Можливо, я щось десь не вказав, то запитуйте, по можливості - відповім, звичайно)) Результат роботи можете побачити у вкладеннях) Всім гарного настрою та стабільної енергії)))