Home Assistant configs, automations, and supporting scripts from
the home lab. Snippets get pulled out, scrubbed of secrets, and
published here as they become generally useful. Most examples assume
a Home Assistant install with the standard integrations enabled
(companion app, ONVIF, a TTS engine like Piper) but each guide calls
out its specific dependencies up front.
Targeting a different sensor brand, speaker, or camera vendor? Most
automations are retargetable by swapping entity_ids — the
underlying state-machine patterns hold regardless of the hardware.
Six-step walkthrough for building a self-hosted alarm on top of Home
Assistant's manual alarm_control_panel. Highlight-syntax YAML through-
out, retargetable to any sensor / speaker / light setup by swapping
entity_ids.
1. Panel — arm/disarm with code, three armed
modes (home / night / away), grace + entry
delays
2. Detection — perimeter (any armed mode), interior
(away only), separate bedroom rule so the
2am bathroom trip doesn't trip the siren
3. Response — entry-warning TTS, full alarm push,
loud local-Piper TTS, YouTube cast to a Nest
display, 30-cycle red-strobe lights
4. RGB feedback — bulbs flash blue/green/amber for
armed/disarmed/pending states using the
canonical scene-snapshot → flash →
restore pattern
5. PTZ tracking — mmWave or PIR sensor trips a zone
→ ONVIF preset move → settle →
snapshot → push notification with the
image attached. DRY lookup-table pattern so
new zones are a two-line edit
6. Privacy mode — five-layer stack engaged when phone
trackers or indoor sensors detect anyone home:
wall preset, hardware shutter, recording
switches off, RTSP stream stopped, tracking
automation disabled. Reverses on house empty
Plus auto-arm-at-midnight as a bonus, and a caveats block up front:
not a monitored alarm, depends on the network, only as loud as your
speakers, only as bright as your bulbs — with notes on when to
layer in a real Zigbee siren or a monitored service.
Home Assistant automation pair that handles "left the door open" alerts.
- Open alert — after the door's been open 30 seconds, fires a
phone push + Nest TTS announcement, then repeats every ~10 minutes
until it's closed.
- Closed announcement — plays a 'door closed' TTS when the
door is finally shut, suppressed for quick in/out trips (< 30s) so
the house doesn't narrate every time you grab the mail.
Generic enough to retarget at any contact sensor + notify target +
media_player by swapping three entity_ids. Drop it under
config/automations.yaml (or include via packages: as you
prefer).
Three companion YAML files for a Storz & Bickel Volcano Hybrid.
Each one is independent — drop in whichever you want, or use
all three together. They follow the Vapesuvius temperature ladder
(179 → 185 → 191 → 199 → 205 °C) for
sequential flavor / cannabinoid extraction.
Requires SavageNL/home-assistant-volcano-hybrid
(community HACS), which exposes the device as
climate.volcano_hybrid with a current_on_time sensor.
Retargetable to other vaporizers or heated-element devices by swapping
the climate entity and runtime sensor.
1. volcanoHybridProgress.yaml.txt — auto-progress automation
Walks the temperature ladder automatically over runtime: 179°
at 0 min, 185° at 5, 191° at 10, 199° at 15, 205° at
20. Pattern worth stealing: each trigger's id: is the
target temperature value, so the action plugs {{ trigger.id }}
straight into climate.set_temperature — adding a step
is a one-trigger edit. Reconnect-guard condition prevents BLE
dropouts from firing the next ladder step prematurely.
2. volcanoHybridStepTemp.yaml.txt — manual ±step (dimmer)
Snap-to-rung action snippets for a dimmer remote's up/down buttons.
Templates compare current temp against each rung in order so
pressing "up" from 188 goes to 191 (not 199), and "down" goes to
185 (not 179) — predictable regardless of where the auto-
progress automation has the temp sitting. Combined with on/off
short/long bindings (heat / fan), a 4-button dimmer becomes the
entire Volcano control surface. Hue-remote wiring example inline.
3. volcanoHybridFillBag.yaml.txt — bag-fill script
Push-button named script that runs the full bag-fill sequence end-
to-end: heater on → wait for heatup → 10s stabilize
→ fan on for ~41s → fan off → 10s top-off window
→ heater off. continue_on_timeout: true on the heatup
wait guards against BLE hang. Tuning notes inline for bag size and
temperature scaling. Callable as script.volcano_fill_bag.
Single vertical-stack card with everything you'd want on a Volcano
control surface: live current/target temperature header, the built-in
thermostat slider, ±step buttons that walk the Vapesuvius ladder,
fan-on / fan-off pair, a confirmation-guarded "Fill a bag" action, and
an auto-progress automation toggle row.
Built with stock Lovelace card types only — no HACS dependencies
required. Pasteable into any dashboard via the raw configuration editor
or the Manual card option in the UI. Status-header markdown reads
temperature_unit from the climate entity, so the card renders
correctly on both °C and °F installs without edits.
A custom mushroom-card variant lives in the same file
(commented out) for users running HACS who want a prettier surface
— same controls, glossier defaults.
Card rendered on a real HA install — status header, thermostat slider, ladder-step buttons, and fan controls. The fill-a-bag button sits below the visible area.
Hands-free control via Home Assistant's built-in Assist conversation
engine. Works through every Assist surface — mobile-app voice
button, dashboard mic, and voice satellites (M5Stack Atom Echo,
Wyoming, ESPHome voice satellites, HA Voice Preview Edition) —
all locally via Piper STT/TTS, no cloud round-trip.
Six intents
Fill a bag — "fill (a|the|my) bag"
Start session — "warm up the volcano" / "volcano on"
Stop — "volcano off" / "shut down the volcano"
Temp up — "step up the temp" / "volcano up" / "hotter"
Temp down — "step down" / "volcano down" / "cooler"
Status — "what's the volcano status" / "volcano temp"
The Status intent's response is a Jinja template that reads live state
back — useful pattern for any voice intent that needs to report a
sensor value out loud, not just trigger an action.
Two parts: an intent_script: block in configuration.yaml
that declares what each intent does, and a sentences file at
config/custom_sentences/en/volcano.yaml that maps natural-
language phrases to those intents. Example sentences are commented in
the file so users can pick which to enable.
[ Blueprints ]
Reusable Home Assistant blueprints — templates with named inputs
that you instantiate per device or per scenario instead of hand-rolling
a new automation each time. Import once via Settings →
Automations & Scenes → Blueprints, then create as many
automations from each as you need.
Reusable blueprint for "left in issue state" alerts on binary sensors
and binary_sensor groups. The blueprint handles all the wiring
(trigger, debounce, repeat loop, auto-clear, custom actions) and you
supply the specifics per instance — one automation per door,
window, motion sensor, or group.
Configurable inputsSensor
- Trigger entity (binary_sensor or binary_sensor group)
- Friendly name (used in messages as {{ name }})
- Issue state (on or off)
- Duration before alert fires
- Optional gating condition checked AFTER the duration trigger,
BEFORE the notification goes out
Auto-clear
- Clear notification when sensor returns to non-issue state
- Configurable post-clear delay so quick flap-and-recover
doesn't fire/clear in rapid succession
Notification
- Notify services (comma-separated — phone + tablet + watch)
- Title, message, icon, color (Android)
- iOS interruption level (passive / active / time-sensitive /
critical)
- Optional persistent notification in the HA frontend
- Optional repeat reminders with configurable cadence
Custom actions
- Run anything when entering the issue state (flash lights,
activate a scene, log to a notebook)
- Run anything when leaving the issue state (separate action)
Pattern worth stealing — notify_services is a
comma-separated text input parsed into a list at runtime, then iterated
with repeat.for_each. Lets you target N notify endpoints from a
single blueprint without exposing N separate dropdowns. The
notif_tag template (bp_issue_<entity_id>) makes
each instance's notifications independently dismissable.
InstallOption A — HA UI: Settings → Automations &
Scenes → Blueprints → Import Blueprint → paste this
file's URL.
Option B — Drop the YAML at
config/blueprints/automation/<you>/contactSensorIssueState.yaml
(note: .yaml not .yaml.txt) and reload blueprints.
[ Snippets ]
Smaller standalone automations and templates that don't warrant
their own page yet — one-liners, helper sensors, and YAML
patterns extracted from larger setups. Most live as anchor sections
inside other guides (the alarm system page has a half-dozen of these
inline). This section will fill out as standalone snippets get
pulled out for direct linking.