mirror of
https://github.com/esphome/esphome-docs.git
synced 2024-12-26 17:27:47 +01:00
6053f490b5
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
1291 lines
39 KiB
ReStructuredText
1291 lines
39 KiB
ReStructuredText
EPEVER® MPPT Solar Charge Controller Tracer-AN Series
|
|
=====================================================
|
|
.. seo::
|
|
:description: ESPHome configuration for EPEVER® MPPT Solar Charge Controller Tracer-AN Series
|
|
:image: tracer-an.jpg
|
|
:keywords: EPEVER Tracer
|
|
|
|
.. figure:: images/tracer-an.jpg
|
|
:align: center
|
|
:width: 50.0%
|
|
|
|
.. warning::
|
|
|
|
Enabling all modbus registers will probably cause a stack overflow in main
|
|
|
|
|
|
Tested with Tracer-AN Series 10A/20A/30A/40A and XTRA Series 10A/20A/30A/40A.
|
|
Probably works for other EPEver MPPT controllers as well.
|
|
|
|
|
|
Below is the ESPHome configuration file that will get you up and running. This assumes you have a ``secret.yaml`` with ssid, password, api_password and ota_password keys.
|
|
|
|
.. code-block:: yaml
|
|
|
|
substitutions:
|
|
updates: 30s
|
|
unique_id: solarstation-x
|
|
|
|
esphome:
|
|
name: ${unique_id}
|
|
platform: ESP32
|
|
board: pico32
|
|
arduino_version: latest
|
|
platformio_options:
|
|
## larger stack size required with all registers enable_load_test
|
|
## reduce registers or wait for integration of 2.0.0 arduinoespressif32
|
|
## not yet working needs 2.0
|
|
build_flags:
|
|
- -DCONFIG_ARDUINO_LOOP_STACK_SIZE=32768
|
|
|
|
on_boot:
|
|
## configure controller settings at setup
|
|
## make sure priority is lower than setup_priority of modbus_controller
|
|
priority: -100
|
|
then:
|
|
- lambda: |-
|
|
// get local time and sync to controller
|
|
time_t now = ::time(nullptr);
|
|
struct tm *time_info = ::localtime(&now);
|
|
int seconds = time_info->tm_sec;
|
|
int minutes = time_info->tm_min;
|
|
int hour = time_info->tm_hour;
|
|
int day = time_info->tm_mday;
|
|
int month = time_info->tm_mon + 1;
|
|
int year = time_info->tm_year % 100;
|
|
esphome::modbus_controller::ModbusController *controller = id(epever);
|
|
// if there is no internet connection localtime returns year 70
|
|
if (year != 70) {
|
|
// create the payload
|
|
std::vector<uint16_t> rtc_data = {uint16_t((minutes << 8) | seconds), uint16_t((day << 8) | hour),
|
|
uint16_t((year << 8) | month)};
|
|
// Create a modbus command item with the time information as the payload
|
|
esphome::modbus_controller::ModbusCommandItem set_rtc_command =
|
|
esphome::modbus_controller::ModbusCommandItem::create_write_multiple_command(controller, 0x9013, 3, rtc_data);
|
|
// Submit the command to the send queue
|
|
epever->queue_command(set_rtc_command);
|
|
ESP_LOGI("ModbusLambda", "EPSOLAR RTC set to %02d:%02d:%02d %02d.%02d.%04d", hour, minutes, seconds, day, month,
|
|
year + 2000);
|
|
}
|
|
// Battery settings
|
|
// Note: these values are examples only and apply my AGM Battery
|
|
std::vector<uint16_t> battery_settings1 = {
|
|
0, // 9000 Battery Type 0 = User
|
|
0x0073, // 9001 Battery Cap 0x55 == 115AH
|
|
0x012C, // 9002 Temp compensation -3V /°C/2V
|
|
0x05DC, // 9003 0x5DC == 1500 Over Voltage Disconnect Voltage 15,0
|
|
0x058C, // 9004 0x58C == 1480 Charging Limit Voltage 14,8
|
|
0x058C, // 9005 Over Voltage Reconnect Voltage 14,8
|
|
0x05BF, // 9006 Equalize Charging Voltage 14,6
|
|
0x05BE, // 9007 Boost Charging Voltage 14,7
|
|
0x0550, // 9008 Float Charging Voltage 13,6
|
|
0x0528, // 9009 Boost Reconnect Charging Voltage 13,2
|
|
0x04C4, // 900A Low Voltage Reconnect Voltage 12,2
|
|
0x04B0, // 900B Under Voltage Warning Reconnect Voltage 12,0
|
|
0x04BA, // 900c Under Volt. Warning Volt 12,1
|
|
0x04BA, // 900d Low Volt. Disconnect Volt. 11.8
|
|
0x04BA // 900E Discharging Limit Voltage 11.8
|
|
};
|
|
|
|
// Boost and equalization periods
|
|
std::vector<uint16_t> battery_settings3 = {
|
|
0x0000, // 906B Equalize Duration (min.) 0
|
|
0x0075 // 906C Boost Duration (aka absorb) 117 mins
|
|
};
|
|
esphome::modbus_controller::ModbusCommandItem set_battery1_command =
|
|
esphome::modbus_controller::ModbusCommandItem::create_write_multiple_command(controller, 0x9000, battery_settings1.size() ,
|
|
battery_settings1);
|
|
// esphome::modbus_controller::ModbusCommandItem set_battery2_command =
|
|
// esphome::modbus_controller::ModbusCommandItem::create_write_multiple_command(controller, 0x900A, battery_settings2.size() ,
|
|
// battery_settings2);
|
|
|
|
esphome::modbus_controller::ModbusCommandItem set_battery3_command =
|
|
esphome::modbus_controller::ModbusCommandItem::create_write_multiple_command(controller, 0x906B, battery_settings3.size(),
|
|
battery_settings3);
|
|
delay(200) ;
|
|
controller->queue_command(set_battery1_command);
|
|
delay(200) ;
|
|
// controller->queue_command(set_battery2_command);
|
|
// delay(200) ;
|
|
controller->queue_command(set_battery3_command);
|
|
ESP_LOGI("ModbusLambda", "EPSOLAR Battery set");
|
|
|
|
|
|
|
|
wifi:
|
|
ssid: !secret wifi_sid
|
|
password: !secret wifi_password
|
|
|
|
time:
|
|
- platform: sntp
|
|
id: sntp_time
|
|
timezone: "CET-1CEST,M3.5.0,M10.5.0/3"
|
|
servers: "de.pool.ntp.org"
|
|
|
|
# Enable logging
|
|
logger:
|
|
level: INFO
|
|
|
|
# Enable Home Assistant API
|
|
api:
|
|
password: !secret api_password
|
|
reboot_timeout: 0s
|
|
|
|
ota:
|
|
password: !secret ota_password
|
|
|
|
mqtt:
|
|
id: mqtt_client
|
|
|
|
uart:
|
|
id: mod_bus
|
|
tx_pin: 19
|
|
rx_pin: 18
|
|
baud_rate: 115200
|
|
stop_bits: 1
|
|
|
|
modbus:
|
|
#flow_control_pin: 23
|
|
send_wait_time: 200ms
|
|
id: mod_bus_epever
|
|
|
|
modbus_controller:
|
|
- id: epever
|
|
## the Modbus device addr
|
|
address: 0x1
|
|
modbus_id: mod_bus_epever
|
|
command_throttle: 200ms
|
|
setup_priority: -10
|
|
update_interval: ${updates}
|
|
|
|
packages:
|
|
tracer-rated-datum: !include tracer-rated-datum.yaml
|
|
tracer-real-time: !include tracer-real-time.yaml
|
|
tracer-stats: !include tracer-stats.yaml
|
|
#tracer-settings: !include tracer-settings.yaml
|
|
|
|
sensor:
|
|
- platform: template
|
|
accuracy_decimals: 0
|
|
name: "Generated Charge today"
|
|
id: generated_charge_today
|
|
unit_of_measurement: "Ah"
|
|
|
|
- platform: wifi_signal
|
|
name: "WiFi Signal"
|
|
update_interval: ${updates}
|
|
|
|
binary_sensor:
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: charging_input_volt_failure
|
|
name: "Charging Input Volt Failure"
|
|
register_type: read
|
|
address: 0x3201
|
|
bitmask: 0xC000
|
|
|
|
switch:
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: manual_control_load
|
|
register_type: coil
|
|
address: 2
|
|
name: "manual control the load"
|
|
bitmask: 1
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: default_control_the_load
|
|
register_type: coil
|
|
address: 3
|
|
name: "default control the load"
|
|
bitmask: 1
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: enable_load_test
|
|
register_type: coil
|
|
address: 5
|
|
name: "enable load test mode"
|
|
bitmask: 1
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: force_load
|
|
register_type: coil
|
|
address: 6
|
|
name: "Force Load on/off"
|
|
bitmask: 1
|
|
|
|
# - platform: modbus_controller
|
|
# modbus_controller_id: epever
|
|
# id: clear_energy_stats
|
|
# register_type: coil
|
|
# address: 0x14
|
|
# name: "Clear generating electricity statistic"
|
|
# bitmask: 1
|
|
|
|
# - platform: modbus_controller
|
|
# modbus_controller_id: epever
|
|
# id: reset_to_fabric_default
|
|
# name: "Reset to Factory Default"
|
|
# register_type: coil
|
|
# address: 0x15
|
|
# bitmask: 1
|
|
|
|
text_sensor:
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
name: "rtc_clock"
|
|
id: rtc_clock
|
|
internal: true
|
|
register_type: holding
|
|
address: 0x9013
|
|
register_count: 3
|
|
raw_encode: HEXBYTES
|
|
response_size: 6
|
|
# /*
|
|
# E20 Real time clock 9013 D7-0 Sec, D15-8 Min
|
|
# E21 Real time clock 9014 D7-0 Hour, D15-8 Day
|
|
# E22 Real time clock 9015 D7-0 Month, D15-8 Year
|
|
# */
|
|
on_value:
|
|
then:
|
|
- lambda: |-
|
|
ESP_LOGV("main", "decoding rtc hex encoded raw data: %s", x.c_str());
|
|
uint8_t h=0,m=0,s=0,d=0,month_=0,y = 0 ;
|
|
m = esphome::modbus_controller::byte_from_hex_str(x,0);
|
|
s = esphome::modbus_controller::byte_from_hex_str(x,1);
|
|
d = esphome::modbus_controller::byte_from_hex_str(x,2);
|
|
h = esphome::modbus_controller::byte_from_hex_str(x,3);
|
|
y = esphome::modbus_controller::byte_from_hex_str(x,4);
|
|
month_ = esphome::modbus_controller::byte_from_hex_str(x,5);
|
|
// Now check if the rtc time of the controller is ok and correct it
|
|
time_t now = ::time(nullptr);
|
|
struct tm *time_info = ::localtime(&now);
|
|
int seconds = time_info->tm_sec;
|
|
int minutes = time_info->tm_min;
|
|
int hour = time_info->tm_hour;
|
|
int day = time_info->tm_mday;
|
|
int month = time_info->tm_mon + 1;
|
|
int year = time_info->tm_year % 100;
|
|
// correct time if needed (ignore seconds)
|
|
if (d != day || month_ != month || y != year || h != hour || m != minutes) {
|
|
// create the payload
|
|
std::vector<uint16_t> rtc_data = {uint16_t((minutes << 8) | seconds), uint16_t((day << 8) | hour),
|
|
uint16_t((year << 8) | month)};
|
|
// Create a modbus command item with the time information as the payload
|
|
esphome::modbus_controller::ModbusCommandItem set_rtc_command = esphome::modbus_controller::ModbusCommandItem::create_write_multiple_command(epever, 0x9013, 3, rtc_data);
|
|
// Submit the command to the send queue
|
|
epever->queue_command(set_rtc_command);
|
|
ESP_LOGI("ModbusLambda", "EPSOLAR RTC set to %02d:%02d:%02d %02d.%02d.%04d", hour, minutes, seconds, day, month, year + 2000);
|
|
}
|
|
char buffer[20];
|
|
// format time as YYYY-mm-dd hh:mm:ss
|
|
sprintf(buffer,"%04d-%02d-%02d %02d:%02d:%02d",y+2000,month_,d,h,m,s);
|
|
id(template_rtc).publish_state(buffer);
|
|
|
|
- platform: template
|
|
name: "RTC Time Sensor"
|
|
id: template_rtc
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
name: "rtc clock test 2"
|
|
id: rtc_clock_test2
|
|
internal: true
|
|
register_type: holding
|
|
address: 0x9013
|
|
register_count: 3
|
|
raw_encode: HEXBYTES
|
|
response_size: 6
|
|
|
|
web_server:
|
|
port: 80
|
|
|
|
The definitions for most sensors is included using Packages
|
|
|
|
Rated Datum registers
|
|
|
|
tracer-rated-datum.yaml
|
|
|
|
.. code-block:: yaml
|
|
|
|
sensor:
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: array_rated_voltage
|
|
name: "array_rated_voltage"
|
|
address: 0x3000
|
|
skip_updates: 60
|
|
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: array_rated_current
|
|
name: "array_rated_current"
|
|
address: 0x3001
|
|
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: array_rated_power
|
|
name: "array_rated_power"
|
|
address: 0x3002
|
|
register_count: 2
|
|
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_rated_voltage
|
|
name: "battery_rated_voltage"
|
|
address: 0x3004
|
|
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: battery_rated_current
|
|
name: "battery_rated_current"
|
|
address: 0x3005
|
|
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: battery_rated_power
|
|
name: "battery_rated_power"
|
|
address: 0x3006
|
|
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: charging_mode
|
|
name: "charging_mode"
|
|
address: 0x3008
|
|
unit_of_measurement: ""
|
|
register_type: read
|
|
value_type: U_WORD
|
|
accuracy_decimals: 0
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: rated_current_of_load
|
|
name: "rated_current_of_load"
|
|
address: 0x300E
|
|
skip_updates: 60
|
|
unit_of_measurement: "A"
|
|
register_type: read
|
|
value_type: U_WORD
|
|
accuracy_decimals: 1
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
|
|
Real TimeDatum registers
|
|
tracer-real-time.yaml
|
|
|
|
.. code-block:: yaml
|
|
|
|
sensor:
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: pv_input_voltage
|
|
name: "PV array 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: "PV array 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: "PV array 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: "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: "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: "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: "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: "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: "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: "Battery temperature"
|
|
address: 0x3110
|
|
unit_of_measurement: °C
|
|
register_type: read
|
|
value_type: U_WORD
|
|
accuracy_decimals: 1
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: device_temperature
|
|
name: "Device temperature"
|
|
address: 0x3111
|
|
unit_of_measurement: °C
|
|
register_type: read
|
|
value_type: U_WORD
|
|
accuracy_decimals: 1
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: power_components_temperature
|
|
name: "Power components temperature"
|
|
address: 0x3112
|
|
unit_of_measurement: °C
|
|
register_type: read
|
|
value_type: U_WORD
|
|
accuracy_decimals: 1
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: battery_soc
|
|
name: "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: remote_battery_temperature
|
|
name: "Remote battery temperature"
|
|
address: 0x311B
|
|
unit_of_measurement: °C
|
|
register_type: read
|
|
value_type: U_WORD
|
|
accuracy_decimals: 1
|
|
filters:
|
|
- multiply: 0.01
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: battery_volt_settings
|
|
name: "Remote real voltage"
|
|
address: 0x311D
|
|
unit_of_measurement: "°C"
|
|
register_type: read
|
|
value_type: U_WORD
|
|
accuracy_decimals: 1
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: Battery_status_volt
|
|
name: "Battery status voltage"
|
|
address: 0x3200
|
|
register_type: read
|
|
value_type: U_WORD
|
|
bitmask: 7 #(Bits 0-3)
|
|
accuracy_decimals: 0
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: Battery_status_temp
|
|
name: "Battery status temeratur"
|
|
address: 0x3200
|
|
register_type: read
|
|
value_type: U_WORD
|
|
bitmask: 0x38 #(Bits 4-7)
|
|
accuracy_decimals: 0
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: Charger_status
|
|
name: "Charger status"
|
|
address: 0x3201
|
|
register_type: read
|
|
value_type: U_WORD
|
|
accuracy_decimals: 0
|
|
|
|
Statistic registers
|
|
tracer-stats.yaml
|
|
|
|
.. code-block:: yaml
|
|
|
|
sensor:
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: max_pv_voltage_today
|
|
name: "Maximum PV voltage today"
|
|
address: 0x3300
|
|
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: min_pv_voltage_today
|
|
name: "Minimum PV voltage today"
|
|
address: 0x3301
|
|
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: max_battery_voltage_today
|
|
name: "Maximum battery voltage today"
|
|
address: 0x3302
|
|
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: min_battery_today
|
|
name: "Minimum battery voltage today"
|
|
address: 0x3303
|
|
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: consumed_energy_today
|
|
name: "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: "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: consumed_energy_year
|
|
name: "Consumed energy year"
|
|
address: 0x3308
|
|
register_type: read
|
|
value_type: U_DWORD_R
|
|
accuracy_decimals: 1
|
|
unit_of_measurement: "kWh"
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: consumed_energy_total
|
|
name: "Consumed energy total"
|
|
address: 0x330A
|
|
register_type: read
|
|
value_type: U_DWORD_R
|
|
accuracy_decimals: 1
|
|
unit_of_measurement: "kWh"
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: generated_energy_today
|
|
name: "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: "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: generated_energy_year
|
|
name: "Generated energy year"
|
|
address: 0x3310
|
|
register_type: read
|
|
value_type: U_DWORD_R
|
|
accuracy_decimals: 1
|
|
unit_of_measurement: "kWh"
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: generated_energy_total
|
|
name: "Generated energy total"
|
|
address: 0x3312
|
|
register_type: read
|
|
value_type: U_DWORD_R
|
|
accuracy_decimals: 1
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: co2_reduction
|
|
name: "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: "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: "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
|
|
|
|
|
|
Setting registers (commented out to save stack space)
|
|
tracer-settings.yaml
|
|
|
|
.. code-block:: yaml
|
|
|
|
sensor:
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: battery_type
|
|
address: 0x9000
|
|
name: "Battery Type"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
skip_updates: 50
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: battery_capacity
|
|
address: 0x9001
|
|
name: "Battery Capacity"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: temperature_compensation_coefficient
|
|
address: 0x9002
|
|
name: "Temperature compensation coefficient"
|
|
unit_of_measurement: "mV/°C/2V"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: high_voltage_disconnect
|
|
address: 0x9003
|
|
name: "High Voltage disconnect"
|
|
unit_of_measurement: "V"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: charging_limit_voltage
|
|
address: 0x9004
|
|
name: "Charging limit voltage"
|
|
unit_of_measurement: "V"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: over_voltage_reconnect
|
|
address: 0x9005
|
|
name: "Over voltage reconnect"
|
|
unit_of_measurement: "V"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: equalization_voltage
|
|
address: 0x9006
|
|
name: "Equalization voltage"
|
|
unit_of_measurement: "V"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: boost_voltage
|
|
address: 0x9007
|
|
name: "Boost voltage"
|
|
unit_of_measurement: "V"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: float_voltage
|
|
address: 0x9008
|
|
name: "Float voltage"
|
|
unit_of_measurement: "V"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: boost_reconnect_voltage
|
|
address: 0x9009
|
|
name: "Boost reconnect voltage"
|
|
unit_of_measurement: "V"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: low_voltage_reconnect
|
|
address: 0x900A
|
|
name: "Low voltage reconnect"
|
|
unit_of_measurement: "V"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: under_voltage_recover
|
|
address: 0x900B
|
|
name: "Under voltage recover"
|
|
unit_of_measurement: "V"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: under_voltage_warning
|
|
address: 0x900C
|
|
name: "Under voltage warning"
|
|
unit_of_measurement: "V"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: low_voltage_disconnect
|
|
address: 0x900D
|
|
name: "Low voltage disconnect"
|
|
unit_of_measurement: "V"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: discharging_limit_voltage
|
|
address: 0x900E
|
|
name: "Discharging limit voltage"
|
|
unit_of_measurement: "V"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: battery_temperature_warning_upper_limit
|
|
address: 0x9017
|
|
name: "Battery temperature warning upper limit"
|
|
unit_of_measurement: "°C"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
# new range add 'skip_updates' again
|
|
skip_updates: 50
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: battery_temperature_warning_lower_limit
|
|
address: 0x9018
|
|
name: "Battery temperature warning lower limit"
|
|
unit_of_measurement: "°C"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: controller_inner_temperature_upper_limit
|
|
address: 0x9019
|
|
name: "Controller inner temperature upper limit"
|
|
unit_of_measurement: "°C"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: controller_inner_temperature_upper_limit_recover
|
|
address: 0x901A
|
|
name: "Controller inner temperature upper limit recover"
|
|
unit_of_measurement: "°C"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: power_component_temperature_upper_limit
|
|
address: 0x901B
|
|
name: "Power component temperature upper limit"
|
|
unit_of_measurement: "°C"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: power_component_temperature_upper_limit_recover
|
|
address: 0x901C
|
|
name: "Power component temperature upper limit recover"
|
|
unit_of_measurement: "°C"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: line_impedance
|
|
address: 0x901D
|
|
name: "Line Impedance"
|
|
unit_of_measurement: "mOhm"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: dttv
|
|
address: 0x901E
|
|
name: "Day Time Threshold Voltage"
|
|
unit_of_measurement: "V"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: light_signal_startup_delay_time
|
|
address: 0x901F
|
|
name: "Light signal startup delay time"
|
|
unit_of_measurement: "mins"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: nttv
|
|
address: 0x9020
|
|
name: "Light Time Threshold Voltage"
|
|
unit_of_measurement: "mins"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: light_signal_close_delay_time
|
|
address: 0x9021
|
|
name: "Light signal close delay time"
|
|
unit_of_measurement: "mins"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
filters:
|
|
- multiply: 0.01
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id:
|
|
load_controlling_modes
|
|
# 0000H Manual Control
|
|
# 0001H Light ON/OFF
|
|
# 0002H Light ON+ Timer/
|
|
# 0003H Time Control
|
|
address: 0x903D
|
|
name: "Load controlling modes"
|
|
register_type: holding
|
|
accuracy_decimals: 0
|
|
value_type: U_WORD
|
|
skip_updates: 50
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: working_time_length_1
|
|
# The length of load output timer1,
|
|
# D15-D8,hour, D7-D0, minute
|
|
address: 0x903E
|
|
name: "Working_time length 1"
|
|
register_type: holding
|
|
accuracy_decimals: 0
|
|
value_type: U_WORD
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: working_time_length_2
|
|
address: 0x903F
|
|
name: "Working_time length 1"
|
|
register_type: holding
|
|
accuracy_decimals: 0
|
|
value_type: U_WORD
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: turn_on_timing_1_seconds
|
|
address: 0x9042
|
|
name: "Turn on timing 1 seconds"
|
|
register_type: holding
|
|
accuracy_decimals: 0
|
|
value_type: U_WORD
|
|
skip_updates: 50
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: turn_on_timing_1_minutes
|
|
address: 0x9043
|
|
name: "Turn on timing 1 minutes"
|
|
register_type: holding
|
|
accuracy_decimals: 0
|
|
value_type: U_WORD
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: turn_on_timing_1_hours
|
|
address: 0x9044
|
|
name: "Turn on timing 1 hours"
|
|
register_type: holding
|
|
accuracy_decimals: 0
|
|
value_type: U_WORD
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: turn_off_timing_1_seconds
|
|
address: 0x9045
|
|
name: "Turn off timing 1 seconds"
|
|
register_type: holding
|
|
accuracy_decimals: 0
|
|
value_type: U_WORD
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: turn_off_timing_1_minutes
|
|
address: 0x9046
|
|
name: "Turn off timing 1 minutes"
|
|
register_type: holding
|
|
accuracy_decimals: 0
|
|
value_type: U_WORD
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: turn_off_timing_1_hours
|
|
address: 0x9047
|
|
name: "Turn off timing 1 hours"
|
|
register_type: holding
|
|
accuracy_decimals: 0
|
|
value_type: U_WORD
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: turn_on_timing_2_seconds
|
|
address: 0x9048
|
|
name: "Turn on timing 2 seconds"
|
|
register_type: holding
|
|
accuracy_decimals: 0
|
|
value_type: U_WORD
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: turn_on_timing_2_minutes
|
|
address: 0x9049
|
|
name: "Turn on timing 2 minutes"
|
|
register_type: holding
|
|
accuracy_decimals: 0
|
|
value_type: U_WORD
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: turn_on_timing_2_hours
|
|
address: 0x904A
|
|
name: "Turn on timing 2 hours"
|
|
register_type: holding
|
|
accuracy_decimals: 0
|
|
value_type: U_WORD
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: turn_off_timing_2_seconds
|
|
address: 0x904B
|
|
name: "Turn off timing 2 seconds"
|
|
register_type: holding
|
|
accuracy_decimals: 0
|
|
value_type: U_WORD
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: turn_off_timing_2_minutes
|
|
address: 0x904C
|
|
name: "Turn off timing 2 minutes"
|
|
register_type: holding
|
|
accuracy_decimals: 0
|
|
value_type: U_WORD
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: turn_off_timing_2_hours
|
|
address: 0x904D
|
|
name: "Turn off timing 2 hours"
|
|
register_type: holding
|
|
accuracy_decimals: 0
|
|
value_type: U_WORD
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: backlight_time
|
|
address: 0x9063
|
|
name: "Backlight time"
|
|
register_type: holding
|
|
accuracy_decimals: 0
|
|
unit_of_measurement: "s"
|
|
value_type: U_WORD
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: length_of_night_minutes
|
|
address: 0x9065
|
|
internal: true
|
|
bitmask: 0xFF
|
|
unit_of_measurement: "m"
|
|
name: "Length of night-mins"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
|
|
- platform: modbus_controller
|
|
modbus_controller_id: epever
|
|
id: length_of_night
|
|
address: 0x9065
|
|
bitmask: 0xFF00
|
|
unit_of_measurement: "m"
|
|
name: "Length of night"
|
|
register_type: holding
|
|
value_type: U_WORD
|
|
skip_updates: 50
|
|
filters:
|
|
- lambda: return id(length_of_night_minutes).state + ( 60 * x);
|
|
|
|
|
|
See Also
|
|
--------
|
|
|
|
- :doc:`/components/modbus_controller`
|
|
- `EPEVER Tracer Modbus Registers <http://www.solar-elektro.cz/data/dokumenty/1733_modbus_protocol.pdf>`__
|
|
- :ghedit:`Edit`
|