[ Home Automation ]

[ Alarm & Security | Doors & Windows | Devices & Appliances | Blueprints | Snippets ]
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.

[ Alarm & Security ]

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.

[ Doors & Windows ]

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).

[ Devices & Appliances ]

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.

Volcano Hybrid Lovelace card rendered on a real install — Volcano Hybrid header, current/target temperature display, heating + fan-off status, thermostat slider showing 367°F, ±step buttons, fan on/off buttons, top of fill-a-bag button visible at bottom
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 inputs

  Sensor
    - 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 stealingnotify_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.

Install

  Option 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.

[ See Also ]