various packages

This commit is contained in:
zorruno
2026-07-06 19:43:30 +12:00
parent 1e56919e16
commit 7208b95e93
656 changed files with 1168 additions and 211 deletions
@@ -0,0 +1,389 @@
#:########################################################################################:#
# Pool Timer Selection Package #
#:########################################################################################:#
#
# TITLE:
# Pool Timer Selection
#
# FILE:
# pool_timer_selection.yaml
#
# VERSION:
# V1.0 2026-06-29
#
# VERSION HISTORY:
# V1.0 2026-06-29
# - Initial package.
# - Adds Home Assistant input_select helpers for Pool Pump and Pool Light timer times.
# - Publishes selected times to the ESPHome MQTT timer command topics.
# - "Default" publishes the matching ESPHome default time for that selector.
#
# PURPOSE:
# Provides Home Assistant dropdown selectors for the Pool Pump and Pool Light
# morning/evening ON/OFF timer settings.
#
# MQTT NOTES:
# ESPHome devices subscribe to:
# viewroad-commands/poolpump-timer/morning-on
# viewroad-commands/poolpump-timer/morning-off
# viewroad-commands/poolpump-timer/evening-on
# viewroad-commands/poolpump-timer/evening-off
#
# viewroad-commands/poollight-timer/morning-on
# viewroad-commands/poollight-timer/morning-off
# viewroad-commands/poollight-timer/evening-on
# viewroad-commands/poollight-timer/evening-off
#
# Payload format is HH:MM.
#
# IMPORTANT:
# The current ESPHome timer logic only handles same-day timer windows:
# current_mins >= on_time AND current_mins < off_time
#
# Because of this, after-midnight evening selections such as 00:30 or 01:00
# are intentionally not included here.
#
# 24:00 is included for OFF selectors as "run until midnight".
#
#:########################################################################################:#
input_select:
#:######################################################################################:#
# Pool Pump Timer Selectors #
#:######################################################################################:#
pool_pump_morning_on_time:
name: "Pool Pump Morning On Time"
icon: "mdi:timer-play-outline"
options: &pool_timer_options_0730
- "Default"
- "03:30"
- "04:00"
- "04:30"
- "05:00"
- "05:30"
- "06:00"
- "06:30"
- "07:00"
- "07:30"
- "08:00"
- "08:30"
- "09:00"
- "09:30"
- "10:00"
- "10:30"
- "11:00"
- "11:30"
pool_pump_morning_off_time:
name: "Pool Pump Morning Off Time"
icon: "mdi:timer-stop-outline"
options: *pool_timer_options_0730
pool_pump_evening_on_time:
name: "Pool Pump Evening On Time"
icon: "mdi:timer-play-outline"
options: &pool_timer_options_2100_same_day
- "Default"
- "17:00"
- "17:30"
- "18:00"
- "18:30"
- "19:00"
- "19:30"
- "20:00"
- "20:30"
- "21:00"
- "21:30"
- "22:00"
- "22:30"
- "23:00"
- "23:30"
pool_pump_evening_off_time:
name: "Pool Pump Evening Off Time"
icon: "mdi:timer-stop-outline"
options: &pool_timer_options_2230_same_day
- "Default"
- "18:30"
- "19:00"
- "19:30"
- "20:00"
- "20:30"
- "21:00"
- "21:30"
- "22:00"
- "22:30"
- "23:00"
- "23:30"
- "24:00"
#:######################################################################################:#
# Pool Light Timer Selectors #
#:######################################################################################:#
pool_light_morning_on_time:
name: "Pool Light Morning On Time"
icon: "mdi:timer-play-outline"
options: *pool_timer_options_0730
pool_light_morning_off_time:
name: "Pool Light Morning Off Time"
icon: "mdi:timer-stop-outline"
options: *pool_timer_options_0730
pool_light_evening_on_time:
name: "Pool Light Evening On Time"
icon: "mdi:timer-play-outline"
options: &pool_timer_options_1900
- "Default"
- "15:00"
- "15:30"
- "16:00"
- "16:30"
- "17:00"
- "17:30"
- "18:00"
- "18:30"
- "19:00"
- "19:30"
- "20:00"
- "20:30"
- "21:00"
- "21:30"
- "22:00"
- "22:30"
- "23:00"
pool_light_evening_off_time:
name: "Pool Light Evening Off Time"
icon: "mdi:timer-stop-outline"
options: *pool_timer_options_2230_same_day
script:
#:######################################################################################:#
# MQTT Publish Script #
#:######################################################################################:#
pool_timer_publish_mqtt_time:
alias: "Pool Timer - Publish MQTT Time"
description: "Publishes one selected pool timer HH:MM value to MQTT."
mode: queued
max: 20
fields:
mqtt_timer_topic:
name: "MQTT timer topic"
example: "viewroad-commands/poolpump-timer"
timer_command:
name: "Timer command"
example: "morning-on"
selected_value:
name: "Selected value"
example: "Default"
default_time:
name: "Default time"
example: "07:30"
variables:
#:##################################################################################:#
# Editable MQTT Publish Settings #
#:##################################################################################:#
default_label: "Default"
mqtt_retain_timer_commands: true
mqtt_qos: 0
payload_to_send: >-
{% set selected = selected_value | string %}
{% if selected == default_label %}
{{ default_time }}
{% else %}
{{ selected }}
{% endif %}
sequence:
- condition: template
value_template: "{{ (selected_value | string) not in ['unknown', 'unavailable', 'none', 'None', ''] }}"
- action: mqtt.publish
data:
topic: "{{ mqtt_timer_topic }}/{{ timer_command }}"
payload: "{{ payload_to_send }}"
qos: "{{ mqtt_qos | int }}"
retain: "{{ mqtt_retain_timer_commands | bool }}"
automation:
#:######################################################################################:#
# Publish Timer Selector Changes #
#:######################################################################################:#
- id: pool_timer_selection_publish_mqtt
alias: "Pool Timer Selection - Publish MQTT"
description: "Publishes pool timer selector changes to the matching ESPHome MQTT topic."
mode: queued
max: 20
variables:
#:##################################################################################:#
# Editable MQTT Topic Settings #
#:##################################################################################:#
# No leading slash, to match the ESPHome mqtt_timer_topic substitutions.
mqtt_command_root: "viewroad-commands"
pool_pump_timer_topic_suffix: "poolpump-timer"
pool_light_timer_topic_suffix: "poollight-timer"
#:##################################################################################:#
# Editable ESPHome Default Timer Values #
#:##################################################################################:#
# Pool Pump ESPHome defaults
pool_pump_morning_on_default: "07:30"
pool_pump_morning_off_default: "07:30"
pool_pump_evening_on_default: "21:00"
pool_pump_evening_off_default: "22:30"
# Pool Light ESPHome defaults
pool_light_morning_on_default: "07:30"
pool_light_morning_off_default: "07:30"
pool_light_evening_on_default: "19:00"
pool_light_evening_off_default: "22:30"
triggers:
- trigger: state
entity_id: input_select.pool_pump_morning_on_time
id: pool_pump_morning_on
- trigger: state
entity_id: input_select.pool_pump_morning_off_time
id: pool_pump_morning_off
- trigger: state
entity_id: input_select.pool_pump_evening_on_time
id: pool_pump_evening_on
- trigger: state
entity_id: input_select.pool_pump_evening_off_time
id: pool_pump_evening_off
- trigger: state
entity_id: input_select.pool_light_morning_on_time
id: pool_light_morning_on
- trigger: state
entity_id: input_select.pool_light_morning_off_time
id: pool_light_morning_off
- trigger: state
entity_id: input_select.pool_light_evening_on_time
id: pool_light_evening_on
- trigger: state
entity_id: input_select.pool_light_evening_off_time
id: pool_light_evening_off
conditions:
- condition: template
value_template: "{{ trigger.from_state is not none and trigger.to_state is not none }}"
- condition: template
value_template: "{{ trigger.to_state.state not in ['unknown', 'unavailable'] }}"
- condition: template
value_template: "{{ trigger.to_state.state != trigger.from_state.state }}"
actions:
- choose:
#:################################################################################:#
# Pool Pump MQTT Publishes #
#:################################################################################:#
- conditions:
- condition: template
value_template: "{{ trigger.id == 'pool_pump_morning_on' }}"
sequence:
- action: script.pool_timer_publish_mqtt_time
data:
mqtt_timer_topic: "{{ mqtt_command_root }}/{{ pool_pump_timer_topic_suffix }}"
timer_command: "morning-on"
selected_value: "{{ trigger.to_state.state }}"
default_time: "{{ pool_pump_morning_on_default }}"
- conditions:
- condition: template
value_template: "{{ trigger.id == 'pool_pump_morning_off' }}"
sequence:
- action: script.pool_timer_publish_mqtt_time
data:
mqtt_timer_topic: "{{ mqtt_command_root }}/{{ pool_pump_timer_topic_suffix }}"
timer_command: "morning-off"
selected_value: "{{ trigger.to_state.state }}"
default_time: "{{ pool_pump_morning_off_default }}"
- conditions:
- condition: template
value_template: "{{ trigger.id == 'pool_pump_evening_on' }}"
sequence:
- action: script.pool_timer_publish_mqtt_time
data:
mqtt_timer_topic: "{{ mqtt_command_root }}/{{ pool_pump_timer_topic_suffix }}"
timer_command: "evening-on"
selected_value: "{{ trigger.to_state.state }}"
default_time: "{{ pool_pump_evening_on_default }}"
- conditions:
- condition: template
value_template: "{{ trigger.id == 'pool_pump_evening_off' }}"
sequence:
- action: script.pool_timer_publish_mqtt_time
data:
mqtt_timer_topic: "{{ mqtt_command_root }}/{{ pool_pump_timer_topic_suffix }}"
timer_command: "evening-off"
selected_value: "{{ trigger.to_state.state }}"
default_time: "{{ pool_pump_evening_off_default }}"
#:################################################################################:#
# Pool Light MQTT Publishes #
#:################################################################################:#
- conditions:
- condition: template
value_template: "{{ trigger.id == 'pool_light_morning_on' }}"
sequence:
- action: script.pool_timer_publish_mqtt_time
data:
mqtt_timer_topic: "{{ mqtt_command_root }}/{{ pool_light_timer_topic_suffix }}"
timer_command: "morning-on"
selected_value: "{{ trigger.to_state.state }}"
default_time: "{{ pool_light_morning_on_default }}"
- conditions:
- condition: template
value_template: "{{ trigger.id == 'pool_light_morning_off' }}"
sequence:
- action: script.pool_timer_publish_mqtt_time
data:
mqtt_timer_topic: "{{ mqtt_command_root }}/{{ pool_light_timer_topic_suffix }}"
timer_command: "morning-off"
selected_value: "{{ trigger.to_state.state }}"
default_time: "{{ pool_light_morning_off_default }}"
- conditions:
- condition: template
value_template: "{{ trigger.id == 'pool_light_evening_on' }}"
sequence:
- action: script.pool_timer_publish_mqtt_time
data:
mqtt_timer_topic: "{{ mqtt_command_root }}/{{ pool_light_timer_topic_suffix }}"
timer_command: "evening-on"
selected_value: "{{ trigger.to_state.state }}"
default_time: "{{ pool_light_evening_on_default }}"
- conditions:
- condition: template
value_template: "{{ trigger.id == 'pool_light_evening_off' }}"
sequence:
- action: script.pool_timer_publish_mqtt_time
data:
mqtt_timer_topic: "{{ mqtt_command_root }}/{{ pool_light_timer_topic_suffix }}"
timer_command: "evening-off"
selected_value: "{{ trigger.to_state.state }}"
default_time: "{{ pool_light_evening_off_default }}"