Files
zorruno-homeassistant/packages/free_power_time_actions.yaml
T
2026-05-23 23:53:04 +12:00

300 lines
11 KiB
YAML

###############################################################################
# PACKAGE: Free Power Time Automation
###############################################################################
# VERSION:
# 1.0.0 - 2026-05-08
# - Initial package.
# - Adds editable free power start/end times.
# - Adds master enable switch and per-action enable switches.
# - Adds announcement, gas-to-heatpump changeover, tool charger control,
# and underhouse dehumidifier control.
#
# NOTES:
# - Free power start/end times can be changed in Home Assistant.
# - Start time default is 9:00pm.
# - End time default is midnight.
# - YAML-only gas heater settings are in script.free_power_gas_heater_changeover:
# gas_heater_shutdown_delay_seconds
# heatpump_setpoint_offset_c
#
# IMPORTANT:
# - input_datetime initial values are used to provide defaults.
# - If you later want UI changes to survive every HA restart, remove the
# initial lines after the helpers have been created and set once.
###############################################################################
###############################################################################
# INPUT DATETIME
###############################################################################
input_datetime:
free_power_start_time:
name: Free Power - Start Time
has_date: false
has_time: true
initial: "21:00:00"
icon: mdi:clock-start
free_power_end_time:
name: Free Power - End Time
has_date: false
has_time: true
initial: "00:00:00"
icon: mdi:clock-end
###############################################################################
# ENABLE SWITCHES
###############################################################################
input_boolean:
free_power_automation_enabled:
name: Free Power - Master Automation Enable
icon: mdi:transmission-tower
free_power_announcement_enabled:
name: Free Power - Announcement Enable
icon: mdi:bullhorn
free_power_gas_heater_changeover_enabled:
name: Free Power - Gas Heater Changeover Enable
icon: mdi:heat-pump-outline
free_power_tool_battery_chargers_enabled:
name: Free Power - Tool Battery Chargers Enable
icon: mdi:battery-charging
free_power_underhouse_dehumidifier_enabled:
name: Free Power - Underhouse Dehumidifier Enable
icon: mdi:air-humidifier
###############################################################################
# TEMPLATE SENSORS
###############################################################################
template:
- binary_sensor:
- name: Free Power Time Active
unique_id: free_power_time_active
icon: mdi:transmission-tower
state: >-
{% set start = states('input_datetime.free_power_start_time') %}
{% set end = states('input_datetime.free_power_end_time') %}
{% set now_mins = now().hour * 60 + now().minute %}
{% set start_mins = (start[0:2] | int(0)) * 60 + (start[3:5] | int(0)) %}
{% set end_mins = (end[0:2] | int(0)) * 60 + (end[3:5] | int(0)) %}
{% if start_mins == end_mins %}
false
{% elif start_mins < end_mins %}
{{ start_mins <= now_mins < end_mins }}
{% else %}
{{ now_mins >= start_mins or now_mins < end_mins }}
{% endif %}
###############################################################################
# SCRIPTS
###############################################################################
script:
free_power_start_actions:
alias: Free Power - Start Actions
mode: single
sequence:
- condition: state
entity_id: input_boolean.free_power_automation_enabled
state: "on"
- variables:
free_power_time_label: >-
{%- set raw_time = states('input_datetime.free_power_start_time') -%}
{%- set hour = raw_time[0:2] | int(0) -%}
{%- set minute = raw_time[3:5] | int(0) -%}
{%- set suffix = 'am' if hour < 12 else 'pm' -%}
{%- set hour12 = hour % 12 -%}
{%- set hour12 = 12 if hour12 == 0 else hour12 -%}
{{- hour12 ~ suffix if minute == 0 else hour12 ~ ':' ~ '%02d' | format(minute) ~ suffix -}}
###########################################################################
# 1) Free Power Time Announcement
###########################################################################
- if:
- condition: state
entity_id: input_boolean.free_power_announcement_enabled
state: "on"
then:
- action: script.view_road_announcement
data:
channels: "lounge_google_home_voice, sony_tv_lounge"
title: "View Road "
short_announcement: "{{ free_power_time_label }}: Free power time"
long_announcement: "It is {{ free_power_time_label }}."
###########################################################################
# 2) Gas Heater Changeover
###########################################################################
- if:
- condition: state
entity_id: input_boolean.free_power_gas_heater_changeover_enabled
state: "on"
then:
- action: script.free_power_gas_heater_changeover
###########################################################################
# 3) Tool Battery Chargers On
###########################################################################
- if:
- condition: state
entity_id: input_boolean.free_power_tool_battery_chargers_enabled
state: "on"
then:
- action: switch.turn_on
target:
entity_id:
- switch.ryobi_charger_left_power_monitor_x17pp
- switch.ryobi_charger_right_power_monitor_x16pp
###########################################################################
# 4) Underhouse Dehumidifier On
###########################################################################
- if:
- condition: state
entity_id: input_boolean.free_power_underhouse_dehumidifier_enabled
state: "on"
then:
- action: switch.turn_on
target:
entity_id:
- switch.underhouse_dehumidifier_power_plug_x10pp
free_power_end_actions:
alias: Free Power - End Actions
mode: single
sequence:
- condition: state
entity_id: input_boolean.free_power_automation_enabled
state: "on"
###########################################################################
# 3) Tool Battery Chargers Off
#
# If this action is enabled, the chargers are switched off at free power
# end even if something else turned them on.
###########################################################################
- if:
- condition: state
entity_id: input_boolean.free_power_tool_battery_chargers_enabled
state: "on"
then:
- action: switch.turn_off
target:
entity_id:
- switch.ryobi_charger_left_power_monitor_x17pp
- switch.ryobi_charger_right_power_monitor_x16pp
###########################################################################
# 4) Underhouse Dehumidifier Off
#
# If this action is enabled, the dehumidifier is switched off at free power
# end even if something else turned it on.
###########################################################################
- if:
- condition: state
entity_id: input_boolean.free_power_underhouse_dehumidifier_enabled
state: "on"
then:
- action: switch.turn_off
target:
entity_id:
- switch.underhouse_dehumidifier_power_plug_x10pp
free_power_gas_heater_changeover:
alias: Free Power - Gas Heater Changeover
mode: single
sequence:
###########################################################################
# YAML-only settings
###########################################################################
- variables:
gas_heater_operation_entity: switch.rinnai_neo_gas_heater_heater_operation
gas_heater_setpoint_entity: number.rinnai_neo_gas_heater_rinnai_neo_gas_heater_setpoint
heatpump_climate_entity: climate.lounge
gas_heater_shutdown_delay_seconds: 60
heatpump_setpoint_offset_c: 0
heatpump_setpoint: >-
{{
(
(states(gas_heater_setpoint_entity) | float(0))
+ (heatpump_setpoint_offset_c | float(0))
) | round(1)
}}
###########################################################################
# Only change over if the gas heater is currently on.
###########################################################################
- condition: template
value_template: "{{ is_state(gas_heater_operation_entity, 'on') }}"
###########################################################################
# Only continue if the gas setpoint can be read.
###########################################################################
- condition: template
value_template: >-
{{ states(gas_heater_setpoint_entity) not in ['unknown', 'unavailable', 'none', 'None', ''] }}
###########################################################################
# Set the Panasonic heatpump to heat mode and match the gas heater setpoint,
# with the YAML-only offset applied.
###########################################################################
- action: climate.set_temperature
target:
entity_id: climate.lounge
data:
hvac_mode: heat
temperature: "{{ heatpump_setpoint }}"
###########################################################################
# Give the heatpump time to start before turning the gas heater off.
###########################################################################
- delay:
seconds: "{{ gas_heater_shutdown_delay_seconds | int(60) }}"
- action: switch.turn_off
target:
entity_id: switch.rinnai_neo_gas_heater_heater_operation
###############################################################################
# AUTOMATIONS
###############################################################################
automation:
- id: free_power_time_start_actions
alias: Free Power Time - Start Actions
mode: single
triggers:
- trigger: time
at: input_datetime.free_power_start_time
actions:
- action: script.free_power_start_actions
- id: free_power_time_end_actions
alias: Free Power Time - End Actions
mode: single
triggers:
- trigger: time
at: input_datetime.free_power_end_time
actions:
- action: script.free_power_end_actions