Mój kontroler paneli słonecznych Epever XTRA 40A pozwala na komunikację poprzez złącze RS-485 i głównie do niego są podłączane urządzenia takie jak ekran dodatkowy czy moduł WiFi/Bluetooth
Chciałem podłączyć ten kontroler do systemu Home Assistant i okazało się że oryginalny kabel USB-RS485 nie nadaje się do komunikacji w systemie HASIO. Generalnie problem jest ze sterownikami pod linux
Doświadczony tym ... szukałem innych adapterów USB-to-RS485 i padło na
i wszystko zadziałało bez problemu. Warunkiem jest niestety stosunkowa bliskość serwera Home Assistant i Epever.
Z czasem okazało się że odległość bedzie znaczna i konieczne jest komunikacja bezprzewodowa - najlepiej WiFi. Na rynku są dostępne gotowe rozwiązania w postaci
lecz niestety w okresie gdy potrzebowałem "na już" tego urządzenia to było ono niedostępne na rynku.
Dlatego rozpoczeły się poszukiwania alternatywy i niejako naturalnym kierunkiem było użycie ESP32. Opisów w internecie jest wiele i można coś dla siebie wybrać.
ESPHome to platforma na której konfigurujemy nasze urządzenie.
Poniżej publikuje kod który u mnie działa i może komuś się przydać.
esphome:
name: esp8266-epever
esp8266:
board: d1_mini
# Enable logging
logger:
baud_rate: 0
# Enable Home Assistant API
api:
encryption:
key: "###############################"
ota:
password: "###########################"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esp8266-Epever Fallback Hotspot"
password: "#################"
time:
- platform: homeassistant
id: homeassistant_time
##################################
uart:
id: mod_bus
tx_pin: TX
rx_pin: RX
baud_rate: 115200
stop_bits: 1
modbus:
# flow_control_pin: 5
id: modbus1
modbus_controller:
- id: epever
## the Modbus device addr
address: 0x1
modbus_id: modbus1
setup_priority: -10
update_interval: 5s
text_sensor:
- name: "Epever-rtc_clock"
platform: modbus_controller
modbus_controller_id: epever
id: rtc_clock
internal: true
register_type: holding
address: 0x9013
register_count: 3
raw_encode: HEXBYTES
response_size: 6
#switch:
# - platform: modbus_controller
# modbus_controller_id: epever
# id: reset_to_fabric_default
# name: "Reset to Factory Default"
# register_type: coil
# address: 0x15
# bitmask: 1
#captive_portal:
sensor:
- platform: modbus_controller
modbus_controller_id: epever
name: "Epever-battery capacity"
id: battery_capacity
register_type: holding
address: 0x9001
unit_of_measurement: "AH"
value_type: U_WORD
###########################################
- platform: modbus_controller
modbus_controller_id: epever
id: pv_input_voltage
name: "Epever-PV input voltage"
address: 0x3100
unit_of_measurement: "V" ## for any other unit the value is returned in minutes
register_type: read
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: pv_input_current
name: "Epever-PV input current"
address: 0x3101
unit_of_measurement: "A" ## for any other unit the value is returned in minutes
register_type: read
value_type: U_WORD
accuracy_decimals: 2
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: pv_input_power
name: "Epever-PV input power"
address: 0x3102
unit_of_measurement: "W" ## for any other unit the value is returned in minutes
register_type: read
value_type: U_DWORD_R
accuracy_decimals: 1
filters:
- multiply: 0.01
###########################################################################################
- platform: modbus_controller
modbus_controller_id: epever
id: charging_voltage
name: "Epever-charging voltage"
address: 0x3104
unit_of_measurement: "V"
register_type: read
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: charging_current
name: "Epever-Charging current"
address: 0x3105
unit_of_measurement: "A"
register_type: read
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: charging_power
name: "Epever-Charging power"
address: 0x3106
unit_of_measurement: "W"
register_type: read
value_type: U_DWORD_R
accuracy_decimals: 1
filters:
- multiply: 0.01
#################################################################################
- platform: modbus_controller
modbus_controller_id: epever
id: load_voltage
name: "Epever-Load voltage"
address: 0x310C
unit_of_measurement: "V"
register_type: read
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: load_current
name: "Epever-Load Current"
address: 0x310D
unit_of_measurement: "A"
register_type: read
value_type: U_WORD
accuracy_decimals: 2
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: load_power
name: "Epever-Load power"
address: 0x310E
unit_of_measurement: "W"
register_type: read
value_type: U_DWORD_R
accuracy_decimals: 1
filters:
- multiply: 0.01
##########################################################
- platform: modbus_controller
modbus_controller_id: epever
id: battery_temperature
name: "Epever-battery temperature"
address: 0x3110
unit_of_measurement: °C
register_type: read
value_type: S_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: device_temperature
name: "Epever-device temperature"
address: 0x3111
unit_of_measurement: °C
register_type: read
value_type: S_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
###############################################################
- platform: modbus_controller
modbus_controller_id: epever
id: battery_soc
name: "Epever-battery SOC"
address: 0x311A
unit_of_measurement: "%"
register_type: read
value_type: U_WORD
accuracy_decimals: 0
#######################################################################
- platform: modbus_controller
modbus_controller_id: epever
id: Charger_status
name: "Epever-charger status"
address: 0x3201
register_type: read
value_type: U_WORD
accuracy_decimals: 0
#############################################
- platform: modbus_controller
modbus_controller_id: epever
id: consumed_energy_today
name: "Epever-consumed energy today"
address: 0x3304
register_type: read
value_type: U_DWORD_R
accuracy_decimals: 0
unit_of_measurement: "Wh"
filters:
- multiply: 10.0
- platform: modbus_controller
modbus_controller_id: epever
id: consumed_energy_month
name: "Epever-consumed Energy Month"
address: 0x3306
register_type: read
value_type: U_DWORD_R
accuracy_decimals: 0
unit_of_measurement: "Wh"
filters:
- multiply: 10.0
- platform: modbus_controller
modbus_controller_id: epever
id: generated_energy_today
name: "Epever-generated energy today"
address: 0x330C
register_type: read
value_type: U_DWORD_R
accuracy_decimals: 0
unit_of_measurement: "Wh"
# on_value:
# then:
# - sensor.template.publish:
# id: generated_charge_today
# state: !lambda "return x/12.0;"
filters:
- multiply: 10.0
- platform: modbus_controller
modbus_controller_id: epever
id: generated_energy_month
name: "Epever-generated energy month"
address: 0x330E
register_type: read
value_type: U_DWORD_R
accuracy_decimals: 0
unit_of_measurement: "Wh"
filters:
- multiply: 10.0
- platform: modbus_controller
modbus_controller_id: epever
id: co2_reduction
name: "Epever-CO2 reduction"
address: 0x3314
register_type: read
value_type: U_DWORD_R
accuracy_decimals: 1
unit_of_measurement: "kg"
filters:
- multiply: 10.0
- platform: modbus_controller
modbus_controller_id: epever
id: battery_voltage
name: "Epever-battery voltage"
address: 0x331A
register_type: read
value_type: U_WORD
accuracy_decimals: 1
unit_of_measurement: "V"
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: battery_current
name: "Epever-battery current"
address: 0x331B
register_type: read
value_type: S_DWORD_R
register_count: 2
accuracy_decimals: 2
unit_of_measurement: "A"
filters:
- multiply: 0.01
#######################################
Można się jeszcze pokusić o wyświetlanie tych danych za pośrednictwem strony www bezpośrednio z ESP.
Tak wiec komunikacja EPEVER poprzez WiFi została zapewniona za połowę ceny gotowego produktu jakim jest dedykowany moduł Epever Wifi. Dodatkowo można dowolnie modyfikować program i hardware i przykładowo dodać mierniki temperatury czy mierniki napięcia poszczególnych baterii lub przekażniki.
Które rozwiązanie jest lepsze to już nie mi decydować gdyż nie mam porównania.
Czy lepiej dołożyć i kupić oryginał czy zbudować samemu ? Nie wiem - ja staram się wszystko budować samemu i zwiększać doświadczenie DIY.