Odwiedza nas 24 gości oraz 0 użytkowników.

ESP32 + Epever

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ć.

 

Bazą był ESP8266 

 

oraz  TTL-2-RS485

 

 

 

 

ESPHome to platforma na której konfigurujemy nasze urządzenie.

 

Źródłem kodu była strona https://esphome.io oraz inne publikacje, lecz ja ograniczyłem się do "wyssania" z Epever tylko niezbędnych informacji dla mnie.

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
#######################################

 

 

Finalnie mamy takie oto dane dostępne w HomeAssistant

 

Można się jeszcze pokusić o wyświetlanie tych danych za pośrednictwem strony www bezpośrednio z ESP.

 Dodając linijkę:

web_server:
port: 80

 

uzyskamy taki taką oto stronę pod adresem IP naszego 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.

 

 

 

© est. 2006 Digit4all_GROUP. Designed By WebKomp

Logowanie