Modbus RS485 integracja dwóch liczników

Witam
mam dwa liczniki z Modbus RTU RS485, każdy na osobnej linii z osobnym konwerterem USB-RS485
pierwszy to trójfazowy F&F LE-03MP poprawnie zintegrowany i odczytuję z niego wszystkie parametry a drugi to podlicznik pompy ciepła jednofazowy Eastron SDM120M którego nie potrafię namówić do współpracy. Warstwę fizyczną sprawdziłem i jest ok - czytam rejestry w CAS Modbus Scanner.


Sprawa wydawała się prosta bo jest sporo postów o integracji liczników Eastrona a jednak nie potrafię go zintegrować, skoro linia kablowa i konwerter są ok to pozostaje konfiguracja HA.
Moja konfiguracja:

..........
modbus:
# Licznik F&F LE-03MP DOM
  - type: serial
    baudrate: 9600
    bytesize: 8
    method: rtu
    parity: N
    port: /dev/ttyUSB0
    stopbits: 2
    name: hub1
    sensors:
      - name: U L1
        unit_of_measurement: V
        device_class: power
        slave: 1
        address: 1
        input_type: input
        count: 1
        data_type: int
        precision: 2
        scale: 0.01
.....

# Licznik SDM120M Pompa Ciepła
  - type: serial
    baudrate: 9600
    port: /dev/ttyUSB1
    bytesize: 8
    method: rtu
    parity: N
    stopbits: 1
    name: hub2
    sensors:
      - name: U PC
        unit_of_measurement: V
        device_class: power
        slave: 2
        address: 0
        input_type: input
        count: 2
        data_type: float

przy U PC mam wartość “niedostępny”

HA pod Docker na Debianie, komenda lsusb widzi oba konwertery jako serial port a komenda ls /dev/ttyUSB* pokazuje ttyUSB0 i ttyUSB1 - skoro F&F poprawnie pracuje jako ttyUSB0 to SDM120M musi być tym ttyUSB1

Co prawda bez fizycznego wypięcia konwertera próbowałem też samego SDM120M przez usunięcie całej konfiguracji F&F LE-03MP i dalej Eastron nic nie pokazał.
HA 2021.12.10

Jakieś pomysły ??

Jesteś pewny, że ustawiłeś taki adres ustawiłeś w liczniku SDM120M? Domyślny adres to 1.
Zastosuj konfiguracje sensors dokladnie taką samą jak w poscie Integracja Modbus i licznik energii SDM630 - #10 przez strikerbest i powinno działać.

F&F też ma domyślnie 1 więc na wszelki wypadek Eastrona przeklikałem w menu na 2 i podniosłem baudrate z domyślnych 2400 na max czyli 9600.

Bez postępu, skasowałem całą konfigurację F&F, został tylko Eastron z konfigiem z linku i nadal niedostępny.

Jak sprawdzić pod linuxem modbusa ? pod windą na laptopie mi to skanuje ale w sumie nie testowałem na sprzęcie z HA.

Masz przecież dwa konwertery USB-RS485 więc to są dwie niezależne magistrale Modbus. Zweryfikuj na wyświetlaczu licznika ustawione parametry transmisji Modbus (https://www.eastroneurope.com/images/uploads/products/manuals/SDM120_Series_Manual_.pdf)

Zamień ze sobą konwertery, a poźniej porty USB skoro na konfiguracji dla F&F wszystko działa prawidłowo.

Jeśli te konwertery są identyczne, to może wystąpić problem z ich adresowaniem jako /dev/ttyUSBx (po prostu ich identyfikatory będą się zamieniały między sobą losowo)

Sugeruję w takim wypadku użyć ścieżkę do portu “by-id” jeśli mają rozróżnialne numery seryjne dostępne w ścieżce urządzenia, albo użyć ścieżki do portu fizycznego czyli coś w guście
/dev/serial/by-path/pci-0000:00:15.0-usb-0:2:1.0

konwertery są różne, jeden na CH340 (z F&F o dziwo daje radę) a drugi na FT232 (zdecydowanie lepszy)
parametry transmisji ustawione na liczniku i zweryfikowane pod win/linux softem do testowania modbusa
na linuxie z moim HA właśnie potwierdziłem że czytam ten licznik

mbpoll -a 2 -b 9600 -s 1 -P none -t 3 -r 70 -c 2 /dev/ttyUSB1

Protocol configuration: Modbus RTU
Slave configuration…: address = [2]
start reference = 70, count = 2
Communication…: /dev/ttyUSB1, 9600-8N1
t/o 1.00 s, poll rate 1000 ms
Data type…: 16-bit register, input register table

– Polling slave 2… Ctrl-C to stop)
[70]: 16968
[71]: 0
^C— /dev/ttyUSB1 poll statistics —
10 frames transmitted, 10 received, 0 errors, 0.0% frame loss

wziąłem na test rejestr 70 czyli częstotliwość jako w miarę przewidywalny co do wyniku parametr
i te wartości zgadzają się z odczytem skanera (drugi zrzut ekranu - rejestr 30071-30072) z tym że w formie 16-bit input register data type, jak dam odczyt w formie 32-bit float data type in input register table czyli tak jak powinno być to dostaję jakieś dziwne wartości …e-41 czy …e+21 ??

mbpoll -a 2 -b 9600 -s 1 -P none -t 3:float -r 70 -c 2 /dev/ttyUSB1

Protocol configuration: Modbus RTU
Slave configuration…: address = [2]
start reference = 70, count = 2
Communication…: /dev/ttyUSB1, 9600-8N1
t/o 1.00 s, poll rate 1000 ms
Data type…: 32-bit float (little endian), input register table

– Polling slave 2… Ctrl-C to stop)
[70]: 2.37772e-41
[72]: 3.91549e+21

pomijając formę odczytu danych wiem że sprzętowo jest OK, tzn problem mam w HA

Edit:

Działa,
wygląda na banalny restart, zrestartowałem cały serwer a nie tylko HA, po restarcie zamieniły się ttyUSB0 z ttyUSB1 konwerterów, zamieniłem je w konfiguracji i w sumie poszło na konfigu z 1 postu.

Dziękuję wszystkim za rady i zaangażowanie