AutomationDataset/RGx01/RGx01_automations.yaml

2635 lines
91 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

- id: '5001'
alias: 5001 - Solax Zappi Octopus Control
description: "# 5001 - Solax Zappi Octopus Control\nSee documentation in repo.\n\
\n# Initial installation instructions\n1. This is 5001. You also need 5002 5003\
\ 5004 and 5005 to make this work successfully. \n\n**Change Log**\nv5.5.0 Added\
\ 4 triggers for finished discharge just in case EV is connected during daily\
\ discharge. Removed Option 4 as it was legacy\nv5.4.1 Added new daily export\
\ which works with pre-emptive\nv5.3.0 Introducing safe switching of octopus_intelligent_smart_charge\n\
v5.0 Refactor out account names\nv3.8 Estimated time EV needs to charge based\
\ on required % and registered EV size\nv3.7 Pre-emptive discharge of solax before\
\ EV charging option (when EV is connected)\n Pre-emptive discharge before\
\ 23:30 when EV is disconnected\nv3.6 Min soc calculation updated in variables\n\
v3.5 Variable for loops (to confirm solax commands have been applied should be\
\ set to min of 3)\nv3.4 Added condition to check if saving session is in progress\n\
v3.3 Changed the logic slightly for setting SoC limits. Sometimes depending on\
\ which mode is being set (self use or feed in) the inverter seems to randomly\
\ reject the second service call. so I now set the first soc limit to match the\
\ default return to mode.\nv3.2 Added an input boolean switch to enable possibility\
\ to check what kind of discharge is occurring when a manual discharge is occurring.\n\
v3.0.4 Added a condition to prevent inverter reverting back to default if vehicle\
\ was charging prior to a saving session starting.\nv3.0.3 Added When Condition\
\ to ensure inverter mode is reset to default mode when it's time to start charging\
\ the solax battery.\nv3.0.2 further fixes to 3.0.1\nv3.0.1 Fixed issue that if\
\ user plugs in during a saving session a charge could be initiated\nv3.0.0 Allow\
\ discharge battery before charging EV\nv2.1.4.1 Spotted a potential bug if user\
\ starts charge at 23:30 where it could clash with tail battery export\nv2.1.4\
\ Renamed automation\nv2.1.3.1 fixed missing scenario where min_SoC would not\
\ be set properly at 23:30 or if FAST charging was selected.\nv2.1.3 More readable\
\ notifications\nv2.1.1 Update dispatch trigger for octopus dispatch from on to\
\ off rather than just to off. false triggers when sensor is unavailable \nv2.1\
\ updated setting of modes and SoC's wrt rest sensor sensor.solax_rest_local_settings\n\
v2.0 Remove legacy dev work"
triggers:
- entity_id:
- sensor.zappi_plug_status
from: null
to: Fault
id: Zappi Fault
trigger: state
- entity_id:
- sensor.zappi_plug_status
from: Charging
to: EV Disconnected
id: Charging to Disconnected
trigger: state
- entity_id:
- sensor.zappi_plug_status
from: EV Connected
to: EV Disconnected
id: Connected to Disconnected
trigger: state
- entity_id:
- sensor.zappi_plug_status
from: Charging
to: EV Connected
id: Paused EV Charging
trigger: state
for:
hours: 0
minutes: 1
seconds: 0
- entity_id:
- sensor.zappi_plug_status
from: Waiting for EV
to: EV Connected
id: Paused EV Charging
trigger: state
for:
hours: 0
minutes: 10
seconds: 0
- entity_id:
- sensor.zappi_plug_status
from: EV Disconnected
to: EV Connected
id: Disconnected To Connected
trigger: state
for:
hours: 0
minutes: '{{states(''input_number.delay_when_ev_connected'')}}
'
seconds: 0
- entity_id:
- sensor.zappi_plug_status
from: Fault
to: Charging
id: Charging0
trigger: state
- entity_id:
- sensor.zappi_plug_status
from: Waiting for EV
to: Charging
id: Charging1
trigger: state
- entity_id:
- sensor.zappi_plug_status
to: Charging
id: Charging2
from: EV Connected
trigger: state
- at: sensor.pre_export_battery_before_charging_ev_time
id: Time to Start Charging
trigger: time
- at: sensor.ev_start_time
id: Time to Start Charging
trigger: time
- at: sensor.pre_nightly_battery_export_time
id: Solax Discharge Prior to 2330 START
enabled: true
trigger: time
- trigger: time
at: sensor.daily_battery_export_time_ev_disconnected
id: Daily Export
- at: '23:30:00'
id: Discharge_battery_at_2330
enabled: true
trigger: time
- trigger: state
entity_id:
- binary_sensor.solax_discharge_before_2330
from: 'on'
to: 'off'
id: Solax Discharge Prior to 2330 END
enabled: false
- trigger: state
entity_id:
- binary_sensor.solax_discharge_before_2330
to: 'off'
from: 'on'
id: finish discharge
for:
hours: 0
minutes: 2
seconds: 0
- entity_id:
- binary_sensor.octopus_intelligent_dispatching
to: 'off'
id: Peak Rate
trigger: state
from: 'on'
- entity_id:
- select.zappi_charge_mode
to: Fast
id: Fast_unknown
trigger: state
- entity_id:
- select.zappi_charge_mode
for:
hours: 0
minutes: '{{(state_attr(''input_datetime.solax_stop_charge_2'', ''timestamp'')/60-state_attr(''input_datetime.solax_start_charge_2'',
''timestamp'')/60)|int (default = 60)}}'
seconds: 0
to: Fast
id: Fast
trigger: state
- entity_id:
- input_button.solax_force_discharge
id: ForceDischarge
trigger: state
- entity_id:
- input_button.solax_stop_discharge
id: StopForceDischarge
trigger: state
- trigger: state
entity_id:
- input_boolean.octopus_schedule_anytime
to: 'on'
id: Allow Octopus to Determine Schedule
- trigger: state
entity_id:
- input_boolean.solar_export_priority
to: 'on'
id: Only allow EV charging after sunset
- trigger: state
entity_id:
- input_boolean.use_clever_time
to: 'on'
id: use clever time
- trigger: state
entity_id:
- input_boolean.use_fixed_time
to: 'on'
id: use fixed time
- trigger: state
entity_id:
- input_boolean.ev_solax_battery_drain
- input_boolean.use_grid_during_octopus_dispatch
id: Battery usage options
- entity_id:
- sensor.solax_local_battery_soc
below: input_number.solax_default_discharge_limit_soc
for:
hours: 0
minutes: 1
seconds: 1
id: Battery at min SoC
trigger: numeric_state
value_template: '{{ state.state | float(0) - 1 }}'
- trigger: time
at:
entity_id: sensor.octopus_intelligent_target_time
offset: '120'
id: Dispatch Finished
- trigger: state
entity_id:
- input_boolean.zappi_eco_always
for:
hours: 0
minutes: 0
seconds: 30
id: Zappi eco mode
- trigger: state
entity_id:
- sensor.solax_local_manual_mode_behaviour
to: Do Nothing
for:
hours: 0
minutes: 3
seconds: 0
id: Check Discharge Mode
from: Force Discharge
enabled: true
- trigger: time
at:
entity_id: input_datetime.solax_battery_start_charge_time
offset: '-300'
id: Charge Solax
- trigger: time
at: sensor.solax_local_battery_setting_stop_charge_2
id: Charge Period 2 End
- trigger: state
entity_id:
- binary_sensor.solax_discharge_before_ev_charge
from: 'on'
to: 'off'
id: Solax Discharge Prior to EV
- trigger: state
entity_id:
- number.octopus_intelligent_charge_target
id: charge target
for:
hours: 0
minutes: 1
seconds: 0
- trigger: state
entity_id:
- binary_sensor.solax_local_battery_charging_period
id: Solax charging from grid
for:
hours: 0
minutes: 0
seconds: 59
from: 'on'
to: 'off'
- trigger: state
entity_id:
- binary_sensor.solax_local_battery_charging_period
id: Solax charging from grid
for:
hours: 0
minutes: 0
seconds: 59
from: 'off'
to: 'on'
- trigger: state
entity_id:
- binary_sensor.solax_discharge_daily
to: 'off'
from: 'on'
id: finish discharge
for:
hours: 0
minutes: 2
seconds: 0
- trigger: state
entity_id:
- binary_sensor.solax_discharge_daily_prior
to: 'off'
from: 'on'
id: finish discharge
for:
hours: 0
minutes: 2
seconds: 0
- trigger: state
entity_id:
- binary_sensor.solax_discharge_nightly
to: 'off'
from: 'on'
id: finish discharge
for:
hours: 0
minutes: 2
seconds: 0
conditions: []
actions:
- choose:
- conditions:
- condition: trigger
id:
- Allow Octopus to Determine Schedule
sequence:
- action: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id:
- input_boolean.solar_export_priority
- input_boolean.use_clever_time
- input_boolean.use_fixed_time
- conditions:
- condition: trigger
id:
- Only allow EV charging after sunset
sequence:
- action: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id:
- input_boolean.octopus_schedule_anytime
- input_boolean.use_clever_time
- input_boolean.use_fixed_time
- conditions:
- condition: trigger
id:
- use clever time
sequence:
- if:
- condition: state
entity_id: input_boolean.use_clever_time
state: 'on'
then:
- action: input_datetime.set_datetime
data_template:
entity_id: input_datetime.don_t_charge_ev_before_time
time: '{{ states(''sensor.calculated_ev_charge_start_time'')}}
'
enabled: false
- action: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id:
- input_boolean.solar_export_priority
- input_boolean.octopus_schedule_anytime
- input_boolean.use_fixed_time
- conditions:
- condition: trigger
id:
- use fixed time
sequence:
- action: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id:
- input_boolean.solar_export_priority
- input_boolean.octopus_schedule_anytime
- input_boolean.use_clever_time
enabled: true
- condition: not
conditions:
- condition: or
conditions:
- condition: and
conditions:
- condition: trigger
id:
- Discharge_battery_at_2330
- condition: or
conditions:
- condition: state
entity_id: sensor.zappi_plug_status
state: Charging
- condition: state
entity_id: sensor.zappi_plug_status
state: Waiting for EV
- condition: state
entity_id: sensor.solax_local_manual_mode_behaviour
state: Force Discharge
- condition: and
conditions:
- condition: trigger
id:
- Solax Discharge Prior to 2330 START
- condition: or
conditions:
- condition: state
entity_id: sensor.zappi_plug_status
state: Charging
- condition: state
entity_id: sensor.zappi_plug_status
state: Waiting for EV
- condition: state
entity_id: sensor.solax_local_manual_mode_behaviour
state: Force Discharge
- condition: and
conditions:
- condition: trigger
id:
- Time to Start Charging
- condition: state
entity_id: sensor.zappi_plug_status
state: EV Disconnected
- condition: trigger
id:
- Only allow EV charging after sunset
- use clever time
- use fixed time
- condition: and
conditions:
- condition: trigger
id:
- Allow Octopus to Determine Schedule
- condition: state
entity_id: sensor.zappi_plug_status
state: Charging
- condition: and
conditions:
- condition: trigger
id:
- Battery usage options
- condition: state
entity_id: sensor.zappi_plug_status
state: Charging
- condition: state
entity_id: input_boolean.saving_session_active
state: 'on'
- condition: and
conditions:
- condition: trigger
id:
- Time to Start Charging
- condition: state
entity_id: switch.octopus_intelligent_smart_charge
state: 'on'
- condition: and
conditions:
- condition: trigger
id:
- Solax Discharge Prior to EV
- condition: state
entity_id: switch.octopus_intelligent_smart_charge
state: 'on'
- condition: and
conditions:
- condition: trigger
id:
- Check Discharge Mode
- condition: template
value_template: '{{states(''sensor.solax_local_inverter_mode'')!= "Manual"}}'
- condition: template
value_template: '{{now()|as_timestamp-states(''sensor.uptime'')|as_timestamp>80}}
'
- variables:
default_mode: '{{states(''sensor.solax_default_operation_mode'')|int}}
'
min_soc: "{% set ev_charging = is_state('sensor.zappi_plug_status','Charging')\
\ %} {% set dispatch_on = is_state('binary_sensor.octopus_intelligent_dispatching','on')\
\ %} {% set use_grid = is_state('input_boolean.use_grid_during_octopus_dispatch','on')\
\ %} {% set prevent_ev_drain = is_state('input_boolean.ev_solax_battery_drain','on')\
\ %} {% set default_soc = states('input_number.solax_default_discharge_limit_soc')|int\
\ %} {% set current_soc = states('sensor.solax_local_battery_soc')|int %}\
\ {% set smart_charge = is_state('switch.octopus_intelligent_smart_charge','on')\
\ %}\n{# ===============================================================\n\
\ min_soc decision rules\n\n Special triggers:\n - Discharge_battery_at_2330,\
\ Fast_unknown:\n → If prevent_ev_drain and (not charging OR use_grid):\
\ hold current SoC\n → Else: default_soc\n\n Charging period (binary_sensor.solax_local_battery_charging_period\
\ = on):\n → Always default_soc\n\n Charging→Disconnected transition\
\ (05:3023:30):\n → Always default_soc\n\n NEW: Daytime dispatch exception\
\ (05:3023:30):\n - If dispatch_on = true AND smart_charge = off:\n \
\ → Force default_soc\n\n Normal conditions:\n EV charging:\n\
\ - If prevent_ev_drain OR use_grid: hold current SoC\n - Else:\
\ default_soc\n\n EV not charging:\n - If dispatch_on AND prevent_ev_drain\
\ AND use_grid: hold current SoC\n - Else: default_soc\n\n Summary:\n\
\ → Two possible outputs: current_soc (discharge blocked) OR default_soc\
\ (discharge allowed)\n ===============================================================\
\ #}\n\n{# --- Special triggers override everything --- #} {% if trigger.id\
\ in ['Discharge_battery_at_2330', 'Fast_unknown'] %}\n {% if prevent_ev_drain\
\ and (not ev_charging or use_grid) %}\n {{ current_soc }}\n {% else %}\n\
\ {{ default_soc }}\n {% endif %}\n\n{# --- Local battery charging period\
\ → always allow discharge --- #} {% elif is_state('binary_sensor.solax_local_battery_charging_period','on')\
\ %}\n {{ default_soc }}\n\n{# --- Daytime Charging→Disconnected transition\
\ → allow discharge --- #} {% elif trigger.id == 'Charging to Disconnected'\n\
\ and now() > today_at(\"05:30\") and now() < today_at(\"23:30\") %}\n\
\ {{ default_soc }}\n\n{# --- NEW: Daytime dispatch, Smart Charge OFF → force\
\ default discharge --- #} {% elif dispatch_on and not smart_charge\n \
\ and now() > today_at(\"05:30\") and now() < today_at(\"23:30\") %}\n {{\
\ default_soc }}\n\n{# --- Normal conditions --- #} {% else %}\n {% if ev_charging\
\ %}\n {% if prevent_ev_drain or use_grid %}\n {{ current_soc }}\n\
\ {% else %}\n {{ default_soc }}\n {% endif %}\n {% else %}\n\
\ {% if dispatch_on and prevent_ev_drain and use_grid %}\n {{ current_soc\
\ }}\n {% else %}\n {{ default_soc }}\n {% endif %}\n {% endif\
\ %}\n{% endif %}\n"
- action: input_boolean.turn_on
metadata: {}
data: {}
target:
entity_id: input_boolean.solax_automation_running
enabled: true
- action: script.solax_set_mode_and_settings
data:
settings:
selfuse_battery_min_soc: '{{min_soc}}'
feedin_battery_min_soc: '{{min_soc}}'
- choose:
- conditions:
- condition: state
entity_id: sensor.zappi_plug_status
state: Charging
- condition: state
entity_id: select.zappi_charge_mode
state: Eco+
- condition: trigger
id:
- Charging0
- Charging1
- Charging2
sequence:
- action: script.solax_set_mode_and_settings
data:
mode: '{{default_mode}}'
- event: Solax Zappi Octopus Control
event_data:
message: EV started charging @ {{now().strftime('%H:%M')}}.
title: EV Charging Started
class: normal
enabled: true
- conditions:
- condition: trigger
id:
- Paused EV Charging
sequence:
- event: Solax Zappi Octopus Control
event_data:
message: EV paused charging @ {{now().strftime('%H:%M')}}. Zappi charge
session {{states('sensor.zappi_charge_added_session')}}kWh.
title: Octopus Paused Charging.
class: normal
enabled: true
- conditions:
- condition: trigger
id:
- Disconnected To Connected
- Time to Start Charging
- Allow Octopus to Determine Schedule
- Solax Discharge Prior to EV
- finish discharge
- condition: state
entity_id: sensor.zappi_plug_status
state: EV Connected
- condition: state
entity_id: input_boolean.saving_session_active
state: 'off'
enabled: false
- condition: template
value_template: '{{ states(''sensor.solax_local_inverter_mode'') != ''Manual''
}}'
sequence:
- if:
- condition: state
entity_id: input_boolean.zappi_eco_always
state: 'on'
then:
- action: select.select_option
data:
option: Eco+
target:
entity_id: select.zappi_charge_mode
else:
- action: select.select_option
data:
option: Stopped
target:
entity_id: select.zappi_charge_mode
- choose:
- conditions:
- condition: or
conditions:
- condition: state
entity_id: binary_sensor.solax_battery_export_before_ev_charge_allowed
state: 'off'
- condition: template
value_template: '{{ trigger.id == "Solax Discharge Prior to EV" and
now()|as_timestamp >= states(''sensor.ev_start_time'')|as_timestamp
}}
'
sequence:
- if:
- condition: or
conditions:
- condition: time
after: sensor.ev_start_time
before: sensor.octopus_intelligent_target_time
then:
- metadata: {}
data:
option: Eco+
target:
entity_id: select.zappi_charge_mode
action: select.select_option
- action: script.safe_switch_toggle
metadata: {}
data:
target_switch: switch.octopus_intelligent_smart_charge
desired_state: 'on'
- action: script.solax_set_mode_and_settings
data:
mode: '{{default_mode}}'
- if:
- condition: not
conditions:
- condition: trigger
id:
- Time to Start Charging
then:
- event: Solax Zappi Octopus Control
event_data:
message: EV Connected @ {{(states('sensor.zappi_last_connected')|as_datetime|as_local).strftime("%H:%M")}}.Getting
shedule at {%if now()|as_timestamp > states('sensor.ev_start_time')|as_timestamp%}
{{now().strftime('%H:%M')}} {% else %} {{(states('sensor.ev_start_time')|as_datetime).strftime('%H:%M')}}.
{% endif %}
title: EV Connected - Waiting for Octopus schedule
class: normal
enabled: true
- conditions:
- condition: state
entity_id: binary_sensor.solax_battery_export_before_ev_charge_allowed
state: 'on'
sequence:
- if:
- condition: or
conditions:
- condition: template
value_template: '{{now()|as_timestamp>=([states(''sensor.ev_start_time''),states(''sensor.pre_export_battery_before_charging_ev_time'')]|min)|as_timestamp
and now()|as_timestamp <=states(''sensor.octopus_intelligent_target_time'')|as_timestamp}}'
then:
- event: solax_discharge
event_data:
battery_discharge: discharge before EV charge
enabled: true
- if:
- condition: numeric_state
entity_id: sensor.solax_local_battery_soc
above: input_number.solax_discharge_limit_soc_before_ev
value_template: '{{ state.state | float(0) - 9 }}'
then:
- action: select.select_option
metadata: {}
data:
option: Stopped
target:
entity_id: select.zappi_charge_mode
- action: script.solax_set_mode_and_settings
data:
mode: 3
manual_mode: 2
- event: Solax Zappi Octopus Control
event_data:
message: 'Solax discharging to {{states(''input_number.solax_discharge_limit_soc_before_ev'')|int}}%
before charging EV. EV Connected @ {{(states(''sensor.zappi_last_connected'')|as_datetime|as_local).strftime("%H:%M")}}. '
title: Pre Discharge
class: normal
enabled: true
else:
- if:
- condition: template
value_template: ' {{now()|as_timestamp >= states(''sensor.ev_start_time'')|as_timestamp}}'
then:
- wait_template: '{{states(''binary_sensor.solax_discharge_before_ev_charge'')==true}}'
continue_on_timeout: true
timeout: '5'
- event: solax_discharge
event_data:
battery_discharge: do nothing
enabled: true
- wait_template: '{{states(''binary_sensor.solax_discharge_before_ev_charge'')==false}}'
continue_on_timeout: true
timeout: '5'
- if:
- condition: state
entity_id: binary_sensor.solax_discharge_before_ev_charge
state: 'off'
for:
hours: 0
minutes: 5
seconds: 0
then:
- event: Solax Zappi Octopus Control
event_data:
message: 'EV Connected @ {{(states(''sensor.zappi_last_connected'')|as_datetime|as_local).strftime("%H:%M")}}.
Solax Battery will attempt to discharge at {%if now()|as_timestamp<=([states(''sensor.ev_start_time''),states(''sensor.pre_export_battery_before_charging_ev_time'')]|min)|as_timestamp
-%}{{(([states(''sensor.ev_start_time''),states(''sensor.pre_export_battery_before_charging_ev_time'')]|min)|as_datetime|as_local).strftime("%H:%M")}}{%-else
%} {{now().strftime(''%H:%M'')}}{%-endif %} prior to getting a schedule
from octopus. '
title: EV Connected - Waiting for Solax to Discharge Before Getting
Octopus Schedule
class: normal
enabled: true
enabled: true
- conditions:
- condition: trigger
id:
- Connected to Disconnected
- Charging to Disconnected
sequence:
- if:
- condition: state
entity_id: input_boolean.zappi_eco_always
state: 'on'
then:
- action: select.select_option
metadata: {}
data:
option: Eco+
target:
entity_id: select.zappi_charge_mode
else:
- action: select.select_option
metadata: {}
data:
option: Stopped
target:
entity_id: select.zappi_charge_mode
- metadata: {}
data: {}
target:
entity_id: switch.octopus_intelligent_smart_charge
action: switch.turn_off
enabled: false
- action: script.safe_switch_toggle
metadata: {}
data:
target_switch: switch.octopus_intelligent_smart_charge
desired_state: 'off'
- action: script.solax_set_mode_and_settings
data:
mode: '{{default_mode}}'
- event: Solax Zappi Octopus Control
event_data:
message: EV disconnected @ {{now().strftime('%H:%M')}}
title: EV Disconnected
class: normal
enabled: true
- conditions:
- condition: trigger
id:
- Zappi Fault
sequence:
- event: Solax Zappi Octopus Control
event_data:
message: ZAPPI FAULT @ {{now().strftime('%H:%M')}}. Go outside and follow
instructions on charger
title: ZAPPI FAULT
class: high
enabled: true
- conditions:
- condition: trigger
id:
- Fast
sequence:
- metadata: {}
data:
option: Stopped
target:
entity_id: select.zappi_charge_mode
action: select.select_option
- event: Solax Zappi Octopus Control
event_data:
message: EV started BOOST charging @ {{now().strftime('%H:%M')}}. Rate =
{{states('select.daily_grid_import')}}
title: EV FAST Charging Started
class: normal
enabled: true
- conditions:
- condition: trigger
id:
- ForceDischarge
- condition: template
value_template: '{{(state_attr(''sensor.solax_local_settings'', ''Data'')[10]
!= 3)}}'
sequence:
- if:
- condition: numeric_state
entity_id: sensor.solax_local_battery_soc
above: input_number.solax_manual_forced_discharge_limit_soc
value_template: '{{ state.state | float(0) - 9 }}'
then:
- action: script.solax_set_mode_and_settings
data:
mode: 3
manual_mode: 2
- event: Solax Zappi Octopus Control
event_data:
message: Manual Discharge @ {{now().strftime('%H:%M')}}
title: Manual Discharge Started
class: normal
enabled: true
- action: input_boolean.turn_on
metadata: {}
data: {}
target:
entity_id: input_boolean.export_battery_manual
- conditions:
- condition: trigger
id:
- StopForceDischarge
- condition: template
value_template: '{{(state_attr(''sensor.solax_local_settings'', ''Data'')[10]
== 3)}}'
sequence:
- action: script.solax_set_mode_and_settings
data:
mode: '{{default_mode}}'
- event: Solax Zappi Octopus Control
event_data:
message: Manual Discharge Stopped @ {{now().strftime('%H:%M')}}
title: Manual Discharge Stopped
class: normal
enabled: true
- if:
- condition: state
entity_id: binary_sensor.solax_discharge_before_ev_charge
state: 'on'
then:
- delay:
hours: 0
minutes: 1
seconds: 0
milliseconds: 0
- event: solax_discharge
event_data:
battery_discharge: do nothing
- action: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id: input_boolean.export_battery_manual
- conditions:
- condition: trigger
id:
- Discharge_battery_at_2330
- Solax Discharge Prior to 2330 START
- condition: or
conditions:
- condition: state
entity_id: sensor.zappi_plug_status
state: EV Disconnected
- condition: and
conditions:
- condition: state
entity_id: sensor.zappi_plug_status
state: EV Connected
for:
hours: 0
minutes: 10
seconds: 0
- condition: template
value_template: '{%if states(''input_boolean.octopus_schedule_anytime'')
== on %}
{{(now()|as_timestamp-states(''sensor.zappi_last_connected'')|as_timestamp)|abs
> 15*60 and states(''select.zappi_charge_mode'') not in [''Eco'',''Eco+'',''Fast'']}}
{%else%}
{{(now()|as_timestamp-states(''sensor.pre_export_battery_before_charging_ev_time'')|as_timestamp)|abs
> 15*60}}
{%endif%}'
sequence:
- if:
- condition: state
entity_id: input_boolean.export_battery
state: 'on'
- condition: numeric_state
entity_id: sensor.solax_local_battery_soc
value_template: '{{ state.state | float(0) - 9 }}'
above: input_number.solax_nightly_discharge_limit_soc
- condition: template
value_template: '{{(state_attr(''sensor.solax_local_settings'', ''Data'')[10]
!= 3)}}'
then:
- choose:
- conditions:
- condition: state
entity_id: input_boolean.pre_emptive_export_battery
state: 'off'
sequence:
- action: script.solax_set_mode_and_settings
data:
mode: 3
manual_mode: 2
- event: solax_discharge
event_data:
battery_discharge: discharge nightly
enabled: true
- event: Solax Zappi Octopus Control
event_data:
message: 'Attempting Discharge @ {{now().strftime(''%H:%M'')}}. '
title: Battery Export Started
class: normal
enabled: true
- conditions:
- condition: state
entity_id: input_boolean.pre_emptive_export_battery
state: 'on'
sequence:
- event: solax_discharge
event_data:
battery_discharge: discharge before 2330
enabled: true
- action: script.solax_set_mode_and_settings
data:
mode: 3
manual_mode: 2
- event: Solax Zappi Octopus Control
event_data:
message: 'Attempting Discharge @ {{now().strftime(''%H:%M'')}}. '
title: Battery Export Started
class: normal
enabled: true
else:
- event: Solax Zappi Octopus Control
event_data:
message: 'Cheap Rate @ {{now().strftime(''%H:%M'')}}. '
title: Cheap Rate
class: normal
enabled: true
- conditions:
- condition: trigger
id:
- Peak Rate
- condition: state
entity_id: input_boolean.saving_session_active
state: 'off'
sequence:
- action: script.solax_set_mode_and_settings
data:
mode: '{{default_mode}}'
- event: Solax Zappi Octopus Control
event_data:
message: Peak Rate @ {{now().strftime('%H:%M')}}
title: Peak Rate
class: normal
- conditions:
- condition: trigger
id:
- Battery at min SoC
- condition: state
entity_id: binary_sensor.octopus_intelligent_dispatching
state: 'off'
sequence:
- event: Solax Zappi Octopus Control
event_data:
message: Battery close to min SoC {{now().strftime('%H:%M')}}. {{states('sensor.solax_local_battery_soc')}}%
title: Battery Flat
class: high
enabled: true
- conditions:
- condition: trigger
id:
- Dispatch Finished
- condition: numeric_state
entity_id: sensor.octopus_total_planned_dispatch
below: 1
enabled: false
sequence:
- action: switch.turn_off
metadata: {}
data: {}
target:
entity_id: switch.octopus_intelligent_smart_charge
enabled: false
- action: script.safe_switch_toggle
metadata: {}
data:
target_switch: switch.octopus_intelligent_smart_charge
desired_state: 'off'
- if:
- condition: state
entity_id: input_boolean.zappi_eco_always
state: 'on'
then:
- action: select.select_option
metadata: {}
data:
option: Eco+
target:
entity_id: select.zappi_charge_mode
else:
- action: select.select_option
metadata: {}
data:
option: Stopped
target:
entity_id: select.zappi_charge_mode
- conditions:
- condition: trigger
id:
- Zappi eco mode
- condition: state
entity_id: sensor.zappi_plug_status
state: EV Connected
sequence:
- if:
- condition: state
entity_id: input_boolean.zappi_eco_always
state: 'on'
then:
- action: select.select_option
metadata: {}
data:
option: Eco+
target:
entity_id: select.zappi_charge_mode
else:
- action: select.select_option
metadata: {}
data:
option: Stopped
target:
entity_id: select.zappi_charge_mode
- conditions:
- condition: state
entity_id: sensor.solax_local_inverter_mode
state: Manual
for:
hours: 0
minutes: 2
seconds: 0
- condition: time
after: '23:30:00'
before: input_datetime.solax_battery_start_charge_time
enabled: false
- condition: or
conditions:
- condition: state
entity_id: input_boolean.export_battery
state: 'on'
- condition: state
entity_id: binary_sensor.solax_discharge_before_ev_charge
state: 'on'
- condition: template
value_template: '{{(states(''sensor.solax_local_manual_mode_behaviour'')
== "Do Nothing")}}'
- condition: trigger
id:
- Check Discharge Mode
sequence:
- if:
- condition: numeric_state
entity_id: sensor.solax_local_battery_soc
value_template: '{{ state.state | float(0) - 9 }}'
above: input_number.solax_manual_forced_discharge_limit_soc
then:
- event: Solax Zappi Octopus Control
event_data:
message: Manual discharge failure @ {{now().strftime('%H:%M')}}. Setting
modes issue. Attempting to recover.
title: Manual Discharge Failure
class: high
enabled: true
- action: script.solax_set_mode_and_settings
data:
mode: 3
manual_mode: 2
else:
- action: script.solax_set_mode_and_settings
data:
mode: '{{default_mode}}'
- conditions:
- condition: trigger
id:
- Charge Solax
- condition: template
value_template: '{{ (state_attr(''sensor.solax_local_settings'', ''Data'')[10]|int
!= states(''sensor.solax_default_operation_mode'')|int) }}'
- condition: state
entity_id: input_boolean.saving_session_active
state: 'off'
sequence:
- action: script.solax_set_mode_and_settings
data:
mode: '{{default_mode}}'
- conditions:
- condition: trigger
id:
- Charge Period 2 End
- condition: state
entity_id: input_boolean.saving_session_active
state: 'off'
- condition: template
value_template: '{{states(''sensor.solax_local_battery_chd2_enabled'')|bool==true}}'
sequence:
- data:
enabled: '{{ 0 }}
'
action: rest_command.solax_local_set_period2_enable
- delay:
hours: 0
minutes: 0
seconds: '{{refresh_settings_delay}}'
milliseconds: 0
- conditions:
- condition: trigger
id:
- Daily Export
- condition: or
conditions:
- condition: state
entity_id: sensor.zappi_plug_status
state: EV Disconnected
- condition: and
conditions:
- condition: state
entity_id: sensor.zappi_plug_status
state: EV Connected
for:
hours: 0
minutes: 10
seconds: 0
- condition: state
entity_id: input_boolean.export_battery_daily
state: 'on'
- condition: state
entity_id: binary_sensor.free_electricity_today
state: 'off'
sequence:
- if:
- condition: numeric_state
entity_id: sensor.solax_local_battery_soc
value_template: '{{ state.state | float(0) - 5 }}'
above: input_number.solax_manual_forced_discharge_limit_soc
- condition: template
value_template: '{{(state_attr(''sensor.solax_local_settings'', ''Data'')[10]
!= 3)}}'
then:
- choose:
- conditions:
- condition: state
entity_id: input_boolean.export_battery_daily
state: 'on'
sequence:
- action: script.solax_set_mode_and_settings
data:
mode: 3
manual_mode: 2
- event: solax_discharge
event_data:
battery_discharge: discharge daily
enabled: true
- event: Solax Zappi Octopus Control
event_data:
message: 'Attempting Discharge @ {{now().strftime(''%H:%M'')}}. '
title: Battery Export Started
class: normal
enabled: true
enabled: true
- action: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id: input_boolean.solax_automation_running
enabled: true
trace:
stored_traces: 20
mode: queued
max: 4
- id: '5002'
alias: 5002 - Solax Reset Mode After Manual Discharge
description: "# 5002 - Solax Reset Mode After Manual Discharge\nAfter a force/regular\
\ discharge set the mode back to default mode when the SoC threshold is met. In\
\ a free Electric discharge, feed in priority is used to prevent the battery filling\
\ if it's sunny. After free electric session is done default mode is returned.\
\ \n\n# Initial installation instructions\n1. This is 5002 only. You also need\
\ 5001 5003 5004 and 5005. \n2. Copy and Paste into your automations.yaml\n\n\
# Change log\nv5.4.1 Added missing catch for manual discharge\nv5.4.0 Added daily\
\ discharge and consistent trigger behaviours\nv3.6 variable for loops\nv3.6 Stop\
\ discharge at time required for car to charge\nv3.3 Added condition to check\
\ if saving session is in progress\nv3.3 Added a validity check on which SoC\
\ is highest for the discharge before ev charge as it is critical that an event\
\ is triggered in this option to initialise EV charging.\nv3.2 Add a condition\
\ to check if export prior and manual export button press.\nv3.0.0 Set an event\
\ to trigger EV charging if binary_sensor.\nSolax Discharge Before EV Charge is\
\ on to off\nv2.1.4 Renamed automation\nv2.1.0 - Changes to limits to catch the\
\ battery closer to the required threshold set by user\nv2.0.0 -productionisation\n"
triggers:
- trigger: template
value_template: "{%set highestSoC = states('sensor.solax_local_feed_in_battery_min_soc')|int\
\ (default=15),\n states('sensor.solax_local_selfuse_battery_min_soc')|int\
\ (default=15),\n states('input_number.solax_discharge_limit_soc_before_ev')|int\
\ (default =20)\n%}\n{{ states('sensor.solax_local_battery_soc')|int (default=100)\
\ < highestSoC|max|int+1 and states('binary_sensor.solax_discharge_before_ev_charge')\
\ == 'on'}}\n"
for:
hours: 0
minutes: 0
seconds: 0
id: EV Stop Discharge Prior
- trigger: time
at: sensor.ev_start_time
id: EV Stop Discharge Prior time trigger
enabled: true
- trigger: template
value_template: "{%set highestSoC = states('sensor.solax_local_feed_in_battery_min_soc')|int\
\ (default=15),\n states('sensor.solax_local_selfuse_battery_min_soc')|int\
\ (default=15),\n states('input_number.solax_daily_discharge_limit_soc')|int\
\ (default =20)\n%}\n{{ states('sensor.solax_local_battery_soc')|int (default=100)\
\ < highestSoC|max|int+1 and states('binary_sensor.solax_discharge_daily') ==\
\ 'on'}}\n"
id: Daily Stop Discharge
- trigger: template
value_template: "{%set highestSoC = states('sensor.solax_local_feed_in_battery_min_soc')|int\
\ (default=15),\n states('sensor.solax_local_selfuse_battery_min_soc')|int\
\ (default=15),\n states('input_number.solax_nightly_discharge_limit_soc')|int\
\ (default =20)\n%}\n{{ states('sensor.solax_local_battery_soc')|int (default=100)\
\ < highestSoC|max|int+1 and states('binary_sensor.solax_discharge_nightly')\
\ == 'on'}}\n"
id: Nightly Stop Discharge
- trigger: template
value_template: "{%set highestSoC = states('sensor.solax_local_feed_in_battery_min_soc')|int\
\ (default=15),\n states('sensor.solax_local_selfuse_battery_min_soc')|int\
\ (default=15),\n states('input_number.solax_nightly_discharge_limit_soc')|int\
\ (default =20)\n%}\n{{ states('sensor.solax_local_battery_soc')|int (default=100)\
\ < highestSoC|max|int+1 and states('binary_sensor.solax_discharge_before_2330')\
\ == 'on'}}\n"
id: Nightly Stop Discharge
- trigger: template
value_template: "{%set highestSoC = states('sensor.solax_local_feed_in_battery_min_soc')|int\
\ (default=15),\n states('sensor.solax_local_selfuse_battery_min_soc')|int\
\ (default=15),\n states('input_number.solax_manual_forced_discharge_limit_soc')|int\
\ (default =20)\n%}\n{{ states('sensor.solax_local_battery_soc')|int (default=100)\
\ < highestSoC|max|int+1 and states('binary_sensor.solax_discharge_manual')\
\ == 'on'}}\n"
id: Manual Stop Discharge
- trigger: template
value_template: "{%set highestSoC = states('sensor.solax_local_feed_in_battery_min_soc')|int\
\ (default=15),\n states('sensor.solax_local_selfuse_battery_min_soc')|int\
\ (default=15),\n states('input_number.octopus_free_session_battery_prep_soc')|int\
\ (default =20)\n%}\n{{ states('sensor.solax_local_battery_soc')|int (default=100)\
\ < highestSoC|max|int+1 }}\n"
id: FreeElectric
- entity_id:
- sensor.solax_local_battery_soc
below: input_number.octopus_saving_session_target_battery_soc
for:
hours: 0
minutes: 0
seconds: 0
id: Saving Session Stop Discharge
trigger: numeric_state
value_template: '{{ state.state | float(0) - 1 }}'
conditions:
- condition: template
value_template: '{{ (states(''sensor.solax_local_inverter_mode'') == ''Manual'')|bool==true}}'
actions:
- action: input_boolean.turn_on
metadata: {}
data: {}
target:
entity_id: input_boolean.solax_automation_running
- variables:
default_mode: '{{states(''sensor.solax_default_operation_mode'')|int(default=0)}}'
mode_delay: 30
settings_delay: 5
refresh_settings_delay: 5
loops: 5
- choose:
- conditions:
- condition: trigger
id:
- EV Stop Discharge Prior
- EV Stop Discharge Prior time trigger
- condition: state
entity_id: input_boolean.export_battery_prior
state: 'on'
- condition: state
entity_id: input_boolean.saving_session_active
state: 'off'
enabled: false
- condition: state
entity_id: sensor.zappi_plug_status
state: EV Connected
sequence:
- condition: not
conditions:
- condition: template
value_template: '{{(trigger.id == ''EV Stop Discharge Prior time trigger''
and states(''sensor.ev_start_time'')|as_timestamp == today_at(''23:30'')|as_timestamp)
or
(trigger.id == ''EV Stop Discharge Prior time trigger'' and states(''input_boolean.priorise_export_over_ev'')==''on'')
}}'
- action: script.solax_set_mode_and_settings
data:
mode: '{{default_mode}}'
- event: Solax Zappi Octopus Control
event_data:
message: 'Discharge finished @ {{now().strftime(''%H:%M'')}}. '
title: Battery Export Finished
class: normal
enabled: true
- delay:
hours: 0
minutes: 0
seconds: 30
milliseconds: 0
- event: solax_discharge
event_data:
battery_discharge: do nothing
enabled: true
- conditions:
- condition: trigger
id:
- Daily Stop Discharge
- condition: state
entity_id: input_boolean.saving_session_active
state: 'off'
enabled: false
- condition: or
conditions:
- condition: time
before: input_datetime.solax_battery_start_charge_time
enabled: true
- condition: state
entity_id: input_boolean.export_battery_daily
state: 'on'
sequence:
- action: script.solax_set_mode_and_settings
data:
mode: '{{default_mode}}'
- event: Solax Zappi Octopus Control
event_data:
message: 'Daily Discharge finished @ {{now().strftime(''%H:%M'')}}. '
title: Battery Export Finished
class: normal
enabled: true
- event: solax_discharge
event_data:
battery_discharge: do nothing
enabled: true
- conditions:
- condition: trigger
id:
- Nightly Stop Discharge
- condition: state
entity_id: input_boolean.saving_session_active
state: 'off'
enabled: false
- condition: or
conditions:
- condition: time
after: '23:30:00'
before: input_datetime.solax_battery_start_charge_time
enabled: true
- condition: state
entity_id: binary_sensor.solax_discharge_before_ev_charge
state: 'off'
sequence:
- action: script.solax_set_mode_and_settings
data:
mode: '{{default_mode}}'
- event: Solax Zappi Octopus Control
event_data:
message: 'Nightly Discharge finished @ {{now().strftime(''%H:%M'')}}. '
title: Battery Export Finished
class: normal
enabled: true
- event: solax_discharge
event_data:
battery_discharge: do nothing
enabled: true
- conditions:
- condition: trigger
id:
- Manual Stop Discharge
- condition: state
entity_id: input_boolean.saving_session_active
state: 'off'
enabled: false
- condition: or
conditions:
- condition: time
before: input_datetime.solax_battery_start_charge_time
enabled: true
- condition: state
entity_id: input_boolean.export_battery_manual
state: 'on'
sequence:
- action: script.solax_set_mode_and_settings
data:
mode: '{{default_mode}}'
- event: Solax Zappi Octopus Control
event_data:
message: 'Manual Discharge finished @ {{now().strftime(''%H:%M'')}}. '
title: Battery Export Finished
class: normal
enabled: true
- action: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id: input_boolean.export_battery_manual
- event: solax_discharge
event_data:
battery_discharge: do nothing
enabled: true
- conditions:
- condition: trigger
id:
- FreeElectric
- condition: state
entity_id: binary_sensor.octopus_intelligent_dispatching
state: 'off'
- condition: state
entity_id: binary_sensor.free_electricity_today
state: 'on'
- condition: time
after: input_datetime.octopus_free_electricity_prep
before: '23:00:00'
sequence:
- action: script.solax_set_mode_and_settings
data:
mode: '{{1}}'
- event: Solax Zappi Octopus Control
event_data:
message: 'Discharge finished @ {{now().strftime(''%H:%M'')}}. '
title: Free Electric Battery Export Prep
class: normal
enabled: true
- event: solax_discharge
event_data:
battery_discharge: do nothing
enabled: true
- conditions:
- condition: trigger
id:
- Saving Session Stop Discharge
- condition: time
after: 05:30:00
before: '23:30:00'
- condition: time
after: input_datetime.saving_session_start
- condition: or
conditions:
- condition: state
entity_id: input_boolean.octopus_saving_session_manual
state: 'on'
- condition: state
entity_id: input_select.saving_session_today
state: 'yes'
sequence:
- action: script.solax_set_mode_and_settings
data:
mode: '{{default_mode}}'
- event: Solax Zappi Octopus Control
event_data:
message: 'Discharge finished @ {{now().strftime(''%H:%M'')}}. '
title: Saving Session Battery Exported
class: normal
enabled: true
- event: solax_discharge
event_data:
battery_discharge: do nothing
enabled: true
- action: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id: input_boolean.solax_automation_running
mode: queued
trace:
stored_traces: 20
max: 4
- id: '5003'
alias: 5003 - Solax Set UI Options
description: "Populate UI with Solax Settings\n\n# AUTOMATION 5003 \n1. This is\
\ 5003 only. You need 5001 5002 5004 and 5005.\n2. Copy and Paste into your automations.yaml\n\
\n# Change log\nv3.2 Added Battery Heat Level - 0 to heat only when below freezing,\
\ 1 to heat when below 10 degrees, 2 to heat when below 20 degrees. see https://solaxpowerservice.zendesk.com/hc/en-001/articles/12334533938191-What-is-the-meaning-of-heating-level-in-my-inverter-settings\n\
v3.1 Added system on/off\nv2.1.4 Renamed automation\nv2.1.0 \n*Allow queued runs\
\ so UI looks a bit more seemless when updating the inverter settings\n*Added\
\ battery warmer controls\nV2.0 Revamp\nv1.0 Initial"
triggers:
- entity_id:
- input_number.solax_feed_in_battery_min_soc
id: Set Feed in Min SoC
trigger: state
for:
hours: 0
minutes: 0
seconds: 10
- entity_id:
- input_number.solax_selfuse_battery_min_soc
id: Solax Self Use Min SoC
trigger: state
for:
hours: 0
minutes: 0
seconds: 10
- entity_id:
- input_number.solax_feed_in_charge_to_soc
id: Set Feed in Charge to SoC
trigger: state
for:
hours: 0
minutes: 0
seconds: 10
- entity_id:
- input_number.solax_selfuse_charge_to_soc
id: Solax Self Use Charge to SoC
trigger: state
for:
hours: 0
minutes: 0
seconds: 10
- entity_id:
- input_boolean.self_use_enable_charge_from_grid
id: Set Self Use Charge From Grid
trigger: state
for:
hours: 0
minutes: 0
seconds: 10
- entity_id:
- input_select.solax_manual_modes
id: Set Manual Mode
trigger: state
for:
hours: 0
minutes: 0
seconds: 10
- entity_id:
- input_select.solax_work_mode
id: Set Work Mode
trigger: state
for:
hours: 0
minutes: 0
seconds: 10
- entity_id:
- input_boolean.solaxchargeperiod2
id: Chargeperiod2
trigger: state
for:
hours: 0
minutes: 0
seconds: 10
- trigger: state
entity_id:
- input_datetime.solax_start_charge_2
id: Charge Period 2 Start
for:
hours: 0
minutes: 0
seconds: 10
- trigger: state
entity_id:
- input_datetime.solax_stop_charge_2
id: Charge Period 2 Stop
for:
hours: 0
minutes: 0
seconds: 10
- trigger: state
entity_id:
- input_datetime.solax_battery_start_charge_time
id: Solax Battery Start Charge Time
for:
hours: 0
minutes: 0
seconds: 10
- trigger: state
entity_id:
- input_datetime.solax_battery_stop_charge_time
id: Solax Battery Stop Charge Time
for:
hours: 0
minutes: 0
seconds: 10
- trigger: state
entity_id:
- input_datetime.solax_battery_start_discharge_time
id: Solax Battery Start Discharge Time
for:
hours: 0
minutes: 0
seconds: 10
- trigger: state
entity_id:
- input_datetime.solax_battery_stop_discharge_time
id: Solax Battery Stop Discharge Time
for:
hours: 0
minutes: 0
seconds: 10
- entity_id:
- input_boolean.battery_heat_enable
id: heat enable
trigger: state
for:
hours: 0
minutes: 0
seconds: 10
- trigger: state
entity_id:
- input_datetime.solax_battery_start_heat_time
id: Heat Period Start
for:
hours: 0
minutes: 0
seconds: 10
- trigger: state
entity_id:
- input_datetime.solax_battery_stop_heat_time
id: Heat Period Stop
for:
hours: 0
minutes: 0
seconds: 10
- trigger: state
entity_id:
- input_datetime.solax_start_heat_2
id: Heat Period Start 2
for:
hours: 0
minutes: 0
seconds: 10
- trigger: state
entity_id:
- input_datetime.solax_stop_heat_2
id: Heat Period Stop 2
for:
hours: 0
minutes: 0
seconds: 10
- trigger: state
entity_id:
- input_boolean.solax_system_enable
id: Solax On Off
for:
hours: 0
minutes: 0
seconds: 10
- trigger: state
entity_id:
- input_select.solax_battery_heat_level
for:
hours: 0
minutes: 0
seconds: 10
id: Battery Heat Level
conditions:
- condition: state
entity_id: input_boolean.solax_automation_running
state: 'off'
actions:
- action: input_boolean.turn_on
metadata: {}
data: {}
target:
entity_id: input_boolean.solax_automation_running
- choose:
- conditions:
- condition: trigger
id:
- Set Feed in Min SoC
sequence:
- action: script.solax_set_mode_and_settings
data:
settings:
feedin_battery_min_soc: '{{states(''input_number.solax_feed_in_battery_min_soc'')}}'
selfuse_battery_min_soc: '{{states(''input_number.solax_feed_in_battery_min_soc'')}}'
enabled: true
- conditions:
- condition: trigger
id:
- Solax Self Use Min SoC
sequence:
- action: script.solax_set_mode_and_settings
data:
settings:
feedin_battery_min_soc: '{{states(''input_number.solax_selfuse_battery_min_soc'')}}'
selfuse_battery_min_soc: '{{states(''input_number.solax_selfuse_battery_min_soc'')}}'
enabled: true
- conditions:
- condition: trigger
id:
- Set Feed in Charge to SoC
sequence:
- action: script.solax_set_mode_and_settings
data:
settings:
feedin_charge_battery_from_grid: '{{states(''input_number.solax_feed_in_charge_to_soc'')}}'
enabled: true
- conditions:
- condition: trigger
id:
- Solax Self Use Charge to SoC
sequence:
- action: script.solax_set_mode_and_settings
data:
settings:
selfuse_charge_battery_from_grid: '{{states(''input_number.solax_selfuse_charge_to_soc'')}}'
enabled: true
- conditions:
- condition: trigger
id:
- Set Self Use Charge From Grid
sequence:
- action: script.solax_set_mode_and_settings
data:
settings:
selfuse_charge_from_grid_enable: '{% if states(''input_boolean.self_use_enable_charge_from_grid'')
== ''on''%}{{1}}{% else%}{{0}}{% endif%}'
allowed_discharge_start: '{% set start_time = as_datetime(state_attr(''input_datetime.solax_battery_start_charge_time'',
''timestamp'') - 0) %}{{ start_time.hour + start_time.minute * 256 }}'
allowed_discharge_end: '{% set end_time = as_datetime(state_attr(''input_datetime.solax_battery_stop_charge_time'',
''timestamp'') - 0) %}{{ end_time.hour + end_time.minute * 256 }} '
enabled: true
- conditions:
- condition: trigger
id:
- Set Manual Mode
sequence:
- action: script.solax_set_mode_and_settings
data:
mode: 3
manual_mode: '{{state_attr(trigger.entity_id,''options'').index(states(trigger.entity_id))}}'
enabled: true
- conditions:
- condition: trigger
id:
- Set Work Mode
sequence:
- if:
- condition: template
value_template: '{{state_attr(trigger.entity_id,''options'').index(states(trigger.entity_id))==0
or
state_attr(trigger.entity_id,''options'').index(states(trigger.entity_id))==1
or
state_attr(trigger.entity_id,''options'').index(states(trigger.entity_id))==3
}}'
then:
- action: script.solax_set_mode_and_settings
data:
mode: '{{state_attr(trigger.entity_id,''options'').index(states(trigger.entity_id))}}'
enabled: true
- conditions:
- condition: trigger
id:
- Chargeperiod2
sequence:
- action: script.solax_set_mode_and_settings
data:
settings:
period2_enabled: '{% if states(''input_boolean.solaxchargeperiod2'') ==
''on''%}{{1}}{% else%}{{0}}{% endif%}'
forced_charge_start2: '{% set start_time = as_datetime(state_attr(''input_datetime.solax_start_charge_2'',
''timestamp'') - 0) %}{{ start_time.hour + start_time.minute * 256 }}'
forced_charge_end2: '{% set end_time = as_datetime(state_attr(''input_datetime.solax_stop_charge_2'',
''timestamp'') - 0) %}{{ end_time.hour + end_time.minute * 256 }} '
enabled: true
- conditions:
- condition: trigger
id:
- Charge Period 2 Start
sequence:
- action: script.solax_set_mode_and_settings
data:
settings:
forced_charge_start2: '{% set start_time = as_datetime(state_attr(''input_datetime.solax_start_charge_2'',
''timestamp'') - 0) %}{{ start_time.hour + start_time.minute * 256 }}'
enabled: true
- conditions:
- condition: trigger
id:
- Charge Period 2 Stop
sequence:
- action: script.solax_set_mode_and_settings
data:
settings:
forced_charge_end2: '{% set end_time = as_datetime(state_attr(''input_datetime.solax_stop_charge_2'',
''timestamp'') - 0) %}{{ end_time.hour + end_time.minute * 256 }} '
enabled: true
- conditions:
- condition: trigger
id:
- Solax Battery Start Charge Time
sequence:
- action: script.solax_set_mode_and_settings
data:
settings:
forced_charge_start: '{% set start_time = as_datetime(state_attr(''input_datetime.solax_battery_start_charge_time'',
''timestamp'') - 0) %}{{ start_time.hour + start_time.minute * 256 }}'
enabled: true
- conditions:
- condition: trigger
id:
- Solax Battery Stop Charge Time
sequence:
- action: script.solax_set_mode_and_settings
data:
settings:
forced_charge_end: '{% set end_time = as_datetime(state_attr(''input_datetime.solax_battery_stop_charge_time'',
''timestamp'') - 0) %}{{ end_time.hour + end_time.minute * 256 }} '
enabled: true
- conditions:
- condition: trigger
id:
- Solax Battery Start Discharge Time
sequence:
- action: script.solax_set_mode_and_settings
data:
settings:
allowed_discharge_start: '{% set start_time = as_datetime(state_attr(''input_datetime.solax_battery_start_discharge_time'',
''timestamp'') - 0) %}{{ start_time.hour + start_time.minute * 256 }}'
enabled: true
- conditions:
- condition: trigger
id:
- Solax Battery Stop Discharge Time
sequence:
- action: script.solax_set_mode_and_settings
data:
settings:
set_allowed_discharge_end: '{% set end_time = as_datetime(state_attr(''input_datetime.solax_battery_stop_discharge_time'',
''timestamp'') - 0) %}{{ end_time.hour + end_time.minute * 256 }} '
enabled: true
- conditions:
- condition: trigger
id:
- heat enable
sequence:
- if:
- condition: state
entity_id: input_boolean.battery_heat_enable
state: 'off'
then:
- action: script.solax_set_mode_and_settings
data:
settings:
heat_start: '{% set start_time = as_datetime(state_attr(''input_datetime.solax_battery_start_heat_time'',
''timestamp'') - 0) %}{{ start_time.hour + start_time.minute * 256
}}'
heat_end: '{% set end_time = as_datetime(state_attr(''input_datetime.solax_battery_stop_heat_time'',
''timestamp'') - 0) %}{{ end_time.hour + end_time.minute * 256 }} '
heat_start2: '{% set start_time = as_datetime(state_attr(''input_datetime.solax_start_heat_2'',
''timestamp'') - 0) %}{{ start_time.hour + start_time.minute * 256
}}'
heat_end2: '{% set end_time = as_datetime(state_attr(''input_datetime.solax_stop_heat_2'',
''timestamp'') - 0) %}{{ end_time.hour + end_time.minute * 256 }}'
battery_heat_enable: '{% if states(''input_boolean.battery_heat_enable'')
== ''on''%}{{1}}{% else%}{{0}}{% endif%}'
enabled: true
else:
- action: script.solax_set_mode_and_settings
data:
settings:
heat_start: '{% set start_time = as_datetime(state_attr(''input_datetime.solax_battery_start_heat_time'',
''timestamp'') - 0) %}{{ start_time.hour + start_time.minute * 256
}}'
heat_end: '{% set end_time = as_datetime(state_attr(''input_datetime.solax_battery_stop_heat_time'',
''timestamp'') - 0) %}{{ end_time.hour + end_time.minute * 256 }} '
heat_start2: '{% set start_time = as_datetime(state_attr(''input_datetime.solax_start_heat_2'',
''timestamp'') - 0) %}{{ start_time.hour + start_time.minute * 256
}}'
heat_end2: '{% set end_time = as_datetime(state_attr(''input_datetime.solax_stop_heat_2'',
''timestamp'') - 0) %}{{ end_time.hour + end_time.minute * 256 }}'
battery_heat_enable: '{% if states(''input_boolean.battery_heat_enable'')
== ''on''%}{{1}}{% else%}{{0}}{% endif%}'
enabled: true
- conditions:
- condition: trigger
id:
- Heat Period Start
sequence:
- action: rest_command.solax_local_set_heat_start
data:
value: '{% set end_time = as_datetime(state_attr(''input_datetime.solax_battery_start_heat_time'',
''timestamp'') - 0) %}{{ end_time.hour + end_time.minute * 256 }}'
- action: script.solax_set_mode_and_settings
data:
settings:
heat_start: '{% set start_time = as_datetime(state_attr(''input_datetime.solax_battery_start_heat_time'',
''timestamp'') - 0) %}{{ start_time.hour + start_time.minute * 256 }}'
heat_end: '{% set end_time = as_datetime(state_attr(''input_datetime.solax_battery_stop_heat_time'',
''timestamp'') - 0) %}{{ end_time.hour + end_time.minute * 256 }} '
heat_start2: '{% set start_time = as_datetime(state_attr(''input_datetime.solax_start_heat_2'',
''timestamp'') - 0) %}{{ start_time.hour + start_time.minute * 256 }}'
heat_end2: '{% set end_time = as_datetime(state_attr(''input_datetime.solax_stop_heat_2'',
''timestamp'') - 0) %}{{ end_time.hour + end_time.minute * 256 }}'
battery_heat_enable: '{% if states(''input_boolean.battery_heat_enable'')
== ''on''%}{{1}}{% else%}{{0}}{% endif%}'
enabled: true
- conditions:
- condition: trigger
id:
- Heat Period Stop
sequence:
- action: script.solax_set_mode_and_settings
data:
settings:
heat_start: '{% set start_time = as_datetime(state_attr(''input_datetime.solax_battery_start_heat_time'',
''timestamp'') - 0) %}{{ start_time.hour + start_time.minute * 256 }}'
heat_end: '{% set end_time = as_datetime(state_attr(''input_datetime.solax_battery_stop_heat_time'',
''timestamp'') - 0) %}{{ end_time.hour + end_time.minute * 256 }} '
heat_start2: '{% set start_time = as_datetime(state_attr(''input_datetime.solax_start_heat_2'',
''timestamp'') - 0) %}{{ start_time.hour + start_time.minute * 256 }}'
heat_end2: '{% set end_time = as_datetime(state_attr(''input_datetime.solax_stop_heat_2'',
''timestamp'') - 0) %}{{ end_time.hour + end_time.minute * 256 }}'
battery_heat_enable: '{% if states(''input_boolean.battery_heat_enable'')
== ''on''%}{{1}}{% else%}{{0}}{% endif%}'
enabled: true
- conditions:
- condition: trigger
id:
- Heat Period Start 2
sequence:
- action: script.solax_set_mode_and_settings
data:
settings:
heat_start: '{% set start_time = as_datetime(state_attr(''input_datetime.solax_battery_start_heat_time'',
''timestamp'') - 0) %}{{ start_time.hour + start_time.minute * 256 }}'
heat_end: '{% set end_time = as_datetime(state_attr(''input_datetime.solax_battery_stop_heat_time'',
''timestamp'') - 0) %}{{ end_time.hour + end_time.minute * 256 }} '
heat_start2: '{% set start_time = as_datetime(state_attr(''input_datetime.solax_start_heat_2'',
''timestamp'') - 0) %}{{ start_time.hour + start_time.minute * 256 }}'
heat_end2: '{% set end_time = as_datetime(state_attr(''input_datetime.solax_stop_heat_2'',
''timestamp'') - 0) %}{{ end_time.hour + end_time.minute * 256 }}'
battery_heat_enable: '{% if states(''input_boolean.battery_heat_enable'')
== ''on''%}{{1}}{% else%}{{0}}{% endif%}'
enabled: true
- conditions:
- condition: trigger
id:
- Heat Period Stop 2
sequence:
- action: script.solax_set_mode_and_settings
data:
settings:
heat_start: '{% set start_time = as_datetime(state_attr(''input_datetime.solax_battery_start_heat_time'',
''timestamp'') - 0) %}{{ start_time.hour + start_time.minute * 256 }}'
heat_end: '{% set end_time = as_datetime(state_attr(''input_datetime.solax_battery_stop_heat_time'',
''timestamp'') - 0) %}{{ end_time.hour + end_time.minute * 256 }} '
heat_start2: '{% set start_time = as_datetime(state_attr(''input_datetime.solax_start_heat_2'',
''timestamp'') - 0) %}{{ start_time.hour + start_time.minute * 256 }}'
heat_end2: '{% set end_time = as_datetime(state_attr(''input_datetime.solax_stop_heat_2'',
''timestamp'') - 0) %}{{ end_time.hour + end_time.minute * 256 }}'
battery_heat_enable: '{% if states(''input_boolean.battery_heat_enable'')
== ''on''%}{{1}}{% else%}{{0}}{% endif%}'
enabled: true
- conditions:
- condition: trigger
id:
- Solax On Off
sequence:
- action: script.solax_set_mode_and_settings
data:
settings:
system_state: '{% if states(''input_boolean.solax_system_enable'') ==
''on'' %}{{1}}{% else%}{{0}}{% endif%}'
enabled: true
- conditions:
- condition: trigger
id:
- Battery Heat Level
sequence:
- action: script.solax_set_mode_and_settings
data:
settings:
battery_heat_level: '{{states(''input_select.solax_battery_heat_level'')}}'
enabled: true
- action: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id: input_boolean.solax_automation_running
trace:
stored_traces: 20
mode: queued
max: 9
- id: '5004'
alias: 5004 - Solax Reload Settings
description: "Populate UI with Solax Settings \n\n# AUTOMATION 5004\n 1. This is\
\ 5004 only. You also need 5001 5002 5003 and 5005. \n 2. Paste into your automations.yaml\n\
\n# Change log\nv3.1 Added system on/off\n v2.1.4 Renamed automation\n v2.1 Battery\
\ Warmer\n v2.0 Revamp\n"
triggers:
- trigger: time_pattern
minutes: /12
- trigger: state
entity_id:
- input_boolean.solax_automation_running
from: 'on'
to: 'off'
enabled: true
for:
hours: 0
minutes: 0
seconds: 13
- entity_id:
- input_button.refresh
trigger: state
conditions:
- condition: state
entity_id: input_boolean.solax_automation_running
state: 'off'
actions:
- variables:
mode_delay: 15
settings_delay: 10
refresh_settings_delay: 10
- action: automation.turn_off
metadata: {}
data:
stop_actions: true
target:
entity_id: automation.solax_set_ui_options
- delay:
hours: 0
minutes: 0
seconds: 1
milliseconds: 0
- action: homeassistant.update_entity
data:
entity_id:
- sensor.solax_rest_local_settings
- delay:
hours: 0
minutes: 0
seconds: '{{refresh_settings_delay}}'
- metadata: {}
data:
option: '{{states(''sensor.solax_local_inverter_mode'')}}'
target:
entity_id: input_select.solax_work_mode
action: input_select.select_option
- metadata: {}
data:
option: '{{states(''sensor.solax_local_manual_mode_behaviour'')}}'
target:
entity_id: input_select.solax_manual_modes
action: input_select.select_option
- metadata: {}
data:
value: '{{states(''sensor.solax_local_feed_in_battery_min_soc'')|int}}'
target:
entity_id: input_number.solax_feed_in_battery_min_soc
action: input_number.set_value
- metadata: {}
data:
value: '{{states(''sensor.solax_local_feed_in_battery_charge_from_grid_to'')|int}}'
target:
entity_id: input_number.solax_feed_in_charge_to_soc
action: input_number.set_value
- metadata: {}
data:
value: '{{states(''sensor.solax_local_selfuse_battery_chrg_frm_grd_to'')|int}}'
target:
entity_id: input_number.solax_selfuse_charge_to_soc
action: input_number.set_value
enabled: true
- metadata: {}
data:
value: '{{states(''sensor.solax_local_selfuse_battery_min_soc'')|int}}'
target:
entity_id: input_number.solax_selfuse_battery_min_soc
action: input_number.set_value
enabled: true
- if:
- condition: template
value_template: '{{states(''sensor.solax_local_battery_chd2_enabled'')|bool==true}}'
then:
- action: input_boolean.turn_on
target:
entity_id: input_boolean.solaxchargeperiod2
data: {}
- if:
- condition: template
value_template: '{{states(''sensor.solax_local_battery_chd2_enabled'')|bool==false}}'
then:
- action: input_boolean.turn_off
target:
entity_id:
- input_boolean.solaxchargeperiod2
data: {}
- if:
- condition: state
entity_id: sensor.solax_local_self_use_battery_charge_from_grid
state: '1'
then:
- action: input_boolean.turn_on
target:
entity_id: input_boolean.self_use_enable_charge_from_grid
data: {}
- if:
- condition: state
entity_id: sensor.solax_local_self_use_battery_charge_from_grid
state: '0'
then:
- action: input_boolean.turn_off
target:
entity_id:
- input_boolean.self_use_enable_charge_from_grid
data: {}
- action: input_datetime.set_datetime
metadata: {}
data:
time: '{{states(''sensor.solax_local_battery_setting_start_charge'')}}'
target:
entity_id: input_datetime.solax_battery_start_charge_time
- action: input_datetime.set_datetime
metadata: {}
data:
time: '{{states(''sensor.solax_local_battery_setting_stop_charge'')}}'
target:
entity_id: input_datetime.solax_battery_stop_charge_time
- action: input_datetime.set_datetime
metadata: {}
data:
time: '{{states(''sensor.solax_local_battery_setting_start_discharge'')}}'
target:
entity_id: input_datetime.solax_battery_start_discharge_time
- action: input_datetime.set_datetime
metadata: {}
data:
time: '{{states(''sensor.solax_local_battery_setting_stop_discharge'')}}'
target:
entity_id: input_datetime.solax_battery_stop_discharge_time
- action: input_datetime.set_datetime
metadata: {}
data:
time: '{{states(''sensor.solax_local_battery_setting_start_charge_2'')}}'
target:
entity_id: input_datetime.solax_start_charge_2
- action: input_datetime.set_datetime
metadata: {}
data:
time: '{{states(''sensor.solax_local_battery_setting_stop_charge_2'')}}'
target:
entity_id: input_datetime.solax_stop_charge_2
- if:
- condition: state
entity_id: sensor.solax_local_battery_heat_enabled
state: 'True'
then:
- action: input_boolean.turn_on
target:
entity_id: input_boolean.battery_heat_enable
data: {}
else:
- action: input_boolean.turn_off
target:
entity_id:
- input_boolean.battery_heat_enable
data: {}
- action: input_datetime.set_datetime
metadata: {}
data:
time: '{{states(''sensor.solax_local_battery_heat_start'')}}'
target:
entity_id: input_datetime.solax_battery_start_heat_time
- action: input_datetime.set_datetime
metadata: {}
data:
time: '{{states(''sensor.solax_local_battery_heat_stop'')}}'
target:
entity_id: input_datetime.solax_battery_stop_heat_time
- action: input_datetime.set_datetime
metadata: {}
data:
time: '{{states(''sensor.solax_local_battery_heat_start_2'')}}'
target:
entity_id: input_datetime.solax_start_heat_2
- action: input_datetime.set_datetime
metadata: {}
data:
time: '{{states(''sensor.solax_local_battery_heat_stop_2'')}}'
target:
entity_id: input_datetime.solax_stop_heat_2
- if:
- condition: state
entity_id: sensor.solax_local_system_state
state: 'True'
then:
- action: input_boolean.turn_on
target:
entity_id:
- input_boolean.solax_system_enable
data: {}
- if:
- condition: state
entity_id: sensor.solax_local_system_state
state: 'False'
then:
- action: input_boolean.turn_off
target:
entity_id:
- input_boolean.solax_system_enable
data: {}
- metadata: {}
data:
option: '{{states(''sensor.solax_local_battery_heat_level'')}}'
target:
entity_id: input_select.solax_battery_heat_level
action: input_select.select_option
- delay:
hours: 0
minutes: 0
seconds: 1
milliseconds: 0
- action: automation.turn_on
metadata: {}
data: {}
target:
entity_id: automation.solax_set_ui_options
trace:
stored_traces: 20
mode: single
- id: '5005'
alias: 5005 - Solax Zappi Octopus Control - Notifier
description: '# 5005 - Solax Zappi Octopus Control - Notifier
Allows for notification of activity such as EV Connected, EV charging started,
amount Octopus will dispatch, Solax battery forced discharge events etc
# Initial installation instructions
1. Copy to your automations.yaml and reload yaml from developer tools
# Change Log
v4.0 Added logging
v3.1 Better notification management
v2.2 Added Alert Exclusions
v2.1.4 Renamed automation
v2.1.3 Simplications
v2.0 Initial production release
v1.0 Initial'
triggers:
- trigger: event
event_type: Solax Zappi Octopus Control
event_data:
class: normal
id: Normal
- trigger: event
event_type: Solax Zappi Octopus Control
event_data:
class: high
id: High
- trigger: event
event_type: Solax Control
event_data:
class: normal
id: Normal
- trigger: event
event_type: Solax Control
event_data:
class: high
id: High
conditions: []
actions:
- action: logbook.log
data:
name: Solax Zappi Octopus
message: 'Event ({{ trigger.event.data.class }}): {{ trigger.event.data.title
}}
'
- choose:
- conditions:
- condition: trigger
id:
- High
- condition: or
conditions:
- condition: state
entity_id: input_boolean.solax_zappi_octopus_control_notifications
state: 'off'
- condition: state
entity_id: input_boolean.nofify_mobile
state: 'off'
sequence:
- action: persistent_notification.create
data:
title: '{{trigger.event.data.title}}'
message: '{{trigger.event.data.message}}'
- if:
- condition: template
value_template: '{{states(''input_text.mobile_device_selected'') != ''None
Selected''}}'
then:
- repeat:
for_each: '{{state_attr(''sensor.solax_zappi_octopus_devices_to_notify'',
''mobile_devices'') | map(attribute=''device'') | reject(''match'',"
")|list}}
'
sequence:
- action: notify.{{repeat.item}}
metadata: {}
data:
title: '{{trigger.event.data.title}}'
message: '{{trigger.event.data.message}}'
- conditions:
- condition: or
conditions:
- condition: trigger
id:
- Normal
- condition: trigger
id:
- High
- condition: state
entity_id: input_boolean.solax_zappi_octopus_control_notifications
state: 'on'
sequence:
- if:
- condition: template
value_template: '{{trigger.event.data.title not in state_attr(''sensor.solax_zappi_octopus_notification_to_exclude'',''notification_list'')
| map(attribute=''notification'') | list}}'
then:
- action: persistent_notification.create
data:
title: '{{trigger.event.data.title}}'
message: '{{trigger.event.data.message}}'
- if:
- condition: template
value_template: '{{states(''input_text.mobile_device_selected'') != ''None
Selected''}}'
then:
- repeat:
for_each: '{{state_attr(''sensor.solax_zappi_octopus_devices_to_notify'',
''mobile_devices'') | map(attribute=''device'') | reject(''match'',"
")|list}}
'
sequence:
- action: notify.{{repeat.item}}
metadata: {}
data:
title: '{{trigger.event.data.title}}'
message: '{{trigger.event.data.message}}'
mode: queued
max: 10
- id: '6001'
alias: 6001 - Octopus - Free Electric Automation
description: "# 6001 - Automation to get the most from Octopus Free Electric Sessions\n\
\n# Initial config instructions\n1. Paste into your automations.yaml\n\n# Change\
\ log\nv5.4.0 Tidy\nv5.3.0 Introducing safe switching of octopus_intelligent_smart_charge\n\
v5.1.1 Fixed bug in Free Electric notification where end time was announced as\
\ start time\nv2.1.4 Renamed automation\nv2.1 - Removed legacy dev work and fix\
\ bug with charge period 2\nv2.0 - Productionise\nv1.1 - Initial\n\n\n# Overview\n\
Octopus offer free electric sessions in the summer.\nThis automation allows you\
\ to automatically charge the solax battery and also sets the zappi to fast mode.\
\ \nTo prepare for the free electricity, options are provided to export the house\
\ battery to benefit from export rates and to give headroom to charge from the\
\ grid for free in the session. You can set a time and export threshold. However\
\ beware that on a sunny day you may already be at the inverters limit so won't\
\ be able to discharge the battery so you have to balance the time at which you\
\ discharge and the battery SoC level for which you need to last the day before\
\ the free session. To prevent the battery filling the inverter mode is set to\
\ feed in priority and will return to your default mode after the free electric\
\ session. If export rates become unfavourable you can use the target battery\
\ SoC as the charge to if you allow charging from grid overnight."
triggers:
- at: sensor.octopus_free_electricity_start
id: start
trigger: time
enabled: true
- at: sensor.octopus_free_electricity_stop
id: stop
trigger: time
enabled: true
- entity_id:
- binary_sensor.free_electricity_today
to: 'on'
id: Prepare
trigger: state
for:
hours: 0
minutes: 2
seconds: 0
enabled: true
- at: input_datetime.octopus_free_electricity_prep
id: ExportBatteryPrep
trigger: time
- trigger: state
entity_id:
- binary_sensor.upcoming_free_electricity
to: 'on'
for:
hours: 0
minutes: 2
seconds: 0
id: Octopus New Free Electric
conditions:
- condition: state
entity_id: input_boolean.solax_automation_running
state: 'off'
enabled: false
actions:
- action: input_boolean.turn_on
metadata: {}
data: {}
target:
entity_id: input_boolean.solax_automation_running
- variables:
default_mode: '{{states(''sensor.solax_default_operation_mode'')|int}}'
default_charge_to: '{{states(''input_number.solax_default_charge_to_limit_soc'')|int}}'
free_electric_event_entity: event.octopus_energy_z_ZZZZZZZZ_octoplus_free_electricity_session_events
enabled: true
- choose:
- conditions:
- condition: trigger
id:
- Prepare
- condition: state
entity_id: binary_sensor.free_electricity_today
state: 'on'
sequence:
- if:
- condition: state
entity_id: input_boolean.octopus_free_electric_soc_use
state: 'on'
then:
- condition: not
conditions:
- condition: template
value_template: "{{states('input_number.octopus_free_session_battery_prep_soc')|int==states('sensor.solax_local_feed_in_battery_charge_from_grid_to')|int\
\ \nand states('input_number.octopus_free_session_battery_prep_soc')|int==states('sensor.solax_local_selfuse_battery_chrg_frm_grd_to')}}"
- action: script.solax_set_mode_and_settings
data:
settings:
feedin_charge_battery_from_grid: '{{states(''input_number.octopus_free_session_battery_prep_soc'')}}'
selfuse_charge_battery_from_grid: '{{states(''input_number.octopus_free_session_battery_prep_soc'')}}'
else:
- condition: not
conditions:
- condition: template
value_template: '{{default_charge_to == states(''sensor.solax_local_feed_in_battery_charge_from_grid_to'')|int
and default_charge_to == states(''sensor.solax_local_selfuse_battery_chrg_frm_grd_to'')|int}}'
- action: script.solax_set_mode_and_settings
data:
settings:
feedin_charge_battery_from_grid: '{{default_charge_to}}'
selfuse_charge_battery_from_grid: '{{default_charge_to}}'
- condition: not
conditions:
- condition: template
value_template: "{% set start_time =\n as_datetime(state_attr('input_datetime.octopus_free_electricity_start',\n\
\ 'timestamp') - 60) \n%}\n\n{% set end_time =\n as_datetime(state_attr('input_datetime.octopus_free_electricity_stop',\n\
\ 'timestamp') - 0) \n%}\n\n\n{{ (state_attr('sensor.solax_local_settings',\
\ 'Data')[10] == 1\nand state_attr('sensor.solax_local_settings', 'Data')[7]\
\ == 1 \nand state_attr('sensor.solax_local_settings', 'Data')[8] == start_time.hour\
\ + start_time.minute * 256 \nand state_attr('sensor.solax_local_settings',\
\ 'Data')[9] == end_time.hour + end_time.minute * 256) \n}}"
- action: script.solax_set_mode_and_settings
data:
mode: '{{1}}'
settings:
period2_enabled: '{{1}}'
forced_charge_start2: '{% set start_time = as_datetime(state_attr(''input_datetime.octopus_free_electricity_start'',
''timestamp'') - 0)|as_local %}{{ start_time.hour + start_time.minute
* 256 }}'
forced_charge_end2: '{% set end_time = as_datetime(state_attr(''input_datetime.octopus_free_electricity_stop'',
''timestamp'') - 0)|as_local %}{{ end_time.hour + end_time.minute *
256 }}'
- conditions:
- condition: trigger
id:
- start
- condition: state
entity_id: binary_sensor.free_electricity_today
state: 'on'
sequence:
- action: automation.turn_off
metadata: {}
data:
stop_actions: true
target:
entity_id: automation.solax_zappi_octopus_control
- metadata: {}
data: {}
target:
entity_id:
- switch.octopus_intelligent_smart_charge
action: switch.turn_on
enabled: false
- action: script.safe_switch_toggle
metadata: {}
data:
target_switch: switch.octopus_intelligent_smart_charge
desired_state: 'on'
- metadata: {}
data:
option: Eco+
target:
entity_id: select.myenergi_zappi_XXXXXXXX_charge_mode
action: select.select_option
enabled: true
- event: Solax Zappi Octopus Control
event_data:
message: 'Free electric session started @ {{now().strftime(''%H:%M'')}}. '
title: Free Electric Started
class: high
enabled: true
- conditions:
- condition: trigger
id:
- stop
- condition: state
entity_id: binary_sensor.free_electricity_today
state: 'on'
sequence:
- action: script.solax_set_mode_and_settings
data:
mode: '{{states(''sensor.solax_default_operation_mode'')|int}}'
settings:
period2_enabled: '{{0}}'
selfuse_charge_battery_from_grid: '{{states(''input_number.solax_default_charge_to_limit_soc'')|int}}'
feedin_charge_battery_from_grid: '{{states(''input_number.solax_default_charge_to_limit_soc'')|int}}'
feedin_battery_min_soc: '{{states(''input_number.solax_default_discharge_limit_soc'')|int}}'
selfuse_battery_min_soc: '{{states(''input_number.solax_default_discharge_limit_soc'')|int}}'
- event: Solax Zappi Octopus Control
event_data:
message: 'Free electric session finished @ {{now().strftime(''%H:%M'')}}. '
title: Free Electric Finished
class: high
enabled: true
- action: script.safe_switch_toggle
metadata: {}
data:
target_switch: switch.octopus_intelligent_smart_charge
desired_state: 'off'
- metadata: {}
data:
option: Stopped
target:
entity_id: select.myenergi_zappi_XXXXXXXX_charge_mode
action: select.select_option
enabled: true
- action: automation.turn_on
metadata: {}
data: {}
target:
entity_id: automation.solax_zappi_octopus_control
- conditions:
- condition: trigger
id:
- ExportBatteryPrep
- condition: numeric_state
entity_id: sensor.solax_local_battery_soc
above: input_number.octopus_free_session_battery_prep_soc
value_template: '{{ state.state | float(0) - 14 }}'
- condition: template
value_template: '{{(state_attr(''sensor.solax_local_settings'', ''Data'')[10]!=
3)}}'
- condition: state
entity_id: binary_sensor.free_electricity_today
state: 'on'
sequence:
- if:
- condition: numeric_state
entity_id: sensor.solax_local_battery_soc
above: input_number.octopus_free_session_battery_prep_soc
value_template: '{{ state.state | float(0) - 14 }}'
then:
- action: script.solax_set_mode_and_settings
data:
mode: '{{3}}'
manual_mode: '{{2}}'
- event: solax_discharge
event_data:
battery_discharge: Free Electric Prep
enabled: true
- event: Solax Zappi Octopus Control
event_data:
message: Free electric session prep export started @ {{now().strftime('%H:%M')}}.
Discharging to {{states('input_number.octopus_free_session_battery_prep_soc')}}%
title: Free Electric Prep
class: high
enabled: true
- conditions:
- condition: trigger
id:
- Octopus New Free Electric
sequence:
- if:
- condition: template
value_template: '{% set event_start = state_attr(''binary_sensor.upcoming_free_electricity'',''next_session_start'')
%}
{{event_start|as_timestamp>now()|as_timestamp}}'
then:
- event: Solax Zappi Octopus Control
event_data:
message: '{% set event_start = state_attr(''binary_sensor.upcoming_free_electricity'',''next_session_start'')|as_datetime
%}It starts at {{event_start.strftime(''%H:%M'') }} on {{ event_start.day
}}/{{event_start.month }} for {{ state_attr(''binary_sensor.upcoming_free_electricity'',''next_session_duration'') }}
minutes.
'
title: Octopus Free Electric Session
class: high
- action: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id: input_boolean.solax_automation_running
mode: single