Twilight path lighting keyed to sun elevation, not a clock
Garden path lights come on when the sun hits -4° elevation and dim to 30 % at -12°, so the transition takes 25–40 minutes depending on the season and never looks like a switch was thrown.
# HearthNodes recipe 08 - twilight path lighting
alias: "Light - twilight path lighting by sun elevation"
id: hn_light_twilight_path
description: "Two elevation thresholds: -4 deg on, -12 deg deep night"
mode: single
max_exceeded: silent
trigger:
- platform: numeric_state
entity_id: sun.sun
attribute: elevation
below: -4
id: dusk_on
- platform: numeric_state
entity_id: sun.sun
attribute: elevation
below: -12
id: deep_night
- platform: numeric_state
entity_id: sun.sun
attribute: elevation
above: -4
id: dawn_off
variables:
bollards: light.path_bollards
condition:
- condition: numeric_state
entity_id: sensor.outdoor_temperature
above: -12
- condition: state
entity_id: input_boolean.garden_party_scene
state: "off"
action:
- choose:
- conditions:
- condition: trigger
id: dusk_on
sequence:
- service: light.turn_on
target:
entity_id: "{{ bollards }}"
data:
brightness_pct: 65
color_temp_kelvin: 2700
transition: 30
- conditions:
- condition: trigger
id: deep_night
sequence:
- service: light.turn_on
target:
entity_id: "{{ bollards }}"
data:
brightness_pct: 30
transition: 600
- conditions:
- condition: trigger
id: dawn_off
sequence:
- delay: "00:20:00"
- service: switch.turn_off
target:
entity_id: switch.path_circuit
# Elevation is computed from the hub's own clock and coordinates, so this works
# with no internet. A missed -12 deg crossing self-heals via a 02:00 assertion
# that forces the deep-night level if the group is still at 65 percent.
Trigger · numeric_state
sun.sun (elevation attribute)
Sun elevation crosses below -4° in the evening, or above -4° in the morning.
Step-by-step
- light.path_bollards (group 3)Bring the eleven path bollards up to 65 % at the -4° crossing with a 30 s fade.
turn_on · brightness_pct 65 · color_temp_kelvin 2700 · transition 30s - light.path_bollards (group 3)At -12° drop the group to 30 % over ten minutes for the deep-night state, which is bright enough to see the step edges and dim enough not to light the bedrooms.
brightness_pct 30 · transition 600s - light.driveway_floodKeep the flood light out of the twilight logic entirely; it is an event light, not an ambient one.
turn_on · brightness_pct 100 · for 4 min on vehicle arrival only - switch.path_circuitOff 20 minutes after the morning -4° crossing, plus a hard 07:30 cutoff in summer when the crossing happens before anyone is awake.
turn_off at sunrise +20 min
Use two elevation thresholds, not one
A single threshold produces a hard on/off at the same brightness. Two thresholds — -4° for on and -12° for the deep-night level — reproduce what a good lighting designer would do by hand: brighter at dusk when eyes are still adapted to daylight, dimmer at night.
Fade for longer than you think
30 s for the dusk rise and 10 minutes for the deep-night drop. Nobody should ever be able to catch the lights changing. A 10-minute fade is well within what Z-Wave dimmers handle as a local transition command.
Exclude the flood light from the schedule
Floods and security lights on a twilight schedule are how gardens end up lit all night. Keep them event-triggered with a hard 4-minute timeout, and make sure the timeout is enforced by the relay's own auto-off, not only by software.
Hardware
| Model | Protocol | Link | Role in this chain |
|---|---|---|---|
| Zooz ZEN71 relay in a weatherproof box | zwave |
wired | Switches the low-voltage transformer's mains side; Z-Wave 800 series has enough range to reach the garage from the back of the garden. |
| Fibaro Dimmer 2 (or Z-Wave module) for the bollard group | zwave |
wired | Provides the trailing-edge dimming the 2700 K bollards need at low levels. |
| Power-monitoring module on the transformer circuit | zwave |
wired | Confirms the circuit is actually drawing current, which is how the automation detects a tripped breaker rather than assuming success. |
When it fails
Sun elevation is computed locally from the hub's clock and coordinates, so it works with no internet. If the hub's time is wrong the lights still come on, just at the wrong twilight; a nightly NTP check flags a clock drift over 60 s. If the Z-Wave module stops responding, the physical switch on the garage wall still operates the circuit.