---
title: Gentle Wake Routine
area: automation
tags: [automation, wake, smart-home, wiz, bluetooth, wonderboom, hermes-cron]
created: 2026-05-29
updated: 2026-05-29
status: active
related: [[Cron Jobs]], [[Service Catalog]], [[Architecture - Automation Flow]]
---

# Gentle Wake Routine

Daily bedroom wake-up automation managed by Hermes cron. Goal: wake gently with a warm WiZ light ramp first, then low-volume music on the Wonderboom after the room has started brightening.

## Current behavior

### Weekdays

| Time | Action |
|---|---|
| 06:30 | Bedroom WiZ bulb on, very warm, 3% |
| 06:40 | Ramp to 20% |
| 06:50 | Ramp to 55% |
| 07:00 | Start gentle ambient music on Wonderboom, low volume |
| 07:10 | Raise light to 85%, music slightly louder |
| 07:30 | Morning mode: brighter light, morning music profile |

### Weekends

Same pattern shifted later:

| Time | Action |
|---|---|
| 08:30 | Bedroom WiZ bulb on, very warm, 3% |
| 08:40 | Ramp to 20% |
| 08:50 | Ramp to 55% |
| 09:00 | Start gentle ambient music on Wonderboom, low volume |
| 09:10 | Raise light to 85%, music slightly louder |
| 09:30 | Morning mode: brighter light, morning music profile |

## Hardware / targets

- Bedroom WiZ bulb: `192.168.153.234`
- Wonderboom 4 Bluetooth MAC: `68:59:32:F3:08:F8`
- Wonderboom PipeWire/Pulse sink: `bluez_output.68_59_32_F3_08_F8.1`
- Audio source: VLC via `day_mood_audio.py`, routed to the Wonderboom sink.

## Scripts

- Main controller: `~/.hermes/scripts/wake_gently.py`
- Quiet cron wrapper: `~/.hermes/scripts/wake_gently_quiet.sh`
- Light protocol: direct WiZ UDP `setPilot` to bedroom bulb; see [[Smart Home Lighting Control]] for the Home Assistant vs direct-LAN split.
- Audio backend: `~/.hermes/scripts/day_mood_audio.py --audio-sink bluez_output.68_59_32_F3_08_F8.1`
- Idempotence/state file: `~/.hermes/state/wake_gently.json`

The script chooses the current step from the wall-clock offset relative to the configured wake time. Each named step runs once per date unless `--force` is used.

## Active Hermes cron jobs

| Job | Schedule |
|---|---|
| `weekday-gentle-wake-bedroom-wiz-wonderboom` | `30,40,50 6 * * 1-5` |
| `weekday-gentle-wake-music-and-morning` | `0,10,30 7 * * 1-5` |
| `weekend-gentle-wake-bedroom-wiz-wonderboom` | `30,40,50 8 * * 6,0` |
| `weekend-gentle-wake-music-and-morning` | `0,10,30 9 * * 6,0` |

Healthy cron runs use the quiet wrapper and should be silent. Non-empty stdout means something needs attention.

## Failure behavior

- If the Wonderboom sink is already present, music starts there.
- If missing, the script tries `bluetoothctl connect 68:59:32:F3:08:F8`.
- If the Wonderboom still cannot be reached, the light step still runs and music is skipped with diagnostic output.
- If the bedroom bulb fails to respond to UDP, the cron run should produce an error.

## Manual checks

Dry-run weekday start:

```bash
~/.hermes/scripts/wake_gently.py --dry-run --now '2026-06-01T06:30:00-07:00'
```

Dry-run music step:

```bash
~/.hermes/scripts/wake_gently.py --dry-run --now '2026-06-01T07:00:00-07:00'
```

Run current step manually and print details:

```bash
~/.hermes/scripts/wake_gently.py
```

Re-apply current step even if already marked done today:

```bash
~/.hermes/scripts/wake_gently.py --force
```

Check Wonderboom sink:

```bash
pactl list short sinks | grep bluez_output.68_59_32_F3_08_F8.1
```

Stop owned VLC audio if needed:

```bash
~/.hermes/scripts/day_mood_audio.py --stop --json
```

## Tuning notes

- To change wake times, edit `wake_time_for()` in `~/.hermes/scripts/wake_gently.py` and update the four Hermes cron schedules to match.
- To change brightness/color temperature, edit the `STEPS` list in `wake_gently.py`.
- To change music, tune the profile/volume entries in `STEPS`, or update stream/profile mapping in `day_mood_audio.py`.
- The current setup intentionally uses Hermes/local Bluetooth because Home Assistant sees the phone only as sensors/device-tracker and has no `media_player` entity for the phone or Wonderboom.
