2021-09-26 22:27:26 +02:00
EPEVER® MPPT Solar Charge Controller Tracer-AN Series
=====================================================
.. seo ::
:description: ESPHome configuration for EPEVER® MPPT Solar Charge Controller Tracer-AN Series
2021-11-16 03:19:33 +01:00
:image: tracer-an.jpg
2021-09-26 22:27:26 +02:00
: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
2022-02-10 23:10:43 +01:00
name: solarstation-x
2021-09-26 22:27:26 +02:00
esphome:
2022-02-10 23:10:43 +01:00
name: ${name}
2021-09-26 22:27:26 +02:00
platformio_options:
## larger stack size required with all registers enable_load_test
2021-11-16 03:19:33 +01:00
## reduce registers or wait for integration of 2.0.0 arduinoespressif32
2021-09-26 22:27:26 +02:00
## 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");
2022-02-10 23:10:43 +01:00
esp32:
board: pico32
framework:
type: arduino
version: latest
2021-09-26 22:27:26 +02:00
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:
reboot_timeout: 0s
ota:
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
2021-11-16 03:19:33 +01:00
2021-09-26 22:27:26 +02:00
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
2021-11-16 03:19:33 +01:00
Rated Datum registers
2021-09-26 22:27:26 +02:00
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
2022-04-14 08:42:55 +02:00
value_type: S_WORD
2021-09-26 22:27:26 +02:00
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
2022-04-14 08:42:55 +02:00
value_type: S_WORD
2021-09-26 22:27:26 +02:00
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
2022-04-14 08:42:55 +02:00
value_type: S_WORD
2021-09-26 22:27:26 +02:00
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
2022-04-14 08:42:55 +02:00
value_type: S_WORD
2021-09-26 22:27:26 +02:00
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
2022-04-14 08:42:55 +02:00
value_type: S_WORD
2021-09-26 22:27:26 +02:00
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
2021-11-16 03:19:33 +01:00
2021-09-26 22:27:26 +02:00
.. 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
2022-04-14 08:42:55 +02:00
value_type: S_WORD
2021-09-26 22:27:26 +02:00
# 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
2022-04-14 08:42:55 +02:00
value_type: S_WORD
2021-09-26 22:27:26 +02:00
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
2022-04-14 08:42:55 +02:00
value_type: S_WORD
2021-09-26 22:27:26 +02:00
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
2022-04-14 08:42:55 +02:00
value_type: S_WORD
2021-09-26 22:27:26 +02:00
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
2022-04-14 08:42:55 +02:00
value_type: S_WORD
2021-09-26 22:27:26 +02:00
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
2022-04-14 08:42:55 +02:00
value_type: S_WORD
2021-09-26 22:27:26 +02:00
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`