Комунікація інвертора Anenji 6.2kw і батареї Dyness B4850

по-перше, трохи не ясно, чому інвертор виставляє номер модуля 01 (остання цифра перед контрольною сумою FD33)
по-друге, пітонівська бібліотека не розуміє відповідь Dyness B3 на запит get_values(), де номер модуля FF
1. Цей момент не дуже чітко прописаний в специфікації пілон протоколу, тому кожен виробник тулить туди що забажає. В Аненжі цей байт не передається взагалі і все норм. І він там насправді не потрібен, так як адрес модуля є у другому байті "02" (в пілон-протоколі адресація починається з 2).
2. То не бібліотека, то батарея не розуміє. Dyness реалізував пілон тільки частково і не вміє консолідувати данні усих під'єднаних модулів в один респонс, а шкода.
 
1. Цей момент не дуже чітко прописаний в специфікації пілон протоколу, тому кожен виробник тулить туди що забажає. В Аненжі цей байт не передається взагалі і все норм. І він там насправді не потрібен, так як адрес модуля є у другому байті "02" (в пілон-протоколі адресація починається з 2).
2. То не бібліотека, то батарея не розуміє. Dyness реалізував пілон тільки частково і не вміє консолідувати данні усих під'єднаних модулів в один респонс, а шкода.
оце за мотивами github/Frankkkkk/python-pylontech написав скриптик
який міняє байт в команді інвертора з 0x61 на 0x42 і перекидає її на батарею.
а потім відповідь з батареї перекидає на інвертор.
все це робив дистанційно, тому на bms-екрани інвертора зможу подивитися лише завтра.
наче скориговані команди викликають довгі відповіді від батареї, схожі на правду.
але чи зрозуміє їх інвертор ? чи не знадобиться там коригувати NumberOfModule ? з'ясую завтра з ранку.
 
вирішив поділитися результатами вивчення протоколу Пілон різних версій , складеними у збірний файл.
можливо допоможе допрацювати адаптер на роботу з паралельно з'єднаними батареями (там є як звертатися до підлеглих батарей через головну)
Читаю документ і бачу в тексті такі слова:
"Примітка: INFO містить INFOFLAG та DATAI"
трохи не можу второпати, що таке INFOFLAG

судячи з коду Frankkkkk, це просто нульовий байт на початку INFO, який далі ігнорується
чи я помиляюся ?

[upd:] З'ясував: INFOFLAG - це те саме, що й DATA_FLAG. А "Значення команди" - це те, що бібліотека Frankkkkk/python-pylontech читає як NumberOfModule=2 в get_values_single(2), а в get_values() воно через цю саму циферку фейлиться, бо не знаходить дані для другого модуля.
У відповіді на команду 0x61 ця цифра взагалі не використовується.
 
Останнє редагування:
День 10
Оптимізував схему, підрехтував программу - Dyness Adapter v0.2

Схема:
Переглянути вкладення 6656
Прошивка:
dyness-adapter-0.2.zip

P.S. Схоже це фінальна версія, далі оптимізувати вже нікуди, хіба що програмно!
Доброго часу спільнота, маю таку саму проблему АНЕНДЖИ 6.2 + ДЮНЕС 4850: зі схемою усе зрозуміло, {трохи юзав ардуінки (помиготів світлодіодом :))).)} не розумію як залити прошивки (dyness-adapter-0.2.zip) через ардуіно ІДЄ оболонка видаэ похибку
 

Вкладення

  • Знімок екрана 2025-12-03 185441.png
    Знімок екрана 2025-12-03 185441.png
    63,8 Кб · Перегляди: 6
Ви можете під'єднати USB шнурок до ардуїнки, відкрити будь-який Serial Monitor і побачити увесь протокол обміну, типу такого:

Переглянути вкладення 6641

Працює це так:
1. Команда 61h (Get System analog data) надходить від інвертора.
2. Адаптер підміняє її на команду 42h (Get analog value) і відправляє її до батареї.
3. Приходить респонс на 42h команду з батареї.
4. Адаптер розбирає його на окремі значення і формує фейковий респонс на 61h команду для інвертора.
От я і підійшов до формування фейкової відповіді вбудованими засобами Пітона.
Якби ж тільки мати алгоритм (бажано початковий код), який формує із відповіді на команду 0x42 відповідь на команду 0x61 (як в п.4 на процитованій картинці) ...
Я поки що все намагаюся досягти реверс-інжинірингом, та дуже сумніваюся, що мені все вдасться з першого разу.
Щось там у відповіді на 0x61 забагато температур (t. комірки, MOSFETа, BMS і по кожній набір из 5 параметрів, а у відповіді на 0x41 лише 5 температур, середня для BMS та 4 для груп комірок). Доведеться творчо брехати :>

Якийсь ще "Середній SOH" та "Мінімум SOH" бачу.
Це SOC чи щось інше ? Якщо туди поставити ((Залишкова ємність 1)*100-1)/(Загальна ємність 1) , інвертор не образиться ?

І також: "Середня кількість циклів", "Максимальна кількість циклів" - це про що ?
У відповіді на 0x42 є просто "Кількість циклів", або CycleNumber у Frankkkkk. Якщо це число просто повторити двічі у відповіді на 0x61, проканає ?
 
Останнє редагування:
не розумію як залити прошивки (dyness-adapter-0.2.zip) через ардуіно ІДЄ оболонка видаэ похибку
Наприклад ось так:
або так:
 
Якийсь ще "Середній SOH" та "Мінімум SOH" бачу.
Це SOC чи щось інше ? Якщо туди поставити ((Залишкова ємність 1)*100-1)/(Загальна ємність 1) , інвертор не образиться ?

І також: "Середня кількість циклів", "Максимальна кількість циклів" - це про що ?
У відповіді на 0x42 є просто "Кількість циклів", або CycleNumber у Frankkkkk. Якщо це число просто повторити двічі у відповіді на 0x61, проканає ?
Це SOC, якщо модулів багато то це має сенс. По циклам теж саме.
 
Наприклад ось так:
або так:
Подякував буду копать :) фух докопався нарешті :) все завантажив другу версію, замовляю RS485
 

Вкладення

  • Знімок екрана 2025-12-04 145213.png
    Знімок екрана 2025-12-04 145213.png
    101,8 Кб · Перегляди: 6
Останнє редагування:
оце за мотивами github/Frankkkkk/python-pylontech написав скриптик
який міняє байт в команді інвертора з 0x61 на 0x42 і перекидає її на батарею.
скриптик вже працює і малює на bms-екранах інвертора GOOTÜ JSY-H4862E120-D цілком правдоподібні цифри.
можете скачувати собі, ознайомлюватися та адаптувати під свої потреби.
це буде корисно для тих, хто вже має постійно працюючий linux-сервер з usb-портами.
щоб не купувати Arduino та додатковий RS485-адаптер для нього.
в даному сценарії додатково знадобилися лише 2 USB-RS485 адаптери по 50 грн/шт з prom.ua, дві двометрові пари дротів та два джека RJ45.
плюс амортизація обтискних кліщів.
заодно алгоритм перетворення 0x42-відповіді на 0x61-відповідь тепер доступний у відкритому джерелі, і його можна переносити на інші мови програмування.
щоправда, пакети протоколу Pylon я розбираю не через construct, а просто через регулярні вирази, що не завжди виглядає бездоганно.
але займає менше місця за текстом :>

у планах на майбутнє: обробляти _UserDefinedItems ("Користувацьке число"), якщо воно не 2, а 4, і в кінці додані 3-байтові значення поточної та повної ємності у mAh.
у Dyness B3 такого нема, хоч її паспортна ємність 75000 mAh, вона на запит 0x42 повідомляє повну ємність 34000 (0x84d0 у двох байтах)
 
Останнє редагування:
Привіт всім.
Перечитав цю всю тему, але так і не зрозумів).
Комусь вдалось подружити
- інвертор anj-6200w-48v-wifi
- батарею dyness dl5.0c

Я бачу, що умільці змогли подружити b4850, а ось з новішими вдалось?
Бо мені китайці сказали, що b4850 вже не будуть випускати (сказали не вигідно і будуть тільки 100А моделі).

Якщо ще не подружили з dl5.0c - давайте разом?)
Добрий вечір, я подружив, без ніяких костелів як виявилося. Берете кабель з коробки у якого обжаті піни 1-2 з обох сторін, підключаєте в роз'єми, виставляєте діпи на батареї 2-3 вверх, вмикаєте батарею , затискаєте на 3сек кнопку sw. Потім запускаєте інвертор, в налаштуваннях виставляєте тип батареї Li4, і вони починають комунікувати, спочатку індикатор Li буде мигати. Якось так)
 
Назад
Угорі