feat: add litter box alert and kiosk dashboard automations

Add new automation files to the Home Assistant configuration:

- 02a_litter_box_alerts.yaml: Notifications for multiple litter boxes
  (Poop Box, Triple Threat, Cat Crapper 3000, The Deuce, and Luma
  Smart) covering waste bin full, low litter level, door error, and
  deodorant empty alerts, leveraging shared notification blueprints
- 06a_kiosk_dashboards.yaml: Automations for managing kiosk dashboards

These automations centralize pet-care and maintenance notifications
so alerts are triggered consistently across devices.
This commit is contained in:
Joshua King
2026-10-08 14:47:08 -04:00
parent 2f4108eab5
commit 35d815de79
15 changed files with 458 additions and 502 deletions
@@ -0,0 +1,63 @@
# - id: '1772978762478'
# alias: Kiosk Rotate Dashboards
# description: During 8:30 AM-4:00 PM, show summer schedule only on weekdays with
# no camp event today; otherwise rotate normally.
# triggers:
# - minutes: /1
# trigger: time_pattern
# actions:
# - action: calendar.get_events
# target:
# entity_id: calendar.family_events
# data:
# start_date_time: '{{ today_at(''00:00'') }}'
# end_date_time: '{{ today_at(''00:00'') + timedelta(days=1) }}'
# response_variable: agenda
# - variables:
# camp_events: '{{ (agenda[''calendar.family_events''][''events''] | default([]))
# | selectattr(''summary'', ''defined'') | map(attribute=''summary'') | map(''lower'')
# | select(''search'', ''camp'') | list | count }}'
# should_show_summer: '{{ now().weekday() < 5 and today_at(''08:29:59'') <= now()
# < today_at(''16:00'') and (camp_events | int(0)) == 0 }}'
# current_view: '{{ states(''input_select.kiosk_view'') }}'
# - choose:
# - conditions:
# - condition: template
# value_template: '{{ should_show_summer | bool }}'
# sequence:
# - action: input_select.select_option
# target:
# entity_id: input_select.kiosk_view
# data:
# option: summer-schedule-kiosk
# - conditions:
# - condition: template
# value_template: '{{ current_view == ''summer-schedule-kiosk'' and not (should_show_summer
# | bool) }}'
# sequence:
# - action: input_select.select_next
# target:
# entity_id: input_select.kiosk_view
# data:
# cycle: true
# default:
# - action: input_select.select_next
# target:
# entity_id: input_select.kiosk_view
# data:
# cycle: true
# mode: single
# - id: '1772978826069'
# alias: Kiosk Navigate Display
# description: ''
# triggers:
# - trigger: state
# entity_id: input_select.kiosk_view
# actions:
# - data:
# browser_id:
# - raspberry-kiosk
# path: /{{ states('input_select.kiosk_view') }}
# action: browser_mod.navigate
# mode: restart
@@ -0,0 +1,49 @@
# - id: '1774407470375'
# alias: ESPHome Fleet Update
# description: ''
# triggers:
# - at: 03:00:00
# trigger: time
# - event_type: esphome_fleet_update_trigger
# trigger: event
# conditions:
# - condition: template
# value_template: "{{ expand(integration_entities('esphome'))\n | selectattr('entity_id',\
# \ 'contains', 'update')\n | selectattr('state', 'eq', 'on')\n | list | count\
# \ > 0 }}\n"
# actions:
# - variables:
# pending_devices: "{{ expand(integration_entities('esphome'))\n | selectattr('entity_id',\
# \ 'contains', 'update')\n | selectattr('state', 'eq', 'on')\n | map(attribute='entity_id')\
# \ | list }}\n"
# pending_names: "{{ expand(integration_entities('esphome'))\n | selectattr('entity_id',\
# \ 'contains', 'update')\n | selectattr('state', 'eq', 'on')\n | map(attribute='name')\
# \ | join(', ') }}\n"
# - action: notify.persistent_notification
# data:
# title: ESPHome Fleet Update Starting
# message: 'Updating {{ pending_devices | count }} device(s): {{ pending_names
# }}
# '
# - repeat:
# for_each: '{{ pending_devices }}'
# sequence:
# - action: update.install
# target:
# entity_id: '{{ repeat.item }}'
# continue_on_error: true
# - wait_template: '{{ not is_state(repeat.item, ''on'') }}
# '
# timeout: 00:05:00
# continue_on_timeout: true
# - delay:
# minutes: 2
# - action: notify.persistent_notification
# data:
# title: ESPHome Fleet Update Complete
# message: 'Finished updating {{ pending_devices | count }} device(s): {{ pending_names
# }}
# '