Files
zorruno-homeassistant/packages/laundry_lights_backup_occupancy.yaml
T

128 lines
5.2 KiB
YAML

################################################################################
# PACKAGE: Laundry Lights Backup Occupancy Automation
################################################################################
#
# Operation:
# - Turns Laundry lights on when either of these sensors becomes active:
# - Laundry cupboard/wall PIR from ESPHome laundry environment device
# - Backup ceiling PIR from Zigbee
#
# - Turns Laundry lights off only after BOTH PIRs are clear for the configured
# delay period.
#
# Notes:
# - This is treated as a BACKUP automation.
# - The ESPHome devices should normally communicate directly via MQTT.
# - The wall PIR should still operate the lights with MQTT only.
# - This HA automation provides a fallback path using HA entity states.
#
################################################################################
################################################################################
# USER SETTINGS / PACKAGE VARIABLES
################################################################################
input_number:
laundry_lights_backup_clear_delay_seconds:
name: "Laundry Lights Backup Clear Delay Seconds"
min: 0
max: 3600
step: 1
mode: box
unit_of_measurement: s
icon: mdi:timer-outline
initial: 240
################################################################################
# AUTOMATIONS
################################################################################
automation:
- id: laundry_lights_backup_occupancy_control
alias: "Laundry Lights - Backup Occupancy Control"
description: >
Backup automation for Laundry lights. Turns lights on when either the
ESPHome wall/cupboard PIR or Zigbee ceiling PIR detects movement/occupancy.
Turns lights off after both PIRs are clear for the configured delay period.
mode: restart
triggers:
# Either PIR becoming active turns the Laundry lights on.
- trigger: state
entity_id: binary_sensor.esp_laundryenv_laundry_pir
to: "on"
id: laundry_wall_pir_detected
- trigger: state
entity_id: binary_sensor.laundry_ceiling_pir_x03ir_occupancy
to: "on"
id: laundry_ceiling_pir_detected
# Either PIR becoming clear causes a check. The action only continues
# to the off-delay when BOTH PIRs are clear.
- trigger: state
entity_id:
- binary_sensor.esp_laundryenv_laundry_pir
- binary_sensor.laundry_ceiling_pir_x03ir_occupancy
to: "off"
id: laundry_pir_clear_check
# On HA startup, re-evaluate the current state. This prevents lights
# staying on indefinitely if HA restarted while the room was already clear.
- trigger: homeassistant
event: start
id: ha_startup_check
actions:
- choose:
######################################################################
# ON LOGIC:
# If either PIR is active, turn the Laundry lights on immediately.
######################################################################
- alias: "Turn lights on if either Laundry PIR is active"
conditions:
- condition: template
value_template: >
{{
is_state('binary_sensor.esp_laundryenv_laundry_pir', 'on')
or is_state('binary_sensor.laundry_ceiling_pir_x03ir_occupancy', 'on')
}}
sequence:
- action: switch.turn_on
target:
entity_id: switch.esp_laundrylights_relay_1_laundry_lights
######################################################################
# OFF LOGIC:
# Only start the off-delay if BOTH PIRs are clear.
# After the delay, check both PIRs again before switching off.
######################################################################
- alias: "Wait, then turn lights off if both Laundry PIRs remain clear"
conditions:
- condition: template
value_template: >
{{
is_state('binary_sensor.esp_laundryenv_laundry_pir', 'off')
and is_state('binary_sensor.laundry_ceiling_pir_x03ir_occupancy', 'off')
}}
sequence:
- delay:
seconds: >
{{
states('input_number.laundry_lights_backup_clear_delay_seconds') | int(240)
}}
# Re-check after the delay in case either PIR became active again.
- condition: template
value_template: >
{{
is_state('binary_sensor.esp_laundryenv_laundry_pir', 'off')
and is_state('binary_sensor.laundry_ceiling_pir_x03ir_occupancy', 'off')
}}
# Only send OFF if the Laundry lights are currently ON.
- condition: state
entity_id: switch.esp_laundrylights_relay_1_laundry_lights
state: "on"
- action: switch.turn_off
target:
entity_id: switch.esp_laundrylights_relay_1_laundry_lights