various tidyups

This commit is contained in:
zorruno
2026-07-29 23:18:11 +12:00
parent adb533d6a3
commit dd13f52feb
22 changed files with 6837 additions and 4057 deletions
+369
View File
@@ -0,0 +1,369 @@
#:########################################################################################:#
# Package: Security Notifications
# File: security_notifications.yaml
# Version: v1.0.0
# Date: 2026-07-25
#
# Purpose:
# Sends security alerts through the View Road announcement router when doors
# and access points open or close. Includes a startup gate to suppress false
# alerts after HA or Zigbee coordinator restarts, and a garage-door reminder
# loop for prolonged-open warnings.
#
# Channels used per sensor:
# Kitchen Top Cupboard → pushover_zorruno
# Key Cupboard → pushover_zorruno
# Loft Hatch → pushover_zorruno, sony_tv_lounge
# Underhouse Stealth Door → pushover_zorruno
# Garage Roller Door → pushover_zorruno, sony_tv_lounge
#
# Startup gate:
# Every automation checks:
# 1. HA core uptime > 120 s (blocks false alerts after HA restart)
# 2. Previous state != unavailable/unknown (blocks false alerts after
# Zigbee coordinator restart devices briefly go unavailable then
# re-report their last state)
#
# Garage reminder:
# When opened: immediate alert + 1-hour timer started
# Timer fires: door still open → reminder + restart (max 24 times)
# Door closed: timer cancelled, reminder count reset
#
# Dependencies:
# - packages/view_road_announcement_router.yaml (script.view_road_announcement)
#
# Version History:
# - v1.0.0 (2026-07-25): Created from Node-RED Security Alerts tab.
#:########################################################################################:#
###########################################################################################
# HELPERS
###########################################################################################
input_number:
garage_door_reminder_count:
name: Garage Door Reminder Count
icon: mdi:counter
min: 0
max: 24
step: 1
mode: box
timer:
garage_door_open_reminder:
name: Garage Door Open Reminder
duration: "01:00:00"
icon: mdi:timer-outline
###########################################################################################
# STARTUP GATE common condition template
###########################################################################################
#
# Every automation below includes these two conditions:
#
# 1. HA has been running > 120 s
# "{{ states('sensor.home_assistant_core_uptime') | int(0) > 120 }}"
#
# 2. Entity was not unavailable/unknown before this transition
# "{{ trigger.from_state is not none and trigger.from_state.state not in ['unavailable', 'unknown'] }}"
#
# These are inlined so the package is self-contained and each automation
# remains easy to read, disable, or override individually.
#
###########################################################################################
###########################################################################################
# KITCHEN TOP CUPBOARD
###########################################################################################
automation:
- id: security_kitchen_cupboard_opened
alias: "Security Kitchen Top Cupboard Opened"
description: "Notify via Pushover when the kitchen top cupboard is opened."
mode: single
triggers:
- trigger: state
entity_id: binary_sensor.kitchen_top_cupboard_x04rs_contact
from: "off"
to: "on"
conditions:
- condition: template
value_template: "{{ states('sensor.home_assistant_core_uptime') | int(0) > 120 }}"
- condition: template
value_template: "{{ trigger.from_state is not none and trigger.from_state.state not in ['unavailable', 'unknown'] }}"
actions:
- action: script.view_road_announcement
data:
channels: "pushover_zorruno"
title: "Security Alert"
short_announcement: "Kitchen cupboard opened"
long_announcement: "The kitchen top cupboard has been opened."
- id: security_kitchen_cupboard_closed
alias: "Security Kitchen Top Cupboard Closed"
description: "Notify via Pushover when the kitchen top cupboard is closed."
mode: single
triggers:
- trigger: state
entity_id: binary_sensor.kitchen_top_cupboard_x04rs_contact
from: "on"
to: "off"
conditions:
- condition: template
value_template: "{{ states('sensor.home_assistant_core_uptime') | int(0) > 120 }}"
- condition: template
value_template: "{{ trigger.from_state is not none and trigger.from_state.state not in ['unavailable', 'unknown'] }}"
actions:
- action: script.view_road_announcement
data:
channels: "pushover_zorruno"
title: "Security Alert"
short_announcement: "Kitchen cupboard closed"
long_announcement: "The kitchen top cupboard is now closed."
###########################################################################################
# KEY CUPBOARD
###########################################################################################
- id: security_key_cupboard_opened
alias: "Security Key Cupboard Opened"
description: "Notify via Pushover when the key cupboard is opened."
mode: single
triggers:
- trigger: state
entity_id: binary_sensor.key_cupboard_zrs06
from: "off"
to: "on"
conditions:
- condition: template
value_template: "{{ states('sensor.home_assistant_core_uptime') | int(0) > 120 }}"
- condition: template
value_template: "{{ trigger.from_state is not none and trigger.from_state.state not in ['unavailable', 'unknown'] }}"
actions:
- action: script.view_road_announcement
data:
channels: "pushover_zorruno"
title: "Security Alert"
short_announcement: "Key cupboard opened"
long_announcement: "The key cupboard has been opened."
- id: security_key_cupboard_closed
alias: "Security Key Cupboard Closed"
description: "Notify via Pushover when the key cupboard is closed."
mode: single
triggers:
- trigger: state
entity_id: binary_sensor.key_cupboard_zrs06
from: "on"
to: "off"
conditions:
- condition: template
value_template: "{{ states('sensor.home_assistant_core_uptime') | int(0) > 120 }}"
- condition: template
value_template: "{{ trigger.from_state is not none and trigger.from_state.state not in ['unavailable', 'unknown'] }}"
actions:
- action: script.view_road_announcement
data:
channels: "pushover_zorruno"
title: "Security Alert"
short_announcement: "Key cupboard closed"
long_announcement: "The key cupboard is now closed."
###########################################################################################
# LOFT HATCH
###########################################################################################
- id: security_loft_hatch_opened
alias: "Security Loft Hatch Opened"
description: "Notify via Pushover and Sony TV when the loft hatch is opened."
mode: single
triggers:
- trigger: state
entity_id: binary_sensor.upstairs_loft_hatch_x02rs_contact
from: "off"
to: "on"
conditions:
- condition: template
value_template: "{{ states('sensor.home_assistant_core_uptime') | int(0) > 120 }}"
- condition: template
value_template: "{{ trigger.from_state is not none and trigger.from_state.state not in ['unavailable', 'unknown'] }}"
actions:
- action: script.view_road_announcement
data:
channels: "pushover_zorruno, sony_tv_lounge"
title: "Security Alert"
short_announcement: "Loft hatch opened"
long_announcement: "The upstairs loft hatch has been opened."
- id: security_loft_hatch_closed
alias: "Security Loft Hatch Closed"
description: "Notify via Pushover and Sony TV when the loft hatch is closed."
mode: single
triggers:
- trigger: state
entity_id: binary_sensor.upstairs_loft_hatch_x02rs_contact
from: "on"
to: "off"
conditions:
- condition: template
value_template: "{{ states('sensor.home_assistant_core_uptime') | int(0) > 120 }}"
- condition: template
value_template: "{{ trigger.from_state is not none and trigger.from_state.state not in ['unavailable', 'unknown'] }}"
actions:
- action: script.view_road_announcement
data:
channels: "pushover_zorruno, sony_tv_lounge"
title: "Security Alert"
short_announcement: "Loft hatch closed"
long_announcement: "The upstairs loft hatch is now closed."
###########################################################################################
# UNDERHOUSE STEALTH DOOR
###########################################################################################
- id: security_underhouse_stealth_door_opened
alias: "Security Underhouse Stealth Door Opened"
description: "Notify via Pushover when the underhouse stealth door is opened."
mode: single
triggers:
- trigger: state
entity_id: binary_sensor.underhouse_stealth_door_x07rs_contact
from: "off"
to: "on"
conditions:
- condition: template
value_template: "{{ states('sensor.home_assistant_core_uptime') | int(0) > 120 }}"
- condition: template
value_template: "{{ trigger.from_state is not none and trigger.from_state.state not in ['unavailable', 'unknown'] }}"
actions:
- action: script.view_road_announcement
data:
channels: "pushover_zorruno"
title: "Security Alert"
short_announcement: "Stealth door opened"
long_announcement: "The underhouse stealth door has been opened."
- id: security_underhouse_stealth_door_closed
alias: "Security Underhouse Stealth Door Closed"
description: "Notify via Pushover when the underhouse stealth door is closed."
mode: single
triggers:
- trigger: state
entity_id: binary_sensor.underhouse_stealth_door_x07rs_contact
from: "on"
to: "off"
conditions:
- condition: template
value_template: "{{ states('sensor.home_assistant_core_uptime') | int(0) > 120 }}"
- condition: template
value_template: "{{ trigger.from_state is not none and trigger.from_state.state not in ['unavailable', 'unknown'] }}"
actions:
- action: script.view_road_announcement
data:
channels: "pushover_zorruno"
title: "Security Alert"
short_announcement: "Stealth door closed"
long_announcement: "The underhouse stealth door is now closed."
###########################################################################################
# GARAGE ROLLER DOOR
###########################################################################################
- id: security_garage_door_opened
alias: "Security Garage Roller Door Opened"
description: >
Notify via Pushover and Sony TV when the garage roller door opens.
Also starts the 1-hour reminder timer so a follow-up alert is sent
if the door stays open.
mode: single
triggers:
- trigger: state
entity_id: binary_sensor.garage_roller_door_x18rs_contact
from: "off"
to: "on"
conditions:
- condition: template
value_template: "{{ states('sensor.home_assistant_core_uptime') | int(0) > 120 }}"
- condition: template
value_template: "{{ trigger.from_state is not none and trigger.from_state.state not in ['unavailable', 'unknown'] }}"
actions:
- action: script.view_road_announcement
data:
channels: "pushover_zorruno, sony_tv_lounge"
title: "Security Alert"
short_announcement: "Garage door opened"
long_announcement: "The garage roller door has been opened."
- action: input_number.set_value
data:
entity_id: input_number.garage_door_reminder_count
value: 0
- action: timer.start
data:
entity_id: timer.garage_door_open_reminder
duration: "01:00:00"
- id: security_garage_door_closed
alias: "Security Garage Roller Door Closed"
description: >
Notify via Pushover and Sony TV when the garage roller door closes.
Cancels the reminder timer and resets the reminder counter.
mode: single
triggers:
- trigger: state
entity_id: binary_sensor.garage_roller_door_x18rs_contact
from: "on"
to: "off"
conditions:
- condition: template
value_template: "{{ states('sensor.home_assistant_core_uptime') | int(0) > 120 }}"
- condition: template
value_template: "{{ trigger.from_state is not none and trigger.from_state.state not in ['unavailable', 'unknown'] }}"
actions:
- action: timer.cancel
data:
entity_id: timer.garage_door_open_reminder
- action: input_number.set_value
data:
entity_id: input_number.garage_door_reminder_count
value: 0
- action: script.view_road_announcement
data:
channels: "pushover_zorruno, sony_tv_lounge"
title: "Security Alert"
short_announcement: "Garage door closed"
long_announcement: "The garage roller door is now closed."
- id: security_garage_door_reminder
alias: "Security Garage Roller Door Reminder"
description: >
Fires when the reminder timer finishes. If the door is still open and
the reminder has fired fewer than 24 times, send another reminder and
restart the timer.
mode: single
triggers:
- trigger: event
event_type: timer.finished
event_data:
entity_id: timer.garage_door_open_reminder
conditions:
- condition: template
value_template: "{{ states('sensor.home_assistant_core_uptime') | int(0) > 120 }}"
- condition: state
entity_id: binary_sensor.garage_roller_door_x18rs_contact
state: "on"
- condition: template
value_template: "{{ states('input_number.garage_door_reminder_count') | int(0) < 24 }}"
actions:
- action: input_number.increment
data:
entity_id: input_number.garage_door_reminder_count
- action: script.view_road_announcement
data:
channels: "pushover_zorruno, sony_tv_lounge"
title: "Security Alert"
short_announcement: "Garage door still open"
long_announcement: "A reminder, the garage roller door is still open."
- action: timer.start
data:
entity_id: timer.garage_door_open_reminder
duration: "01:00:00"