{% set warning_since = (previous.get('warning_since', 0) or stamp) if continuous and hottest is not none and hottest >= 176 else (stamp if hottest is not none and hottest >= 176 else 0) %}
{% set urgent_since = (previous.get('urgent_since', 0) or stamp) if continuous and hottest is not none and hottest >= 194 else (stamp if hottest is not none and hottest >= 194 else 0) %}
{% set cool_since = (previous.get('cool_since', 0) or stamp) if continuous and not ns.missing and hottest is not none and hottest < 167 else (stamp if not ns.missing and hottest is not none and hottest < 167 else 0) %}
{% set missing_since = (previous.get('missing_since', 0) or stamp) if ns.missing else 0 %}
{% set band = previous_band if previous_band in ['warning', 'urgent'] else 'normal' %}
{% if hottest is not none and (hottest >= 203 or (urgent_since and stamp - urgent_since >= 120)) %}
{% set band = 'urgent' %}
{% elif band == 'normal' and warning_since and stamp - warning_since >= 600 %}
{% set band = 'warning' %}
{% endif %}
{% if cool_since and stamp - cool_since >= 900 %}{% set band = 'normal' %}{% endif %}
{% set tracking = band != 'normal' or warning_since or urgent_since or missing_since %}
{% do returns({'band': band, 'hottest_f': hottest, 'source': ns.source,
@ -46,7 +46,7 @@ Kitchen, Upstairs and Office voice use Kiosk Satellite's [native Assist satellit
Native Show enrollment is centralized in `satellite_devices()` in [kiosk_health.jinja](../custom_templates/kiosk_health.jinja). Each entry supplies its stable maintenance key, native node, entity suffix, dashboard path, volume-policy opt-in, and local idle-sleep exception. The daily 07:00 app-update pass processes followers before the fleet leader, stages a signed Kiosk Satellite update, then checks installed version, connectivity, dashboard, remote administration, voice availability, and a fresh screenshot. A stalled installer or incomplete recovery dispatches the enrolled device to the authorized maintenance agent. The app update scope excludes Android/LineageOS and unrelated software. Upstairs and Office volumes are manual; only Kitchen opts into the bed-dependent volume policy. Screen/event policies and snapshot refresh use the same inventory.
### Featured packages (live today)
The kiosk package also exposes `sensor.kiosk_recent_phone_notifications`: a restoring, bounded feed of shared parent/family phone pushes. All three Shows include those messages in their existing ten-second slide rotation for ten minutes; the Bedroom message band alternates them with household reminders while weather, security, and water-heater safety alerts retain priority. Entries show their sent time, replace by notification tag, and expire automatically within fifteen seconds of their deadline. Phone notification buttons and camera attachments remain on the phones.
The kiosk package also exposes `sensor.kiosk_recent_phone_notifications`: a restoring, bounded feed of shared parent/family phone pushes, including title-only notices such as Life360 arrivals. All three Shows include those messages in their existing ten-second slide rotation for five minutes; the Bedroom message band uses the same five-minute feed and alternates them with household reminders while weather, security, and water-heater safety alerts retain priority. The round Living Room Nest gives shared notices an exclusive two-minute display window, then resumes its photo gallery. Entries show their sent time, replace by notification tag, and expire automatically within fifteen seconds of their deadline. Phone notification buttons and camera attachments remain on the phones.
| Package | What it unlocks | Notable entities / services |
| --- | --- | --- |
@ -82,7 +82,7 @@ The kiosk package also exposes `sensor.kiosk_recent_phone_notifications`: a rest
| [](vacation_mode.yaml) | Auto-enable vacation mode after 24 hours away or no bed use, track sitter analytics/secure-house checks with a short garage-arrival debounce, clear stale visits with an explicit unconfirmed-departure notice, deliver sitter-facing briefings, and send 10 AM/10 PM house digests with Powerwall/security/backup status plus Joanna review. LG ThinQ telemetry loss is labeled as an unverified-temperature monitoring gap and pushed once per outage during Vacation Mode; routine digests omit the extra issues push when nothing needs attention. | `input_boolean.vacation_mode`, `input_boolean.house_sitter_present`, `input_boolean.vacation_refrigerator_telemetry_notified`, `input_datetime.vacation_house_sitter_*`, `input_datetime.vacation_house_status_digest_last_sent`, `sensor.vacation_house_sitter_*`, `binary_sensor.powerwall_grid_status`, `sensor.powerwall_charge`, `group.garage_doors`, `lock.front_door`, `script.vacation_house_sitter_clear_presence`, `script.vacation_house_status_digest`, `script.notify_engine`, `rest_command.bearclaw_command`, `script.joanna_send_telegram` |
| [](royalcaribbean.yaml) | Receives Cruise Tracker price-drop webhooks and polls a separate sanitized endpoint hourly for the next confirmed cruise countdown shown on the Kitchen Show. Confirmation, cabin, pricing, and watch-list details never enter Home Assistant. | `automation.royal_caribbean_price_drop_alert`, `sensor.next_booked_cruise_countdown`, `script.notify_engine` |
| [](maintenance_log.yaml) | Webhook-based water softener salt maintenance logging with idempotent event handling, Activity Feed logging, parser-safe refill cadence history, and dashboard-ready template sensors. [](https://youtu.be/_OqTv9i-jAs) [](https://www.vcloudinfo.com/2026/07/home-assistant-water-softener-salt-automation.html) | `automation.maintenance_log_joanna_webhook_ingest`, `sensor.water_softener_salt_average_days_between_refills`, `sensor.water_softener_salt_refill_count`, `sensor.water_softener_salt_total_added` |
| [](kiosk_tablet.yaml) | Shares Garage-then-Front-Door priority plus reusable Bedroom header/alert state while keeping each display purpose-built. The Garage view now remains active for three minutes after both doors close before each kiosk returns to its default dashboard. Bedroom retains Fully wake/drift recovery and SleepIQ screen behavior around a clock-free night-watch display; Kitchen retains its clock/forecast, rotating household context, native camera overlays, Kiosk Satellite idle dimming, and an event-driven household policy that sets master volume to 13% while either bed is occupied and restores 75% when both are empty, with reconciliation at 08:00 and startup, and invokes the Dim screensaver while `group.bed` is on or the family is away. Nearby rain or lightning starts one five-minute NOAA radar takeover while the sun is above the horizon; afterward, the rotating Storms Approaching banner can replay the latest 20-minute loop while the event remains active. Actionable banner slides reuse one transient detail timer for NWS instructions, the front-door package view, a person-centered family map, open-entry details, Phyn water status with a confirmed valve-restore action, and hot-water recovery status. Sunset restores the ambient wall immediately. True idle panel-off remains disabled on the Crown LineageOS device until it has a reliable motion-wake input. Fully availability/page/app/power checks plus enrolled Show connectivity, current-page, and screenshot freshness keep the Systems Kiosks tab truthful; a reachable Kitchen display remains online while stale session timestamps remain visible only in the telemetry panel. Kitchen, Upstairs, and Office share the fleet-synced `Joanna Voice` Assist pipeline, with persistent follow-ups and native spoken replies through the shared Joanna human agent. Each satellite is explicitly enrolled with its own credential, assigned personal profile, and conversation history; the custom `joanna_conversation` integration enforces device binding. When a selected Joanna Voice satellite enters processing, one shared automation plays a cached two-second "Let me check on that" clip on that device while the answer continues. Upstairs and Office retain their compact Echo Show 5 view and native ESPHome telemetry. Shared health macros cover every enrolled Show, including foreground-app drift on the Echo Show 5 devices; one screenshot refresh loop covers all native Shows every 15 minutes and after delayed startup recovery. Their faults join the same Systems kiosk rollup and screenshot previews. Available Show updates remain advisory telemetry, while stable attention attributes preserve useful outage transitions without recording every heartbeat. At 07:00, Home Assistant processes enrolled followers before the fleet leader, requests each pending signed installer, and waits two minutes for staging. An incomplete installation dispatches Joanna to the fixed enrolled-device maintenance helper; an unsuccessful update is retried at 07:00 the following day until its native update entity confirms success. [](https://youtu.be/ChgEu0IDWzc) | `binary_sensor.kiosk_garage_camera_active`, `sensor.kiosk_active_camera_view`, `sensor.bedroom_kiosk_header`, `sensor.kiosk_household_alert`, `binary_sensor.kiosk_rain_radar_weather_event`, `binary_sensor.kiosk_rain_radar_active`, `timer.kitchen_kiosk_radar_display`, `input_text.kitchen_kiosk_detail_view`, `timer.kitchen_kiosk_detail_display`, `script.kitchen_kiosk_show_event`, `script.kitchen_kiosk_show_detail`, `script.kitchen_kiosk_restore_phyn_water`, `binary_sensor.bedroom_kiosk_needs_attention`, `binary_sensor.upstairs_kiosk_needs_attention`, `binary_sensor.office_kiosk_needs_attention`, `binary_sensor.kiosk_devices_need_attention`, `sensor.alarm_panel_1_current_page`, `button.alarm_panel_1_load_start_url`, `binary_sensor.kitchen_kiosk_should_be_on`, `number.kitchen_show_volume_2`, `light.kitchen_show_screen_2`, `button.kitchen_show_postpone_screensaver_2`, `button.kitchen_show_take_screenshot_2`, `sensor.kitchen_show_active_camera_view_2`, `automation.kitchen_kiosk_satellite_update_joanna_dispatch` |
| [](kiosk_tablet.yaml) | Shares Garage-then-Front-Door priority plus reusable Bedroom header/alert state while keeping each display purpose-built. The Garage view now remains active for three minutes after both doors close before each kiosk returns to its default dashboard. Bedroom retains Fully wake/drift recovery and SleepIQ screen behavior around a clock-free night-watch display; Kitchen retains its clock/forecast, rotating household context, native camera overlays, Kiosk Satellite idle dimming, and an event-driven household policy that sets master volume to 13% while either bed is occupied and restores 75% when both are empty, with reconciliation at 08:00 and startup, and invokes the Dim screensaver while `group.bed` is on or the family is away. Nearby rain or lightning starts one five-minute NOAA radar takeover while the sun is above the horizon; afterward, the rotating Storms Approaching banner can replay the latest 20-minute loop while the event remains active. Actionable banner slides reuse one transient detail timer for NWS instructions, the front-door package view, a person-centered family map, open-entry details, Phyn water status with a confirmed valve-restore action, and hot-water recovery status. Sunset restores the ambient wall immediately. True idle panel-off remains disabled on the Crown LineageOS device until it has a reliable motion-wake input. Fully availability/page/app/power checks plus enrolled Show connectivity, current-page, and screenshot freshness keep the Systems Kiosks tab truthful; a reachable Kitchen display remains online while stale session timestamps remain visible only in the telemetry panel. Kitchen, Upstairs, and Office share the fleet-synced `Joanna Voice` Assist pipeline, with persistent follow-ups and native spoken replies through the shared Joanna human agent. The Living Room Nest adds an actual circular framebuffer preview, MQTT connection/screen/feed freshness, bounded scene recovery, and a durable repair after persistent failure; its attention state joins the kiosk and Systems rollups. Each satellite is explicitly enrolled with its own credential, assigned personal profile, and conversation history; the custom `joanna_conversation` integration enforces device binding. When a selected Joanna Voice satellite enters processing, one shared automation plays a cached two-second "Let me check on that" clip on that device while the answer continues. Upstairs and Office retain their compact Echo Show 5 view and native ESPHome telemetry. Shared health macros cover every enrolled Show, including foreground-app drift on the Echo Show 5 devices; one screenshot refresh loop covers all native Shows every 15 minutes and after delayed startup recovery. Their faults join the same Systems kiosk rollup and screenshot previews. Available Show updates remain advisory telemetry, while stable attention attributes preserve useful outage transitions without recording every heartbeat. At 07:00, Home Assistant processes enrolled followers before the fleet leader, requests each pending signed installer, and waits two minutes for staging. An incomplete installation dispatches Joanna to the fixed enrolled-device maintenance helper; an unsuccessful update is retried at 07:00 the following day until its native update entity confirms success. [](https://youtu.be/ChgEu0IDWzc) | `binary_sensor.kiosk_garage_camera_active`, `sensor.kiosk_active_camera_view`, `sensor.bedroom_kiosk_header`, `sensor.kiosk_household_alert`, `binary_sensor.kiosk_rain_radar_weather_event`, `binary_sensor.kiosk_rain_radar_active`, `timer.kitchen_kiosk_radar_display`, `input_text.kitchen_kiosk_detail_view`, `timer.kitchen_kiosk_detail_display`, `script.kitchen_kiosk_show_event`, `script.kitchen_kiosk_show_detail`, `script.kitchen_kiosk_restore_phyn_water`, `binary_sensor.bedroom_kiosk_needs_attention`, `binary_sensor.upstairs_kiosk_needs_attention`, `binary_sensor.office_kiosk_needs_attention`, `binary_sensor.kiosk_devices_need_attention`, `sensor.alarm_panel_1_current_page`, `button.alarm_panel_1_load_start_url`, `binary_sensor.kitchen_kiosk_should_be_on`, `number.kitchen_show_volume_2`, `light.kitchen_show_screen_2`, `button.kitchen_show_postpone_screensaver_2`, `button.kitchen_show_take_screenshot_2`, `sensor.kitchen_show_active_camera_view_2`, `automation.kitchen_kiosk_satellite_update_joanna_dispatch` |
| [](powerwall.yaml) | Track Tesla Powerwall grid status, keep a restart-safe outage anchor, publish monitor-only staged resilience recommendations from Home Assistant, handle immediate household load shedding, and alert if the Powerwall stays low after grid power returns. [](https://youtu.be/hR_0lFEE2bA) [](https://www.vcloudinfo.com/2026/06/tesla-powerwall-home-assistant-watchdog.html) | `binary_sensor.powerwall_grid_status`, `sensor.powerwall_*`, `input_datetime.power_resilience_outage_started`, `sensor.power_resilience_recommended_stage`, `script.notify_live_activity`, `repairs.create` |
| [](tesla_model_y.yaml) | Keeps garage-driven plug-in/tire reminders and durable dashboard snapshots. Fresh actual home draw above 18 A requests a native Tesla stop, critical push, and investigation; the intended 16 A limit stays unchanged. Source timestamps reject cached Tesla data and retained MQTT. Missing reports dispatch investigation at 3 minutes. Unverified home sessions pause at 5 minutes; safe/stopped sessions receive a quiet monitoring warning at 15 minutes. Fresh post-stop zero current clears the critical incident. A restoring review latch requires human acknowledgment before home charging resumes; no start commands are issued. Monitoring recovery clears its own tagged alert. Plug-in and tire snoozes remain available. [](https://youtu.be/hDNyZfTfTtE) [](https://www.vcloudinfo.com/2026/09/home-assistant-tesla-tire-pressure-alerts.html) | `sensor.tesla_home_charge_guard`, `binary_sensor.tesla_home_charge_critical`, `binary_sensor.tesla_home_charge_attention`, `sensor.juicepassproxy_mqtt_heartbeat`, `binary_sensor.juicepassproxy_investigation_needed`, `binary_sensor.juicepassproxy_monitoring_degraded`, `switch.spaceship_charge`, `input_boolean.tesla_home_charge_restart_required`, `input_boolean.tesla_high_charge_rate_alert_active`, `script.tesla_home_charge_protect`, `script.notify_engine`, `script.joanna_dispatch` |
@ -177,4 +177,4 @@ These are the devices that power the packages above, plus tracked hardware imple
Affiliate Disclosure
</a></p>
Managed NETGEAR switches use [network_switches.yaml](network_switches.yaml): authenticated SNMPv3 monitors all physical links and PoE delivery, key-link speed/error counters, firmware, uptime and PoE budget utilization. Camera PoE controls omit AP, compute and uplink ports. Current firmware provides no thermal/fan/CPU MIB readings. The retired UniFi switch is disabled in the device registry. [glances.yaml](glances.yaml) averages one CPU package reading per server; the three-node hardware temperatures remain distinct from ambient room temperature.
Managed NETGEAR switches use [network_switches.yaml](network_switches.yaml): authenticated SNMPv3 monitors all physical links and PoE delivery, key-link speed/error counters, firmware, uptime and PoE budget utilization. Camera PoE controls omit AP, compute and uplink ports. Current firmware provides no thermal/fan/CPU MIB readings. The retired UniFi switch is disabled in the device registry. [glances.yaml](glances.yaml) retains the informational CPU-package average and uses the hottest package for sustained heat warnings: 80 C for ten minutes, urgent at 90 C for two minutes or 95 C immediately, and recovery below 75 C for fifteen minutes. These hardware readings remain distinct from ambient room temperature. [Thermal protection](../../docs/garage-thermal-protection.md) describes incident deduplication and graceful optional-camera workload shedding.
{{'The optional camera host has independent staged thermal protection; essential guests are preserved.'if band == 'urgent' else 'The hottest CPU package has remained at or above 176 F for 10 minutes.' }}
{% endif %}
who:'carlo'
group:'information'
tag:garage_cpu_heat
level:"{{ 'active' if trigger.to_state.state == 'urgent' else 'passive' }}"
- action:script.send_to_logbook
data:
topic:"THERMAL"
message:"Garage CPU thermal state changed to {{ trigger.to_state.state }}."
- alias:"Garage Thermal Protection Status"
id:garage-thermal-protection-status
mode:queued
triggers:
- trigger:state
entity_id:sensor.proxmox02_thermal_guard
conditions:
- condition:template
value_template:>-
{{trigger.to_state is not none and trigger.from_state is not none and
(trigger.to_state.state != trigger.from_state.state or
trigger.to_state.attributes.get('error', '') != trigger.from_state.attributes.get('error', '')) and
trigger.to_state.attributes.get('hold', false) }}
actions:
- action:script.notify_engine
data:
title:"Garage Thermal Protection"
notification_icon:"mdi:shield-thermometer"
who:carlo
group:information
tag:garage_cpu_heat
level:"{{ 'active' if trigger.to_state.attributes.get('error') else 'passive' }}"
# Notes: Native Shows share screen, volume, camera, snapshot and 07:00 update policies through satellite_devices.
# Notes: Updates run followers first; Joanna receives an exact enrolled device key and preserves its route.
# Notes: Kiosk attention sensors expose only their stable status attribute so recorder preserves problem transitions without heartbeat churn.
# Notes: The round Nest uses heartbeat/checksum health and bounded scene recovery; preview age is independent.
# Notes: Nearby daytime rain or lightning starts a five-minute NOAA radar view; the ambient banner offers daylight replay while the event remains active.
# Notes: Actionable Kitchen banner slides open one shared short-lived detail surface; camera events retain priority.
# Notes: Phyn detail can restore a closed main valve only after an explicit on-screen confirmation.
# Notes: Rheem faults outrank low-hot-water reminders and reuse the hot-water diagnostic detail surface.
# Notes: Verified Health Coach personal bests rotate for seven days; Bedroom safety and reminders retain priority.
# Notes: Shared parent/family phone pushes rotate for ten minutes; tags replace or clear matching entries.
# Notes: Shared parent/family phone pushes rotate for five minutes; tags replace or clear matching entries.
# Notes: The bounded notification feed uses sent timestamps, restores across restart, and prunes every 15 seconds.
# Notes: Joanna Voice processing plays one cached spoken acknowledgment on the requesting Show; final speech stays in Assist.
# Notes: joanna_voice_ack_url points to /local/joanna-voice/acknowledgement.mp3 on the local HA server.