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 name: solarstation-x esphome: name: ${name} 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 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 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 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"); esp32: board: pico32 framework: type: arduino version: latest 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 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 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 `__ - :ghedit:`Edit`