additional esphome devices and fixes
This commit is contained in:
@@ -0,0 +1,276 @@
|
||||
#:########################################################################################:#
|
||||
# TITLE: UNDERHOUSE STORAGE LIGHTS AUTO LIGHTS PACKAGE
|
||||
#:########################################################################################:#
|
||||
# DESCRIPTION:
|
||||
# Replaces the Node-RED automation for the underhouse storage lights.
|
||||
# Doors, PIR sensors, a remote switch, and local relay changes can start or
|
||||
# extend a 1 hour lighting timer.
|
||||
#
|
||||
# VERSION:
|
||||
# V1.0 2026-05-12
|
||||
# - Initial Home Assistant package version.
|
||||
#
|
||||
# EDIT NOTES:
|
||||
# - Add future door contacts in BOTH places marked FUTURE DOOR.
|
||||
# - Add future PIR sensors in the PIR group marked FUTURE PIR.
|
||||
# - The generated group entities used below should be:
|
||||
# binary_sensor.underhouse_storage_door_contacts
|
||||
# binary_sensor.underhouse_storage_pir_presence
|
||||
#:########################################################################################:#
|
||||
|
||||
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
|
||||
# FUTURE DOOR: add the next underhouse storage door contact here.
|
||||
# - binary_sensor.underhouse_future_door_contact
|
||||
|
||||
- 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
|
||||
# FUTURE PIR: uncomment this when the north PIR exists.
|
||||
# - binary_sensor.underhouse_pir_sensor_north_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: "0: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 1 hour timer when
|
||||
a door opens, PIR detects occupancy, or the remote switch is pressed.
|
||||
mode: restart
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: binary_sensor.underhouse_storage_door_contacts
|
||||
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 if no
|
||||
PIR occupancy is active. If PIR is still active, the PIR clear automation
|
||||
below will turn them off after 60 seconds without occupancy.
|
||||
mode: restart
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: binary_sensor.underhouse_storage_door_contacts
|
||||
from: "on"
|
||||
to: "off"
|
||||
condition:
|
||||
- condition: state
|
||||
entity_id: binary_sensor.underhouse_storage_pir_presence
|
||||
state: "off"
|
||||
action:
|
||||
- action: script.underhouse_storage_lights_stop_runtime
|
||||
|
||||
- id: underhouse_storage_lights_individual_door_closed_check
|
||||
alias: Underhouse Storage Lights - Individual Door Closed No Motion Check
|
||||
description: >-
|
||||
When a real door contact closes, wait 60 seconds and then turn the relay
|
||||
off only if all doors are closed and there is no PIR occupancy.
|
||||
mode: restart
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id:
|
||||
- binary_sensor.underhouse_stealth_door_x07rs_contact
|
||||
- binary_sensor.underhouse_north_door_door
|
||||
# FUTURE DOOR: add the next underhouse storage door contact here too.
|
||||
# - binary_sensor.underhouse_future_door_contact
|
||||
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.
|
||||
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"
|
||||
Reference in New Issue
Block a user