Potrzebna pomoc MODBUS i licznik dwukierunkowy DAC7321C

Cześć,

Zacznę może od tego że z HA mam do czynienia od niedawna. Chciałbym dokonać integracji licznika dwukierunkowego po MODBUS z moim HA. W tym calu na znanym portalu aukcyjnym zakupiłem konwerter USB → RS485. Podpiołem odpowiednie przewody pomiędzy licznikiem a tym “donglem”.

Następnie dodałem poniższy kod do obsługi MODBUS:

modbus:
  - type: serial
    baudrate: 9600
    bytesize: 8
    method: rtu
    parity: E
    port: /dev/serial/by-path/pci-0000:00:12.0-usb-0:1:1.0-port0
    stopbits: 2
    name: hub1

Następnie próbowałem w oparciu o dokumentację MODBUS którą posiadam do tego licznika
WeTransfer - Send Large Files & Share Photos Online - Up to 2GB Free](WeTransfer - Send Large Files & Share Photos Online - Up to 2GB Free)

utworzyć chociażby 1 działającą encję żebym mógł się czegoś zaczepić działać sobie dalej. Niestety bezskutecznie. Sprawdzałem ustawienia MODBUS w liczniku i mam takie same jak w parametrach.

sensor:
  - platform: modbus
    scan_interval: 60
    registers:
      - name: power_active
        hub: hub1
        address: 0x00
        unit_of_measurement: V
        slave: 1
        register_address: 00
        register_type: input
        count: 2
        data_type: float
        precision: 2

Byłbym wdzięczny za pomoc w rozwiązaniu problemu :frowning:

Pozdrawiam wszystkich serdecznie

Próbowałaś podłączyć jakąś konsole i sprawdzić czy cos leci po linii ?
Baudrate: jest odpowiedni ?

To jest na pewno poprawne ?

Cześć,

dzięki za odpowiedzi :slight_smile:
prędkość mam ustawioną na 9600 i taka też jest domyślna w liczniku.
to co zauważyłem w dokumentacji to jest jakieś hasło które nie mam pojęcia czy nie powinno byc czasem wykorzystane.

Podłączenie konsoli faktycznie nie daje zwrotnych infromacjii. Bo to już tez sprawdziłem

Jak nic się w konsoli nie dzieje to na moje oko brak komunikacji, tym się zajmij .
Sprawdź czy konfiguracja twojego dongla jest prawidłowa w HA
port: /dev/serial/by-path/pci-0000:00:12.0-usb-0:1:1.0-port0

W HA Ustawienia → System → Sprzęt → Cały sprzęt

Wyszukaj tam swoje urządzenie i będziesz znał poprawną ścieżkę.

w weekend podepnę się bezpośrednio do licznika i będę próbował. Te dane

port: /dev/serial/by-path/pci-0000:00:12.0-usb-0:1:1.0-port0

zabrałem właśnie z tego miejsca o którym piszesz.

Rozumiem że hasło do urządzenia przy komunikacji MODBUS nie ma znaczenia i mam się nim nie sugerować ??

Załącznik do tematu
DAC7321C Modbus Protocol v1.0 2-17(1).zip (402,7 KB)
na żadnym forum nie stosuj hostingów zewnętrznych - przeważnie pliki wrzucone w takie miejsca nie są już dostępne dla czytelników, którzy mogliby skorzystać z danego wątku.

Tego typu ścieżka do portu wskazuje na konkretne gniazdo USB, więc będzie inna jeśli przełożysz ten konwerter do innego portu USB.
(idę o zakład że są jakieś inne alternatywy dla tej ścieżki, choć nie wiem czy akurat lepsze w danej sytuacji).

Hasło jest potrzebne tylko dla zmiany kluczowych parametrów (i zapewne nie będziesz musiał go używać, ba - jeśli nie jesteś właścicielem licznika, to nawet nie możesz go używać).

Koledzy a co polecacie do testowania tego MODBUS-a przez PC ??

Twój konwerter USB → RS485 widać w systemie Windows na porcie COM w urządzeniach?

tak widać, normalnie jest wykrywalny jako port COM

To pobierz np. Termite: https://www.compuphase.com/software_termite.htm
Putty: https://www.putty.org/
Podłącz pod port który widzisz w Windows i zobacz czy coś się dzieje w oknie konsoli .

A więc tak udało mi się połączyć komputerem i odczytać dane, zmieniają się one w czasie rzeczywistym. Przykład poniżej

Chciałbym teraz wyciągnąć dane z adresu 400046

Jedyna co zmieniłem w ustawieniach licznika to
parity na N.

W HA podajesz adres 46(dec) = 0x2E (hex) bez czwórki z przodu.
4 oznacza, że używasz funkcji 03 - ReadHolding… tak dla zmyłki :wink:
Dana jest typu longint i zajmuje 4 bajty.

Dzięki za pomoc ale to jeszcze nie koniec :frowning:

kod do MODBUS-a

modbus:
  - type: serial
    baudrate: 9600
    bytesize: 8
    method: rtu
    parity: N
    port: /dev/serial/by-path/pci-0000:00:12.0-usb-0:1:1.0-port0
    stopbits: 1
    name: hub1

Sprawdzenie konfiguracji przechodzi bez błędu

kod samej encji

sensor:
  - platform: modbus
    scan_interval: 60
    registers:
      - name: power_active
        hub: hub1
        address: 0x2E
        unit_of_measurement: kW
        slave: 001
        input_type: holding
        count: 1
        data_type: longint
        precision: 4

I niestety ale nie przechodzi weryfikacji, nawet nie pokazuje się jaki jest błąd

Zobacz tak /dev/serial/by-id/twoje urządzenie

Kolega trzyma się dokumentacji?

# Example configuration.yaml entry for platform common parameters
modbus:
  - type: tcp
    host: IP_ADDRESS_1
    port: 2020
    name: "hub1"
    sensors:
      - name: sensor1
        data_type: int

Tu jeszcze nie dotarł :wink:

1 polubienie

Powolutku a do przodu małymi kroczkami :slight_smile:

modbus:
  - type: serial
    baudrate: 9600
    bytesize: 8
    method: rtu
    parity: N
    port: /dev/serial/by-id/pci-0000:00:12.0-usb-0:1:1.0-port0
    stopbits: 1
    name: hub1
    sensors:
      - name: my_power_active
        address: 0x2E
        unit_of_measurement: kW
        slave: 001
        input_type: holding
        count: 1
        data_type: string
        precision: 4

Teraz nawet wszystko akceptuje, ba nawet widzę encję :smiley: ale niestety jest niedostępna :frowning:
Nie przyjmuje mi zmiennej typy longint więc chciałem się podeprzeć zwykłym stringiem

Nie czytasz dokumentacji !!! longint stoi w dokumentacji licznika, w HA nazywa się to … ale sobie doczytaj

Przeglądałem tą dokumentację i nie widzę tam słowa o longint :frowning:

ale typ data wydaje się być wyraźnie zdefiniowany

      - name: sensor1
        data_type: int

Response representation (int8, int16, int32, int64, uint8, uint16, uint32, uint64, float16, float32, float64, string).

Nawet jak dam int64 to encja jest niedostępna

modbus:
  - type: serial
    baudrate: 9600
    bytesize: 8
    method: rtu
    parity: N
    port: /dev/serial/by-path/pci-0000:00:12.0-usb-0:1:1.0-port0
    stopbits: 1
    name: hub1
    sensors:
      - name: my_power_active
        address: 0x2E
        unit_of_measurement: kW
        slave: 001
        input_type: holding
        count: 1
        data_type: int64
        precision: 2
        scan_interval: 1
        scale: 0.1
        device_class: power