Witam,
Chcę opomiarować przetwornicę PV VOLT do grzania wody. Standardowe mierniki/liczniki się nie sprawdzają ze względu na znaczne zakresy napięcia - u mnie od 60V do 270V. Miernik JSY-MK-194G wydaje się rozwiązywać ten problem - moduł pomiarowy ma zewnętrzne zasilanie a zakresy pomiarowe pasują do mojego zastosowania. Problem jest z odczytem tego miernika. Wg dokumentacji odczyt jest po protokole MODBUS na porcie UART TTL. Zastosowałem płytke konwertera UART TTL - RS485 i na konwerterze USB-RS485 odczytuję wartości w programie diagnostyczno/konfiguracyjnym producenta. Problem w tym że nie potrafię żadnym innym programem obsługi MODBUS odczytać rejestrów.
Np w programie producenta dla zapytania 01 03 00 48 00 0E 44 18 dostaję odpowiedź 01 03 38 00 23 2C FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 13 89 00 23 2C FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D4 11
czyli program pyta o 14 rejestrów a dostaje 28 (56 bajtów)
w Radzio i Modbus Poll sobie nie poradziłem - obcina dane i nie ma CRC.
Potrafię przeczytać tylko 4 rejestry z tabeli nr 2
Dla każdego rejestru masz byte length=4 czyli typ danych 32bitowy. 14rej*4=56bajtów.
ModbusRTU jeśli masz konwerter podłaczony bezpośrednio do USB maszyny z HA.
Tab2 ma tylko 4 rejestry … co co chcialbyś więcej odczytać?
Wszystko pasuje, więc albo ja albo ty czegoś nie rozumiesz😉
Dziękuję za szybką reakcję
Oczywiście że Ja nie rozumiem - trochę nie moja branża ani pasja ani hobby - po prostu kombinuję żeby zadziałało.
Do tej pory radziłem sobie z urządzeniami Modbus tak że skanowałem rejestry w programach do diagnostyki Modbus by wiedzieć czego się spodziewać w odpowiedzi na danym rejestrze i trochę metodą prób i błędów z dokumentacją HA i opisami na forach integrowałem je z moim HA. Tutaj już pierwszy etap mnie zatrzymał.
Tzn potrafię jedynie odczytać w programach te kilka z tabeli nr 2 ale istotne są rejestry z tabeli nr 3.
Tłumaczenie na poziomie struktury, bitów, bajtów … wiele mi nie rozjaśni ale jak bym mógł prosić o kawałek yamla np z rejestrem 0048H z tabeli nr 3 to dalej bym już eksperymentował.
Rejestr 48 jest holding, typu danych unsignedint32, z czego wynka, że ma dlugość 4bajtów więc dlugości nie trzeba podawać. Mnożnik dla odczytu wartości *0.001.
Teraz musisz wziąc dokumentacje HA modbus i tak, pod tym katem dopasowac yaml. Każdy rejestr odczytuj pojedyńczo aby określić właściwy typ encji (chodzi o jednostki)
Na tą chwilę nie mam możliwości technicznych aby Ci odpowiedzieć szerzej.
Kombinować nie musisz bo akurat dokumentacja zawiera wszstko.
modbus:
- name: "jsy_meter"
type: serial # lub tcp, zależnie od Twojego konwertera
port: /dev/ttyUSB0 # sprawdź właściwy port w HA
baudrate: 4800 # domyślny dla tego miernika to zazwyczaj 4800 lub 9600
bytesize: 8
stopbits: 1
parity: N
sensors:
- name: "JSY Napięcie kanał 1"
unique_id: jsy_napiecie_k1
unit_of_measurement: "V"
slave: 1
address: 72 # 0x0048 hex to 72 dec
input_type: holding
data_type: uint32
swap: word #ważne! Zamienia kolejność słów 16-bitowych
scale: 0.0001 # Sprawdź w instrukcji: jeśli 1 jedn. = 0.1mV, to 0.0001 da Volty
precision: 1
device_class: voltage
state_class: measurement
Adresowanie: W HA adresy podajemy zazwyczaj dziesiętnie. 0x0048 to 72. Niektóre urządzenia wymagają przesunięcia o 1 (tzw. offset) więc jeśli 72 nie zadziała, spróbuj 71.
data type: uint32: W nowszych wersjach gdy wybierzesz uint32, parametr count: 2 jest dodawany automatycznie, więc nie musisz go wpisywać.
swap: word: przy 32-bitowych rejestrach w miernikach JSY. Bez tego HA może przeczytać bajty w złej kolejności i zamiast 230V zobaczysz astronomiczne liczby.
Skala (scale): W dokumentacji JSY często napięcie podawane jest w jednostkach 0.0001V (czyli 0.1mV). Jeśli w programie producenta widzisz wartość np. 2300000 dla 230V, to skala musi wynosić 0.0001. Jeśli widzisz 230000, to 0.001.
I jeszcze pytanie dlaczego tak otagowany jest ten watek @abaku
sprawdzone powyższe propozycje i różne warianty - bez efektu
sprzętowo układ sprawny - czytam w HA rejestry systemowe ale pomiarowych (byte length=4) nie czyta