- id: sungrow_inverter_automate_stop_battery_charging alias: Sungrow Inverter Automate Stop Battery Charging triggers: - trigger: numeric_state entity_id: sensor.sungrow_inverter_battery_level_nominal above: 79.9 actions: - if: - condition: template value_template: '{{ (states(''input_number.sungrow_inverter_set_battery_maximum_charge_power'') | float) = 10.0 }}' then: - action: input_number.set_value target: entity_id: input_number.sungrow_inverter_set_battery_maximum_charge_power data: value: 10.0 - if: - condition: template value_template: '{{ (states(''input_number.sungrow_inverter_set_export_power_limit'') | float) < 10000 }}' then: - action: input_number.set_value target: entity_id: input_number.sungrow_inverter_set_export_power_limit data: value: 10000 mode: single - id: sungrow_wallbox_automate_pv_surplus alias: Sungrow Wallbox Automate PV surplus triggers: - trigger: state entity_id: sensor.sungrow_inverter_total_dc_power conditions: - condition: state entity_id: sensor.sungrow_wallbox_charging_status state: Charging - condition: state entity_id: input_select.sungrow_wallbox_set_charging_mode state: PV surplus variables: significance_threshold: 1 min_current: 6.0 max_current: 16.0 max_power: 10000 phase_mode: '{{ 3 if is_state(''sensor.sungrow_wallbox_phase_mode'', ''Three-phase'') else 1 }}' actions: - action: modbus.write_register data_template: hub: SungrowWallbox slave: secret wallbox_modbus_slave address: 21202 value: "{% set total_dc_power = states('sensor.sungrow_inverter_total_dc_power')|float\ \ %} {% set load_power = states('sensor.sungrow_inverter_load_power')|float\ \ %} {% set charging_power = states('sensor.sungrow_wallbox_charging_power')|float\ \ %} {% set rated_voltage = states('sensor.sungrow_wallbox_rated_voltage')|float\ \ %} {% set last_output_current = states('sensor.sungrow_wallbox_output_current')|float\ \ %} {% set house_power = load_power - charging_power %} {% set target_power\ \ = [max_power - house_power, total_dc_power - house_power]|min %} {% set\ \ target_output_current = (target_power / rated_voltage / phase_mode)|round(1)\ \ %} {% set target_output_current = [[min_current, target_output_current]|max,\ \ max_current]|min %} {% if (target_output_current - last_output_current)\ \ > significance_threshold %}\n {% set target_output_current = last_output_current\ \ + significance_threshold %}\n{% elif (last_output_current - target_output_current)\ \ > significance_threshold %}\n {% set target_output_current = last_output_current\ \ - significance_threshold %}\n{% elif now() - states.input_number.sungrow_wallbox_set_output_current.last_changed\ \ < timedelta(seconds=20) %}\n {% set target_output_current = last_output_current\ \ %}\n{% endif %} {{ target_output_current * 10|round|int }}" - action: homeassistant.update_entity data: entity_id: sensor.sungrow_wallbox_output_current - id: sungrow_inverter_update_system_state alias: Sungrow Inverter Update system state triggers: - trigger: state entity_id: input_select.sungrow_inverter_set_start_stop variables: start: 207 stop: 206 actions: - action: modbus.write_register data_template: hub: SungrowInverter slave: secret sungrow_modbus_slave address: 12999 value: '{{ start if is_state(''input_select.sungrow_inverter_set_start_stop'', ''Start'') else stop }}' - action: homeassistant.update_entity data: entity_id: sensor.sungrow_inverter_system_state - id: sungrow_inverter_update_battery_maximum_soc alias: Sungrow Inverter Update Battery maximum SoC mode: restart triggers: - trigger: state entity_id: input_number.sungrow_inverter_set_battery_maximum_soc actions: - action: modbus.write_register data_template: hub: SungrowInverter slave: secret sungrow_modbus_slave address: 13057 value: '{{ states(''input_number.sungrow_inverter_set_battery_maximum_soc'') | int *10}}' - delay: milliseconds: 200 - action: homeassistant.update_entity data: entity_id: - sensor.sungrow_inverter_battery_maximum_soc - sensor.sungrow_inverter_battery_level - sensor.sungrow_inverter_battery_charge - id: sungrow_inverter_update_battery_maximum_soc_input_number alias: Sungrow Inverter Update Battery maximum SoC input number triggers: - trigger: state entity_id: sensor.sungrow_inverter_battery_maximum_soc conditions: - condition: template value_template: '{{ has_value(''sensor.sungrow_inverter_battery_maximum_soc'') }}' actions: - action: input_number.set_value target: entity_id: input_number.sungrow_inverter_set_battery_maximum_soc data: value: '{{ states(''sensor.sungrow_inverter_battery_maximum_soc'') }}' - id: sungrow_inverter_update_battery_minimum_soc alias: Sungrow Inverter Update Battery minimum SoC mode: restart triggers: - trigger: state entity_id: input_number.sungrow_inverter_set_battery_minimum_soc actions: - action: modbus.write_register data_template: hub: SungrowInverter slave: secret sungrow_modbus_slave address: 13058 value: '{{ states(''input_number.sungrow_inverter_set_battery_minimum_soc'') | int *10}}' - delay: milliseconds: 200 - action: homeassistant.update_entity data: entity_id: - sensor.sungrow_inverter_battery_minimum_soc - sensor.sungrow_inverter_battery_level - sensor.sungrow_inverter_battery_charge - id: sungrow_inverter_update_battery_minimum_soc_input_number alias: Sungrow Inverter Update Battery minimum SoC input number triggers: - trigger: state entity_id: sensor.sungrow_inverter_battery_minimum_soc conditions: - condition: template value_template: '{{ has_value(''sensor.sungrow_inverter_battery_minimum_soc'') }}' actions: - action: input_number.set_value target: entity_id: input_number.sungrow_inverter_set_battery_minimum_soc data: value: '{{ states(''sensor.sungrow_inverter_battery_minimum_soc'') }}' - id: sungrow_inverter_update_battery_backup_soc alias: Sungrow Inverter Update Battery backup SoC triggers: - trigger: state entity_id: input_number.sungrow_inverter_set_battery_backup_soc actions: - action: modbus.write_register data_template: hub: SungrowInverter slave: secret sungrow_modbus_slave address: 13099 value: '{{ states(''input_number.sungrow_inverter_set_battery_backup_soc'') | int}}' - action: homeassistant.update_entity data: entity_id: sensor.sungrow_inverter_battery_backup_soc - id: sungrow_inverter_update_battery_backup_soc_input_number alias: Sungrow Inverter Update Battery backup SoC input number triggers: - trigger: state entity_id: sensor.sungrow_inverter_battery_backup_soc conditions: - condition: template value_template: '{{ has_value(''sensor.sungrow_inverter_battery_backup_soc'') }}' actions: - action: input_number.set_value target: entity_id: input_number.sungrow_inverter_set_battery_backup_soc data: value: '{{ states(''sensor.sungrow_inverter_battery_backup_soc'') }}' - id: sungrow_inverter_update_battery_forced_charge_discharge_mode alias: Sungrow Inverter Update Battery forced charge/discharge mode triggers: - trigger: state entity_id: input_select.sungrow_inverter_set_battery_forced_charge_discharge_mode variables: stop_default: 204 forced_charge: 170 forced_discharge: 187 actions: - action: modbus.write_register data_template: hub: SungrowInverter slave: secret sungrow_modbus_slave address: 13050 value: "{% if is_state('input_select.sungrow_inverter_set_battery_forced_charge_discharge_mode',\ \ \"Stop (default)\") %}\n {{stop_default}}\n{% elif is_state('input_select.sungrow_inverter_set_battery_forced_charge_discharge_mode',\ \ \"Forced charge\") %}\n {{forced_charge}}\n{% elif is_state('input_select.sungrow_inverter_set_battery_forced_charge_discharge_mode',\ \ \"Forced discharge\") %}\n {{forced_discharge}}\n{% else %}\n {{stop_default}}\n\ {% endif %}" - action: homeassistant.update_entity data: entity_id: sensor.sungrow_inverter_battery_forced_charge_discharge_mode_raw - id: sungrow_inverter_update_battery_forced_charge_discharge_mode_input_select alias: Sungrow Inverter Update Battery forced charge/discharge mode input select triggers: - trigger: state entity_id: sensor.sungrow_inverter_battery_forced_charge_discharge_mode_raw conditions: - condition: template value_template: '{{ has_value(''sensor.sungrow_inverter_battery_forced_charge_discharge_mode_raw'') }}' actions: - action: input_select.select_option target: entity_id: input_select.sungrow_inverter_set_battery_forced_charge_discharge_mode data: option: '{{ states(''sensor.sungrow_inverter_battery_forced_charge_discharge_mode'') }}' - id: sungrow_inverter_update_ems_mode alias: Sungrow Inverter Update EMS mode triggers: - trigger: state entity_id: input_select.sungrow_inverter_set_ems_mode variables: self_consumtion_mode: 0 forced_mode: 2 external_ems_mode: 3 vpp: 4 microgrid: 8 actions: - action: modbus.write_register data_template: hub: SungrowInverter slave: secret sungrow_modbus_slave address: 13049 value: "{% if is_state('input_select.sungrow_inverter_set_ems_mode', \"Self-consumption\ \ mode (default)\") %}\n {{self_consumtion_mode}}\n{% elif is_state('input_select.sungrow_inverter_set_ems_mode',\ \ \"Forced mode\") %}\n {{forced_mode}}\n{% elif is_state('input_select.sungrow_inverter_set_ems_mode',\ \ \"External EMS mode\") %}\n {{external_ems_mode}}\n{% elif is_state('input_select.sungrow_inverter_set_ems_mode',\ \ \"VPP\") %}\n {{vpp}}\n{% elif is_state('input_select.sungrow_inverter_set_ems_mode',\ \ \"MicroGrid\") %}\n {{microgrid}}\n{% else %}\n {{self_consumtion_mode}}\n\ {% endif %}\n" - action: homeassistant.update_entity data: entity_id: sensor.sungrow_inverter_ems_mode_raw - id: sungrow_inverter_update_ems_mode_input_select alias: Sungrow Inverter Update EMS mode input select triggers: - trigger: state entity_id: sensor.sungrow_inverter_ems_mode_raw conditions: - condition: template value_template: '{{ has_value(''sensor.sungrow_inverter_ems_mode_raw'') }}' actions: - action: input_select.select_option target: entity_id: input_select.sungrow_inverter_set_ems_mode data: option: '{{ states(''sensor.sungrow_inverter_ems_mode'') }}' - id: sungrow_inverter_update_export_power_limit_mode alias: Sungrow Inverter Update Export power limit mode triggers: - trigger: state entity_id: input_select.sungrow_inverter_set_export_power_limit_mode variables: export_limit_enable: 170 export_limit_disable: 85 actions: - action: modbus.write_register data_template: hub: SungrowInverter slave: secret sungrow_modbus_slave address: 13086 value: '{{ export_limit_enable if is_state(''input_select.sungrow_inverter_set_export_power_limit_mode'', ''Enabled'') else export_limit_disable }}' - action: homeassistant.update_entity data: entity_id: sensor.sungrow_inverter_export_power_limit_mode_raw - id: sungrow_inverter_update_export_power_limit_mode_input_select alias: Sungrow Inverter Update Export power limit mode input select triggers: - trigger: state entity_id: sensor.sungrow_inverter_export_power_limit_mode_raw conditions: - condition: template value_template: '{{ has_value(''sensor.sungrow_inverter_export_power_limit_mode_raw'') }}' actions: - action: input_select.select_option target: entity_id: input_select.sungrow_inverter_set_export_power_limit_mode data: option: '{{ states(''sensor.sungrow_inverter_export_power_limit_mode'') }}' - id: sungrow_inverter_update_export_power_limit alias: Sungrow Inverter Update Export power limit triggers: - trigger: state entity_id: input_number.sungrow_inverter_set_export_power_limit actions: - action: modbus.write_register data_template: hub: SungrowInverter slave: secret sungrow_modbus_slave address: 13073 value: '{{ states(''input_number.sungrow_inverter_set_export_power_limit'') }}' - action: homeassistant.update_entity data: entity_id: sensor.sungrow_inverter_export_power_limit - id: sungrow_inverter_update_export_power_limit_input_number alias: Sungrow Inverter Update Export power limit input number triggers: - trigger: state entity_id: sensor.sungrow_inverter_export_power_limit conditions: - condition: template value_template: '{{ has_value(''sensor.sungrow_inverter_export_power_limit'') }}' actions: - action: input_number.set_value target: entity_id: input_number.sungrow_inverter_set_export_power_limit data: value: '{{ states(''sensor.sungrow_inverter_export_power_limit'') }}' - id: sungrow_inverter_update_battery_forced_charge_discharge_power alias: Sungrow Inverter Update Battery forced charge/discharge power triggers: - trigger: state entity_id: input_number.sungrow_inverter_set_battery_forced_charge_discharge_power actions: - action: modbus.write_register data_template: hub: SungrowInverter slave: secret sungrow_modbus_slave address: 13051 value: '{{ states(''input_number.sungrow_inverter_set_battery_forced_charge_discharge_power'') | int}}' - action: homeassistant.update_entity data: entity_id: sensor.sungrow_inverter_battery_forced_charge_discharge_power - id: sungrow_inverter_update_battery_forced_charge_discharge_power_input_number alias: Sungrow Inverter Update Battery forced charge/discharge power input number triggers: - trigger: state entity_id: sensor.sungrow_inverter_battery_forced_charge_discharge_power conditions: - condition: template value_template: '{{ has_value(''sensor.sungrow_inverter_battery_forced_charge_discharge_power'') }}' actions: - action: input_number.set_value target: entity_id: input_number.sungrow_inverter_set_battery_forced_charge_discharge_power data: value: '{{ states(''sensor.sungrow_inverter_battery_forced_charge_discharge_power'') }}' - id: sungrow_inverter_update_battery_maximum_charge_power alias: Sungrow Inverter Update Battery maximum charge power triggers: - trigger: state entity_id: input_number.sungrow_inverter_set_battery_maximum_charge_power actions: - action: modbus.write_register data_template: hub: SungrowInverter slave: secret sungrow_modbus_slave address: 33046 value: '{{ states(''input_number.sungrow_inverter_set_battery_maximum_charge_power'') |float /10 |int}}' - action: homeassistant.update_entity data: entity_id: sensor.sungrow_inverter_battery_maximum_charge_power - id: sungrow_inverter_update_battery_maximum_charge_power_input_number alias: Sungrow Inverter Update Battery maximum charge power input number triggers: - trigger: state entity_id: sensor.sungrow_inverter_battery_maximum_charge_power conditions: - condition: template value_template: '{{ has_value(''sensor.sungrow_inverter_battery_maximum_charge_power'') }}' actions: - action: input_number.set_value target: entity_id: input_number.sungrow_inverter_set_battery_maximum_charge_power data: value: '{{ states(''sensor.sungrow_inverter_battery_maximum_charge_power'') }}' - id: sungrow_inverter_update_battery_maximum_discharge_power alias: Sungrow Inverter Update Battery maximum discharge power triggers: - trigger: state entity_id: input_number.sungrow_inverter_set_battery_maximum_discharge_power actions: - action: modbus.write_register data_template: hub: SungrowInverter slave: secret sungrow_modbus_slave address: 33047 value: '{{ states(''input_number.sungrow_inverter_set_battery_maximum_discharge_power'') |float /10 |int}}' - action: homeassistant.update_entity data: entity_id: sensor.sungrow_inverter_battery_maximum_discharge_power - id: sungrow_inverter_update_battery_maximum_discharge_power_input_number alias: Sungrow Inverter Update Battery maximum discharge power input number triggers: - trigger: state entity_id: sensor.sungrow_inverter_battery_maximum_discharge_power conditions: - condition: template value_template: '{{ has_value(''sensor.sungrow_inverter_battery_maximum_discharge_power'')}}' actions: - action: input_number.set_value target: entity_id: input_number.sungrow_inverter_set_battery_maximum_discharge_power data: value: '{{ states(''sensor.sungrow_inverter_battery_maximum_discharge_power'') }}' - id: sungrow_wallbox_update_output_current alias: Sungrow Wallbox Update Output current triggers: - trigger: state entity_id: - input_number.sungrow_wallbox_set_output_current conditions: - condition: template value_template: '{{ (states(''input_number.sungrow_wallbox_set_output_current'') | float) = (states(''sensor.sungrow_wallbox_output_current'') | float) }}' actions: - action: modbus.write_register data_template: hub: SungrowWallbox slave: secret wallbox_modbus_slave address: 21202 value: '{{ (((states(''input_number.sungrow_wallbox_set_output_current'') | float) * 10) | int) }}' - action: homeassistant.update_entity data: entity_id: sensor.sungrow_wallbox_output_current - id: sungrow_wallbox_update_output_current_input_number alias: Sungrow Wallbox Update Output current input number triggers: - trigger: state entity_id: sensor.sungrow_wallbox_output_current conditions: - condition: template value_template: "{{\n has_value('sensor.sungrow_wallbox_output_current') \n \ \ and (states('sensor.sungrow_wallbox_output_current') | float) >= 6.0\n and\ \ (states('sensor.sungrow_wallbox_output_current') | float) <= 16.0\n and (states('sensor.sungrow_wallbox_output_current')\ \ | float) = (states('input_number.sungrow_wallbox_set_output_current') | float)\n\ }}" actions: - action: input_number.set_value target: entity_id: input_number.sungrow_wallbox_set_output_current data: value: '{{ states(''sensor.sungrow_wallbox_output_current'') | float }}' - id: sungrow_wallbox_update_mileage_per_kwh alias: Sungrow Wallbox Update Mileage per kWh triggers: - trigger: state entity_id: - input_number.sungrow_wallbox_set_mileage_per_kwh actions: - action: modbus.write_register data_template: hub: SungrowWallbox slave: secret wallbox_modbus_slave address: 21231 value: '{{ ((states(''input_number.sungrow_wallbox_set_mileage_per_kwh'') | float ) * 10) | int }}' - action: homeassistant.update_entity data: entity_id: sensor.sungrow_wallbox_mileage_per_kwh - id: sungrow_wallbox_update_phase_mode alias: Sungrow Wallbox Update Phase mode triggers: - trigger: state entity_id: input_select.sungrow_wallbox_set_phase_mode variables: three_phase: 0 single_phase: 1 actions: - action: modbus.write_register data_template: hub: SungrowWallbox slave: secret wallbox_modbus_slave address: 21203 value: "{% if is_state('input_select.sungrow_wallbox_set_phase_mode', \"Three-phase\"\ ) %}\n {{ three_phase }}\n{% elif is_state('input_select.sungrow_wallbox_set_phase_mode',\ \ \"Single-phase\") %}\n {{ single_phase }}\n{% endif %}" - action: homeassistant.update_entity data: entity_id: - sensor.sungrow_wallbox_phase_mode_raw - sensor.sungrow_wallbox_phase_status_raw - sensor.sungrow_wallbox_minimum_charging_power - sensor.sungrow_wallbox_maximum_charging_power - id: sungrow_wallbox_update_charger_status alias: Sungrow Wallbox Update Charger status triggers: - trigger: state entity_id: - input_select.sungrow_wallbox_set_charger_status variables: disable: 0 enable: 1 actions: - action: modbus.write_register data_template: hub: SungrowWallbox slave: secret wallbox_modbus_slave address: 21210 value: "{% if is_state('input_select.sungrow_wallbox_set_charger_status', \"\ Disable\") %}\n {{disable}}\n{% elif is_state('input_select.sungrow_wallbox_set_charger_status',\ \ \"Enable\") %}\n {{enable}}\n{% endif %}" - action: homeassistant.update_entity data: entity_id: - sensor.sungrow_wallbox_charger_enable_status_raw - sensor.sungrow_wallbox_charger_status_raw - sensor.sungrow_wallbox_power_request_flag_raw - sensor.sungrow_wallbox_power_regulation_switch_raw - sensor.sungrow_wallbox_charging_status_raw - id: sungrow_wallbox_update_start_charging alias: Sungrow Wallbox Update Start charging triggers: - trigger: state entity_id: - input_button.sungrow_wallbox_set_start_charging variables: start_charging: 0 stop_charging: 1 actions: - action: modbus.write_register data_template: hub: SungrowWallbox slave: secret wallbox_modbus_slave address: 21211 value: '{{start_charging}}' - action: modbus.write_register data_template: hub: SungrowWallbox slave: secret wallbox_modbus_slave address: 21202 value: '{{ (states(''input_number.sungrow_wallbox_set_output_current'') | int) * 10 }}' - action: homeassistant.update_entity data: entity_id: - sensor.sungrow_wallbox_charging_status_raw - sensor.sungrow_wallbox_remote_control_bit - id: sungrow_wallbox_update_stop_charging alias: Sungrow Wallbox Update Stop charging triggers: - trigger: state entity_id: - input_button.sungrow_wallbox_set_stop_charging variables: start_charging: 0 stop_charging: 1 actions: - action: modbus.write_register data_template: hub: SungrowWallbox slave: secret wallbox_modbus_slave address: 21211 value: '{{stop_charging}}' - action: homeassistant.update_entity data: entity_id: - sensor.sungrow_wallbox_charging_status_raw - sensor.sungrow_wallbox_remote_control_bit - id: sungrow_wallbox_update_charging_status alias: Sungrow Wallbox Update charging status triggers: - trigger: state entity_id: - sensor.sungrow_wallbox_charging_status_raw actions: - action: homeassistant.update_entity data: entity_id: - sensor.sungrow_wallbox_control_pilot_voltage - sensor.sungrow_wallbox_pwm_duty_cycle - sensor.sungrow_wallbox_start_mode_raw - sensor.sungrow_wallbox_power_request_flag_raw - sensor.sungrow_wallbox_power_regulation_switch_raw - sensor.sungrow_wallbox_charging_end_time_raw - sensor.sungrow_wallbox_total_energy_clearing - sensor.sungrow_wallbox_total_energy - sensor.sungrow_wallbox_phase_a_charging_current - sensor.sungrow_wallbox_phase_a_charging_voltage - sensor.sungrow_wallbox_phase_b_charging_current - sensor.sungrow_wallbox_phase_b_charging_voltage - sensor.sungrow_wallbox_phase_c_charging_current - sensor.sungrow_wallbox_phase_c_charging_voltage - sensor.sungrow_wallbox_charging_power - sensor.sungrow_wallbox_charging_energy - sensor.sungrow_wallbox_output_current - id: sungrow_wallbox_automate_fast_updates_while_charging alias: Sungrow Wallbox Automate fast updates while charging triggers: - trigger: state entity_id: sensor.sungrow_wallbox_charging_status to: Charging actions: - action: homeassistant.update_entity data: entity_id: sensor.sungrow_wallbox_charging_start_time_raw - repeat: sequence: - action: homeassistant.update_entity data: entity_id: - sensor.sungrow_wallbox_charging_end_time_raw - sensor.sungrow_wallbox_total_energy_clearing - sensor.sungrow_wallbox_total_energy - sensor.sungrow_wallbox_phase_a_charging_current - sensor.sungrow_wallbox_phase_a_charging_voltage - sensor.sungrow_wallbox_phase_b_charging_current - sensor.sungrow_wallbox_phase_b_charging_voltage - sensor.sungrow_wallbox_phase_c_charging_current - sensor.sungrow_wallbox_phase_c_charging_voltage - sensor.sungrow_wallbox_charging_power - sensor.sungrow_wallbox_charging_energy - sensor.sungrow_wallbox_output_current - sensor.sungrow_wallbox_pwm_duty_cycle - sensor.sungrow_wallbox_control_pilot_voltage - delay: seconds: 5 while: - condition: state entity_id: sensor.sungrow_wallbox_charging_status_raw state: '3'