Licznik energii Orno OR-WE-504

Edytowałem poprzedni post i wkleiłem kod.

Co do udostępniania… myślę, że popatrzę jak to wszytko działa np. przez tydzień i jak nie będzie problemów to wszytko tam wrzucę - może ktoś skorzysta :wink:

Programowo zrobione na 99% (1% na ewentualne poprawki) więc trzeba będzie się jeszcze wziąć za PCB, aby to był już taki komplet (bezpiecznik, zasilacz, ESP8266) na szynę DIN - jeszcze spróbuję z MAX3485 zamiast tego obecnego konwertera.

Edit
Zanim podzielę się ostatecznym kodem to mam małe pytanie. Czy można jakoś na stałe zapisać dane odnośnie API i OTA (!secret) czy to jest za każdym razem inne i nie da się użyć jako stałe?

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

ota:
  password: "0ceb6d0c7bd291f534ecab5914bbd6dd"

Edit2
Taki trochę roboczy kod, ale wygląda na to, że wszytko działa :wink:

substitutions:
  device_name: "Orno OR-WE-504"
  host_name: "orno_or_we_504"

# 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: "HIJNp/h2u8tqkr8diWz/v0LMwOJ0kZxGxjgr2S6wDCI="

ota:
  password: "fcd002b9c07d4ea5d0b59370eceb8a23"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: ${host_name}
    password: !secret ap_password

captive_portal:

web_server:
    port: 80
    auth:
      username: "admin"
      password: !secret web_server_password

time:
  - platform: homeassistant
    id: homeassistant_time      

binary_sensor:
  - platform: status
    name: "${device_name} Status"
    id: system_status

button:
  - platform: restart
    name: "${device_name} Restart"
    device_class: restart   

# 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: ${host_name} # most likely similar devices will work as well
    # The Modbus device address
    address: 0x1
    modbus_id: modbus1
    setup_priority: -10

# Readout of meter parameters
  # Uptime
text_sensor:
  - platform: template
    name: "${device_name} Uptime"
    id: uptime_human
    icon: mdi:clock-start
sensor:
  - platform: uptime
    name: "${device_name} Uptime Sensor"
    id: uptime_sensor
    on_raw_value:
      then:
        - text_sensor.template.publish:
            id: uptime_human
            state: !lambda |-
              int seconds = round(id(uptime_sensor).raw_state);
              int days = seconds / (24 * 3600);
              seconds = seconds % (24 * 3600);
              int hours = seconds / 3600;
              seconds = seconds % 3600;
              int minutes = seconds /  60;
              seconds = seconds % 60;
              return (
                (days ? to_string(days) + "d " : "") +
                (hours ? to_string(hours) + "h " : "") +
                (minutes ? to_string(minutes) + "m " : "") +
                (to_string(seconds) + "s")
              ).c_str();         
  # Wi-Fi Signal
  - platform: wifi_signal
    name: "${device_name} WiFi Signal"
    device_class: "signal_strength"
    entity_category: "diagnostic"
  # Voltage
  - platform: modbus_controller
    modbus_controller_id: ${host_name}
    name: ${device_name} 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: ${host_name}
    name: ${device_name} 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: ${host_name}
    name: ${device_name} 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: ${host_name}
    name: ${device_name} 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: ${host_name}
    name: ${device_name} 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: ${host_name}
    name: ${device_name} 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: ${host_name}
    name: ${device_name} 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: ${host_name}
    name: ${device_name} 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: ${host_name}
    name: ${device_name} 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  

W kodzie należy zmienić na swoje:

  • api key
  • ota password
    oraz uzupełnić/dodać w secrets.yaml
  • !secret wifi_ssid
  • !secret wifi_password
  • !secret ap_password
  • !secret web_server_password

Mój poligon testowy to:

  • płytka NodeMCU V3

  • konwerter
    obraz

  • licznik Ono OR-WE-504

  • zasilanie z ładowarki USB

Połączanie jak w linku, który wskazał @macek - trochę to dziwne, ale łączymy TX z TX i RX z RX

W planach mam jeszcze zrobienie PCB pod to wszytko, ale tak bliżej nieokreślony czas :slight_smile:
Mam nadzieję, że komuś to się przyda i jeżeli ktoś z tego skorzysta to podzieli się spostrzeżeniami.



1 polubienie

Oczywiście, że można.
(jakkolwiek automatyczny kreator nowego urządzenia tego nie wykorzysta, więc trzeba to ogarniać “z palca”)

W konwerterach taki opis złącz to normalne (konwerter jako taki nie jest portem szeregowym).

Więc nie było pytania :slight_smile:

Racja, ale jakoś to mnie zmyliło…

Prototyp dla licznika działa, pogodynka prawie działa to mam jeszcze jeden projekt, który ma być dość sporo rozbudowany. To całe HA, ESPHome strasznie wciąga ha ha

2 polubienia

Cześć - jestem tutaj nowy ale moja obecność związana jest z inspiracją tym konkretnym tematem.

Posiadam licznik energii ORNO OR-WE-516, wydawało by się że bardzo podobny i nie będzie większych problemów z integracją w HA. Niestety nie do końca potrafię zczytywać odpowiednie wartości:

Posiadam:
HA + ESP8266 (Nodemcu3) + konwerter RS485 to TTL

Licznik testowo spięty bezpośrednio przez konwerter USB-Modbus i aplikację od Orno działa prawidłowo - wszystko jest odczytywane prawidłowo.

Licznik podłaczony do ESP przez konwerter też się łączy ale zamiast konkretnych wartości zwraca nic nie mówiące cyfry.

Mam wrażenie, że nie do końca czytam właściwe rejestry - tego nie ogarniam.

Czy mógł bym prosić o pomoc w tym temacie?

Adresy rejestrów dla ORNO OR-WE-516

Zawartość pliku yaml

esphome:
  name: esp8266-01
  friendly_name: ESP8226_01

esp8266:
  board: esp01_1m

# 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: "MWwEDbUnU2D0hHbe5+AEFCi3RVtYK38FwfDsHUdPAu0="

ota:
  password: "0368a55cc7427fb96f01d39d904f164f"

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

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp8266-01 Fallback Hotspot"
    password: "7IOxWaAUgkxC"

# 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_516 # most likely similar devices will work as well
    # The Modbus device address
    address: 2
    modbus_id: modbus1
    setup_priority: -10
    update_interval: 5s

captive_portal:

sensor:
  - platform: dht
    pin: 2
    model: AUTO_DETECT
    temperature:
      name: "Temperatura"
    humidity:
      name: "Wilgotnosc"
    update_interval: 60s
  # Readout of meter parameters
  # Voltage
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_516
    name: Orno OR-WE-516 Voltage
    id: voltage
    register_type: holding
    address: 0x000E
    unit_of_measurement: "V"
    device_class: voltage
    state_class: measurement
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
  # Active Energy  
  - platform: modbus_controller
    modbus_controller_id: orno_or_we_516
    name: Orno OR-WE-516 Active Energy
    id: active_energy
    register_type: holding
    address: 0x013C
    unit_of_measurement: "kWh"
    state_class: total_increasing
    device_class: energy
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
    - multiply: 0.001

Log:

INFO ESPHome 2023.11.4
INFO Reading configuration /config/esphome/esp8226-01.yaml...
INFO Generating C++ source...
INFO Compiling app...
Processing esp8226-01 (board: esp01_1m; framework: arduino; platform: platformio/espressif8266@3.2.0)
--------------------------------------------------------------------------------
HARDWARE: ESP8266 80MHz, 80KB RAM, 1MB Flash
Dependency Graph
|-- ESPAsyncTCP-esphome @ 2.0.0
|-- ESPAsyncWebServer-esphome @ 3.1.0
|-- DNSServer @ 1.1.1
|-- ESP8266WiFi @ 1.0
|-- ESP8266mDNS @ 1.2
|-- noise-c @ 0.1.4
Compiling .pioenvs/esp8226-01/src/main.cpp.o
Linking .pioenvs/esp8226-01/firmware.elf
RAM:   [====      ]  42.5% (used 34788 bytes from 81920 bytes)
Flash: [=====     ]  49.6% (used 507933 bytes from 1023984 bytes)
Building .pioenvs/esp8226-01/firmware.bin
esp8266_copy_factory_bin([".pioenvs/esp8226-01/firmware.bin"], [".pioenvs/esp8226-01/firmware.elf"])
========================= [SUCCESS] Took 10.22 seconds =========================
INFO Successfully compiled program.
INFO Resolving IP address of esp8226-01.local
INFO  -> 192.168.1.181
INFO Uploading /data/build/esp8226-01/.pioenvs/esp8226-01/firmware.bin (512080 bytes)
INFO Compressed to 359064 bytes
Uploading: [============================================================] 100% Done...

INFO Waiting for result...
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from esp8226-01.local using esphome API
WARNING Can't connect to ESPHome API for esp8226-01: Error resolving IP address: [Errno -5] No address associated with hostname (APIConnectionError)
INFO Trying to connect to esp8226-01 in the background
INFO Successfully connected to esp8226-01 in 0.006s
INFO Successful handshake with esp8226-01 in 3.068s
[16:46:08][I][app:102]: ESPHome version 2023.11.4 compiled on Nov 26 2023, 16:45:31
[16:46:08][C][wifi:559]: WiFi:
[16:46:08][C][wifi:391]:   Local MAC: 84:F3:EB:E9:09:08
[16:46:08][C][wifi:396]:   SSID: 
[16:46:08][C][wifi:397]:   IP Address: 192.168.1.181
[16:46:08][C][wifi:398]:   BSSID: 
[16:46:08][C][wifi:400]:   Hostname: 'esp8226-01'
[16:46:08][C][wifi:402]:   Signal strength: -77 dB ▂▄▆█
[16:46:08][C][wifi:406]:   Channel: 13
[16:46:08][C][wifi:407]:   Subnet: 255.255.255.0
[16:46:08][C][wifi:408]:   Gateway: 192.168.1.1
[16:46:08][C][wifi:409]:   DNS1: 192.168.1.1
[16:46:08][C][wifi:410]:   DNS2: 0.0.0.0
[16:46:08][C][logger:416]: Logger:
[16:46:08][C][logger:417]:   Level: DEBUG
[16:46:08][C][logger:418]:   Log Baud Rate: 0
[16:46:08][C][logger:420]:   Hardware UART: UART0
[16:46:08][C][uart.arduino_esp8266:102]: UART Bus:
[16:46:08][C][uart.arduino_esp8266:103]:   TX Pin: GPIO1
[16:46:08][C][uart.arduino_esp8266:104]:   RX Pin: GPIO3
[16:46:08][C][uart.arduino_esp8266:106]:   RX Buffer Size: 256
[16:46:08][C][uart.arduino_esp8266:108]:   Baud Rate: 9600 baud
[16:46:08][C][uart.arduino_esp8266:109]:   Data Bits: 8
[16:46:08][C][uart.arduino_esp8266:110]:   Parity: EVEN
[16:46:08][C][uart.arduino_esp8266:111]:   Stop bits: 1
[16:46:08][C][uart.arduino_esp8266:113]:   Using hardware serial interface.
[16:46:08][C][modbus:143]: Modbus:
[16:46:08][C][modbus:145]:   Send Wait Time: 250 ms
[16:46:08][C][modbus:146]:   CRC Disabled: NO
[16:46:08][C][dht:017]: DHT:
[16:46:08][C][dht:018]:   Pin: GPIO2
[16:46:08][C][dht:020]:   Auto-detected model: DHT11
[16:46:08][C][dht:027]:   Update Interval: 60.0s
[16:46:08][C][dht:029]:   Temperature 'Temperatura'
[16:46:08][C][dht:029]:     Device Class: 'temperature'
[16:46:08][C][dht:029]:     State Class: 'measurement'
[16:46:08][C][dht:029]:     Unit of Measurement: '°C'
[16:46:08][C][dht:029]:     Accuracy Decimals: 1
[16:46:08][C][dht:030]:   Humidity 'Wilgotnosc'
[16:46:08][C][dht:030]:     Device Class: 'humidity'
[16:46:08][C][dht:030]:     State Class: 'measurement'
[16:46:08][C][dht:030]:     Unit of Measurement: '%'
[16:46:08][C][dht:030]:     Accuracy Decimals: 0
[16:46:08][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor 'Orno OR-WE-516 Voltage'
[16:46:08][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'voltage'
[16:46:08][C][modbus_controller.sensor:010]: modbus_controller.sensor  State Class: 'measurement'
[16:46:08][C][modbus_controller.sensor:010]: modbus_controller.sensor  Unit of Measurement: 'V'
[16:46:08][C][modbus_controller.sensor:010]: modbus_controller.sensor  Accuracy Decimals: 1
[16:46:08][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor 'Orno OR-WE-516 Active Energy'
[16:46:08][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'energy'
[16:46:08][C][modbus_controller.sensor:010]: modbus_controller.sensor  State Class: 'total_increasing'
[16:46:08][C][modbus_controller.sensor:010]: modbus_controller.sensor  Unit of Measurement: 'kWh'
[16:46:08][C][modbus_controller.sensor:010]: modbus_controller.sensor  Accuracy Decimals: 2
[16:46:08][C][captive_portal:088]: Captive Portal:
[16:46:08][C][mdns:115]: mDNS:
[16:46:08][C][mdns:116]:   Hostname: esp8226-01
[16:46:08][C][ota:097]: Over-The-Air Updates:
[16:46:08][C][ota:098]:   Address: esp8226-01.local:8266
[16:46:08][C][ota:101]:   Using Password.
[16:46:08][C][api:139]: API Server:
[16:46:08][C][api:140]:   Address: esp8226-01.local:6053
[16:46:08][C][api:142]:   Using noise encryption: YES
[16:46:08][C][modbus_controller:298]: ModbusController:
[16:46:08][C][modbus_controller:299]:   Address: 0x02
[16:46:10][D][api.connection:1089]: Home Assistant 2023.11.3 (192.168.1.161): Connected successfully
[16:46:10][D][modbus_controller.sensor:025]: Sensor new state: 17255.00
[16:46:10][D][sensor:093]: 'Orno OR-WE-516 Voltage': Sending state 1725.50000 V with 1 decimals of accuracy
[16:46:10][D][modbus_controller.sensor:025]: Sensor new state: 17155.00
[16:46:10][D][sensor:093]: 'Orno OR-WE-516 Active Energy': Sending state 17.15500 kWh with 2 decimals of accuracy
[16:46:15][D][modbus_controller.sensor:025]: Sensor new state: 17254.00
[16:46:15][D][sensor:093]: 'Orno OR-WE-516 Voltage': Sending state 1725.40002 V with 1 decimals of accuracy
[16:46:15][D][modbus_controller.sensor:025]: Sensor new state: 17155.00
[16:46:15][D][sensor:093]: 'Orno OR-WE-516 Active Energy': Sending state 17.15500 kWh with 2 decimals of accuracy
[16:46:20][D][modbus_controller.sensor:025]: Sensor new state: 17254.00
[16:46:20][D][sensor:093]: 'Orno OR-WE-516 Voltage': Sending state 1725.40002 V with 1 decimals of accuracy
[16:46:20][D][modbus_controller.sensor:025]: Sensor new state: 17155.00
[16:46:20][D][sensor:093]: 'Orno OR-WE-516 Active Energy': Sending state 17.15500 kWh with 2 decimals of accuracy
[16:46:25][D][modbus_controller.sensor:025]: Sensor new state: 17255.00
[16:46:25][D][sensor:093]: 'Orno OR-WE-516 Voltage': Sending state 1725.50000 V with 1 decimals of accuracy
[16:46:25][D][modbus_controller.sensor:025]: Sensor new state: 17155.00
[16:46:25][D][sensor:093]: 'Orno OR-WE-516 Active Energy': Sending state 17.15500 kWh with 2 decimals of accuracy

Z góry dziękuję za pomoc.