Licznik energii Orno OR-WE-504

Hej,

Znajdę gdzieś jakieś gotowe rozwiązanie na połączenie licznika Orno OR-WE-504 z HA (RS485)?

Najbardziej mnie interesuje połączenie przez ESP (8266/32) lub ewentualnie LAN - nie mam jak przeprowadzić kabla między licznikiem, a serwerem, a LAN leci przez dwa switche.

1 polubienie

Jeżeli licznik obsługuje Modbus (nie sprawdzałem tego) to podłączenie jest każdy inny licznik z Modbus, np. SDM630 + ESPHome WiFi a potem to odczyt rejestrów za pomocą Modbus Controller — ESPHome .

Dziękuję za odpowiedź.

Tak, jest Modbus

Przeszukałem szufady i mam dokładnie na tą chwilę NodeMCU v3 i konwerter UART-RS485 dokładnie taki sam jak w podanym temacie.

Niestety, ale to za wysokie progi jak ma mój umysł aby te kody złożyć w całość. Szukam dalej.

Chyba prościej niż w wątku podlinkowanym przez @macek się nie da.

NodeMCU v3 jest pin w pin zgodny z NodeMCU v2 (tym który jest tam na obrazku), a w ESPHome musisz tylko poprawić piny na których będziesz miał podpięty konwerter na RS485 (zgodnie ze schematem, czyli RX i TX).

Czyli coś źle zrozumiałem - myślałem, że ja muszę wszystkie te wpisy zrobić dla swojego licznika, a ja mogę ten kod wykorzystać.
W takim razie lutuję wszytko, łączę i dam znać co wyszło z tego :wink:

Nie, to SDM630 + ESPHome WiFi jest pod SDMxxx, miałem na myśli samo połączenie, ale masz przecież też to:

Oczywiście rejestry musisz dopasować w/g dokumentacji swojego licznika.

To znów ja :smiley:
Trochę z dokumentacją, a trochę podpatrując kody innych, zmajstrowałem coś takiego:

esphome:
 name: esp32orno
esp32:
 board: esp32dev
 framework:
   type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
 encryption:
   key: "0QE/OoYD9dUZTGIeve/Ic6FZWEe9hnLF9z+QoHHBFyQ="

ota:
 password: "94ba4a62ec22107dd298d96d636a0dad"

wifi:
 ssid: !secret wifi_ssid
 password: !secret wifi_password
 # Enable fallback hotspot (captive portal) in case wifi connection fails
 ap:
   ssid: "Esp32Orno Fallback Hotspot"
   password: "qkKNHAwZC0rT"

captive_portal:

uart:
 id: mod_bus
 rx_pin: 16
 tx_pin: 17
 baud_rate: 9600
 stop_bits: 1

modbus:
 id: modbus1
 # flow_control_pin: 5

modbus_controller:
 - id: orno_we_504
   address: 0x1
   modbus_id: modbus1

sensor:
 - platform: modbus_controller
   modbus_controller_id: orno_we_504
   name: "Orno OR-WE-504 Voltage"
   id: voltage
   register_type: holding    
   address: 00
   unit_of_measurement: "V"
   value_type: U_WORD
   accuracy_decimals: 1
   filters:
   - multiply: 0.1

 - platform: modbus_controller
   modbus_controller_id: orno_we_504
   name: "Orno OR-WE-504 Current"
   id: current
   register_type: holding
   address: 01
   unit_of_measurement: "A"
   value_type: U_WORD
   accuracy_decimals: 1
   filters:
   - multiply: 0.1

 - platform: modbus_controller
   modbus_controller_id: orno_we_504
   name: "Orno OR-WE-504 Frequency"
   id: frequency
   register_type: holding
   address: 02
   unit_of_measurement: "Hz"
   value_type: U_WORD
   accuracy_decimals: 1
   filters:
   - multiply: 0.1    

 - platform: modbus_controller
   modbus_controller_id: orno_we_504
   name: "Orno OR-WE-504 Active Power"
   id: active_power
   register_type: holding
   address: 03
   unit_of_measurement: "W"
   value_type: U_WORD
   accuracy_decimals: 0
   filters:
   - multiply: 1.0    

 - platform: modbus_controller
   modbus_controller_id: orno_we_504
   name: "Orno OR-WE-504 Reactive Power"
   id: reactive_power
   register_type: holding
   address: 04
   unit_of_measurement: "var"
   value_type: U_WORD
   accuracy_decimals: 0
   filters:
   - multiply: 1.0    

 - platform: modbus_controller
   modbus_controller_id: orno_we_504
   name: "Orno OR-WE-504 Apparent Power"
   id: apparent_power
   register_type: holding
   address: 05
   unit_of_measurement: "VA"
   value_type: U_WORD
   accuracy_decimals: 0
   filters:
   - multiply: 1.0

 - platform: modbus_controller
   modbus_controller_id: orno_we_504
   name: "Orno OR-WE-504 Power Factor"
   id: power_factor
   register_type: holding
   address: 06
   unit_of_measurement: " "
   value_type: U_WORD
   accuracy_decimals: 1
   filters:
   - multiply: 0.001

 - platform: modbus_controller
   modbus_controller_id: orno_we_504
   name: "Orno OR-WE-504 Active Energy"
   id: active_energy
   register_type: holding
   address: 07
   unit_of_measurement: "kWh"
   value_type: U_DWORD
   accuracy_decimals: 2
   filters:
   - multiply: 0.001

 - platform: modbus_controller
   modbus_controller_id: orno_we_504
   name: "Orno OR-WE-504 Reactive Energy"
   id: reactive_energy
   register_type: holding
   address: 09
   unit_of_measurement: "kvarh"
   value_type: U_DWORD
   accuracy_decimals: 2
   filters:
   - multiply: 0.001

Coś mi nie trybiło na ESP8266 i zrobiłem wszytko na ESP32

Podpowiedzcie czy ten kod jest OK i jak ja mam to zrobić aby mieć “normalne” ikony przypisane do danych wartości zamiast tego obecnego “oka”
Bez tytułu

Wywaliłem większość pustych linii, bo zaciemniają obraz.
Niestety masz coś nie halo z edytorem, bo wcięcia nie są prawidłowych głębokości (powinny być to wielokrotności 2 spacji).

Aby nie było “oka” a sensory zachowywały się “normalnie” w porównaniu do odpowiedników z innych integracji musisz dodać przynajmniej device_class (to powinno załatwić też domyślne ikony), a aby mogły prawidłowo działać w innych integracjach np. panelu energii to również state_class

fragmencik np. dla woltomierza (poprawiłem na 4 spacje, ale całość YAMLa musi być odpowiednio powyrównywana)

    address: 00
    unit_of_measurement: "V"
    device_class: "voltage"
    state_class: "measurement"

dla innych wskazań zamiast voltage ma być current, frequency, energy, apparent_power, reactive_power, power czy power_factor (przejrzyj dokumentację a’propos state_class, bo to trzeba dobrać do rodzaju wskazań, ale wydaje się, że tylko dla energii biernej/czynnej powinieneś mieć total_increasing).

Mnożenie przez 1.0 nie ma sensu (a zużywa zasoby).

Na ESP8266 się nie udało, bo zapewne nie wyłączyłeś loggera (tam jest tylko 1 UART)

logger:
  baud_rate: 0

Nie wiem dlaczego tak wyszło. Kod jest żywcem wzięty (kopiuj-wklej) z edytora esphome - oczywiście używam podwójnej spacji.

Dzięki wielkie, tego mi brakowało, a coś nie mogłem się odnaleźć
Bez tytułu

Czyli wpis zbędny?

Znalazłem, że trzeba wyłączyć logger, ale i tak coś było nie halo… jeszcze będę próbował.
Dziękuję za pomoc, aż nie wierzę, że się udało. Dziwne, że nikt nie używa tego licznika

Ktoś używa - użyłem google i… były linki do naszego forum, tylko nikt nie podał gotowego rozwiązania (swoją drogą gdy uzyskasz 100% zadowolenia, to wrzuć gotowy kod).
Jakkolwiek patrząc na daty - wtedy nie było jeszcze integracji modbus w ESPHome.

Tam, gdzie mnożysz przez 1 wywal.

Trzeba też użyć pinów TX i RX (GPIO1 i GPIO3)

Oczywiście, że tak zrobię - najpierw się jeszcze pobawię i zobaczę jak to będzie działać z tydzień/dwa :wink:
Jak będzie to działać na 100% to myślę, że wezmę się jeszcze za PCB aby to miało ręce i nogi po zawieszeniu na szynie DIN

Bo to nie licznik tylko wskaźnik, jest to opisane w instrukcji obsługi:

Dziwne, że nikt nie używa tego wskaźnika :wink:

Ja uzywam,ale mam podpięte do lankontolera i wysylam na pvmonitor, a posrednio jeszcze przez NR sciagam z LK do HA.Udało mi sie to zrobić dzieki pomocy kolegów z tego forum.Mam jeszcze jedna wolną sztukę i na dniach bedę zakładał klimatyzację wiec może go użyję z esp8266.
Podzielisz się kodem?

Oczywiście, że się podzielę kodem. Za to właśnie lubię fora, jeden coś pomoże, drugi coś doda…
Na dniach spróbuję jeszcze z ESP8266 i wrzucę wszytko co mam. Teraz działa to na ESP32 i od wczoraj zero problemów.

Edit:

Panowie, to (chyba prawidłowo) działa.
Wczoraj odpaliłem wszytko na ESP8266 (NodeMCU V3) i wygląda jakby było OK - proszę o komentarz bardziej doświadczonych kolegów czy tak może być czy należy coś jeszcze poprawić?

esphome:
  name: orno-or-we-504

esp8266:
  board: nodemcuv2

logger:
  baud_rate: 0

api:
  encryption:
    key: "Psp/eAJFbUwQyYo+k8oJoiX8efV89gxh7kkMPL4QE1g="

ota:
  password: "0ceb6d0c7bd291f534ecab5914bbd6dd"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  ap:
    ssid: "Orno-OR-WE-504"
    password: "1234567890"

captive_portal:

uart:
  id: mod_bus
  tx_pin: 1
  rx_pin: 3
  baud_rate: 9600
  stop_bits: 1

modbus:
  id: modbus1

modbus_controller:
  - id: orno_or_we_504
    address: 0x1
    modbus_id: modbus1
 
sensor:
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_504
    name: "Orno OR-WE-504 Voltage"
    id: voltage
    register_type: holding    
    address: 00
    unit_of_measurement: "V"
    device_class: "voltage"
    state_class: "measurement"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_504
    name: "Orno OR-WE-504 Current"
    id: current
    register_type: holding
    address: 01
    unit_of_measurement: "A"
    device_class: current
    state_class: "measurement"
    value_type: U_WORD 
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_504
    name: "Orno OR-WE-504 Frequency"
    id: frequency
    register_type: holding
    address: 02
    unit_of_measurement: "Hz"
    state_class: "measurement"
    device_class: frequency
    value_type: U_WORD 
    accuracy_decimals: 1
    filters:
    - multiply: 0.1    
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_504
    name: "Orno OR-WE-504 Active Power"
    id: active_power
    register_type: holding
    address: 03
    unit_of_measurement: "W"
    state_class: "measurement"
    device_class: power
    value_type: U_WORD 
    accuracy_decimals: 0  
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_504
    name: "Orno OR-WE-504 Reactive Power"
    id: reactive_power
    register_type: holding
    address: 04
    unit_of_measurement: "var"
    state_class: "measurement"
    device_class: reactive_power
    value_type: U_WORD 
    accuracy_decimals: 0 
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_504
    name: "Orno OR-WE-504 Apparent Power"
    id: apparent_power
    register_type: holding
    address: 05
    unit_of_measurement: "VA"
    state_class: "measurement"
    device_class: apparent_power
    value_type: U_WORD 
    accuracy_decimals: 0
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_504
    name: "Orno OR-WE-504 Power Factor"
    id: power_factor
    register_type: holding
    address: 06
    unit_of_measurement: " "
    state_class: "measurement"
    device_class: power_factor
    value_type: U_WORD 
    accuracy_decimals: 1
    filters:
    - multiply: 0.001 
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_504
    name: "Orno OR-WE-504 Active Energy"
    id: active_energy
    register_type: holding
    address: 07
    unit_of_measurement: "kWh"
    state_class: "total_increasing"
    device_class: energy
    value_type: U_DWORD 
    accuracy_decimals: 2
    filters:
    - multiply: 0.001 
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_504
    name: "Orno OR-WE-504 Reactive Energy"
    id: reactive_energy
    register_type: holding
    address: 09
    unit_of_measurement: "kvarh"
    state_class: "total_increasing"
    device_class: reactive_power
    value_type: U_DWORD 
    accuracy_decimals: 2
    filters:
    - multiply: 0.001   



Biorąc pod uwagę dokumentację state_class i device_class mają tam cudzysłowy, ale to jakaś zaszłość - biorąc pod uwagę zgodność z YAMLem stosowanym w HA są one zbędne (więc warto mieć jakąś spójność - sugeruję się ich pozbyć).
Można dołożyć też kilka “wodotrysków” w postaci serwera www ze statusem urządzenia

web_server:
  port: 80

binary_sensor:
  - platform: status
    name: "Node Status"
    id: system_status

tak jak sugerowałem np. tam (mam na myśli czytelność i układ kodu - twój jest OK, ale przy dodawaniu czegoś nowego warto zachować jakiś układ w którym bloki powiązane są tematycznie - więc np. webserwer dałbym w okolicach głównych ustawień konfiguracyjnych)


Generalnie to jest takie fajne repozytorium, gdzie można dzielić się “gotowcami” kodu ESPhome, implementacje liczników/wskaźników energii są tam:

a tu instrukcja jak tam dodawać coś nowego

Oczywiście tam powinieneś wrzucić opisy encji po angielsku tak jak miałeś w pierwotnej wersji.

Nie mogłem się wszystkich cudzysłowów pozbyć - zostały przy “unit_of_measurement” ponieważ przy “Power Factor” nie ma jednostki i jest potrzebna spacja, więc wszędzie zostawiłem cudzysłów przy jednostkach dla ujednolicenia.

O, kurczaczki… teraz to jest full profeska


Nie wiem czy to wcześniej było, ale w ESPhome mam dodatkowy guzik “VISIT”, po kliknięciu objawia się to:

Myślę, że teraz jest zgodnie ze sztuką i przejrzyście.

Dodałem w kodzie komentarze.

Zakładając ten temat miałem już myśl z tyłu głowy “chyba trzeba poszukać innego licznika bo tego nikt nie używa i nie działa”, a tu wyszło dużo lepiej niż chciałem :slight_smile:
Przeogromnie dziękuję za pomoc.

Zobaczymy co napisze kolega @rakon po testach

PS
Przepraszam też za pisanie posta pod postem, obiecuję się poprawić :wink:

Ale pisałem tylko o state_class i device_class !

Wcześniej nie było bo nie było serwera www (on jest tym “wodotryskiem” i można go stosować, gdy mamy wolne zasoby - na końcu kompilacji masz wskaźnik wykorzystania RAMu i flasha).

w/g dokumentacji HA obecnie stosowana jest jednostka “%” (więc mnożnik byś musiał mieć mniejszy 100x), nie wiem czy się to utrzyma (i w PL raczej stosuje się tak jak zrobiłeś)

I to się liczy :+1:

Z tego wszystkiego zapomniałem o kodzie :smiley:
orno-or-we-504.yaml (4,4 KB)

Kod lepiej załączyć w formie załącznika czy kodu?

Edit:

# ESP module configuration
esphome:
  name: orno-or-we-504 # The name of the module in Home Assistant 
  platform: ESP8266
  board: nodemcuv2 # NodeMCU V2/V3

# Configure logging
# Turn off logging because RX/TX pins used for modbus
logger:
  level: DEBUG
  baud_rate: 0 # OFF

# Enable Home Assistant API  
api:
  encryption:
    key: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

ota:
  password: "XXXXXXXXXXXXXXXXXXXXXXXXXX"

wifi:
  ssid: "your_ssid"
  password:"your_password"
  
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Orno-OR-WE-504"
    password: "1234567890"

web_server:
    port: 80

binary_sensor:
  - platform: status
    name: "Orno OR-WE-504 Status"
    id: system_status

captive_portal:

# UART configuration for the meter
uart:
  id: mod_bus
  tx_pin: 1 # GPIO01 TX
  rx_pin: 3 # GPIO03 RX
  # required for this meter type
  baud_rate: 9600
  parity: EVEN
  stop_bits: 1

# MODBUS configuration for the meter
modbus:
  id: modbus1
  # flow_control_pin: 5
  # not needed for my RS485 converter, but likely useful for ones with DE/RE pins

modbus_controller:
  - id: orno_or_we_504 # most likely similar devices will work as well
    # The Modbus device address
    address: 0x1
    modbus_id: modbus1
    setup_priority: -10

# Readout of meter parameters
sensor:
  # Voltage
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_504
    name: Orno OR-WE-504 Voltage
    id: voltage
    register_type: holding    
    address: 00
    unit_of_measurement: "V"
    device_class: voltage
    state_class: measurement
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
  # Current
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_504
    name: Orno OR-WE-504 Current
    id: current
    register_type: holding
    address: 01
    unit_of_measurement: "A"
    device_class: current
    state_class: measurement
    value_type: U_WORD 
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
  # Frequency  
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_504
    name: Orno OR-WE-504 Frequency
    id: frequency
    register_type: holding
    address: 02
    unit_of_measurement: "Hz"
    state_class: measurement
    device_class: frequency
    value_type: U_WORD 
    accuracy_decimals: 1
    filters:
    - multiply: 0.1    
  # Active Power  
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_504
    name: Orno OR-WE-504 Active Power
    id: active_power
    register_type: holding
    address: 03
    unit_of_measurement: "W"
    state_class: measurement
    device_class: power
    value_type: U_WORD 
    accuracy_decimals: 0  
  # Reactive Power  
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_504
    name: Orno OR-WE-504 Reactive Power
    id: reactive_power
    register_type: holding
    address: 04
    unit_of_measurement: "var"
    state_class: measurement
    device_class: reactive_power
    value_type: U_WORD 
    accuracy_decimals: 0 
  # Apparent Power  
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_504
    name: Orno OR-WE-504 Apparent Power
    id: apparent_power
    register_type: holding
    address: 05
    unit_of_measurement: "VA"
    state_class: measurement
    device_class: apparent_power
    value_type: U_WORD 
    accuracy_decimals: 0
  # Power Factor  
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_504
    name: Orno OR-WE-504 Power Factor
    id: power_factor
    register_type: holding
    address: 06
    unit_of_measurement: " "
    state_class: measurement
    device_class: power_factor
    value_type: U_WORD 
    accuracy_decimals: 1
    filters:
    - multiply: 0.001 
  # Active Energy  
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_504
    name: Orno OR-WE-504 Active Energy
    id: active_energy
    register_type: holding
    address: 07
    unit_of_measurement: "kWh"
    state_class: total_increasing
    device_class: energy
    value_type: U_DWORD 
    accuracy_decimals: 2
    filters:
    - multiply: 0.001 
  # Reactive Energy  
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_504
    name: Orno OR-WE-504 Reactive Energy
    id: reactive_energy
    register_type: holding
    address: 09
    unit_of_measurement: "kvarh"
    state_class: total_increasing
    device_class: reactive_power
    value_type: U_DWORD 
    accuracy_decimals: 2
    filters:
    - multiply: 0.001  
# End of program  
1 polubienie

Jakkolwiek, tekst jest jednak o tyle wygodniejszy, że widać go od razu i można wykorzystać fragmenty.


Jeśli masz jeszcze siłę na to, to możesz opublikować w tym repozytorium o którym wspomniałem - tam jest też miejsce na kawałek opisu technicznego jak rozwiązałeś połączenie (mam na myśli konwerter UART-RS485/modbus bo przecież to z YAMLa nie wynika, a zauważyłem, że najczęstszym błędem początkujących jest podpinanie bezpośrednio do pinów ESP bez konwertera).