# 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 27/28 EN 中文

Overcast compensation for a north-facing kitchen

A kitchen with no direct sun still swings from 120 lx to 900 lx as cloud cover changes. This recipe tops up the under-cabinet strip to keep the counter at 350 lx while the ceiling stays off all day.

protocol · zigbee latency · 5000 ms power · mains published · 2026-10-11 3 devices
Automation YAML light-overcast-compensation.yaml
# HearthNodes recipe 09 - overcast compensation
alias: "Light - north kitchen overcast top-up"
id: hn_light_overcast_topup
description: "Top up the under-cabinet strip to hold 350 lx, ceiling stays off"
mode: single
max_exceeded: silent

trigger:
  - platform: numeric_state
    entity_id: sensor.kitchen_counter_lux
    below: 300
    for: "00:00:30"
  - platform: numeric_state
    entity_id: sensor.kitchen_counter_lux
    above: 420
    for: "00:00:30"

variables:
  target_lx: 350
  measured: "{{ states('sensor.kitchen_counter_lux') | float(350) }}"
  strip_current: "{{ state_attr('light.under_cabinet_strip','brightness') | int(0) / 2.55 }}"
  raw: "{{ strip_current + ((target_lx - measured) / 6) }}"
  topup: "{{ [[raw, 10] | max, 85] | min | round(0) }}"

condition:
  - condition: state
    entity_id: binary_sensor.kitchen_occupied
    state: "on"
  - condition: time
    after: "06:30:00"
    before: "21:00:00"
  - condition: template
    value_template: >-
      {{ is_state('select.kitchen_task_scene','ambient')
         or is_state('select.kitchen_task_scene','off') }}

action:
  - service: light.turn_on
    target:
      entity_id: light.under_cabinet_strip
    data:
      brightness_pct: "{{ topup }}"
      color_temp_kelvin: 3000
      transition: 3
  - service: light.turn_off
    target:
      entity_id: light.kitchen_ceiling
  - choose:
      - conditions:
          - condition: numeric_state
            entity_id: sensor.kitchen_counter_lux
            below: 200
        sequence:
          - service: select.select_option
            target:
              entity_id: select.kitchen_task_scene
            data:
              option: counter

# The strip's own controller minimum (8 percent) is why the automation floor is
# 10 percent. Scene selection beats time-of-day here: dinner happens at different
# hours and the automation must not argue with a pressed button.
Trigger · state

sensor.kitchen_counter_lux

Counter illuminance drops below 300 lx or rises above 420 lx.

Overcast compensation for a north-facing kitchen topology

Step-by-step

  1. light.under_cabinet_stripSet the strip to the top-up level, clamped between 10 % and 85 %; above 85 % the strip is brighter than the ceiling and looks wrong. turn_on · brightness_pct {{ topup }} · color_temp_kelvin 3000
  2. light.kitchen_ceilingExplicitly hold the ceiling off during the day; this is what removes the biggest energy draw in the room. keep off
  3. select.kitchen_task_sceneBelow 200 lx, switch to the counter-weighted scene that puts more light on the work surface and less on the room. set 'counter' when lux < 200
Step-by-step
Shield the sensor from the window

A kitchen lux sensor that can see the window will read 800 lx on a bright day and dim the strip exactly when the counter is in shadow. Put a small baffle above the sensor so its view is the work surface and the cupboard doors, nothing else.

Cap the strip below the ceiling's brightness

An under-cabinet strip at 100 % creates harsh shadows down the cupboard faces and makes the room look badly lit even when the counter is bright. 85 % is the practical ceiling; the ceiling circuit takes over above that.

Do not fight the evening scene

This recipe must yield the moment someone selects the dinner or cleaning scene. Wire a scene-selector condition rather than a time condition, because dinner happens at different times and the automation should not be arguing with a person who just pressed a button.

Hardware

ModelProtocolLinkRole in this chain
LED strip on a Zigbee CCT controller (e.g. GLEDOPTO or Gledopto-class controller) zigbee wireless Under-cabinet strip; choose a controller that supports a real 1 % minimum so the 10 % floor is accurate.
Counter-height lux sensor zigbee wireless Mounted under the upper cabinets, pointing down at the work surface, shielded from the window so it reads task light.
Kitchen zone presence sensor zigbee wireless Non-imaging occupancy so the compensation only runs when someone can see the result.

When it fails

If the lux sensor is unavailable, the strip falls back to a fixed 45 % whenever the kitchen is occupied, which is the level that measured best across the widest range of conditions during commissioning. The ceiling stays off; if the person needs more light, the wall switch still controls the ceiling directly.

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.