Po pierwsze wklej Yaml bo nikt nie będzie czytał że zdjęcia.
Po drugie podałeś znikome informacje. Podaj trochę więcej. Jaki masz model BMSa, do jakiego portu podpinasz, czy podpinasz bezpośrednio do BMSa czy do płytki komunikacyjnej z portami RJ45 które zazwyczaj są w gotowych zestawach ?
To może poświęć kilka dni na samodzielne czytanie dokumentacji projektu, za który chcesz się brać… bo jak tam zajrzałem to metod jest wiele, ale jak dotąd nie znalazłem takiej kombinacji jak próbujesz używać
Twój BMS to JK-PB (ESS series) — to zupełnie inny sprzęt niż zwykły JK BMS B-series, do którego pisany był komponent syssi/esphome-jk-bms.
Warstwa 1 — okablowanie RS485
Z manuala (str. 8/13): RJ45 RS485-1 pinout to:
piny 1,8 → RS485-B
piny 2,7 → RS485-A
piny 3,6 → GND
Kolory standardowego kabla sieciowego:
pin 1 = pomarańczowy → B
pin 2 = biało-pomarańczowy → A
To brzmi poprawnie, ALE jeśli Twój konwerter TTL→RS485 ma oznaczenia A i B, to upewnij się że masz: BMS-A → konwerter-A i BMS-B → konwerter-B. Wiele tanich konwerterów ma A i B odwrócone od standardu. Spróbuj zamienić.
Warstwa 2 — zły komponent ESPHome
Do JK-PB z RS485 nie używaszjk_bms + jk_modbus, tylko:
jk_rs485_bms:
- id: bms0
address: 0x01 # ← adres z DIP switchy na adapterze
I sensor platform też się zmienia na jk_rs485_bms.
Warstwa 3 — adres BMS
Z manuala (str. 11): adres ustawiają DIP switche na adapterze. 0x4E w YAML to 78 dziesiętnie — sprawdź czy DIP switche faktycznie dają taki adres. Dla pojedynczego BMS (master) adres powinien być 0 (wszystkie OFF).
Początek brzmi sensownie, ale reszta już zakrawa na bredzenie AI (na moje oko taki komponent jk_rs485_bms nie istnieje, a przynajmniej nie widzę go na repozytorium @syssi)
Yaml dla tej serii (UWAGA to jest przykład, a nie gotowiec do copy+paste i trzeba go zmodyfikować)
@Krzyszof_K Twoje AI (przynajmniej według mojej wiedzy) mówi pół prawdę…
Prawdą raczej jest że jest to inna wersja BMSa niż standardowe w seri B.
A to do czego mam uwagę
Częściowo prawda.
Istnieje komponent, który działa w trybie sniffing na magistrali RS ( gdy kilka BMS jest połączonych równolegle).
Ale nie zawsze jest to wymagane.
Dla pojedynczego używaja się raczej modbus przez RS485-1 (protocol 001 = JK BMS RS485 Modbus v1.0).
W repo esphome-jk-bms jest przykład właśnie pod PB serię.
Adres 0x01 Jeśli masz pojedynczy BMS, to lepiej ustawić adres 0 (wszystkie DIP OFF) i w YAML podać address 0x00. Adres 1 jest dla slavea w układzie równoległym
W tym przykładzie jest nawet komentarz:„Don’t turn off all dip switches / don’t use device address 0x00. This is the Modbus Master mode. You must select a device address between 0x01 and 0x0f so the BMS acts as Modbus Slave.”
OFF TOPIC:
Nie wiem jakiego AI używasz bo mi się zdaje że taki komponent jak jk_rs485_bms , chyba nie istnieje.(Ale po takim stylu wypowiedzi myslę że może to być Cloude ale trochę podrasowany przez użytkownika).
OFF TOPIC 2:
Tą odpowiedź pisałem chyba 30min, a teraz widzę że @szopen dał prawie wszystko to co ja
Mówi półprawdę. Przeprosił mnie za halucynacje - @szopen miał racje.
Cisne go o rozwiązanie
Pierwotnie wrzuciłem do Claude - teraz wrzuciłem do Chat GPT.
EDIT - no i wymyślił. Wstawiam do jakich wniosków doszedł Chat GPT.
Oczywiście to żadna wyrocznia:
Jasne. Masz to zebrane w jedną, spójną całość:
To, co napisał użytkownik o przewodach, czyli że brał pierwszy i drugi pin z RJ45, samo w sobie nie wygląda źle. W manualu JK-PB dla portu RS485-1 jest pokazane, że pin 1/8 = RS485-B1, pin 2/7 = RS485-A1, a RS485-1 to port komunikacyjny, natomiast RS485-2 służy do pracy równoległej między bateriami. Czyli jeśli siedział na parze 1–2, to elektrycznie mógł być w dobrym miejscu.
Druga sprawa to adres. Tu wcześniejsze 0x4E było po prostu błędne dla JK-PB. Manual mówi, że adres ustawia się 4 DIP-ami, a ich wartości to 1, 2, 4 i 8, więc realnie mówimy o zakresie 0–15. Dodatkowo instrukcja dla pracy równoległej mówi jasno, że adres 0 jest używany dla mastera w układzie równoległym, a pozostałe urządzenia mają mieć różne adresy slave. Czyli 0x00 istnieje, ale nie jako zwykły adres do odczytu pojedynczego BMS-a przez ESP, tylko jako tryb master w określonym scenariuszu.
I tu dochodzimy do najważniejszego błędu Claude’a: pomieszał zwykły komponent jk_bms z obsługą JK-PB po prawdziwym Modbus RS485. Repozytorium syssi/esphome-jk-bms w README opisuje główny komponent jako rozwiązanie do monitorowania JK-BMS przez UART-TTL albo BLE, a nie jako uniwersalny driver do każdego JK po każdym możliwym interfejsie. Jednocześnie w repo są osobne pliki przykładowe dla PB, w tym esp8266-jk-pb-modbus-example.yaml, więc sam maintainer wyraźnie rozdziela zwykłe JK od serii PB po Modbus. (GitHub)
To oznacza wprost: dla JK-PB nie powinno się iść ścieżką „standardowy jk_bms + jk_modbus”, tylko ścieżką z modbus: + modbus_controller: opartą o przykład jk-pb-modbus. W samym pliku przykładowym jest to napisane wprost: „Monitor a JK-BMS (JK-PB series) via Modbus”. (GitHub)
Dalej jest już całkiem klarownie. W przykładzie syssi dla JK-PB masz komentarz, że przy pojedynczym pakiecie i adresie 0x01 DIP ma być ustawiony na 1 = ON, reszta OFF, oraz że nie wolno używać 0x00, bo to jest Modbus Master mode. Wprost pada tam zdanie, że trzeba wybrać adres od 0x01 do 0x0f, żeby BMS działał jako Modbus Slave. To się idealnie spina z manualem JK-PB, gdzie adres 0 jest zarezerwowany dla mastera przy pracy równoległej. (GitHub)
Czyli końcowy wniosek jest taki:
Masz rację, że wcześniejsze odpowiedzi AI były niespójne. Fizyczne podłączenie mogło być dobre, ale AI błędnie uznało, że problem leży tylko w „nieobsługiwanym protokole” albo że zwykły jk_bms wszystko załatwi. Nie załatwi. W przypadku JK-PB trzeba użyć wariantu PB po Modbus, a nie standardowego przykładu dla UART/BLE. 0x4E było błędne. Dla pojedynczego BMS-a sensowny i zgodny z przykładem jest adres 0x01. 0x00 nie jest „złym adresem zawsze”, tylko oznacza tryb master, więc do zwykłego odczytu przez ESP się nie nadaje. (GitHub)
Dodatkowo manual JK-PB mówi, że w PC software adres po stronie programu ma być ustawiony tak samo jak adres wydialowany na BMS-ie, więc znów: nie ma tu żadnej magii z 0x4E, tylko zwykłe dopasowanie do DIP-ów.
W praktyce poprawny kierunek testu wygląda więc tak: DIP = 1, BMS jako slave, nie master, port RS485-1, ESPHome na bazie esp32/esp8266-jk-pb-modbus-example.yaml, modbus_controller z adresem 0x01,
a nie zwykły przykład jk_bms. (GitHub)
Oraz zaproponowane rozwiązanie :
Masz. To jest prosty YAML startowy pod JK-PB + RS485 + MAX485 + ESP32. Bazuje na oficjalnym przykładzie esp32-jk-pb-modbus-example.yaml z repo syssi: komunikacja idzie przez modbus_controller, UART ma 115200, rx_buffer_size: 384, a dla pojedynczego pakietu startujesz od adresu 0x01. Manual JK-PB potwierdza też, że do takiej komunikacji używasz portu RS485-1; na RJ45 masz 1/8 = B, 2/7 = A, 3/6 = GND, a adres 0 jest zarezerwowany dla mastera przy pracy równoległej. (GitHub)
Podłączenie: BMS RS485-1 pin 1/8 (B) → MAX485 B BMS RS485-1 pin 2/7 (A) → MAX485 A BMS RS485-1 pin 3/6 (GND) → GND MAX485 RO → ESP RX (${rx_pin}) MAX485 DI → ESP TX (${tx_pin}) MAX485 DE + RE razem → ESP ${de_re_pin}
Przed testem ustaw: DIP: 1 = ON, reszta OFF, adres = 0x01, port = RS485-1, w aplikacji protokół 001. Repo syssi dla PB pokazuje właśnie adres 0x01 dla single-pack i ostrzega, żeby nie używać 0x00, bo to tryb master; instrukcja JK-PB potwierdza, że adresy ustawia się DIP-ami, a 0 służy do pracy równoległej jako master. (GitHub)
To jest wersja na rozruch komunikacji, nie pełny 1800-linijkowy kombajn z całego przykładu syssi. Podaj model ESP i konkretne GPIO, a złożę ci wersję 1:1 pod twoją płytkę.
Świetne streszczenie, jednak dokumentację radzę najpierw czytać samodzielnie.
YAML jest nadał zły tzn. nie pasuje do ledwo widocznego konwertera RS485 ze zdjęcia w 1 poście.
(@Andrzejzako skąd w ogóle pomysł, aby zamiast zdjęcia zapewne zrobionego telefonem, wstawić jego skrinszot z telefonu - to mi się w głowie nie mieści…)
Cudotwórcą nie jestem. Chat zadał takie pytanie na końcu : dasz płytkę zrobię YAML.
A zrobił tylko na podstawie co mu dałem.
A Tu na Forum często się przewija że wróżymy z kuli albo z fusów
To nie moja wiedza tylko AI. Zadałem mu pytanie i tyle
AI nie jest do dupy. To kwestia jak zadasz mu pytanie i co dostanie.
Jak mu przykładowo napiszesz : napisz mi kod = >On Ci napisze. Tylko jakość tego kodu będzie nijaka.
Dla ESP-WROOM-32 DevKitC-v1 dałbym na start taki minimalny, sensowny YAML pod JK-PB po RS485/Modbus. Oparłem go o oficjalny przykład PB z repo syssi: tam masz tx_pin: GPIO16, rx_pin: GPIO17, baud_rate: 115200, rx_buffer_size: 384, address 0x01 dla pojedynczego pakietu i command_throttle: 50ms. Manual JK-PB potwierdza też, że do komunikacji używasz RS485-1, a adres 0x00 jest trybem master do pracy równoległej, więc do zwykłego odczytu trzeba ustawić 0x01–0x0F. (GitHub)
DE i RE razem → GPIO4
Manual JK-PB podaje właśnie taki pinout dla RS485-1.
Przed odpaleniem ustaw:
DIP: tylko 1 = ON
adres = 0x01
port = RS485-1
w aplikacji protokół 001 / JK ESS BMS RS485 Modbus
To jest zgodne z przykładem syssi dla PB i z instrukcją JK-PB. (GitHub)
Ten YAML jest celowo prosty: najpierw ma ruszyć komunikacja. Jak zacznie gadać, to wtedy dorzuca się pełen zestaw sensorów z pliku PB zamiast wrzucać od razu 1800 linii i zgadywać, gdzie się wywala.
Wrzuć potem log z bootu i z pierwszych odczytów.
to trzeba wywalić, bo nie pasuje do tego konwertera RS485 ze zdjęcia, na resztę nie mam czasu
nie wiem na jakie prędkości jest ten konwerter (bo ma układ auto-zmiany kierunku) ale mam obawy czy będzie działał przy 115200, to trzeba sprawdzić w jego dokumentacji (albo rypać się organoleptycznie beż żadnej gwarancji działania)
więc możliwe, że trzeba BMS skonfigurować do znacznie wolniejszej transmisji (no chyba, że ktokolwiek potwierdza działanie tego konwertera z taką prędkością, bo ja znam działający przypadek bodajże przy 9600 z oczywiście innym sprzętem, więc od takiej konfiguracji BMSa i YAMLa bym zaczął, jeśli będzie transmisja, to można próbować po kroczku szybciej)
edit 2 dni później w związku z innym wątkiem, gdzie jest używana bliźniacza konstrukcja tego konwertera UART-RS485
piny na zdjęciu są odwrotnie, więc albo je przelutować, albo zdefiniować inaczej (na krzyż), swoją drogą to nie jest domyśle położenie pinów UART1 (domyśle dla UART1 to Tx na 17 i Rx na 18, ale na MCU S3 można je przemapować w inne miejsce)
Napisałem że wróżenie z fusów.
Pokazałem również jak GPT pracuje z danymi jakie ma.
GPT już mi napisał że sam nie stwierdzi czy ten konkretny model ma auto-kierunek , czy to zwykły RS-485 i sterowanie z ESP.
Brak danych.
Stąd zaproponował taki kod oraz ewentualnie zmianę :
Wtyczkę wpinasz do pierwszego rj45 potem masz can, rs232 i dwa porty do ktorych wlaśnie wpinasz a one służą do komunikacji między magazynami tylko i wyłącznie, poza tym muszisz w bms przez aplikację ustawić protokół komunikacji na 1 i lecisz z kodem