{"id":715,"date":"2024-04-05T08:06:51","date_gmt":"2024-04-05T08:06:51","guid":{"rendered":"https:\/\/hybrydaplus.pl\/?p=715"},"modified":"2024-07-28T12:41:16","modified_gmt":"2024-07-28T12:41:16","slug":"rozwiazanie-all-in-one-dla-odczytu-informacji-z-falownikow-1-fazowych-nowy-kod-esphome","status":"publish","type":"post","link":"https:\/\/hybrydaplus.pl\/index.php\/2024\/04\/05\/rozwiazanie-all-in-one-dla-odczytu-informacji-z-falownikow-1-fazowych-nowy-kod-esphome\/","title":{"rendered":"Rozwi\u0105zanie ALL-IN-ONE dla odczytu informacji z falownik\u00f3w 1-fazowych &#8211; nowy kod ESPHOME"},"content":{"rendered":"\n<p>Cieszymy si\u0119, \u017ce mo\u017cemy og\u0142osi\u0107 udane dodanie kilku nowych encji do kodu ESPHome, kt\u00f3re umo\u017cliwiaj\u0105 odczyt informacji z falownik\u00f3w 1-fazowych. Ta aktualizacja otwiera nowe mo\u017cliwo\u015bci monitorowania zu\u017cycia energii w domach przy u\u017cyciu prostych technologii. <\/p>\n\n\n\n<p>Dodanie tych encji do kodu ESPHome otwiera drzwi do bardziej zaawansowanych system\u00f3w monitorowania energii w domu. Dzi\u0119ki nim u\u017cytkownicy mog\u0105 dok\u0142adnie \u015bledzi\u0107 zu\u017cycie energii, identyfikowa\u0107 oszcz\u0119dno\u015bci oraz podejmowa\u0107 bardziej \u015bwiadome decyzje dotycz\u0105ce korzystania z energii elektrycznej.<\/p>\n\n\n\n<p>Zach\u0119camy wszystkich zainteresowanych do pobrania najnowszej wersji kodu ESPHome i wypr\u00f3bowania tych nowych encji. Tw\u00f3rzmy razem inteligentne i energooszcz\u0119dne rozwi\u0105zania dla naszych dom\u00f3w!<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"height-set:true height:400 width-set:true width:800 lang:default decode:true \" >substitutions:\n  modbus_controller_id: sunsynk\n  settings_skipped_updates: \"30\"\n  devicename: sunsynk\n  device_description: \"Sunsynk RS485 Logger\"\n  friendly_name: \"SunSynk\"\n\nesphome:\n  name: $devicename\n  comment: '${device_description}'\n\nesp32:\n  board: nodemcu-32s\n  framework:\n    type: arduino\n\n# Enable logging\nlogger:\n\n# Enable Home Assistant API\napi:\n  encryption:\n    key: \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n\nota:\n  platform: esphome\n  password: \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n\nwifi:\n  ssid: !secret wifi_ssid\n  password: !secret wifi_password\n  manual_ip:                        ################# TUTAJ PODAJ IP ESP\n    static_ip: 192.168.0.129\n    gateway: 192.168.0.1\n    subnet: 255.255.255.0\n  # Enable fallback hotspot (captive portal) in case wifi connection fails\n  ap:\n    ssid: \"Deyeesp32 Fallback Hotspot\"\n    password: \"1234567890\"\n\ncaptive_portal:\n\nweb_server:\n  port: 80\n\noutput:\n  - platform: gpio\n    id: ENABLE_PIN # Enable the chip\n    pin:\n      number: GPIO19\n      inverted: true\n  - platform: gpio\n    id: SE_PIN # Enable autodirection\n    pin:\n      number: GPIO17\n      inverted: true\n  - platform: gpio\n    id: ENABLE_5V_PIN # Enable 5V pin for RS485 chip\n    pin:\n      number: GPIO16\n      inverted: true\n\nuart:\n  id: mod_bus\n  rx_pin: GPIO21\n  tx_pin: GPIO22\n  baud_rate: 9600\n  stop_bits: 1\n \nmodbus:\n  id: sunsynk_modbus\n \nmodbus_controller:\n  - id: sunsynk\n    address: 0x01\n    modbus_id: sunsynk_modbus\n    setup_priority: -10\n    update_interval: \"15s\"\n    command_throttle: \"50ms\"\n\n\n\n############################################### BINARY SENSORS ########################################\nbinary_sensor:           \n  - platform: modbus_controller            # 194 Grid Connected Status\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Grid Connected Status\"\n    id: sunsynk_esphome_grid_connected_status\n    register_type: holding\n    address: 194\n\n  - platform: modbus_controller           # 280 Gen Peak Shaving Status\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Gen Peak Shaving Status\"\n    id: sunsynk_esphome_gen_peak_shaving_status\n    register_type: holding\n    address: 280\n    bitmask: 0x10\n\n  - platform: modbus_controller           # 280 Grid Peak Shaving Status\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Grid Peak Shaving Status\"\n    id: sunsynk_esphome_grid_peak_shaving_status\n    register_type: holding\n    address: 280\n    bitmask: 0x100\n\n#                                               SENSORS                                               #\n#######################################################################################################\n\n############################################### WIFI ###############################################\nsensor:\n  - platform: wifi_signal\n    id: Deye_ESP_wifi_strength_db\n    name: \"Deye ESP32\"\n    update_interval: 3600s\n    entity_category: \"diagnostic\"\n\n\n  - platform: uptime\n    name: \"Uptime sensor\"\n    entity_category: \"diagnostic\"\n\n\n  - platform: copy # Reports the WiFi signal strength in %\n    source_id: Deye_ESP_wifi_strength_db\n    name: \"WiFi strength pct.\"\n    filters:\n      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);\n    unit_of_measurement: \"%\"\n    entity_category: \"diagnostic\"\n    \n############################################### BATTERY ###############################################\n  - platform: modbus_controller            # 182 Battery Temperature\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Battery Temperature\"\n    id: sunsynk_esphome_battery_temperature\n    register_type: holding\n    address: 182\n    unit_of_measurement: \"\u00b0C\"\n    accuracy_decimals: 1\n    device_class: temperature\n    state_class: measurement\n    value_type: U_WORD \n    filters:\n      - offset: -1000\n      - multiply: 0.1\n\n  - platform: modbus_controller            # 183 Battery Voltage\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Battery Voltage\"\n    id: sunsynk_esphome_battery_voltage\n    register_type: holding\n    address: 183\n    unit_of_measurement: \"V\"\n    accuracy_decimals: 1\n    device_class: voltage\n    state_class: measurement\n    filters:\n      - multiply: 0.01\n    value_type: U_WORD\n\n  - platform: modbus_controller            # 184 Battery SOC\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Battery SOC\"\n    id: sunsynk_esphome_battery_soc\n    register_type: holding\n    address: 184\n    unit_of_measurement: \"%\"\n    accuracy_decimals: 0\n    device_class: battery\n    value_type: U_WORD\n\n  - platform: modbus_controller            # 190 Battery Power\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Battery Power\"\n    id: sunsynk_esphome_battery_power\n    register_type: holding\n    address: 190\n    unit_of_measurement: \"W\"\n    accuracy_decimals: 0\n    device_class: power\n    value_type: S_WORD\n\n  - platform: modbus_controller            # 191 Battery Current\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Battery Current\"\n    id: sunsynk_esphome_battery_current\n    register_type: holding\n    address: 191\n    unit_of_measurement: \"A\"\n    accuracy_decimals: 1\n    device_class: current\n    state_class: measurement\n    value_type: S_WORD\n    filters:\n      - multiply: 0.01\n\n  - platform: modbus_controller            # 217 Battery Capacity Shutdown\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Battery Capacity Shutdown\"\n    id: sunsynk_esphome_battery_capacity_shutdown\n    register_type: holding\n    address: 217\n    unit_of_measurement: \"%\"\n    accuracy_decimals: 0\n    device_class: battery\n\n############################################### INVERTER ##############################################\n\n  - platform: modbus_controller            # 175 Inverter Power\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Inverter Power\"\n    id: sunsynk_esphome_inverter_power\n    register_type: holding\n    address: 175\n    unit_of_measurement: \"W\"\n    accuracy_decimals: 0\n    device_class: power\n    value_type: S_WORD\n\n  - platform: modbus_controller            # 154 Inverter Voltage\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Inverter Voltage\"\n    id: sunsynk_esphome_inverter_voltage\n    register_type: holding\n    address: 154\n    unit_of_measurement: \"V\"\n    accuracy_decimals: 1\n    device_class: voltage\n    state_class: measurement\n    filters:\n      - multiply: 0.1\n    value_type: U_WORD \n\n  - platform: modbus_controller            # 164 Inverter Current\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Inverter Current\"\n    id: sunsynk_esphome_inverter_current\n    register_type: holding\n    address: 164\n    unit_of_measurement: \"A\"\n    accuracy_decimals: 1\n    device_class: current\n    state_class: measurement\n    value_type: S_WORD\n    filters:\n      - multiply: 0.01\n\n  - platform: modbus_controller            # 193 Inverter Frequency\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Inverter Frequency\"\n    id: sunsynk_esphome_inverter_frequency\n    register_type: holding\n    address: 193\n    unit_of_measurement: \"Hz\"\n    accuracy_decimals: 2\n    filters:\n      - multiply: 0.01\n    value_type: U_WORD\n    state_class: measurement\n\n############################################### GRID ##################################################\n\n  - platform: modbus_controller             # 079 Grid Frequency\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Grid Frequency\"\n    id: sunsynk_esphome_grid_frequency\n    register_type: holding\n    address: 79\n    unit_of_measurement: \"Hz\"\n    accuracy_decimals: 2\n    filters:\n      - multiply: 0.01\n    value_type: U_WORD\n    state_class: measurement\n\n  - platform: modbus_controller             # 169 Grid Power\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Grid Power\"\n    id: sunsynk_esphome_grid_power_169\n    register_type: holding\n    address: 169\n    unit_of_measurement: \"W\"\n    accuracy_decimals: 0\n    device_class: power\n    state_class: measurement\n    value_type: S_WORD\n\n  - platform: modbus_controller             # 167 Grid LD Power\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Grid LD Power 167\"\n    id: sunsynk_esphome_grid_power_167\n    register_type: holding\n    address: 167\n    unit_of_measurement: \"W\"\n    accuracy_decimals: 0\n    device_class: power\n    state_class: measurement\n    value_type: S_WORD\n\n  - platform: modbus_controller             # 168 Grid L2 Power\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Grid L2 Power 168\"\n    id: sunsynk_esphome_grid_power_168\n    register_type: holding\n    address: 168\n    unit_of_measurement: \"W\"\n    accuracy_decimals: 0\n    device_class: power\n    state_class: measurement\n    value_type: S_WORD\n\n  - platform: modbus_controller             # 150 Grid Voltage\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Grid Voltage\"\n    id: sunsynk_esphome_grid_voltage\n    register_type: holding\n    address: 150\n    unit_of_measurement: \"V\"\n    accuracy_decimals: 1\n    device_class: voltage\n    state_class: measurement\n    filters:\n      - multiply: 0.1\n    value_type: U_WORD \n\n  - platform: modbus_controller             # 160 Grid Current\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Grid Current\"\n    id: sunsynk_esphome_grid_current\n    register_type: holding\n    address: 160\n    unit_of_measurement: \"A\"\n    accuracy_decimals: 1\n    device_class: current\n    state_class: measurement\n    value_type: S_WORD\n    filters:\n      - multiply: 0.01\n\n  - platform: modbus_controller             # 172 Grid CT Power\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Grid CT Power\"\n    id: sunsynk_esphome_grid_ct_power\n    register_type: holding\n    address: 172\n    unit_of_measurement: \"W\"\n    accuracy_decimals: 0\n    device_class: power\n    state_class: measurement\n    value_type: S_WORD\n\n############################################### LOAD ################################################\n\n  - platform: modbus_controller            # 178 Load Power\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Load Power\"\n    id: sunsynk_esphome_load_power\n    register_type: holding\n    address: 178\n    unit_of_measurement: \"W\"\n    accuracy_decimals: 0\n    device_class: power\n    state_class: measurement\n    value_type: S_WORD\n\n  - platform: modbus_controller            # 176 Load L1 Power\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Load L1 Power\"\n    id: sunsynk_esphome_load_l1_power\n    register_type: holding\n    address: 176\n    unit_of_measurement: \"W\"\n    accuracy_decimals: 0\n    device_class: power\n    state_class: measurement\n    value_type: S_WORD\n\n  - platform: modbus_controller            # 177 Load L2 Power\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Load L2 Power\"\n    id: sunsynk_esphome_load_l2_power\n    register_type: holding\n    address: 177\n    unit_of_measurement: \"W\"\n    accuracy_decimals: 0\n    device_class: power\n    state_class: measurement\n    value_type: S_WORD\n\n  - platform: modbus_controller            # 192 Load Frequency\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Load Frequency\"\n    id: sunsynk_esphome_load_frequency\n    register_type: holding\n    address: 192\n    unit_of_measurement: \"Hz\"\n    accuracy_decimals: 2\n    filters:\n      - multiply: 0.01\n    value_type: U_WORD\n    state_class: measurement\n\n############################################### SOLAR PV1 #############################################\n\n  - platform: modbus_controller            # 186 PV1 Power\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} PV1 Power\"\n    id: sunsynk_esphome_pv1_power\n    register_type: holding\n    address: 186\n    unit_of_measurement: \"W\"\n    accuracy_decimals: 0\n    device_class: power\n    state_class: measurement\n    value_type: U_WORD\n\n  - platform: modbus_controller            # 109 PV1 Voltage\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} PV1 Voltage\"\n    id: sunsynk_esphome_pv1_voltage\n    register_type: holding\n    address: 109\n    unit_of_measurement: \"V\"\n    device_class: voltage\n    state_class: measurement\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.1\n    value_type: U_WORD\n\n  - platform: modbus_controller            # 110 PV1 Current\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} PV1 Current\"\n    id: sunsynk_esphome_pv1_current\n    register_type: holding\n    address: 110\n    unit_of_measurement: \"A\"\n    accuracy_decimals: 1\n    device_class: current\n    state_class: measurement\n    filters:\n      - multiply: 0.1\n    value_type: U_WORD\n\n############################################### SOLAR PV2 #############################################\n\n  - platform: modbus_controller            # 187 PV2 Power\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} PV2 Power\"\n    id: sunsynk_esphome_pv2_power\n    register_type: holding\n    address: 187\n    unit_of_measurement: \"W\"\n    accuracy_decimals: 0\n    device_class: power\n    state_class: measurement\n    value_type: U_WORD\n\n  - platform: modbus_controller            # 111 PV2 Voltage\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} PV2 Voltage\"\n    id: sunsynk_esphome_pv2_voltage\n    register_type: holding\n    address: 111\n    unit_of_measurement: \"V\"\n    accuracy_decimals: 1\n    filters:\n      - multiply: 0.1\n    device_class: voltage\n    state_class: measurement\n    value_type: U_WORD\n\n  - platform: modbus_controller            # 112 PV2 Current\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} PV2 Current\"\n    id: sunsynk_esphome_pv2_current\n    register_type: holding\n    address: 112\n    unit_of_measurement: \"A\"\n    accuracy_decimals: 1\n    device_class: current\n    state_class: measurement\n    filters:\n      - multiply: 0.1\n    value_type: U_WORD\n\n############################################### SOLAR TOTAL ###########################################\n\n  - platform: template                   # Sum of PV1 and PV2 to get total PV Power\n    name: \"${friendly_name} Solar Power\"\n    unit_of_measurement: \"W\"\n    accuracy_decimals: 0\n    device_class: power\n    state_class: measurement\n    lambda: |-\n      return (id(sunsynk_esphome_pv1_power).state + id(sunsynk_esphome_pv2_power).state);\n    update_interval: 5s\n\n############################################### OUTPUTS ###############################################\n\n  - platform: modbus_controller            # 166 Aux Power\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} AUX Power\"\n    id: sunsynk_esphome_aux_power\n    register_type: holding\n    address: 166\n    unit_of_measurement: \"W\"\n    accuracy_decimals: 0\n    device_class: power\n    state_class: measurement\n    value_type: S_WORD\n\n  - platform: template                   # Essential Power based on register 175 + 167 - 166\n    name: \"${friendly_name} Essential Power\"\n    unit_of_measurement: \"W\"\n    accuracy_decimals: 0\n    device_class: power\n    state_class: measurement\n    lambda: |-\n      return (id(sunsynk_esphome_inverter_power).state + id(sunsynk_esphome_grid_power_167).state - id(sunsynk_esphome_aux_power).state);\n    update_interval: 5s\n\n  - platform: template                   # Essential Power1 based on register 175 + 169 - 166\n    name: \"${friendly_name} Essential Power 1\"\n    unit_of_measurement: \"W\"\n    accuracy_decimals: 0\n    device_class: power\n    state_class: measurement\n    lambda: |-\n      return (id(sunsynk_esphome_inverter_power).state + id(sunsynk_esphome_grid_power_169).state - id(sunsynk_esphome_aux_power).state);\n    update_interval: 5s\n\n  - platform: template                   # Nonessential Power 172 - 167\n    name: \"${friendly_name} Nonessential Power\"\n    unit_of_measurement: \"W\"\n    accuracy_decimals: 0\n    device_class: power\n    state_class: measurement\n    lambda: |-\n      return (id(sunsynk_esphome_grid_ct_power).state - id(sunsynk_esphome_grid_power_167).state);\n    update_interval: 5s\n\n  - platform: template                   # Nonessential Power1 172 - 169\n    name: \"${friendly_name} Nonessential Power 1\"\n    unit_of_measurement: \"W\"\n    accuracy_decimals: 0\n    device_class: power\n    state_class: measurement\n    lambda: |-\n      return (id(sunsynk_esphome_grid_ct_power).state - id(sunsynk_esphome_grid_power_169).state);\n    update_interval: 5s\n\n############################################### ENERGY ################################################\n\n  - platform: modbus_controller            # 070 Day Battery Charge\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Day Battery Charge\"\n    id: sunsynk_esphome_day_battery_charge\n    register_type: holding\n    address: 70\n    unit_of_measurement: \"kWh\"\n    accuracy_decimals: 1\n    device_class: energy\n    state_class: total_increasing\n    value_type: U_WORD\n    filters:\n      - multiply: 0.1\n\n  - platform: modbus_controller            # 071 Day Battery Discharge\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Day Battery Discharge\"\n    id: sunsynk_esphome_day_battery_discharge\n    register_type: holding\n    address: 71\n    unit_of_measurement: \"kWh\"\n    accuracy_decimals: 1\n    device_class: energy\n    state_class: total_increasing\n    value_type: U_WORD\n    filters:\n      - multiply: 0.1\n\n  - platform: modbus_controller            # 072 Total Battery Charge\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Total Battery Charge\"\n    id: sunsynk_esphome_total_battery_charge\n    register_type: holding\n    address: 72\n    unit_of_measurement: \"kWh\"\n    accuracy_decimals: 1\n    device_class: energy\n    state_class: total_increasing\n    value_type: U_DWORD_R\n    filters:\n     - multiply: 0.1\n\n  - platform: modbus_controller            # 074 Total Battery Discharge\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Total Battery Discharge\"\n    id: sunsynk_esphome_total_battery_discharge\n    register_type: holding\n    address: 74\n    unit_of_measurement: \"kWh\"\n    accuracy_decimals: 0\n    device_class: energy\n    state_class: total_increasing\n    value_type: U_DWORD_R\n    filters:\n     - multiply: 0.1\n\n  - platform: modbus_controller            # 076 Day Grid Import\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Day Grid Import\"\n    id: sunsynk_esphome_day_grid_import\n    register_type: holding\n    address: 76\n    unit_of_measurement: \"kWh\"\n    accuracy_decimals: 1\n    device_class: energy\n    state_class: total_increasing\n    value_type: U_WORD\n    filters:\n      - multiply: 0.1\n\n  - platform: modbus_controller            # 077 Day Grid Export\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Day Grid Export\"\n    id: sunsynk_esphome_day_grid_export\n    register_type: holding\n    address: 77\n    unit_of_measurement: \"kWh\"\n    accuracy_decimals: 1\n    device_class: energy\n    state_class: total_increasing\n    value_type: U_WORD\n    filters:\n      - multiply: 0.1\n\n  - platform: modbus_controller            # 078 Total Grid Import\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Total Grid Import\"\n    id: sunsynk_esphome_total_grid_import\n    register_type: holding\n    address: 78\n    unit_of_measurement: \"kWh\"\n    accuracy_decimals: 2\n    device_class: energy\n    state_class: total_increasing\n    value_type: U_WORD\n    filters:\n      - multiply: 0.1\n\n  - platform: modbus_controller            # 081 Total Grid Export\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Total Grid Export\"\n    id: sunsynk_esphome_total_grid_export\n    register_type: holding\n    address: 81\n    unit_of_measurement: \"kWh\"\n    accuracy_decimals: 2\n    device_class: energy\n    state_class: total_increasing\n    value_type: U_WORD\n    filters:\n      - multiply: 0.1\n\n  - platform: modbus_controller            # 084 Day Load Energy\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Day Load Energy\"\n    id: sunsynk_esphome_day_load_energy\n    register_type: holding\n    address: 84\n    unit_of_measurement: \"kWh\"\n    accuracy_decimals: 2\n    device_class: energy\n    state_class: total_increasing\n    filters:\n      - multiply: 0.1\n    value_type: U_WORD\n\n  - platform: modbus_controller            # 085 Total Load Energy\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Total Load Energy\"\n    id: sunsynk_esphome_total_load_energy\n    register_type: holding\n    address: 85\n    unit_of_measurement: \"kWh\"\n    accuracy_decimals: 2\n    device_class: energy\n    state_class: total_increasing\n    value_type: U_DWORD_R\n    filters:\n      - multiply: 0.1\n\n  - platform: modbus_controller            # 096 Total PV Energy\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Total PV Energy\"\n    id: sunsynk_esphome_total_pv_energy\n    register_type: holding\n    address: 96\n    unit_of_measurement: \"kWh\"\n    accuracy_decimals: 2\n    device_class: energy\n    state_class: total_increasing\n    filters:\n      - multiply: 0.1\n    value_type: U_DWORD_R  \n\n  - platform: modbus_controller            # 108 Day PV Energy\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Day PV Energy\"\n    id: sunsynk_esphome_day_pv_energy\n    register_type: holding\n    address: 108\n    unit_of_measurement: \"kWh\"\n    accuracy_decimals: 1\n    device_class: energy\n    state_class: total_increasing\n    filters:\n      - multiply: 0.1\n    value_type: U_WORD\n\n############################################### Day Energy Consumption TOTAL ###########################################\n\n  - platform: template        # Sum of Day Load Energy and Day Grid Import and Day Battery Discharge to get total Day Energy Consumption\n    name: \"${friendly_name} Day Energy Consumption\"\n    unit_of_measurement: \"kWh\"\n    accuracy_decimals: 2\n    device_class: energy\n    state_class: total_increasing\n    lambda: |-\n      return (id(sunsynk_esphome_day_load_energy).state + id(sunsynk_esphome_day_grid_import).state + id(sunsynk_esphome_day_battery_discharge).state);\n    update_interval: 5s\n\n############################################### TEMPERATURE ################################################\n\n  - platform: modbus_controller            # 090 DC Transformer Temperature\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} DC Transformer Temperature\"\n    id: sunsynk_esphome_dc_transformer_temperature\n    register_type: holding\n    address: 090\n    unit_of_measurement: \"\u00b0C\"\n    accuracy_decimals: 1\n    device_class: temperature\n    state_class: measurement\n    value_type: S_WORD\n    filters:\n      - offset: -1000\n      - multiply:  0.1\n\n  - platform: modbus_controller            # 091 Radiator Temperature\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Radiator Temperature\"\n    id: sunsynk_esphome_radiator_temperature\n    register_type: holding\n    address: 091\n    unit_of_measurement: \"\u00b0C\"\n    accuracy_decimals: 1\n    device_class: temperature\n    state_class: measurement\n    value_type: S_WORD\n    filters:\n      - offset: -1000\n      - multiply:  0.1\n\n################################################ READ SETTINGS #############################################\n\n  - platform: modbus_controller          # 250 System Mode Time 1\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} System Mode Time1\"\n    id: sunsynk_esphome_system_mode_time1\n    register_type: holding\n    skip_updates: ${settings_skipped_updates}\n    address: 250\n    icon: \"mdi:clock\"\n\n  - platform: modbus_controller          # 251 System Mode Time 2\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} System Mode Time2\"\n    id: sunsynk_esphome_system_mode_time2\n    register_type: holding\n    skip_updates: ${settings_skipped_updates}\n    address: 251   \n    icon: \"mdi:clock\"\n\n  - platform: modbus_controller          # 252 System Mode Time 3\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} System Mode Time3\"\n    id: sunsynk_esphome_system_mode_time3\n    register_type: holding\n    skip_updates: ${settings_skipped_updates}\n    address: 252\n    icon: \"mdi:clock\"\n\n  - platform: modbus_controller          # 253 System Mode Time 4\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} System Mode Time4\"\n    id: sunsynk_esphome_system_mode_time4\n    register_type: holding\n    skip_updates: ${settings_skipped_updates}\n    address: 253\n    icon: \"mdi:clock\"\n\n  - platform: modbus_controller          # 254 System Mode Time 5\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} System Mode Time5\"\n    id: sunsynk_esphome_system_mode_time5\n    register_type: holding\n    skip_updates: ${settings_skipped_updates}\n    address: 254\n    icon: \"mdi:clock\"\n\n  - platform: modbus_controller          # 255 System Mode Time 6\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} System Mode Time6\"\n    id: sunsynk_esphome_system_mode_time6\n    register_type: holding\n    skip_updates: ${settings_skipped_updates}\n    address: 255\n    icon: \"mdi:clock\"\n\n################################################ SAVE RAW REGISTERS ############################################\n\n  - platform: modbus_controller        # 255 Grid Peak Shaving raw register value\n    modbus_controller_id: sunsynk\n    id: grid_peak_shaving_raw\n    register_type: holding\n    address: 280\n    value_type: U_WORD\n\n  - platform: modbus_controller            # 274 raw register value\n    modbus_controller_id: sunsynk\n    id: reg_274_raw\n    register_type: holding\n    address: 274\n    value_type: U_WORD\n    internal: true\n\n  - platform: modbus_controller            # 275 raw register value\n    modbus_controller_id: sunsynk\n    id: reg_275_raw\n    register_type: holding\n    address: 275\n    value_type: U_WORD\n    internal: true\n\n  - platform: modbus_controller            # 276 raw register value\n    modbus_controller_id: sunsynk\n    id: reg_276_raw\n    register_type: holding\n    address: 276\n    value_type: U_WORD\n    internal: true\n\n  - platform: modbus_controller            # 277 raw register value\n    modbus_controller_id: sunsynk\n    id: reg_277_raw\n    register_type: holding\n    address: 277\n    value_type: U_WORD\n    internal: true\n\n  - platform: modbus_controller            # 278 raw register value\n    modbus_controller_id: sunsynk\n    id: reg_278_raw\n    register_type: holding\n    address: 278\n    value_type: U_WORD\n    internal: true\n\n  - platform: modbus_controller            # 279 raw register value\n    modbus_controller_id: sunsynk\n    id: reg_279_raw\n    register_type: holding\n    address: 279\n    value_type: U_WORD\n    internal: true\n\n  - platform: modbus_controller            # 16 raw register value\n    modbus_controller_id: sunsynk\n    id: reg_16_raw\n    register_type: holding\n    address: 16\n    value_type: U_WORD\n    internal: true\n    skip_updates: ${settings_skipped_updates}\n\n  - platform: modbus_controller            # 17 raw register value\n    modbus_controller_id: sunsynk\n    id: reg_17_raw\n    register_type: holding\n    address: 17\n    value_type: U_WORD\n    internal: true\n    skip_updates: ${settings_skipped_updates}\n\n  - platform: modbus_controller            # 248 raw register value\n    modbus_controller_id: sunsynk\n    id: reg_248_raw\n    register_type: holding\n    address: 248\n    value_type: U_WORD\n    internal: true\n    skip_updates: ${settings_skipped_updates}\n\n\n################################################ WRITE SETTINGS ############################################\n\nswitch:\n################################################ Restart ESP ############################################\n  - platform: restart\n    name: \"modbus Restart\"\n################################################ WRITE SETTINGS ############################################\n  - platform: modbus_controller          # 326 Toggle Force Generator\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Toggle Force Generator\"\n    id: sunsynk_esphome_toggle_force_generator\n    register_type: holding\n    address: 326\n    bitmask: 8192 # 2^13 to target bit 13\n    icon: \"mdi:toggle-switch\"\n    \n  - platform: modbus_controller          # 247 Toggle Solar Sell\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Toggle Solar sell\"\n    id: sunsynk_esphome_toggle_solar_sell\n    register_type: holding\n    address: 247\n    bitmask: 1\n    icon: \"mdi:toggle-switch\"\n\n  - platform: modbus_controller          # 243 Priority Load\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Toggle Priority Load\" \n    id: sunsynk_esphome_toggle_priority_load\n    register_type: holding\n    address: 243\n    bitmask: 1\n    icon: \"mdi:toggle-switch\"\n\n  - platform: modbus_controller          # 274 System Mode Grid Charge Time 1\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} System Mode Grid Charge Time1\"\n    id: sunsynk_esphome_toggle_grid_charge_time1\n    register_type: holding\n    address: 274\n    bitmask: 1\n    icon: \"mdi:toggle-switch\"\n\n  - platform: modbus_controller          # 275 System Mode Grid Charge Time 2\n    modbus_controller_id: sunsynk\n    use_write_multiple: true\n    name: \"${friendly_name} System Mode Grid Charge Time2\"\n    id: sunsynk_esphome_toggle_grid_charge_time2\n    register_type: holding\n    address: 275\n    bitmask: 1\n    icon: \"mdi:toggle-switch\"\n\n  - platform: modbus_controller          # 276 System Mode Grid Charge Time 3\n    modbus_controller_id: sunsynk\n    use_write_multiple: true\n    name: \"${friendly_name} System Mode Grid Charge Time3\"\n    id: sunsynk_esphome_toggle_grid_charge_time3\n    register_type: holding\n    address: 276\n    bitmask: 1\n    icon: \"mdi:toggle-switch\"\n\n  - platform: modbus_controller          # 277 System Mode Grid Charge Time 4\n    modbus_controller_id: sunsynk\n    use_write_multiple: true\n    name: \"${friendly_name} System Mode Grid Charge Time4\"\n    id: sunsynk_esphome_toggle_grid_charge_time4\n    register_type: holding\n    address: 277\n    bitmask: 1\n    icon: \"mdi:toggle-switch\"\n\n  - platform: modbus_controller          # 278 System Mode Grid Charge Time 5\n    modbus_controller_id: sunsynk\n    use_write_multiple: true\n    name: \"${friendly_name} System Mode Grid Charge Time5\"\n    id: sunsynk_esphome_toggle_grid_charge_time5\n    register_type: holding\n    address: 278\n    bitmask: 1\n    icon: \"mdi:toggle-switch\"\n\n  - platform: modbus_controller          # 279 System Mode Grid Charge Time 6\n    modbus_controller_id: sunsynk\n    use_write_multiple: true\n    name: \"${friendly_name} System Mode Grid Charge Time6\"\n    id: sunsynk_esphome_toggle_grid_charge_time6\n    register_type: holding\n    address: 279\n    bitmask: 1\n    icon: \"mdi:toggle-switch\"\n\n  - platform: modbus_controller            # 214 BATTERY SETTING 1 Activate battery\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Activate battery\"\n    id: sunsynk_esphome_activate_battery\n    register_type: holding\n    address: 214\n    icon: \"mdi:toggle-switch\"\n\n  - platform: modbus_controller               # 231 BATTERY SETTING 2 Gen charge\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Gen charge\"\n    id: sunsynk_esphome_gen_charge\n    register_type: holding\n    address: 231\n    icon: \"mdi:toggle-switch\"\n\n  - platform: modbus_controller               # 232 BATTERY SETTING 2 Grid charge\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Grid charge\"\n    id: sunsynk_esphome_grid_charge\n    register_type: holding\n    address: 232\n    icon: \"mdi:toggle-switch\"\n\nnumber:\n  - platform: modbus_controller         # 268 System Mode SoC Time 1\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_set_soc_time1\n    name: \"${friendly_name} System Mode SoC Time1\"\n    unit_of_measurement: \"%\"\n    address: 268\n    min_value: 0\n    max_value: 100\n    mode: box\n    step: 5\n    value_type: U_WORD  \n\n  - platform: modbus_controller         # 269 System Mode SoC Time 2\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_set_soc_time2\n    name: \"${friendly_name} System Mode SoC Time2\"\n    unit_of_measurement: \"%\"\n    address: 269\n    min_value: 0\n    max_value: 100\n    mode: box\n    step: 5\n    value_type: U_WORD  \n\n  - platform: modbus_controller         # 270 System Mode SoC Time 3\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_set_soc_time3\n    name: \"${friendly_name} System Mode SoC Time3\"\n    unit_of_measurement: \"%\"\n    address: 270\n    min_value: 0\n    max_value: 100\n    mode: box\n    step: 5\n    value_type: U_WORD  \n\n  - platform: modbus_controller         # 271 System Mode SoC Time 4\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_set_soc_time4\n    name: \"${friendly_name} System Mode SoC Time4\"\n    unit_of_measurement: \"%\"\n    address: 271\n    min_value: 0\n    max_value: 100\n    mode: box\n    step: 5\n    value_type: U_WORD  \n\n  - platform: modbus_controller         # 272 System Mode SoC Time 5\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_set_soc_time5\n    name: \"${friendly_name} System Mode SoC Time5\"\n    unit_of_measurement: \"%\"\n    address: 272\n    min_value: 0\n    max_value: 100\n    mode: box\n    step: 5\n    value_type: U_WORD  \n\n  - platform: modbus_controller         # 273 System Mode SoC Time 6\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_set_soc_time6\n    name: \"${friendly_name} System Mode SoC Time6\"\n    unit_of_measurement: \"%\"\n    address: 273\n    min_value: 0\n    max_value: 100\n    mode: box\n    step: 5\n    value_type: U_WORD  \n\n  - platform: modbus_controller         # 256 System Mode Power Time 1\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_set_power_time1\n    name: \"${friendly_name} System Mode Power Time1\"\n    unit_of_measurement: \"W\"\n    address: 256\n    min_value: 0\n    max_value: 8000\n    mode: box\n    step: 100\n    value_type: U_WORD  \n\n  - platform: modbus_controller         # 257 System Mode Power Time 2\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_set_power_time2\n    name: \"${friendly_name} System Mode Power Time2\"\n    unit_of_measurement: \"W\"\n    address: 257\n    min_value: 0\n    max_value: 8000\n    mode: box\n    step: 100\n    value_type: U_WORD  \n\n  - platform: modbus_controller         # 258 System Mode Power Time 3\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_set_power_time3\n    name: \"${friendly_name} System Mode Power Time3\"\n    unit_of_measurement: \"W\"\n    address: 258\n    min_value: 0\n    max_value: 8000\n    mode: box\n    step: 100\n    value_type: U_WORD  \n\n  - platform: modbus_controller         # 259 System Mode Power Time 4\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_set_power_time4\n    name: \"${friendly_name} System Mode Power Time4\"\n    unit_of_measurement: \"W\"\n    address: 259\n    min_value: 0\n    max_value: 8000\n    mode: box\n    step: 100\n    value_type: U_WORD  \n\n  - platform: modbus_controller         # 260 System Mode Power Time 5\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_set_power_time5\n    name: \"${friendly_name} System Mode Power Time5\"\n    unit_of_measurement: \"W\"\n    address: 260\n    min_value: 0\n    max_value: 8000\n    mode: box\n    step: 100\n    value_type: U_WORD  \n\n  - platform: modbus_controller         # 261 System Mode Power Time 6\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_set_power_time6\n    name: \"${friendly_name} System Mode Power Time6\"\n    unit_of_measurement: \"W\"\n    address: 261\n    min_value: 0\n    max_value: 8000\n    mode: box\n    step: 100\n    value_type: U_WORD  \n\n  - platform: modbus_controller            # 262 Prog1 Voltage\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_set_voltage_time1\n    name: \"${friendly_name} Prog1 Voltage\"\n    unit_of_measurement: \"V\"\n    address: 262\n    min_value: 41\n    max_value: 60\n    mode: box\n    step: 0.1\n    value_type: U_WORD\n    lambda: \"return  x * 0.01; \"\n    write_lambda: |-\n      return x * 100 ;\n\n  - platform: modbus_controller            # 263 Prog2 Voltage\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_set_voltage_time2\n    name: \"${friendly_name} Prog2 Voltage\"\n    unit_of_measurement: \"V\"\n    address: 263\n    min_value: 41\n    max_value: 60\n    mode: box\n    step: 0.1\n    value_type: U_WORD\n    lambda: \"return  x * 0.01; \"\n    write_lambda: |-\n      return x * 100 ;\n\n  - platform: modbus_controller            # 264 Prog3 Voltage\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_set_voltage_time3\n    name: \"${friendly_name} Prog3 Voltage\"\n    unit_of_measurement: \"V\"\n    address: 264\n    min_value: 41\n    max_value: 60\n    mode: box\n    step: 0.1\n    value_type: U_WORD\n    lambda: \"return  x * 0.01; \"\n    write_lambda: |-\n      return x * 100 ;\n\n  - platform: modbus_controller            # 265 Prog4 Voltage\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_set_voltage_time4\n    name: \"${friendly_name} Prog4 Voltage\"\n    unit_of_measurement: \"V\"\n    address: 265\n    min_value: 41\n    max_value: 60\n    mode: box\n    step: 0.1\n    value_type: U_WORD\n    lambda: \"return  x * 0.01; \"\n    write_lambda: |-\n      return x * 100 ;\n\n  - platform: modbus_controller            # 266 Prog5 Voltage\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_set_voltage_time5\n    name: \"${friendly_name} Prog5 Voltage\"\n    unit_of_measurement: \"V\"\n    address: 266\n    min_value: 41\n    max_value: 60\n    mode: box\n    step: 0.1\n    value_type: U_WORD\n    lambda: \"return  x * 0.01; \"\n    write_lambda: |-\n      return x * 100 ;\n\n  - platform: modbus_controller            # 267 Prog6 Voltage\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_set_voltage_time6\n    name: \"${friendly_name} Prog6 Voltage\"\n    unit_of_measurement: \"V\"\n    address: 267\n    min_value: 41\n    max_value: 60\n    mode: box\n    step: 0.1\n    value_type: U_WORD\n    lambda: \"return  x * 0.01; \"\n    write_lambda: |-\n      return x * 100 ;\n\n\n  - platform: modbus_controller         # 230 Grid Charge Battery current\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_grid_charge_bat_current\n    name: \"${friendly_name} Grid Charge Battery current\"\n    unit_of_measurement: \"A\"\n    address: 230\n    min_value: 0\n    max_value: 185\n    step: 5\n    value_type: U_WORD  \n\n  - platform: modbus_controller         # 210 Battery Max Charge current\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_bat_max_charge_current\n    name: \"${friendly_name} Battery Max Charge current\"\n    unit_of_measurement: \"A\"\n    address: 210\n    min_value: 0\n    max_value: 185\n    step: 5\n    value_type: U_WORD  \n\n  - platform: modbus_controller         # 211 Battery Max Discharge current\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_bat_max_discharge_current\n    name: \"${friendly_name} Battery Max Discharge current\"\n    unit_of_measurement: \"A\"\n    address: 211\n    min_value: 0\n    max_value: 185\n    step: 5\n    value_type: U_WORD  \n\n  - platform: modbus_controller            # 293 Grid Peak Shaving Power\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Grid Peak shaving power\"\n    id: sunsynk_grid_peak_shaving_power\n    address: 293\n    unit_of_measurement: \"W\"\n    min_value: 0\n    max_value: 8000\n    step: 500\n    value_type: U_WORD\n\n  - platform: modbus_controller            # 245 Max Sell Power\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Max Sell power\"\n    id: sunsynk_max_sell_power\n    address: 245\n    unit_of_measurement: \"W\"\n    min_value: 0\n    max_value: 8000\n    step: 500\n    value_type: U_WORD\n\n  - platform: modbus_controller            # 53 solar Power\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Solar power\"\n    id: sunsynk_solar_power\n    address: 53\n    unit_of_measurement: \"W\"\n    min_value: 0\n    max_value: 6500\n    step: 100\n    value_type: U_WORD\n\n  - platform: modbus_controller          # 250 Input System Mode Time 1\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Input System Mode Time1\"\n    id: sunsynk_esphome_input_system_mode_time1\n    register_type: holding\n    skip_updates: ${settings_skipped_updates}\n    address: 250\n    icon: \"mdi:clock\"\n\n  - platform: modbus_controller          # 251 Input System Mode Time 2\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Input System Mode Time2\"\n    id: sunsynk_esphome_input_system_mode_time2\n    register_type: holding\n    skip_updates: ${settings_skipped_updates}\n    address: 251   \n    icon: \"mdi:clock\"\n\n  - platform: modbus_controller          # 252 Input System Mode Time 3\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Input System Mode Time3\"\n    id: sunsynk_esphome_input_system_mode_time3\n    register_type: holding\n    skip_updates: ${settings_skipped_updates}\n    address: 252\n    icon: \"mdi:clock\"\n\n  - platform: modbus_controller          # 253 Input System Mode Time 4\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Input System Mode Time4\"\n    id: sunsynk_esphome_input_system_mode_time4\n    register_type: holding\n    skip_updates: ${settings_skipped_updates}\n    address: 253\n    icon: \"mdi:clock\"\n\n  - platform: modbus_controller          # 254 Input System Mode Time 5\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Input System Mode Time5\"\n    id: sunsynk_esphome_input_system_mode_time5\n    register_type: holding\n    skip_updates: ${settings_skipped_updates}\n    address: 254\n    icon: \"mdi:clock\"\n\n  - platform: modbus_controller          # 255 Input System Mode Time 6\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Input System Mode Time6\"\n    id: sunsynk_esphome_input_system_mode_time6\n    register_type: holding\n    skip_updates: ${settings_skipped_updates}\n    address: 255\n    icon: \"mdi:clock\"\n\n  - platform: modbus_controller        # 204 BATTERY SETTING 1 Batt capacity\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_batt_capacity\n    name: \"${friendly_name} Batt capacity\"\n    address: 204\n    unit_of_measurement: Ah\n    value_type: U_WORD\n    max_value: 9999.0\n    min_value: 0\n    step: 1\n    mode: box\n\n  - platform: modbus_controller               # 225 BATTERY SETTING 2 Gen start voltage\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_gen_start_voltage\n    name: \"${friendly_name} Gen start voltage\"\n    address: 225\n    unit_of_measurement: V\n    value_type: U_WORD\n    max_value: 58.0\n    min_value: 41.0\n    step: 0.1\n    mode: box\n    lambda: \"return x * 0.01;\"\n    write_lambda: \"return x * 100;\"\n\n  - platform: modbus_controller              # 226 BATTERY SETTING 2 Gen start percent\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_gen_start_percent\n    name: \"${friendly_name} Gen start percent\"\n    address: 226\n    unit_of_measurement: \"%\"\n    value_type: U_WORD\n    max_value: 90\n    min_value: 10\n    step: 1\n    mode: box\n\n  - platform: modbus_controller               # 227  BATTERY SETTING 2 Gen charge current\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_gen_charge_current\n    name: \"${friendly_name} Gen charge current\"\n    address: 227\n    unit_of_measurement: \"A\"\n    value_type: U_WORD\n    max_value: 130\n    min_value: 0\n    step: 1\n    mode: box\n\n  - platform: modbus_controller              # 228 BATTERY SETTING 2 Grid start voltage\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_grid_start_voltage\n    name: \"${friendly_name} Grid start voltage\"\n    address: 228\n    unit_of_measurement: V\n    value_type: U_WORD\n    max_value: 58.0\n    min_value: 41.0\n    step: 0.1\n    mode: box\n    lambda: \"return x * 0.01;\"\n    write_lambda: \"return x * 100;\"\n\n  - platform: modbus_controller                # 229 BATTERY SETTING 2 Grid start percent\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_grid_start_percent\n    name: \"${friendly_name} Grid start percent\"\n    address: 229\n    unit_of_measurement: \"%\"\n    value_type: U_WORD\n    max_value: 90\n    min_value: 10\n    step: 1\n    mode: box\n\n  - platform: modbus_controller                 # 230 BATTERY SETTING 2 Grid charge current\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_grid_charge_current\n    name: \"${friendly_name} Grid charge current\"\n    address: 230\n    unit_of_measurement: \"A\"\n    value_type: U_WORD\n    max_value: 130\n    min_value: 0\n    step: 1\n    mode: box\n\n  - platform: modbus_controller                # 203 BATTERY SETTING 3 Battery float voltage\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_battery_float_voltage\n    name: \"${friendly_name} Battery float voltage\"\n    address: 203\n    unit_of_measurement: V\n    value_type: U_WORD\n    max_value: 60.0\n    min_value: 41.0\n    step: 0.1\n    mode: box\n    lambda: \"return x * 0.01;\"\n    write_lambda: \"return x * 100;\"\n    \n  - platform: modbus_controller               # 202 BATTERY SETTING 3 Battery absorption voltage\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_battery_absorption_voltage\n    name: \"${friendly_name} Battery absorption voltage\"\n    address: 202\n    unit_of_measurement: V\n    value_type: U_WORD\n    max_value: 60.0\n    min_value: 41.0\n    step: 0.1\n    mode: box\n    lambda: \"return x * 0.01;\"\n    write_lambda: \"return x * 100;\"\n\n  - platform: modbus_controller              # 201 BATTERY SETTING 3 Battery equalization voltage\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_battery_equalization_voltage\n    name: \"${friendly_name} Battery equalization voltage\"\n    address: 201\n    unit_of_measurement: V\n    value_type: U_WORD\n    max_value: 60.0\n    min_value: 41.0\n    step: 0.1\n    mode: box\n    lambda: \"return x * 0.01;\"\n    write_lambda: \"return x * 100;\"\n\n  - platform: modbus_controller              # 220 BATTERY SETTING 3 Shutdown voltage\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_shutdown_voltage\n    name: \"${friendly_name} Shutdown voltage\"\n    address: 220\n    unit_of_measurement: V\n    value_type: U_WORD\n    max_value: 60.0\n    min_value: 41.0\n    step: 0.1\n    mode: box\n    lambda: \"return x * 0.01;\"\n    write_lambda: \"return x * 100;\"\n\n  - platform: modbus_controller                 # 222 BATTERY SETTING 3 Low batt voltage\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_low_batt_voltage\n    name: \"${friendly_name} Low batt voltage\"\n    address: 222\n    unit_of_measurement: V\n    value_type: U_WORD\n    max_value: 60.0\n    min_value: 41.0\n    step: 0.1\n    mode: box\n    lambda: \"return x * 0.01;\"\n    write_lambda: \"return x * 100;\"\n\n  - platform: modbus_controller                 # 221 BATTERY SETTING 3 Restart voltage\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_restart_voltage\n    name: \"${friendly_name} Restart voltage\"\n    address: 221\n    unit_of_measurement: V\n    value_type: U_WORD\n    max_value: 60.0\n    min_value: 41.0\n    step: 0.1\n    mode: box\n    lambda: \"return x * 0.01;\"\n    write_lambda: \"return x * 100;\"\n\n  - platform: modbus_controller                # 217 BATTERY SETTING 3 Shutdown percent\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_shutdown_percent\n    name: \"${friendly_name} Shutdown percent\"\n    address: 217\n    unit_of_measurement: \"%\"\n    value_type: U_WORD\n    max_value: 100\n    min_value: 0\n    step: 1\n    mode: box\n\n  - platform: modbus_controller                   # 219 BATTERY SETTING 3 Low batt percent\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_low_batt_percent\n    name: \"${friendly_name} Low batt percent\"\n    address: 219\n    unit_of_measurement: \"%\"\n    value_type: U_WORD\n    max_value: 100\n    min_value: 0\n    step: 1\n    mode: box\n\n  - platform: modbus_controller                 # 218 BATTERY SETTING 3 Restart percent\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_restart_percent\n    name: \"${friendly_name} Restart percent\"\n    address: 218\n    unit_of_measurement: \"%\"\n    value_type: U_WORD\n    max_value: 100\n    min_value: 0\n    step: 1\n    mode: box\n\n  - platform: modbus_controller               # 207 BATTERY SETTING 3 Equalization days\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_equalization_days\n    name: \"${friendly_name} Equalization days\"\n    address: 207\n    unit_of_measurement: days\n    value_type: U_WORD\n    max_value: 90\n    min_value: 0\n    step: 1\n    mode: box\n\n  - platform: modbus_controller                      # 208 BATTERY SETTING 3 Equalization hours\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_equalization_hours\n    name: \"${friendly_name} Equalization hours\"\n    address: 208\n    unit_of_measurement: hours\n    value_type: U_WORD\n    max_value: 10\n    min_value: 0\n    step: 0.5\n    mode: box\n    lambda: \"return x \/ 2.0;\"\n    write_lambda: \"return x * 2.0;\"\n\n  - platform: modbus_controller                    # 209 BATTERY SETTING 3 TEMPCO\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_tempco\n    name: \"${friendly_name} TEMPCO\"\n    address: 209\n    unit_of_measurement: m\u03a9\/\u00b0C\n    value_type: U_WORD\n    max_value: 20\n    min_value: 0\n    step: 1\n    mode: box\n\n  - platform: modbus_controller                    # 215 BATTERY SETTING 3 Batt resistance\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_batt_resistance\n    name: \"${friendly_name} Batt resistance\"\n    address: 215\n    unit_of_measurement: m\u03a9\n    value_type: U_WORD\n    max_value: 200\n    min_value: 0\n    step: 1\n    mode: box\n\n\n################################################ TEXT SENSORS ##################################################\n\ntext_sensor:\n  - platform: modbus_controller            # 059 Overall State\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Overall State\"\n    id: sunsynk_esphome_overall_state\n    register_type: holding\n    skip_updates: ${settings_skipped_updates}\n    raw_encode: HEXBYTES\n    address: 59\n    lambda: |- \n      uint16_t value = modbus_controller::word_from_hex_str(x, 0);\n      switch (value) {\n        case 0: return std::string(\"standby\");\n        case 1: return std::string(\"selftest\");\n        case 2: return std::string(\"normal\");\n        case 3: return std::string(\"alarm\");\n        case 4: return std::string(\"fault\");\n        default: return std::string(\"unknown\");\n      }\n  - platform: template\n    name: \"${friendly_name} Time Slot 1\"\n    id: sunsynk_esphome_time_slot_1\n    icon: \"mdi:clock\"\n    lambda: |-\n        int minutes, hours;\n        if (id(sunsynk_esphome_system_mode_time1).state) {\n        minutes = static_cast&lt;int&gt;(id(sunsynk_esphome_system_mode_time1).state) % 100;\n        hours = static_cast&lt;int&gt;(id(sunsynk_esphome_system_mode_time1).state) \/ 100;\n        } else {\n          minutes = 0;\n          hours = 0;\n        }\n        char formatted_time[6];\n        snprintf(formatted_time, sizeof(formatted_time), \"%02d:%02d\", hours, minutes);\n        return esphome::optional&lt;std::string&gt;(formatted_time);\n  - platform: template\n    name: \"${friendly_name} Time Slot 2\"\n    id: sunsynk_esphome_time_slot_2\n    icon: \"mdi:clock\"\n    lambda: |-\n        int minutes, hours;\n        if (id(sunsynk_esphome_system_mode_time2).state) {\n        minutes = static_cast&lt;int&gt;(id(sunsynk_esphome_system_mode_time2).state) % 100;\n        hours = static_cast&lt;int&gt;(id(sunsynk_esphome_system_mode_time2).state) \/ 100;\n        } else {\n          minutes = 0;\n          hours = 0;\n        }\n        char formatted_time[6];\n        snprintf(formatted_time, sizeof(formatted_time), \"%02d:%02d\", hours, minutes);\n        return esphome::optional&lt;std::string&gt;(formatted_time);\n  - platform: template\n    name: \"${friendly_name} Time Slot 3\"\n    id: sunsynk_esphome_time_slot_3\n    icon: \"mdi:clock\"\n    lambda: |-\n        int minutes, hours;\n        if (id(sunsynk_esphome_system_mode_time3).state) {\n        minutes = static_cast&lt;int&gt;(id(sunsynk_esphome_system_mode_time3).state) % 100;\n        hours = static_cast&lt;int&gt;(id(sunsynk_esphome_system_mode_time3).state) \/ 100;\n        } else {\n          minutes = 0;\n          hours = 0;\n        }\n        char formatted_time[6];\n        snprintf(formatted_time, sizeof(formatted_time), \"%02d:%02d\", hours, minutes);\n        return esphome::optional&lt;std::string&gt;(formatted_time);\n  - platform: template\n    name: \"${friendly_name} Time Slot 4\"\n    id: sunsynk_esphome_time_slot_4\n    icon: \"mdi:clock\"\n    lambda: |-\n        int minutes, hours;\n        if (id(sunsynk_esphome_system_mode_time4).state) {\n        minutes = static_cast&lt;int&gt;(id(sunsynk_esphome_system_mode_time4).state) % 100;\n        hours = static_cast&lt;int&gt;(id(sunsynk_esphome_system_mode_time4).state) \/ 100;\n        } else {\n          minutes = 0;\n          hours = 0;\n        }\n        char formatted_time[6];\n        snprintf(formatted_time, sizeof(formatted_time), \"%02d:%02d\", hours, minutes);\n        return esphome::optional&lt;std::string&gt;(formatted_time);\n  - platform: template\n    name: \"${friendly_name} Time Slot 5\"\n    id: sunsynk_esphome_time_slot_5\n    icon: \"mdi:clock\"\n    lambda: |-\n        int minutes, hours;\n        if (id(sunsynk_esphome_system_mode_time5).state) {\n        minutes = static_cast&lt;int&gt;(id(sunsynk_esphome_system_mode_time5).state) % 100;\n        hours = static_cast&lt;int&gt;(id(sunsynk_esphome_system_mode_time5).state) \/ 100;\n        } else {\n          minutes = 0;\n          hours = 0;\n        }\n        char formatted_time[6];\n        snprintf(formatted_time, sizeof(formatted_time), \"%02d:%02d\", hours, minutes);\n        return esphome::optional&lt;std::string&gt;(formatted_time);\n  - platform: template\n    name: \"${friendly_name} Time Slot 6\"\n    id: sunsynk_esphome_time_slot_6\n    icon: \"mdi:clock\"\n    lambda: |-\n        int minutes, hours;\n        if (id(sunsynk_esphome_system_mode_time6).state) {\n        minutes = static_cast&lt;int&gt;(id(sunsynk_esphome_system_mode_time6).state) % 100;\n        hours = static_cast&lt;int&gt;(id(sunsynk_esphome_system_mode_time6).state) \/ 100;\n        } else {\n          minutes = 0;\n          hours = 0;\n        }\n        char formatted_time[6];\n        snprintf(formatted_time, sizeof(formatted_time), \"%02d:%02d\", hours, minutes);\n        return esphome::optional&lt;std::string&gt;(formatted_time);\n\n  - platform: modbus_controller            # 003-007 Inverter HEX Serial Number\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_serial\n    register_type: holding\n    skip_updates: ${settings_skipped_updates}\n    raw_encode: HEXBYTES\n    address: 003\n    register_count: 5\n    internal: true\n\n\n  - platform: template                     # Inverter ASCII Serial Number\n    name: \"${friendly_name} Serial\"\n    id: sunsynk_esphome_ascii_serial\n    icon: \"mdi:text\"\n    lambda: |-\n      std::string hexData = id(sunsynk_esphome_serial).state;\n\n      \/\/ Convert hex-encoded string to ASCII\n      std::string asciiData;\n      for (size_t i = 0; i &lt; hexData.length(); i += 2) {\n        std::string byte = hexData.substr(i, 2);\n        char chr = static_cast&lt;char&gt;(std::stoi(byte, nullptr, 16));\n        asciiData.push_back(chr);\n      }\n\n      return asciiData;\n\n\n################################################ SELECT SENSORS ################################################\n\nselect:\n  - platform: modbus_controller                   #243 Select Energy Patern\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_select_energy_pattern\n    name: \"${friendly_name} Energy Pattern\"\n    address: 243\n    value_type: U_WORD\n    optionsmap:\n      \"Battery first\": 0\n      \"Load first\": 1   \n         \n  - platform: modbus_controller                   #244 Select Work Mode\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    id: sunsynk_esphome_select_work_mode\n    name: \"${friendly_name} Work Mode\"\n    address: 244\n    value_type: U_WORD\n    optionsmap:\n      \"Selling First\": 0\n      \"Zero Export + Limit to Load Only\": 1\n      \"Limited to Home\": 2    \n\n  - platform: modbus_controller                  #280 Select Grid Peak Shaving\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Grid Peak Shaving\"\n    id: sunsynk_esphome_select_grid_peak_shaving\n    address: 280\n    value_type: U_WORD\n    optionsmap:\n      \"Disabled\": 0\n      \"Enabled\": 256\n    lambda: |-\n      \/\/ we are only interested in the 8th bit binary 0001 0000 0000 need to map the options 0, 256 in select \n      \/\/ESP_LOGE(\"main\",\"Modbus Number incoming value = %d\",x);\n      \/\/ESP_LOGE(\"main\",\"Modbus eval value = %d\",(x &amp; 0x0100));\n      if ((x &amp; 0x0100) == 0)\n        return  std::string(\"Disabled\");\n      if ((x &amp; 0x0100) == 256)\n        return  std::string(\"Enabled\");\n      return {};\n    write_lambda: |-\n      \/\/ESP_LOGE(\"main\",\"Modbus write gets = %d\",value);\n      uint16_t unmodified =  id(grid_peak_shaving_raw).state;\n      \/\/ESP_LOGE(\"main\",\"Modbus write unmodified = %d\", unmodified);\n      \/\/ optionsmap should only return 2 values... 0 , 256 so bitmask with complement 0x0100 to ensure we keep the original values in register. Then appply OR with the value that was chosen\n      uint16_t modified = ((unmodified &amp; ~0x0100) | value);\n      \/\/ESP_LOGE(\"main\",\"Modbus write to write = %d\", modified);\n      return modified;\n\n  - platform: modbus_controller            #274 Select Prog1 Charge Option\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Prog1 Charge Option\"\n    id: sunsynk_esphome_select_system_mode_charge_option_time_1\n    address: 274\n    value_type: U_WORD\n    optionsmap:\n      \"No Grid or Gen\": 0\n      \"Allow Grid\": 1\n      \"Allow Gen\": 2\n      \"Allow Grid &amp; Gen\": 3\n    lambda: |-\n      if ((x &amp; 0x0003) == 0)\n        return  std::string(\"No Grid or Gen\");\n      if ((x &amp; 0x0003) == 1)\n        return  std::string(\"Allow Grid\");\n      if ((x &amp; 0x0003) == 2)\n        return  std::string(\"Allow Gen\");\n      if ((x &amp; 0x0003) == 3)\n        return  std::string(\"Allow Grid &amp; Gen\");\n      return {};\n    write_lambda: |-\n      uint16_t unmodified =  id(reg_274_raw).state;\n      uint16_t modified = ((unmodified &amp; ~0x0003) | value);\n      return modified;\n\n  - platform: modbus_controller            #275  Select Prog2 Charge Option\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Prog2 Charge Option\"\n    id: sunsynk_esphome_select_system_mode_charge_option_time_2\n    address: 275\n    value_type: U_WORD\n    optionsmap:\n      \"No Grid or Gen\": 0\n      \"Allow Grid\": 1\n      \"Allow Gen\": 2\n      \"Allow Grid &amp; Gen\": 3\n    lambda: |-\n      if ((x &amp; 0x0003) == 0)\n        return  std::string(\"No Grid or Gen\");\n      if ((x &amp; 0x0003) == 1)\n        return  std::string(\"Allow Grid\");\n      if ((x &amp; 0x0003) == 2)\n        return  std::string(\"Allow Gen\");\n      if ((x &amp; 0x0003) == 3)\n        return  std::string(\"Allow Grid &amp; Gen\");\n      return {};\n    write_lambda: |-\n      uint16_t unmodified =  id(reg_275_raw).state;\n      uint16_t modified = ((unmodified &amp; ~0x0003) | value);\n      return modified;\n\n  - platform: modbus_controller            #276  Select Prog3 Charge Option\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Prog3 Charge Option\"\n    id: sunsynk_esphome_select_system_mode_charge_option_time_3\n    address: 276\n    value_type: U_WORD\n    optionsmap:\n      \"No Grid or Gen\": 0\n      \"Allow Grid\": 1\n      \"Allow Gen\": 2\n      \"Allow Grid &amp; Gen\": 3\n    lambda: |-\n      if ((x &amp; 0x0003) == 0)\n        return  std::string(\"No Grid or Gen\");\n      if ((x &amp; 0x0003) == 1)\n        return  std::string(\"Allow Grid\");\n      if ((x &amp; 0x0003) == 2)\n        return  std::string(\"Allow Gen\");\n      if ((x &amp; 0x0003) == 3)\n        return  std::string(\"Allow Grid &amp; Gen\");\n      return {};\n    write_lambda: |-\n      uint16_t unmodified =  id(reg_276_raw).state;\n      uint16_t modified = ((unmodified &amp; ~0x0003) | value);\n      return modified;\n\n  - platform: modbus_controller            #277  Select Prog4 Charge Option\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Prog4 Charge Option\"\n    id: sunsynk_esphome_select_system_mode_charge_option_time_4\n    address: 277\n    value_type: U_WORD\n    optionsmap:\n      \"No Grid or Gen\": 0\n      \"Allow Grid\": 1\n      \"Allow Gen\": 2\n      \"Allow Grid &amp; Gen\": 3\n    lambda: |-\n      if ((x &amp; 0x0003) == 0)\n        return  std::string(\"No Grid or Gen\");\n      if ((x &amp; 0x0003) == 1)\n        return  std::string(\"Allow Grid\");\n      if ((x &amp; 0x0003) == 2)\n        return  std::string(\"Allow Gen\");\n      if ((x &amp; 0x0003) == 3)\n        return  std::string(\"Allow Grid &amp; Gen\");\n      return {};\n    write_lambda: |-\n      uint16_t unmodified =  id(reg_277_raw).state;\n      uint16_t modified = ((unmodified &amp; ~0x0003) | value);\n      return modified;\n\n  - platform: modbus_controller            #278  Select Prog5 Charge Option\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Prog5 Charge Option\"\n    id: sunsynk_esphome_select_system_mode_charge_option_time_5\n    address: 278\n    value_type: U_WORD\n    optionsmap:\n      \"No Grid or Gen\": 0\n      \"Allow Grid\": 1\n      \"Allow Gen\": 2\n      \"Allow Grid &amp; Gen\": 3\n    lambda: |-\n      if ((x &amp; 0x0003) == 0)\n        return  std::string(\"No Grid or Gen\");\n      if ((x &amp; 0x0003) == 1)\n        return  std::string(\"Allow Grid\");\n      if ((x &amp; 0x0003) == 2)\n        return  std::string(\"Allow Gen\");\n      if ((x &amp; 0x0003) == 3)\n        return  std::string(\"Allow Grid &amp; Gen\");\n      return {};\n    write_lambda: |-\n      uint16_t unmodified =  id(reg_278_raw).state;\n      uint16_t modified = ((unmodified &amp; ~0x0003) | value);\n      return modified;\n\n  - platform: modbus_controller            #279  Select Prog6 Charge Option\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Prog6 Charge Option\"\n    id: sunsynk_esphome_select_system_mode_charge_option_time_6\n    address: 279\n    value_type: U_WORD\n    optionsmap:\n      \"No Grid or Gen\": 0\n      \"Allow Grid\": 1\n      \"Allow Gen\": 2\n      \"Allow Grid &amp; Gen\": 3\n    lambda: |-\n      if ((x &amp; 0x0003) == 0)\n        return  std::string(\"No Grid or Gen\");\n      if ((x &amp; 0x0003) == 1)\n        return  std::string(\"Allow Grid\");\n      if ((x &amp; 0x0003) == 2)\n        return  std::string(\"Allow Gen\");\n      if ((x &amp; 0x0003) == 3)\n        return  std::string(\"Allow Grid &amp; Gen\");\n      return {};\n    write_lambda: |-\n      uint16_t unmodified =  id(reg_279_raw).state;\n      uint16_t modified = ((unmodified &amp; ~0x0003) | value);\n      return modified;\n\n  - platform: modbus_controller            #274  Select Prog1 Mode Option\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Prog1 Mode Option\"\n    id: sunsynk_esphome_select_system_mode_program_option_time_1\n    address: 274\n    value_type: U_WORD\n    optionsmap:\n      \"None\": 0\n      \"General\": 4\n      \"Backup\": 8\n      \"Charge\": 16\n    lambda: |-\n      if ((x &amp; 0x1C) == 0)\n        return  std::string(\"None\");\n      if ((x &amp; 0x1C) == 4)\n        return  std::string(\"General\");\n      if ((x &amp; 0x1C) == 8)\n        return  std::string(\"Battery\");\n      if ((x &amp; 0x1C) == 16)\n        return  std::string(\"Charge\");\n      return {};\n    write_lambda: |-\n      uint16_t unmodified =  id(reg_274_raw).state;\n      uint16_t modified = ((unmodified &amp; ~0x1C) | value);\n      return modified;\n\n  - platform: modbus_controller            #275  Select Prog2 Mode Option\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Prog2 Mode Option\"\n    id: sunsynk_esphome_select_system_mode_program_option_time_2\n    address: 275\n    value_type: U_WORD\n    optionsmap:\n      \"None\": 0\n      \"General\": 4\n      \"Backup\": 8\n      \"Charge\": 16\n    lambda: |-\n      if ((x &amp; 0x1C) == 0)\n        return  std::string(\"None\");\n      if ((x &amp; 0x1C) == 4)\n        return  std::string(\"General\");\n      if ((x &amp; 0x1C) == 8)\n        return  std::string(\"Battery\");\n      if ((x &amp; 0x1C) == 16)\n        return  std::string(\"Charge\");\n      return {};\n    write_lambda: |-\n      uint16_t unmodified =  id(reg_275_raw).state;\n      uint16_t modified = ((unmodified &amp; ~0x1C) | value);\n      return modified;\n\n  - platform: modbus_controller            #276  Select Prog3 Mode Option\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Prog3 Mode Option\"\n    id: sunsynk_esphome_select_system_mode_program_option_time_3\n    address: 276\n    value_type: U_WORD\n    optionsmap:\n      \"None\": 0\n      \"General\": 4\n      \"Backup\": 8\n      \"Charge\": 16\n    lambda: |-\n      if ((x &amp; 0x1C) == 0)\n        return  std::string(\"None\");\n      if ((x &amp; 0x1C) == 4)\n        return  std::string(\"General\");\n      if ((x &amp; 0x1C) == 8)\n        return  std::string(\"Battery\");\n      if ((x &amp; 0x1C) == 16)\n        return  std::string(\"Charge\");\n      return {};\n    write_lambda: |-\n      uint16_t unmodified =  id(reg_276_raw).state;\n      uint16_t modified = ((unmodified &amp; ~0x1C) | value);\n      return modified;\n\n  - platform: modbus_controller            #277  Select Prog4 Mode Option\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Prog4 Mode Option\"\n    id: sunsynk_esphome_select_system_mode_program_option_time_4\n    address: 277\n    value_type: U_WORD\n    optionsmap:\n      \"None\": 0\n      \"General\": 4\n      \"Backup\": 8\n      \"Charge\": 16\n    lambda: |-\n      if ((x &amp; 0x1C) == 0)\n        return  std::string(\"None\");\n      if ((x &amp; 0x1C) == 4)\n        return  std::string(\"General\");\n      if ((x &amp; 0x1C) == 8)\n        return  std::string(\"Battery\");\n      if ((x &amp; 0x1C) == 16)\n        return  std::string(\"Charge\");\n      return {};\n    write_lambda: |-\n      uint16_t unmodified =  id(reg_277_raw).state;\n      uint16_t modified = ((unmodified &amp; ~0x1C) | value);\n      return modified;\n\n  - platform: modbus_controller            #278  Select Prog5 Mode Option\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Prog5 Mode Option\"\n    id: sunsynk_esphome_select_system_mode_program_option_time_5\n    address: 278\n    value_type: U_WORD\n    optionsmap:\n      \"None\": 0\n      \"General\": 4\n      \"Backup\": 8\n      \"Charge\": 16\n    lambda: |-\n      if ((x &amp; 0x1C) == 0)\n        return  std::string(\"None\");\n      if ((x &amp; 0x1C) == 4)\n        return  std::string(\"General\");\n      if ((x &amp; 0x1C) == 8)\n        return  std::string(\"Battery\");\n      if ((x &amp; 0x1C) == 16)\n        return  std::string(\"Charge\");\n      return {};\n    write_lambda: |-\n      uint16_t unmodified =  id(reg_278_raw).state;\n      uint16_t modified = ((unmodified &amp; ~0x1C) | value);\n      return modified;\n\n  - platform: modbus_controller            #279  Select Prog6 Mode Option\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Prog6 Mode Option\"\n    id: sunsynk_esphome_select_system_mode_program_option_time_6\n    address: 279\n    value_type: U_WORD\n    optionsmap:\n      \"None\": 0\n      \"General\": 4\n      \"Backup\": 8\n      \"Charge\": 16\n    lambda: |-\n      if ((x &amp; 0x1C) == 0)\n        return  std::string(\"None\");\n      if ((x &amp; 0x1C) == 4)\n        return  std::string(\"General\");\n      if ((x &amp; 0x1C) == 8)\n        return  std::string(\"Battery\");\n      if ((x &amp; 0x1C) == 16)\n        return  std::string(\"Charge\");\n      return {};\n    write_lambda: |-\n      uint16_t unmodified =  id(reg_279_raw).state;\n      uint16_t modified = ((unmodified &amp; ~0x1C) | value);\n      return modified;\n\n############################################    Time of Use - dni tygodnia\n  - platform: modbus_controller\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Time of Use OFF-ON\"\n    id: sunsynk_esphome_Time_of_Use_OFF_ON\n    address: 248\n    entity_category: config\n    value_type: U_WORD\n    optionsmap:\n      \"OFF\": 0\n      \"ON\": 1\n    lambda: |-\n      \/\/ESP_LOGE(\"main\",\"Modbus Number incoming value = %d\",x);\n      \/\/ESP_LOGE(\"main\",\"Modbus eval value = %d\",(x &amp; 0x0001));\n      if ((x &amp; 0x0001) == 0)\n        return  std::string(\"OFF\");\n      if ((x &amp; 0x0001) == 1)\n        return  std::string(\"ON\");\n      return {};\n    write_lambda: |-\n      \/\/ESP_LOGE(\"main\",\"Modbus write gets = %d\",value);\n      uint16_t unmodified =  id(reg_248_raw).state;\n      \/\/ESP_LOGE(\"main\",\"Modbus write unmodified = %d\", unmodified);\n      uint16_t modified = ((unmodified &amp; ~0x0001) | value);\n      \/\/ESP_LOGE(\"main\",\"Modbus write to write = %d\", modified);\n      return modified;\n\n\n  - platform: modbus_controller\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Time of Use Monday\"\n    id: sunsynk_esphome_Time_of_Use_Monday\n    address: 248\n    entity_category: config\n    value_type: U_WORD\n    optionsmap:\n      \"OFF\": 0\n      \"ON\": 2\n    lambda: |-\n      \/\/ESP_LOGE(\"main\",\"Modbus Number incoming value = %d\",x);\n      \/\/ESP_LOGE(\"main\",\"Modbus eval value = %d\",(x &amp; 0x0002));\n      if ((x &amp; 0x0002) == 0)\n        return  std::string(\"OFF\");\n      if ((x &amp; 0x0002) == 2)\n        return  std::string(\"ON\");\n      return {};\n    write_lambda: |-\n      \/\/ESP_LOGE(\"main\",\"Modbus write gets = %d\",value);\n      uint16_t unmodified =  id(reg_248_raw).state;\n      \/\/ESP_LOGE(\"main\",\"Modbus write unmodified = %d\", unmodified);\n      uint16_t modified = ((unmodified &amp; ~0x0002) | value);\n      \/\/ESP_LOGE(\"main\",\"Modbus write to write = %d\", modified);\n      return modified;\n\n  - platform: modbus_controller\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Time of Use Tuesday\"\n    id: sunsynk_esphome_Time_of_Use_Tuesday\n    address: 248\n    entity_category: config\n    value_type: U_WORD\n    optionsmap:\n      \"OFF\": 0\n      \"ON\": 4\n    lambda: |-\n      \/\/ESP_LOGE(\"main\",\"Modbus Number incoming value = %d\",x);\n      \/\/ESP_LOGE(\"main\",\"Modbus eval value = %d\",(x &amp; 0x0004));\n      if ((x &amp; 0x0004) == 0)\n        return  std::string(\"OFF\");\n      if ((x &amp; 0x0004) == 4)\n        return  std::string(\"ON\");\n      return {};\n    write_lambda: |-\n      \/\/ESP_LOGE(\"main\",\"Modbus write gets = %d\",value);\n      uint16_t unmodified =  id(reg_248_raw).state;\n      \/\/ESP_LOGE(\"main\",\"Modbus write unmodified = %d\", unmodified);\n      uint16_t modified = ((unmodified &amp; ~0x0004) | value);\n      \/\/ESP_LOGE(\"main\",\"Modbus write to write = %d\", modified);\n      return modified;\n\n  - platform: modbus_controller\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Time of Use Wednesday\"\n    id: sunsynk_esphome_Time_of_Use_Wednesday\n    address: 248\n    entity_category: config\n    value_type: U_WORD\n    optionsmap:\n      \"OFF\": 0\n      \"ON\": 8\n    lambda: |-\n      \/\/ESP_LOGE(\"main\",\"Modbus Number incoming value = %d\",x);\n      \/\/ESP_LOGE(\"main\",\"Modbus eval value = %d\",(x &amp; 0x0008));\n      if ((x &amp; 0x0008) == 0)\n        return  std::string(\"OFF\");\n      if ((x &amp; 0x0008) == 8)\n        return  std::string(\"ON\");\n      return {};\n    write_lambda: |-\n      \/\/ESP_LOGE(\"main\",\"Modbus write gets = %d\",value);\n      uint16_t unmodified =  id(reg_248_raw).state;\n      \/\/ESP_LOGE(\"main\",\"Modbus write unmodified = %d\", unmodified);\n      uint16_t modified = ((unmodified &amp; ~0x0008) | value);\n      \/\/ESP_LOGE(\"main\",\"Modbus write to write = %d\", modified);\n      return modified;\n\n  - platform: modbus_controller\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Time of Use Thursday\"\n    id: sunsynk_esphome_Time_of_Use_Thursday\n    address: 248\n    entity_category: config\n    value_type: U_WORD\n    optionsmap:\n      \"OFF\": 0\n      \"ON\": 16\n    lambda: |-\n      \/\/ESP_LOGE(\"main\",\"Modbus Number incoming value = %d\",x);\n      \/\/ESP_LOGE(\"main\",\"Modbus eval value = %d\",(x &amp; 0x0010));\n      if ((x &amp; 0x0010) == 0)\n        return  std::string(\"OFF\");\n      if ((x &amp; 0x0010) == 16)\n        return  std::string(\"ON\");\n      return {};\n    write_lambda: |-\n      \/\/ESP_LOGE(\"main\",\"Modbus write gets = %d\",value);\n      uint16_t unmodified =  id(reg_248_raw).state;\n      \/\/ESP_LOGE(\"main\",\"Modbus write unmodified = %d\", unmodified);\n      uint16_t modified = ((unmodified &amp; ~0x0010) | value);\n      \/\/ESP_LOGE(\"main\",\"Modbus write to write = %d\", modified);\n      return modified;\n\n  - platform: modbus_controller\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Time of Use Friday\"\n    id: sunsynk_esphome_Time_of_Use_Friday\n    address: 248\n    entity_category: config\n    value_type: U_WORD\n    optionsmap:\n      \"OFF\": 0\n      \"ON\": 32\n    lambda: |-\n      \/\/ESP_LOGE(\"main\",\"Modbus Number incoming value = %d\",x);\n      \/\/ESP_LOGE(\"main\",\"Modbus eval value = %d\",(x &amp; 0x0020));\n      if ((x &amp; 0x0020) == 0)\n        return  std::string(\"OFF\");\n      if ((x &amp; 0x0020) == 32)\n        return  std::string(\"ON\");\n      return {};\n    write_lambda: |-\n      \/\/ESP_LOGE(\"main\",\"Modbus write gets = %d\",value);\n      uint16_t unmodified =  id(reg_248_raw).state;\n      \/\/ESP_LOGE(\"main\",\"Modbus write unmodified = %d\", unmodified);\n      uint16_t modified = ((unmodified &amp; ~0x0020) | value);\n      \/\/ESP_LOGE(\"main\",\"Modbus write to write = %d\", modified);\n      return modified;\n\n  - platform: modbus_controller\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Time of Use Saturday\"\n    id: sunsynk_esphome_Time_of_Use_Saturday\n    address: 248\n    entity_category: config\n    value_type: U_WORD\n    optionsmap:\n      \"OFF\": 0\n      \"ON\": 64\n    lambda: |-\n      \/\/ESP_LOGE(\"main\",\"Modbus Number incoming value = %d\",x);\n      \/\/ESP_LOGE(\"main\",\"Modbus eval value = %d\",(x &amp; 0x0040));\n      if ((x &amp; 0x0040) == 0)\n        return  std::string(\"OFF\");\n      if ((x &amp; 0x0040) == 64)\n        return  std::string(\"ON\");\n      return {};\n    write_lambda: |-\n      \/\/ESP_LOGE(\"main\",\"Modbus write gets = %d\",value);\n      uint16_t unmodified =  id(reg_248_raw).state;\n      \/\/ESP_LOGE(\"main\",\"Modbus write unmodified = %d\", unmodified);\n      uint16_t modified = ((unmodified &amp; ~0x0040) | value);\n      \/\/ESP_LOGE(\"main\",\"Modbus write to write = %d\", modified);\n      return modified;\n\n  - platform: modbus_controller\n    use_write_multiple: true\n    modbus_controller_id: sunsynk\n    name: \"${friendly_name} Time of Use Sunday\"\n    id: sunsynk_esphome_Time_of_Use_Sunday\n    address: 248\n    entity_category: config\n    value_type: U_WORD\n    optionsmap:\n      \"OFF\": 0\n      \"ON\": 128\n    lambda: |-\n      \/\/ESP_LOGE(\"main\",\"Modbus Number incoming value = %d\",x);\n      \/\/ESP_LOGE(\"main\",\"Modbus eval value = %d\",(x &amp; 0x0080));\n      if ((x &amp; 0x0080) == 0)\n        return  std::string(\"OFF\");\n      if ((x &amp; 0x0080) == 128)\n        return  std::string(\"ON\");\n      return {};\n    write_lambda: |-\n      \/\/ESP_LOGE(\"main\",\"Modbus write gets = %d\",value);\n      uint16_t unmodified =  id(reg_248_raw).state;\n      \/\/ESP_LOGE(\"main\",\"Modbus write unmodified = %d\", unmodified);\n      uint16_t modified = ((unmodified &amp; ~0x0080) | value);\n      \/\/ESP_LOGE(\"main\",\"Modbus write to write = %d\", modified);\n      return modified;<\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Cieszymy si\u0119, \u017ce mo\u017cemy og\u0142osi\u0107 udane dodanie kilku nowych encji do kodu ESPHome, kt\u00f3re umo\u017cliwiaj\u0105 odczyt informacji z falownik\u00f3w 1-fazowych. Ta aktualizacja otwiera nowe mo\u017cliwo\u015bci monitorowania zu\u017cycia energii w domach przy u\u017cyciu prostych technologii. Dodanie tych encji do kodu ESPHome otwiera drzwi do bardziej zaawansowanych system\u00f3w monitorowania energii w domu. Dzi\u0119ki nim u\u017cytkownicy mog\u0105 dok\u0142adnie \u015bledzi\u0107 zu\u017cycie energii, identyfikowa\u0107 oszcz\u0119dno\u015bci oraz podejmowa\u0107 bardziej \u015bwiadome decyzje dotycz\u0105ce korzystania z energii elektrycznej. Zach\u0119camy wszystkich zainteresowanych do<\/p>\n<p><a class=\"more-link\" href=\"https:\/\/hybrydaplus.pl\/index.php\/2024\/04\/05\/rozwiazanie-all-in-one-dla-odczytu-informacji-z-falownikow-1-fazowych-nowy-kod-esphome\/\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":436,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[],"class_list":["post-715","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-komunikacja"],"_links":{"self":[{"href":"https:\/\/hybrydaplus.pl\/index.php\/wp-json\/wp\/v2\/posts\/715","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hybrydaplus.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hybrydaplus.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hybrydaplus.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hybrydaplus.pl\/index.php\/wp-json\/wp\/v2\/comments?post=715"}],"version-history":[{"count":5,"href":"https:\/\/hybrydaplus.pl\/index.php\/wp-json\/wp\/v2\/posts\/715\/revisions"}],"predecessor-version":[{"id":822,"href":"https:\/\/hybrydaplus.pl\/index.php\/wp-json\/wp\/v2\/posts\/715\/revisions\/822"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hybrydaplus.pl\/index.php\/wp-json\/wp\/v2\/media\/436"}],"wp:attachment":[{"href":"https:\/\/hybrydaplus.pl\/index.php\/wp-json\/wp\/v2\/media?parent=715"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hybrydaplus.pl\/index.php\/wp-json\/wp\/v2\/categories?post=715"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hybrydaplus.pl\/index.php\/wp-json\/wp\/v2\/tags?post=715"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}