Licznik energii dwukierunkowy VCX DTS-1946 + ESPHome + Home Asistant

po mojej nie udanej przygodzie z PZEM 004t (jednokierunkowy) czas na kolejna próbę.

Zamówiłem licznik
DTS-1946 Licznik energii elektrycznej 3-fazowy ze zdalnym odczytem danych poprzez MODBUS -RS485, 230V, 5 (100)A - VCX Power™

cena atrakcyjna nawet w porównaniu do SDM630

Do komunikacji mam zamiar wykorzystać Wemos D1 mini i konwerter RS485 - UART.
Wydaje mi się że jest juz to do ogarnięcia ESPHome już chyba wspiera to co potrzebuję uzyskać

esphome/readme.md at testing · martgras/esphome (github.com)
Tasmota ma już na pewno wsparcie dla smart meter wiec w ostateczności można tędy.

czy idę w dobrym kierunku, czy coś poprawić na samym początku w sensie doboru sprzętu do komunikacji??

Jak przyjdzie to na bieżąco będę informował o postępach. Sam licznik z informacji jakie posiadam po wymianie informacji na grupach związanych z Home Asistant, działa i nie ma problemu z integracją, aczkolwiek człowiek z którym rozmawiałem używa RS485 to USB i node red prasuje komunikaty.

Czy to wynika z ograniczeń technicznych, np. brak możliwości połączenia skrętką licznika z HA np. przez konwerter USB - RS485? Node-RED nie jest konieczny, wszystko można zrobić bezpośrednio w HA.

Dokładnie. Nie mam skrętki w rozdzielni. A mam wifi.

Wiem że node Red nie jest konieczny. Dałem przykład jak ktoś to rozwiązał

No to pozostaje ESPHome (Modbus Component — ESPHome) albo Tasmota (Smart Meter Interface - Tasmota).

No właśnie chce iść na espHome…

sprawdźcie proszę czy to mniej więcej o taki zapis chodzi i czy adresacja jest dobrze przeze mnie odczytywana

1.2 MODBUS-RTU Address Information
Data register:
Lp.	Address	Format	Data  description	Unit	R/W
1	0000-0001	float	A phase voltage 	V	R
2	0002-0003	float	B phase voltage	    V	R
3	0004-0005	float	C phase voltage	    V	R
4	0006-0007	float	AB line voltage 	V	R
5	0008-0009	float	BC line voltage 	V	R
6	000A-000B	float	CA line voltage 	V	R
7	000C-000D	float	A phase current	    A	R
8	000E-000F	Float   B phase current	    A	R
9	0010-0011	Float   C phase current	    A	R


uart:
  id: mod_bus
  tx_pin: GPIO1
  rx_pin: GPIO3
  baud_rate: 9600
  stop_bits: 1

modbus:
  flow_control_pin: GPIO2
  id: modbus1

modbus_controller:
  - id: epever
    ## the Modbus device addr
    address: 0x01
    modbus_id: modbus1
    setup_priority: -10


sensor:
  - platform: modbus_controller
    modbus_controller_id: epever
    id: Faza L1 napięcie
    name: "phase_l1_voltage"
    address: 0x0000
    unit_of_measurement: "V" ## for any other unit the value is returned in minutes
    register_type: read
    value_type: U_WORD
    accuracy_decimals: 1
    
  - platform: modbus_controller
    modbus_controller_id: epever
    id: Faza L2 napięcie
    name: "phase_l2_voltage"
    address: 0x0002
    unit_of_measurement: "V" ## for any other unit the value is returned in minutes
    register_type: read
    value_type: U_WORD
    accuracy_decimals: 1
    
  - platform: modbus_controller
    modbus_controller_id: epever
    id: Faza L3 napięcie
    name: "phase_l3_voltage"
    address: 0x0004
    unit_of_measurement: "V" ## for any other unit the value is returned in minutes
    register_type: read
    value_type: U_WORD
    accuracy_decimals: 1  
    
  - platform: modbus_controller
    modbus_controller_id: epever
    id: Faza L1 natężenie
    name: "phase_l1_current"
    address: 0x000C
    unit_of_measurement: "A" ## for any other unit the value is returned in minutes
    register_type: read
    value_type: U_WORD
    accuracy_decimals: 1 
    
  - platform: modbus_controller
    modbus_controller_id: epever
    id: Faza L2 natężenie
    name: "phase_l2_current"
    address: 0x000E
    unit_of_measurement: "A" ## for any other unit the value is returned in minutes
    register_type: read
    value_type: U_WORD
    accuracy_decimals: 1 
    
  - platform: modbus_controller
    modbus_controller_id: epever
    id: Faza L3 natężenie
    name: "phase_l3_current"
    address: 0x0010
    unit_of_measurement: "A" ## for any other unit the value is returned in minutes
    register_type: read
    value_type: U_WORD
    accuracy_decimals: 1  

Nie używam ESPHome do Modbusa.

A co lepiej używać?

Można wemos D1 użyć jako pośrednik modbus a Mqtt?

Sorry ale nie zrozumiałem pytania.

To czego używasz skoro nie espHome?

Nie używam ESPHome do Modbusa bo mam połączenie po kablu dlatego nie jest wstanie pomóc w kwestii konfiguracji ESPHome pod Modbus Controller — ESPHome.

zrobiłem i działa.

jakby ktoś potrzebował to wrzucam kod z esphome.

za pare dni opowiem jak wyglądają wskazania w porównaniu z Iskra od Tauronu

logger:
    level: DEBUG
    baud_rate: 0

uart:
  id: mod_bus
  tx_pin: D6
  rx_pin: D7
  baud_rate: 9600
  stop_bits: 1

modbus:
  #flow_control_pin: 23
  send_wait_time: 200ms
  id: mod_bus_vcx

modbus_controller:
  - id: vcx
    ## the Modbus device addr
    address: 0x1
    modbus_id: mod_bus_vcx
    command_throttle: 100ms
    setup_priority: -10
    update_interval: 1s

sensor:
  - platform: modbus_controller
    id: faza_l1_napiecie
    name: "Faza L1 napięcie"
    state_class: measurement
    register_type: read
    address: 0x200
    unit_of_measurement: "V"
    value_type: S_WORD
    accuracy_decimals: 2
#    skip_updates: 60
    filters:
      - multiply: 0.1
  - platform: modbus_controller
    id: faza_l2_napiecie
    name: "Faza L2 napięcie"
    state_class: measurement
    register_type: read
    address: 0x201
    unit_of_measurement: "V"
    value_type: S_WORD
    accuracy_decimals: 2
#    skip_updates: 60
    filters:
      - multiply: 0.1
  - platform: modbus_controller
    id: faza_l3_napiecie
    name: "Faza L3 napięcie"
    address: 0x202
    state_class: measurement
    unit_of_measurement: "V"
    register_type: read
    value_type: S_WORD
    accuracy_decimals: 2
#    skip_updates: 60
    filters:
      - multiply: 0.1
  - platform: modbus_controller
    id: czestotliwosc
    name: "Częstotliwość"
    register_type: read
    state_class: measurement
    address: 0x219
    unit_of_measurement: "Hz"
    value_type: S_WORD
    accuracy_decimals: 2
#    skip_updates: 60
    filters:
      - multiply: 0.01
  - platform: modbus_controller
    id: faza_l1_prad
    name: "Faza L1 prąd"
    register_type: read
    state_class: measurement
    address: 0x206
    unit_of_measurement: "A"
    value_type: S_WORD
    accuracy_decimals: 3
#    skip_updates: 60
    filters:
      - multiply: 0.001
  - platform: modbus_controller
    id: faza_l2_prad
    name: "Faza L2 prąd"
    register_type: read
    state_class: measurement
    address: 0x207
    unit_of_measurement: "A"
    value_type: S_WORD
    accuracy_decimals: 3
#    skip_updates: 60
    filters:
      - multiply: 0.001
  - platform: modbus_controller
    id: faza_l3_prad
    name: "Faza L3 prąd"
    register_type: read
    state_class: measurement
    address: 0x208
    unit_of_measurement: "A"
    value_type: S_WORD
    accuracy_decimals: 3
#    skip_updates: 60
    filters:
      - multiply: 0.001
  - platform: modbus_controller
    id: faza_l1_moc_czynna
    name: "Faza L1 moc czynna"
    register_type: read
    state_class: measurement
    address: 0x209
    unit_of_measurement: "W"
    value_type: S_WORD
#    accuracy_decimals: 2
#    skip_updates: 60
    #filters:
    #  - multiply: 10
  - platform: modbus_controller
    id: faza_l2_moc_czynna
    name: "Faza L2 moc czynna"
    register_type: read
    state_class: measurement
    address: 0x20A
    unit_of_measurement: "W"
    value_type: S_WORD
#    accuracy_decimals: 2
#    skip_updates: 60
    #filters:
    #  - multiply: 10   
  - platform: modbus_controller
    id: faza_l3_moc_czynna
    name: "Faza L3 moc czynna"
    register_type: read
    state_class: measurement
    address: 0x20B
    unit_of_measurement: "W"
    value_type: S_WORD
#    accuracy_decimals: 2
#    skip_updates: 60
    #filters:
    # - multiply: 10 
  - platform: modbus_controller
    id: calkowita_moc_czynna
    name: "Całkowita moc czynna"
    register_type: read
    state_class: measurement
    address: 0x20C
    unit_of_measurement: "kW"
    value_type: S_WORD
    accuracy_decimals: 3
#    skip_updates: 300
    filters:
     - multiply: 0.001  
  - platform: modbus_controller
    id: moc_czynna_pobrana
    name: "Moc czynna pobrana"
    register_type: read
    icon: mdi:circle-slice-3
    device_class: energy
    state_class: total_increasing
    address: 0x034
    unit_of_measurement: "kWh"
    value_type: FP32
    accuracy_decimals: 1
    skip_updates: 60
    # filters:
    #   - multiply: 0.01    
  - platform: modbus_controller
    id: moc_czynna_oddana
    name: "Moc czynna oddana"
    register_type: read
    icon: mdi:circle-slice-3
    device_class: energy
    state_class: total_increasing
    address: 0x036
    unit_of_measurement: "kWh"
    value_type: FP32
    accuracy_decimals: 1
    skip_updates: 60
    # filters:
    #   - multiply: 0.01 
  - platform: modbus_controller
    id: faza_l1_cos
    name: "Faza L1 cosφ"
    register_type: read
    state_class: measurement
    address: 0x215
    unit_of_measurement: ""
    value_type: S_WORD
    accuracy_decimals: 2
    skip_updates: 5
    filters:
      - multiply: 0.001 
  - platform: modbus_controller
    id: faza_l2_cos
    name: "Faza L2 cosφ"
    register_type: read
    state_class: measurement
    address: 0x216
    unit_of_measurement: ""
    value_type: S_WORD
    accuracy_decimals: 2
    skip_updates: 5
    filters:
      - multiply: 0.001  
  - platform: modbus_controller
    id: faza_l3_cos
    name: "Faza L3 cosφ"
    register_type: read
    state_class: measurement
    address: 0x217
    unit_of_measurement: ""
    value_type: S_WORD
    accuracy_decimals: 2
    skip_updates: 5
    filters:
      - multiply: 0.001  
  
  
1 Like

@Marcin.KnD i jak wygląda porównanie pomiarów z licznikiem Tauronu ?

Takie same wskazania, sprawdzałem kilka dni z rzędu

dzięki, bo mam 2 do zamontowania, jeden na cały dom, drugi tylko na pompę ciepła. :slight_smile:

Na PC to uważam że jest przerost formy. Lepiej dać zwykły i czytać impulsy. Zaoszczędzisz 100 zl

Możesz polecić jakiś licznik, impulsy lub zużytą energie mogę czytać po skrętce (modbus ) ?

Ja do pompy ciepła mam Zamel LEM30, z wyjściem impulsowym (chociaż ja czytam mrugnięcia diody) do tego ESPhome i przelicza impulsy na zużycie. Jak go montowałem to nie myślałem jeszcze o Home Assistant

Ale jak musi być na modbus to faktycznie jak na szybko przejrzałem to nie znajdziesz taniej niż VCX1964 lub SDM72D-M (około 230 - 260 zł)

Taniej możesz tylko na trzech modułach PZEM004t z cewkami, z tego co pamiętam one latają na modbus, ale w Polsce ciężko będzie ci je znaleźć w dobrej cenie. Ja pamiętam że ściągałem z Chin i wyszło mnie ok 100 - 120 zł chyba na shopee była najlepsza cena.

1 Like

Dzięki pomocy autora wsadu udało mi się uruchomić komunikacje . Zmyliło mnie podłączenie TX do RX jak przy programowaniu a powinno być TX do TX. Aby ruszyła komunikacja należy najpierw uruchomić vemos d1 a następnie konwerter .Niestety przy zaniku zasilania esp trzeba by było znowu powtórzyć operacie, żeby tego uniknąć zastosowałem układ dd04cvsa na 5v i baterie lijon i przetwornice 230v/5v.

Oczywiście fizycznie musi być TX do RX (bo tylko wtedy działa komunikacja szeregowa - łączysz zawsze nadajnik Tx z odbiornikiem Rx oczywiście o ile opis wyprowadzeń jest poprawny), tylko po prostu po jednej stronie wyprowadzenia są opisane niezgodnie z powszechnym zwyczajem (to wbrew pozorom zdarza się dość często, więc zamiana Tx z Rx jest jednym z podstawowych kroków diagnostyki przy uruchamianiu połączenia portem szeregowym).

Też tak myślałem i niestety cały czas dostawałem błędy w logach ,konwerter mam taki sam jak na rysunku na stronie projektu Esphome i opisy rozszerzeń. Dlatego wstawiłem tu tą informacje gdyby ktoś też miał z tym problem .