# Analytics snippet placeholder — HearthNodes (gatherer.top) # Paste the measurement snippet here (server.js inlines any content that contains # a markup tag into on every page). No GA4 property is assigned to this # site yet, so leave this file as comments only and the build emits no tracking # code.
HearthNodesgatherer.top live 11/28 EN 中文

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.

protocol · zwave latency · 30000 ms power · mains published · 2026-09-07 3 devices
Automation YAML light-twilight-path-lights.yaml
# 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.

Twilight path lighting keyed to sun elevation, not a clock topology

Step-by-step

  1. 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
  2. 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
  3. 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
  4. 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
Step-by-step
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

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

Recipes on the same trigger source

Terms Informational only. These recipes control mains electricity, water and physical access. You are responsible for local electrical and plumbing codes, for fusing and isolation, and for testing every fail-safe yourself. Nothing here is professional engineering, legal or safety advice.