Files
zorruno-homeassistant/packages/auto_lights_underhouse_storage.yaml
T
2026-07-24 18:55:12 +12:00

284 lines
10 KiB
YAML

#:########################################################################################:#
# Package: Underhouse Storage Lights
# File: auto_lights_underhouse_storage.yaml
# Version: v1.1.0
# Date: 2026-06-14
#
# Purpose:
# Replaces the Node-RED automation for the underhouse storage lights.
# Doors, PIR sensors, a remote switch, and local relay changes can start or
# extend the storage lighting timer.
#
# Behaviour:
# - Individual door-open triggers turn lights on immediately.
# - All doors closed turns lights off immediately.
# - PIR occupancy can start/restart the motion timer.
# - Remote switch press starts or extends the light timer.
#
# Version History:
# - v1.1.0 (2026-06-14): Door-open trigger now watches each real door contact
# individually; all doors closed turns lights off immediately.
# - v1.0.0 (2026-05-12): Initial Home Assistant package version.
#:########################################################################################:#
binary_sensor:
- platform: group
name: Underhouse Storage Door Contacts
unique_id: underhouse_storage_door_contacts
device_class: door
all: false
entities:
- binary_sensor.underhouse_stealth_door_x07rs_contact
- binary_sensor.underhouse_north_door_door
- binary_sensor.under_house_underhouse_east_stealth_door_door
- platform: group
name: Underhouse Storage PIR Presence
unique_id: underhouse_storage_pir_presence
device_class: occupancy
all: false
entities:
- binary_sensor.underhouse_pir_sensor_south_occupancy
- binary_sensor.underhouse_pir_sensor_north_occupancy
# FUTURE PIR: add any extra PIR sensors here.
# - binary_sensor.underhouse_future_pir_occupancy
timer:
underhouse_storage_lights_runtime:
name: Underhouse Storage Lights Runtime
duration: "01:00:00"
restore: true
icon: mdi:timer-outline
script:
underhouse_storage_lights_start_runtime:
alias: Underhouse Storage Lights - Start Or Extend Runtime
mode: restart
sequence:
- choose:
- conditions:
- condition: state
entity_id: switch.esp_underhouselights_underhouse_storage_lights
state: "off"
sequence:
- action: switch.turn_on
target:
entity_id: switch.esp_underhouselights_underhouse_storage_lights
- action: timer.start
target:
entity_id: timer.underhouse_storage_lights_runtime
data:
duration: "00:20:00"
underhouse_storage_lights_stop_runtime:
alias: Underhouse Storage Lights - Stop Runtime
mode: restart
sequence:
- choose:
- conditions:
- condition: state
entity_id: switch.esp_underhouselights_underhouse_storage_lights
state: "on"
sequence:
- action: switch.turn_off
target:
entity_id: switch.esp_underhouselights_underhouse_storage_lights
- choose:
- conditions:
- condition: template
value_template: >-
{{ not is_state('timer.underhouse_storage_lights_runtime', 'idle') }}
sequence:
- action: timer.cancel
target:
entity_id: timer.underhouse_storage_lights_runtime
automation:
- id: underhouse_storage_lights_start_extend_runtime
alias: Underhouse Storage Lights - Start Or Extend Runtime
description: >-
Turns the storage lights on and starts or restarts the timer when
an individual door opens, PIR detects occupancy, or the remote switch
is pressed.
mode: restart
trigger:
- platform: state
entity_id:
- binary_sensor.underhouse_stealth_door_x07rs_contact
- binary_sensor.underhouse_north_door_door
- binary_sensor.under_house_underhouse_east_stealth_door_door
from: "off"
to: "on"
- platform: state
entity_id: binary_sensor.underhouse_storage_pir_presence
to: "on"
- platform: state
entity_id: binary_sensor.esp_underhouselights_underhouse_storage_lights_remote_switch
to: "on"
action:
- action: script.underhouse_storage_lights_start_runtime
- id: underhouse_storage_lights_start_timer_when_relay_turned_on
alias: Underhouse Storage Lights - Start Timer When Relay Turned On
description: >-
Starts the timer if the relay is turned on locally by ESPHome or
by another Home Assistant automation.
mode: restart
trigger:
- platform: state
entity_id: switch.esp_underhouselights_underhouse_storage_lights
to: "on"
action:
- action: timer.start
target:
entity_id: timer.underhouse_storage_lights_runtime
data:
duration: "00:20:00"
- id: underhouse_storage_lights_timer_finished
alias: Underhouse Storage Lights - Timer Finished
description: >-
Turns the storage lights off after the runtime expires, even if a
door has been left open.
mode: single
trigger:
- platform: event
event_type: timer.finished
event_data:
entity_id: timer.underhouse_storage_lights_runtime
action:
- choose:
- conditions:
- condition: state
entity_id: switch.esp_underhouselights_underhouse_storage_lights
state: "on"
sequence:
- action: switch.turn_off
target:
entity_id: switch.esp_underhouselights_underhouse_storage_lights
- id: underhouse_storage_lights_cancel_timer_when_relay_off
alias: Underhouse Storage Lights - Cancel Timer When Relay Off
description: >-
Keeps the timer helper tidy if the relay is turned off manually, locally,
or by another automation.
mode: restart
trigger:
- platform: state
entity_id: switch.esp_underhouselights_underhouse_storage_lights
to: "off"
condition:
- condition: template
value_template: >-
{{ not is_state('timer.underhouse_storage_lights_runtime', 'idle') }}
action:
- action: timer.cancel
target:
entity_id: timer.underhouse_storage_lights_runtime
- id: underhouse_storage_lights_all_doors_closed
alias: Underhouse Storage Lights - All Doors Closed
description: >-
When all door contacts are closed, turn the lights off immediately.
PIR occupancy can still turn the lights back on again afterwards.
mode: restart
trigger:
- platform: state
entity_id: binary_sensor.underhouse_storage_door_contacts
from: "on"
to: "off"
action:
- action: script.underhouse_storage_lights_stop_runtime
- id: underhouse_storage_lights_individual_door_closed_check
alias: Underhouse Storage Lights - Individual Door Closed Safety Check
description: >-
Safety cleanup. When a real door contact closes, wait 60 seconds and then
ensure the relay is off only if all doors are closed and there is no PIR
occupancy. The normal all-doors-closed automation above should usually
turn the lights off immediately first.
mode: restart
trigger:
- platform: state
entity_id:
- binary_sensor.underhouse_stealth_door_x07rs_contact
- binary_sensor.underhouse_north_door_door
- binary_sensor.under_house_underhouse_east_stealth_door_door
from: "on"
to: "off"
action:
- delay: "00:01:00"
- condition: state
entity_id: binary_sensor.underhouse_storage_door_contacts
state: "off"
- condition: state
entity_id: binary_sensor.underhouse_storage_pir_presence
state: "off"
- condition: state
entity_id: switch.esp_underhouselights_underhouse_storage_lights
state: "on"
- action: script.underhouse_storage_lights_stop_runtime
- id: underhouse_storage_lights_pir_clear_after_doors_closed
alias: Underhouse Storage Lights - PIR Clear After Doors Closed
description: >-
If the doors are closed and PIR occupancy clears for 60 seconds, turn the
storage lights off. This is mainly a cleanup path for PIR-triggered use.
mode: restart
trigger:
- platform: state
entity_id: binary_sensor.underhouse_storage_pir_presence
to: "off"
for: "00:01:00"
condition:
- condition: state
entity_id: binary_sensor.underhouse_storage_door_contacts
state: "off"
- condition: state
entity_id: switch.esp_underhouselights_underhouse_storage_lights
state: "on"
action:
- action: script.underhouse_storage_lights_stop_runtime
- id: underhouse_storage_lights_startup_sync
alias: Underhouse Storage Lights - Startup Sync
description: >-
On Home Assistant startup, re-sync the package state so an already-open
door or already-active PIR still controls the lights after a restart.
mode: single
trigger:
- platform: homeassistant
event: start
action:
- delay: "00:00:20"
- choose:
- conditions:
- condition: template
value_template: >-
{{
is_state('binary_sensor.underhouse_storage_door_contacts', 'on')
or is_state('binary_sensor.underhouse_storage_pir_presence', 'on')
or is_state('binary_sensor.esp_underhouselights_underhouse_storage_lights_remote_switch', 'on')
}}
sequence:
- action: script.underhouse_storage_lights_start_runtime
- conditions:
- condition: state
entity_id: switch.esp_underhouselights_underhouse_storage_lights
state: "on"
- condition: state
entity_id: timer.underhouse_storage_lights_runtime
state: "idle"
sequence:
- action: timer.start
target:
entity_id: timer.underhouse_storage_lights_runtime
data:
duration: "00:20:00"