Licznik T1100 - modbus

Witajcie, zakupiłem na znanym portalu z zagranicy licznik TRIYEDQ T1100 z komunikacją modbus. konwerter RS485-USB podłączony do PC, program Open ModScan komunikuje się z licznikiem i odczytuje parametry prawidłowo. Po podłączeniu konwertera do HA nie odczytuje jednak żadnych danych.

Moja konfiguracja w YAML, próba odczytu Hz:

modbus:
  - name: hub1
    type: serial
    baudrate: 9600
    port: /dev/ttyACM1
    bytesize: 8
    method: rtu
    parity: N
    stopbits: 1
    retries: 100
    delay: 1
    message_wait_milliseconds: 1000
    timeout: 5
    sensors:
      - name: sdm_U_L1
        unit_of_measurement: Hz
        device_class: energy
        slave: 1
        address: 41
        input_type: holding
        data_type: float32
        precision: 2
      - name: sdm_test_1
        unit_of_measurement: Hz
        device_class: energy
        slave: 1
        address: 42
        input_type: holding
        data_type: float32
      - name: sdm_test_2
        unit_of_measurement: Hz
        device_class: energy
        slave: 1
        address: 43
        input_type: holding
        data_type: float32

Widzę po diodach konwertera, że komunikacja jest prawidłowa.

Tutaj screen z Open ModScan gdzie dane są wyświetlane prawidłowo:

Ale te dane nie są typu float tylko jakiś integer. Przy 32bitach danych adresy nie mogą się zminiać o +1, więc wygląda na to, że bezrefleksyjnie skopiowałeś konfigurację do jakiegoś licznika SDM.

Co mówi dokumentacja dla tego licznika?

Na pewno dobry ?

Port dobry.

Tak jest to część skopiowanej konfiguracji, z próbą odczytu Hz, 3 linie by zweryfikować czy występuje przesunięcie.

Działa prawidłowo na int16.
Dziękuję za naprowadzenie.

mam jednak problem z namierzeniem zużycia nabitego przez licznik. Rozumiem, że to ten parametr:

EDIT

Rozwiązałem już ten problem. Poniżej rozwiązanie dla osób które będą poszukiwać pomocy dla tego licznika:
image

modbus:
  - name: hub1
    type: serial
    baudrate: 9600
    port: /dev/ttyACM1
    bytesize: 8
    method: rtu
    parity: N
    stopbits: 1
    retries: 100
    delay: 1
    message_wait_milliseconds: 1000
    timeout: 2
    sensors:
      - name: T1_Napięcie(V)
        unit_of_measurement: V
        device_class: energy
        slave: 1
        address: 1
        input_type: holding
        data_type: int16
        scale: 0.01
      - name: T1_Czestotliwosc(Hz)
        unit_of_measurement: Hz
        device_class: energy
        slave: 1
        address: 42
        precision: 2
        scale: 0.01
        input_type: holding
        data_type: int16
      - name: T1_Prąd(A)
        unit_of_measurement: A
        device_class: energy
        slave: 1
        address: 7
        precision: 3
        scale: 0.001
        input_type: holding
        data_type: int16
      - name: T1_Moc_Aktywna(W)
        unit_of_measurement: kW
        device_class: energy
        slave: 1
        address: 13
        precision: 2
        scale: 0.01
        input_type: holding
        data_type: int16
      - name: T1_Wspolczynnik_mocy
        unit_of_measurement: PF
        device_class: energy
        slave: 1
        address: 30
        precision: 2
        scale: 0.001
        input_type: holding
        data_type: int16
      - name: T1_Stan_licznika(kWh)
        unit_of_measurement: kWh
        device_class: energy
        slave: 1
        address: 1285
        precision: 2
        scale: 0.01
        input_type: holding
        data_type: int16
1 polubienie

To jest niedźwiedzia przysługa :slight_smile: za chwilę sam będziesz zachodził w głowę czemu nagle zaczęły się pokazywać głupoty.
Nie po to w tabeli są jeszcze dwie kolumny Length i Data Format aby ciurkiem ustawiać wszystko jako int16. Zadanie domowe to nauczyć się zakresu i rozmiaru dla typów danych.

Już zmieniłem na int32 ostatnią pozycje kWh. Nie wszystko na raz :wink:

Kombinuj dalej :blush:
Jak myślisz dlaczego zmienna zaczyna się od U…?

Przechowywana jest liczba całkowita bez znaku. To wiem z instrukcji modbus :sweat_smile: czyli nie może być ujemna, zakładam że przekłada się to na maksymalną „pojemność” komórki.

Fajnie, a wiesz czym się różnią typy danych int32 i uint32 w twoim zastosowaniu integracji modbus

W skrócie - w przypadku encji energii nie dziś, nie jutro, ale istnieje prawdopodobieństwo, że kiedyś znienacka “ni z gruchy ni z pietruchy” otrzymasz jakiś gigantyczny wynik ujemny, więc należałoby po prostu zgodnie z dokumentacją podeklarować te encje tak, jak to przewidział producent licznika (a nie wyłącznie na zasadzie “Odczyt się dziś zgadza, więc jest OK”).

Tak poza konkurencją, zakładając, że Chińczyk zastosował normalną nomenklaturę, to między dokumentacją, a integracją przekłada się to mniej więcej tak
long → int32; ulong → uint32; int → int16; uint → uint16; czasem urządzenia mogą raportować też wartości zmiennoprzecinkowe (ale załączyłeś tylko jakiś mały fragment dokumentacji, w sumie fajnie by było gdybyś spakował plik do zip i wrzucił jako załącznik gdy już przygotujesz finalny YAML, którym się podzielisz z innymi)

1 polubienie

Mając dziś chwile zakończyłem konfigurowanie licznika TRIYEDQ T1100. Dziękuję wszystkim komentującym za pomoc i naprowadzenie na prawidłowy odczyt dokumentacji oraz podpowiedzi które nakierowały mnie na prawidłowe podłączenie licznika.
Mój YAML zawiera tylko elementy które interesują mnie, w razie potrzeby wskazane będzie poszukiwanie rejestrów.

Mam nadzieje że nie popełniłem żadnego błędu ale dziś już sił na to więcej nie mam :slight_smile:

Dokumentacja licznika znaleziona w sieci:

YAML:

modbus:
  - name: hub1
    type: serial
    baudrate: 9600
    port: /dev/ttyACM1
    bytesize: 8
    method: rtu
    parity: N
    stopbits: 1
    retries: 100
    delay: 1
    message_wait_milliseconds: 1000
    timeout: 2
    sensors:
      - name: T1_Napięcie(V)
        unit_of_measurement: V
        device_class: energy
        slave: 1
        address: 1
        input_type: holding
        data_type: uint32
        scale: 0.01
      - name: T1_Czestotliwosc(Hz)
        unit_of_measurement: Hz
        device_class: energy
        slave: 1
        address: 42
        precision: 2
        scale: 0.01
        input_type: holding
        data_type: uint16
      - name: T1_Prąd(A)
        unit_of_measurement: A
        device_class: energy
        slave: 1
        address: 7
        precision: 3
        scale: 0.001
        input_type: holding
        data_type: uint32
      - name: T1_Moc_Aktywna(W)
        unit_of_measurement: kW
        device_class: energy
        slave: 1
        address: 13
        precision: 2
        scale: 0.01
        input_type: holding
        data_type: int32
      - name: T1_Wspolczynnik_mocy
        unit_of_measurement: PF
        device_class: energy
        slave: 1
        address: 30
        precision: 2
        scale: 0.001
        input_type: holding
        data_type: int16
      - name: T1_Stan_licznika(kWh)
        unit_of_measurement: kWh
        device_class: energy
        slave: 1
        address: 1285
        precision: 2
        scale: 0.01
        input_type: holding
        data_type: uint32
2 polubienia

Nie ma najmniejszego sensu do nazwy encji dodawać jednostkę miary, tym przypadku “V”, HA poprawnie wyświetla stan encji wraz z jednostką miary zdeniniowaną w atrybucje encji unit_of_measurement bo potem dochodzi do takich niejasności jak poniżej: :wink:

1 polubienie

Nazwa to już chyba kwestia indywidualna nie sądzisz? :wink: jak wspominałem to testowa konfiguracja i licznik po weryfikacji możliwości i komunikacji wylądował w szufladzie. Gdy będę go adaptować już pod określone zadanie to i nazwy ulegną zmianie.

Oczywiście, że indywidualna :grinning: ale wg mnie, żadna nazwa nie powinna wprowadzać wątpliwości lub wprowadzać w błąd, przykład nazwy z W a wartość podawana w kW. Następnym razem powstrzymam się od takich uwag.

:thinking: przeszukałem cały wątek pod kątem występowania słów zaczynających się od “test” - nigdzie nie wspominałeś wcześniej o tym, jedynie mamy name: sdm_test_1 i name: sdm_test_2 :wink:.

No tak, o tym wspomniałem podczas prywatnej korespondencji z jednym z użytkowników, ale tak, to platforma testowa. Jak na chwilę obecną licznik nie ma zastosowania, jest to test/weryfikacja celem wyboru niedrogiego, wartego uwagi urządzenia.