Potrzebna pomoc MODBUS i licznik dwukierunkowy DAC7321C

W dokumentacji licznika jak Tobie już pokazano jest

natomiast w HA powinieneś użyć za dokumentacją int

To, że enecja jest niedostępna to znaczy, że jej nie czytasz a zapewne jest problem z tą ścieżką

Jedna sprawa to właściwa konfiguracja a druga poprawny odczyt (komunikacja). Jestem “bardzo” początkującym użytkownikiem modbus ale takie wnioski mi sie nasuwają po przeczytaniu tego wątku.

Niestety nie ma znaczenia jaką wartość PORT-u wprowadzę. Wykorzystać INT mogę tylko w formacie int8 16 32 64 - żaden nie działa.

W momencie kiedy wprowadzę data_type string to encja się podświetla a jej stan z niedostępnego staje się nieznany.

modbus:
  - type: serial
    baudrate: 9600
    bytesize: 8
    method: rtu
    parity: N
    port: /dev/ttyUSB1
    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


Licznik daną o mocy czynnej trzyma w 4 bajtach - 32bit ( i nie jest to typ float), zajmuje dwa kolejne rejestry

HA ma dostępne dwa 32bitowe typy int32 lub uint32 , użycie jednego z nich powinno coś pokazać.


mod2

zgodnie z tym count powinien być 1 - jednak możesz spróbować count:2

…edit :slight_smile: 0x2e to jest adres rejestru a nr rejestru będzie inny 23 lub 24 i żeby było łatwiej to rejestr 1 ma adres 0 - przeważnie się każdy na to łapie. Wpisz address: 23 … ??

1 polubienie

Dziękuję za pomoc coś się zaczęło pojawiać :slight_smile:
Mam jeszcze pytanie skąd kolega wie że numer rejestru będzie 22 lub 23 ???

Jeden rejestr zawsze jest 16bitowy z tego powodu zajmuje dwa adresy 8bitowe.
Rejestr nr 1 to adres 00 i 01 kolejno - 0x2e to 46, 46/2 = 23.
Nie mam głowy aby to znowu rozkminiać czy to jest 22, 23 czy 24.
Zmienna 32 bitowa zajmuje 4 bajty więc jakby 2 rejestry… popieprzone więc sam musisz to jakoś poukładać… wiem o co chodzi ale prosto tego nie potrafię wytłumaczyć.
Aby cię do końca pogrążyć to dodam, że znaczenie kolejności bajtów też jest różne i trzeba zamieniać kolejność.
Dobrze napisana specyfikacja dla urządzenia powinna te informacje zawierać.

Cześć,

na początku pragnę podziękować wszystkim za pomoc :slight_smile: Wszystko działa tak jak bym tego chciał i oczekiwał :slight_smile:

Poniżej zostawiam kod ku pamięci innych posiadaczy tego licznika :slight_smile:

W pliku configuration.yaml dodałem wpis:

modbus: !include modbus.yaml

Następnie w folderze config utworzyłem plik modbus.yaml

dalej to już czysty kod obsługujący połączenie:

- 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                  #tutaj podajemy bezpośrednią ściężkę gdzie jest wpiety nasz konwerter
  stopbits: 1
  name: hub1
  sensors:
      - name: licznik_power_active                                              #Aktualne zurzycie 
        address: 44
        unit_of_measurement: W
        slave: 001
        input_type: holding
        count: 2
        data_type: int32
        scan_interval: 1
        device_class: energy
      - name: licznik_L1_V                                                      #FAZA 1 NAPIĘCIE
        address: 0
        unit_of_measurement: V
        slave: 001
        input_type: holding
        count: 2
        data_type: int32
        scan_interval: 1
        scale: 0.01
        device_class: power
      - name: licznik_L2_V                                                      #FAZA 2 NAPIĘCIE
        address: 2 
        unit_of_measurement: V
        slave: 001
        input_type: holding
        count: 2
        data_type: int32
        scan_interval: 1
        scale: 0.01
        device_class: power
      - name: licznik_L3_V                                                      #FAZA 3 NAPIĘCIE
        address: 4 
        unit_of_measurement: V
        slave: 001
        input_type: holding
        count: 2
        data_type: int32
        scan_interval: 1
        scale: 0.01
        device_class: power
      - name: licznik_energia_pobrana                                           #Energia pobrana z sieci
        address: 1024
        unit_of_measurement: kWh
        slave: 001
        input_type: holding
        count: 2
        data_type: int32
        precision: 2
        scan_interval: 1
        scale: 0.01
        device_class: energy
        state_class: total_increasing
      - name: licznik_energia_wysłana                                           #energia wysłana do sieci
        unique_id: licznik_energia_wysłana 
        address: 1026
        unit_of_measurement: kWh
        slave: 001
        input_type: holding
        count: 2
        data_type: int32
        precision: 2
        scan_interval: 1
        scale: 0.01
        device_class: energy
        state_class: total_increasing

2 polubienia