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
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?
Edit2
Taki trochę roboczy kod, ale wygląda na to, że wszytko działa
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
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
Mam nadzieję, że komuś to się przyda i jeżeli ktoś z tego skorzysta to podzieli się spostrzeżeniami.
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
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.