@ -39,6 +39,7 @@ Live collection of plug-and-play Home Assistant packages. Each YAML file in this
| Package | What it unlocks | Notable entities / services |
| Package | What it unlocks | Notable entities / services |
| --- | --- | --- |
| --- | --- | --- |
| [alarm.yaml](alarm.yaml) | NodeMCU-powered perimeter monitoring with arm/disarm helpers and rich notifications. | `binary_sensor.mcu*_gpio*`, `group.family`, notify + siren scripts |
| [alarm.yaml](alarm.yaml) | NodeMCU-powered perimeter monitoring with arm/disarm helpers and rich notifications. | `binary_sensor.mcu*_gpio*`, `group.family`, notify + siren scripts |
| [alexa_media_player.yaml](alexa_media_player.yaml) | Alexa Media helper sensors including stable bedroom wake-alarm wrappers for Carlo and Stacey plus a combined next-wake view. | `sensor.last_alexa`, `sensor.bedroom_next_wake_alarm`, `sensor.bedroom_next_wake_alarm_source`, `binary_sensor.bedroom_next_wake_alarm_active` |
| [garadget.yaml](garadget.yaml) | MQTT-based control + status for both garage doors, feeding entry/exit lighting routines. | `cover.large_garage_door`, `cover.small_garage_door`, `sensor.garadget_reflection` |
| [garadget.yaml](garadget.yaml) | MQTT-based control + status for both garage doors, feeding entry/exit lighting routines. | `cover.large_garage_door`, `cover.small_garage_door`, `sensor.garadget_reflection` |
| [august.yaml](august.yaml) | Front-door August smart lock with Alexa Show camera pop-up when unlocked. | `lock.front_door`, media_player actions for front doorbell camera |
| [august.yaml](august.yaml) | Front-door August smart lock with Alexa Show camera pop-up when unlocked. | `lock.front_door`, media_player actions for front doorbell camera |
| [holiday.yaml](holiday.yaml) | REST-driven US holiday + flag sensors that color scenes and exterior lighting. | `sensor.holiday`, `sensor.flag`, JSON feed at `config/json_data/holidays.json` |
| [holiday.yaml](holiday.yaml) | REST-driven US holiday + flag sensors that color scenes and exterior lighting. | `sensor.holiday`, `sensor.flag`, JSON feed at `config/json_data/holidays.json` |
@ -54,7 +55,7 @@ Live collection of plug-and-play Home Assistant packages. Each YAML file in this
| [mariadb.yaml](mariadb.yaml) | MariaDB recorder health and capacity SQL sensors. | `sensor.mariadb_status`, `sensor.database_size` |
| [mariadb.yaml](mariadb.yaml) | MariaDB recorder health and capacity SQL sensors. | `sensor.mariadb_status`, `sensor.database_size` |
| [tugtainer_updates.yaml](tugtainer_updates.yaml) | Tugtainer container update notifications via webhook + persistent alerts, plus event-based Joanna dispatch when reports include `### Available:` (24h cooldown via `mode: single` + delay, no new helpers). | `persistent_notification.create`, `event: tugtainer_available_detected`, `script.joanna_dispatch`, `input_datetime.tugtainer_last_update` |
| [tugtainer_updates.yaml](tugtainer_updates.yaml) | Tugtainer container update notifications via webhook + persistent alerts, plus event-based Joanna dispatch when reports include `### Available:` (24h cooldown via `mode: single` + delay, no new helpers). | `persistent_notification.create`, `event: tugtainer_available_detected`, `script.joanna_dispatch`, `input_datetime.tugtainer_last_update` |
| [bearclaw.yaml](bearclaw.yaml) | Joanna/BearClaw bridge automations that forward Telegram commands to codex_appliance, include LLM-first routing context for freeform text, relay replies back, ingest `/api/bearclaw/status` telemetry, and expose dispatch plus QMD/memory-index sensors for Infrastructure dashboards. | `rest_command.bearclaw_*`, `sensor.bearclaw_status_telemetry`, `sensor.joanna_*`, `binary_sensor.joanna_*`, `automation.bearclaw_*`, `script.send_to_logbook` |
| [bearclaw.yaml](bearclaw.yaml) | Joanna/BearClaw bridge automations that forward Telegram commands to codex_appliance, include LLM-first routing context for freeform text, relay replies back, ingest `/api/bearclaw/status` telemetry, and expose dispatch plus QMD/memory-index sensors for Infrastructure dashboards. | `rest_command.bearclaw_*`, `sensor.bearclaw_status_telemetry`, `sensor.joanna_*`, `binary_sensor.joanna_*`, `automation.bearclaw_*`, `script.send_to_logbook` |
| [telegram_bot.yaml](telegram_bot.yaml) | Telegram transport package for BearClaw and other ops flows; the shared `joanna_send_telegram` helper now lives under `config/script/`. | `telegram_bot.send_message`, `script.joanna_send_telegram` |
| [telegram_bot.yaml](telegram_bot.yaml) | Telegram transport package for BearClaw and other ops flows; the shared `joanna_send_telegram` helper now lives under `config/script/`. | `telegram_bot.send_message`, `script.joanna_send_telegram` |
{{states.media_player | selectattr('attributes.last_called','eq',True) | map(attribute='entity_id') | first | default('none') }}
{{states.media_player | selectattr('attributes.last_called','eq',True) | map(attribute='entity_id') | first | default('none') }}
- name:"Carlo Bedroom Wake Alarm"
unique_id:carlo_bedroom_wake_alarm
device_class:timestamp
icon:mdi:alarm
state:>
{% set invalid = ['unknown', 'unavailable', 'none', ''] %}
{% set primary = states('sensor.carlo_bedroom_next_alarm') %}
{% set secondary = states('sensor.carlo_bedroom_next_alarm_2') %}
{% set value = primary if primary not in invalid else secondary %}
{% set ts = as_timestamp(value, none) %}
{{ts | timestamp_local if ts is not none else none }}
- name:"Stacey Bedroom Wake Alarm"
unique_id:stacey_bedroom_wake_alarm
device_class:timestamp
icon:mdi:alarm
state:>
{% set invalid = ['unknown', 'unavailable', 'none', ''] %}
{% set primary = states('sensor.stacey_bedroom_next_alarm') %}
{% set secondary = states('sensor.stacey_bedroom_next_alarm_2') %}
{% set value = primary if primary not in invalid else secondary %}
{% set ts = as_timestamp(value, none) %}
{{ts | timestamp_local if ts is not none else none }}
- name:"Bedroom Next Wake Alarm"
unique_id:bedroom_next_wake_alarm
device_class:timestamp
icon:mdi:alarm
state:>
{% set now_ts = as_timestamp(now()) %}
{% set max_ts = now_ts + 172800 %}
{% set carlo_raw = states('sensor.carlo_bedroom_next_alarm') %}
{% set carlo_fallback = states('sensor.carlo_bedroom_next_alarm_2') %}
{% set stacey_raw = states('sensor.stacey_bedroom_next_alarm') %}
{% set stacey_fallback = states('sensor.stacey_bedroom_next_alarm_2') %}
{% set carlo_ts = as_timestamp(carlo_raw, none) if carlo_raw not in ['unknown', 'unavailable', 'none', ''] else as_timestamp(carlo_fallback, none) %}
{% set stacey_ts = as_timestamp(stacey_raw, none) if stacey_raw not in ['unknown', 'unavailable', 'none', ''] else as_timestamp(stacey_fallback, none) %}
{% set carlo_ok = carlo_ts is not none and carlo_ts >= (now_ts - 900) and carlo_ts <= max_ts %}
{% set stacey_ok = stacey_ts is not none and stacey_ts >= (now_ts - 900) and stacey_ts <= max_ts %}
{% if carlo_ok and stacey_ok %}
{{[carlo_ts, stacey_ts] | min | timestamp_local }}
{% elif carlo_ok %}
{{carlo_ts | timestamp_local }}
{% elif stacey_ok %}
{{stacey_ts | timestamp_local }}
{% else %}
{{none }}
{% endif %}
- name:"Bedroom Next Wake Alarm Source"
unique_id:bedroom_next_wake_alarm_source
icon:mdi:account-voice
state:>
{% set now_ts = as_timestamp(now()) %}
{% set max_ts = now_ts + 172800 %}
{% set carlo_raw = states('sensor.carlo_bedroom_next_alarm') %}
{% set carlo_fallback = states('sensor.carlo_bedroom_next_alarm_2') %}
{% set stacey_raw = states('sensor.stacey_bedroom_next_alarm') %}
{% set stacey_fallback = states('sensor.stacey_bedroom_next_alarm_2') %}
{% set carlo_ts = as_timestamp(carlo_raw, none) if carlo_raw not in ['unknown', 'unavailable', 'none', ''] else as_timestamp(carlo_fallback, none) %}
{% set stacey_ts = as_timestamp(stacey_raw, none) if stacey_raw not in ['unknown', 'unavailable', 'none', ''] else as_timestamp(stacey_fallback, none) %}
{% set carlo_ok = carlo_ts is not none and carlo_ts >= (now_ts - 900) and carlo_ts <= max_ts %}
{% set stacey_ok = stacey_ts is not none and stacey_ts >= (now_ts - 900) and stacey_ts <= max_ts %}
{% set carlo_raw = states('sensor.carlo_bedroom_next_alarm') %}
{% set carlo_fallback = states('sensor.carlo_bedroom_next_alarm_2') %}
{% set stacey_raw = states('sensor.stacey_bedroom_next_alarm') %}
{% set stacey_fallback = states('sensor.stacey_bedroom_next_alarm_2') %}
{% set carlo_ts = as_timestamp(carlo_raw, none) if carlo_raw not in ['unknown', 'unavailable', 'none', ''] else as_timestamp(carlo_fallback, none) %}
{% set stacey_ts = as_timestamp(stacey_raw, none) if stacey_raw not in ['unknown', 'unavailable', 'none', ''] else as_timestamp(stacey_fallback, none) %}
{% set carlo_ok = carlo_ts is not none and carlo_ts >= (now_ts - 900) and carlo_ts <= max_ts %}
{% set stacey_ok = stacey_ts is not none and stacey_ts >= (now_ts - 900) and stacey_ts <= max_ts %}
# Notes: Keeps 180 days (1/2 year); excludes vcloudinfo pings, noisy connectivity telemetry, and other high-churn entities; MariaDB via recorder_db_url.
# Notes: Keeps 180 days (1/2 year); excludes vcloudinfo pings, noisy connectivity telemetry, countdown-style alarm helpers, and other high-churn entities; MariaDB via recorder_db_url.