Sterownik rekuperatora ecoVENT MIDI po RS485 MODBUS RTU

Witam, posiadam sterownik do rekuperacji ecoVENT MIDI firmy PLUM.
instrukcja do sterownika ecoVENT.
Sterownik ma możliwość komunikacji z urządzeniem zewnętrznym po RS485 Modbus RTU, z możliwością nastawy prędkości transmisji, parzystości, liczby bitów stopu, adresu slave (sterownik pracuje jako slave).
Posiadam także konwerter RS485 na USB podpięty do serwera z HA generic x86-64,
konfiguracja w modbus.yaml dla jednego sensora wygląda następująco:

  - name: Centrala
    type: serial
    baudrate: 115200
    port: /dev/ttyUSB2
    bytesize: 8
    method: rtu
    parity: N
    stopbits: 1
    sensors:
      - name: Temperatura Nawiewu
        address: 6
        input_type: input
        device_class: temperature
        unit_of_measurement: C
        slave: 10
        count: 3
        data_type: float32
        precision: 1
        offset: 5
        scan_interval: 1

W sterowniku mam ustawione dokładnie tak samo, a encje są niedostępne.
przewody A+/B- sprawdzone, próbowałem różnych kombinacji ustawień RS485.

Ma ktoś ten sterownik i podzieli się konfiguracją w modbus.yaml

@Verum w instrukcji, pkt 13.2 - ustawiłeś “Aktywowanie Modbus” na tak? Jeżeli tak, to proponuje na testy obniżenie prędkość transmisji do 9600 bitów, zmiany dokonaj na sterowniku i w HA.
Potem zacznij od najprostszej konfiguracji:

    sensors:
      - name: Temperatura Nawiewu
        address: 6
        slave: 10
        scan_interval: 10

P.S. Jaki jest sens odczytywania temperatury co 1 sekundę?

@macek Prędkość transmisji obniżyłem, zredukowałem konfiguracje i aktualnie mój modbus.yaml wygląda następująco:

  - name: "Licznik główny"
    type: serial
    baudrate: 9600
    port: /dev/ttyUSB2
    bytesize: 8
    method: rtu
    parity: N
    stopbits: 1
    sensors:
      - name: Napięcie L1
        unit_of_measurement: V
        device_class: voltage
        slave: 1
        address: 0
        input_type: input
        count: 2
        data_type: float32
        precision: 2
      - name: Napięcie L2
        unit_of_measurement: V
        device_class: voltage
        slave: 1
        address: 2
        input_type: input
        count: 2
        data_type: float32
        precision: 2
      - name: Napięcie L3
        unit_of_measurement: V
        device_class: voltage
        slave: 1
        address: 4
        input_type: input
        count: 2
        data_type: float32
        precision: 2
      - name: Prąd L1
        unit_of_measurement: A
        device_class: current
        slave: 1
        address: 6
        input_type: input
        count: 2
        data_type: float32
        precision: 2
      - name: Prąd L2
        unit_of_measurement: A
        device_class: current
        slave: 1
        address: 8
        input_type: input
        count: 2
        data_type: float32
        precision: 2
      - name: Prąd L3
        unit_of_measurement: A
        device_class: current
        slave: 1
        address: 10
        input_type: input
        count: 2
        data_type: float32
        precision: 2
      - name: Moc L1
        unit_of_measurement: W
        device_class: power
        slave: 1
        address: 12
        input_type: input
        count: 2
        data_type: float32
        precision: 0
      - name: Moc L2
        unit_of_measurement: W
        device_class: power
        slave: 1
        address: 14
        input_type: input
        count: 2
        data_type: float32
        precision: 0
      - name: Moc L3
        unit_of_measurement: W
        device_class: power
        slave: 1
        address: 16
        input_type: input
        count: 2
        data_type: float32
        precision: 0
      - name: Moc
        unit_of_measurement: W
        device_class: power
        slave: 1
        address: 52
        input_type: input
        count: 2
        data_type: float32
        precision: 0
      - name: Energia pobór
        unit_of_measurement: kWh
        device_class: energy
        state_class: total_increasing
        slave: 1
        address: 72
        input_type: input
        count: 2
        data_type: float32
        precision: 2
      - name: Energia generacja
        unit_of_measurement: kWh
        device_class: energy
        state_class: total_increasing
        slave: 1
        address: 74
        input_type: input
        count: 2
        data_type: float32
        precision: 2
      - name: Napięcie L1-L2
        unit_of_measurement: V
        device_class: voltage
        slave: 1
        address: 200
        input_type: input
        count: 2
        data_type: float32
        precision: 2
      - name: Napięcie L2-L3
        unit_of_measurement: V
        device_class: voltage
        slave: 1
        address: 202
        input_type: input
        count: 2
        data_type: float32
        precision: 2
      - name: Napięcie L3-L1
        unit_of_measurement: V
        device_class: voltage
        slave: 1
        address: 204
        input_type: input
        count: 2
        data_type: float32
        precision: 2





  - name: Centrala
    type: serial
    baudrate: 9600
    port: /dev/ttyUSB1
    bytesize: 8
    method: rtu
    parity: N
    stopbits: 1
    sensors:
      - name: Temperatura Nawiewu
        address: 6
        slave: 10
        scan_interval: 10

encje z Licznika działają poprawnie, z centrali są “niedostępne”.
Licznik także jest wpięty za pomocą konwertera RS485 na USB, przy próbie zamiany konwerterów licznik także działał dobrze, wiec konwertery oba są w porządku.

Ustawienia Modbus w ecoVent:

Widok encji w dashboard:

Próbowałem zamiany A z B nie pomaga…

Widok w sprzęt:

P.S. Jaki jest sens odczytywania temperatury co 1 sekundę?

Żaden sens w sumie, na potrzeby testowania ustawione :slight_smile:

Masz ustawione różne parity w sterowniku i w integracji

@Verum
Wklejając YAMLe nie używaj cytowania (bo to rozwala strukturę kodu), lecz konstrukcję z linijkami zawierającymi po 3 apostrofy odwrotne w dodatkowych liniach przed i za kodem (to markdown, tak jakbyś formatował dla githuba).
Możesz podejrzeć o co chodzi w poprawionym poście.

Parzystość dla połączenia szeregowego N - to nie jest bit nieparzysty?
W HA jest N, E i O
W sterowniku bit parzysty, nieparzysty i brak

E = even = parzysty
O = odd = nieparzysty
N = none = brak

Dziekuję wszystkim.

Działa :slight_smile:

Do zamknięcia.

Czyli pierwszy błąd to różne parametry transmisji Modbus a druga kwestia to konfiguracja sensora "
Temperatura Nawiewu" - działa ta wersja “minimalna/okrojona” czy ta Twoja “wypasiona”? Wg mnie w Twojej były błędy jak np. data_type: float32, count: 3. Oczywiście nic nie stoi na przeszkodzie aby rozbudować konfiguracje o device_class, unit_of_measurement itd.

data_type: float32

zastosowałem dla liczb dziesiętnych, ale z int16 się da używając

precision: 1 oraz offset: 1

, a z float32 momentalnie wszystkie encje stają się niedostępne, sterownik nie wspiera float.
masz rację nie tylko różne parametry transmisji były.

count: x

w sumie do końca nie rozumiem za co odpowiada… :sweat_smile:

Sterownik w zasadzie nic nie wspiera - jeden adres to dummy dwa bajty (16bitów), które możesz interpretować dowolnie.

Ponieważ dla typu float32 musisz odczytać 32bity, czyli 4 bajty, czyli dwa kolejne adresy - stąd count=2. Dla danych 16bit count=1.
Za jednym razem możesz odczytać dowolną liczbę kolejnych rejestrów, tylko wtedy musisz potrafić sam zdekodować otrzymaną paczkę.

W przypadku błędu encje mogą być niedostępne nie z powodu tego, że strownik czegoś nie wspiera a z tego, że źle interpretujesz odebrane dane.