šŸŒ”ļø EN 16798-1 Smart Setpoint Blueprint

:thermometer: EN 16798-1 Smart Setpoint Blueprint (v5.2.0) — ā€œFire-and-Forgetā€ Room Setpoints

Stop running static heating schedules. This blueprint computes a dynamic target setpoint for each room using EN 16798-1 comfort categories (I–III), ASR A3.5-inspired minimums, and practical building-physics safety logic (window priority, mold/dewpoint guards, radiant correction).

It enforces your setpoint every 15 minutes and reacts instantly to real-world events like window open, presence, sleep, and manual thermostat changes—without fighting the user.

Highlights

  • :white_check_mark: Room profiles mapped to EN 16798-1 Categories I–III
  • :white_check_mark: Optional Adaptive Comfort band using an external Trm input (best with a smoothed/running-mean sensor)
  • :white_check_mark: Window = absolute priority (OFF / preset / frost fallback)
  • :white_check_mark: Manual override friendly (grace period + optional ā€œhold until ā€¦ā€)
  • :white_check_mark: Optional Smart Learning (learns your preferences and shifts the curve)
  • :white_check_mark: Optional Ramp Limiting (reduces valve movement, saves Zigbee/Thread battery)
  • :white_check_mark: Works with systems where OFF isn’t supported (KNX/Tado-style preset fallback)

:warning: Celsius only (°C). If your thermostat reports °F, the automation stops and logs a critical message.

:inbox_tray: Install / Import

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

Source / Version

  • Version: 5.2.0
  • Min Home Assistant: 2024.10.0
  • Author: Tobias Paul

:arrow_right: Full guide & configuration walkthrough in Post 2/2 below.

EN 16798-1 Smart Setpoint Blueprint (v5.2.0) — Full Guide & Configuration

This post explains how the blueprint works internally, how to configure it quickly, and how to troubleshoot common issues.

Disclaimer: This blueprint is inspired by EN 16798-1 comfort categories and common building automation safety patterns (window shut-off, demand reduction, minimum limits). It is not a certified implementation and not legal advice.


1) What the Blueprint actually does

Instead of time-based schedules (ā€œ8:00 → 21 °Cā€), the automation computes a single ā€œtarget_to_sendā€ and applies it to your thermostat:

  • every 15 minutes, and
  • instantly when certain sensors change (window / occupancy / sleep / pre-heat), and
  • when manual setpoint changes happen (grace period + optional hold + learning).

2) Triggers (when it runs)

  • Home Assistant start
  • Every 15 minutes (enforcement interval)
  • Manual setpoint change (immediate + debounced ā€œsettledā€ trigger)
  • Optional instant triggers:
    • window open / close
    • occupancy on / off
    • pre-heat on / off
    • sleep on / off

3) Decision Flow (priority order)

Trigger
  |
  |-- Device available? (not unknown/unavailable) -> otherwise stop
  |-- Unit check: °C required -> otherwise stop + Logbook
  |-- Echo filter: ignore our own write-backs -> otherwise stop
  |
  |-- [1] Window open?
  |      |-- If configured preset exists -> set preset -> STOP
  |      |-- Else if hvac_mode "off" supported -> set OFF -> STOP
  |      |-- Else -> set minimum temp (frost) -> STOP
  |
  |-- [2] Window close trigger?
  |      |-- If we were in the window preset -> reset to a safe preset
  |
  |-- [3] Manual change?
  |      |-- Grace period (immediate) -> STOP
  |      |-- Optional persistent hold -> arm timer
  |      |-- Debounced trigger -> optional learning update
  |
  |-- [4] Core calculation:
  |      profile base -> comfort band (static/adaptive) -> learning offset
  |      -> presence/sleep/eco shifts -> radiant correction
  |      -> frost/mold/dewpoint limits -> clamp + step rounding -> optional ramp
  |
  `-- [5] Apply:
         set hvac mode (if needed)
         enforce preset mode (optional)
         set temperature (only if change >= target step)

4) Quick Start (recommended config)

Required

  • Climate Device (climate_entity)
  • Room Category (room_type)

Strongly recommended

  • Window sensor (window_sensor)
  • Outdoor/Trm sensor (trm_sensor)
  • Humidity sensor (humidity_sensor) to enable mold/dewpoint protection

Nice to have

  • Occupancy (occupancy_sensor)
  • Sleep (sleep_sensor)
  • Pre-Heat / Forced Comfort (pre_heat_sensor)
  • Operative/Globe temperature (operative_temp_sensor)
  • Helpers for Learning (input_number) and Manual Hold (input_datetime)

5) Room Profiles (base setpoints)

These are the base targets before comfort bands, offsets, and safety floors apply:

Room Profile Base Setpoint EN Category
Living Room / Office 21.5 °C II
Children’s Room 22.0 °C II
Bedroom 18.5 °C III
Kitchen 20.5 °C II
Bathroom 22.5 °C I
WC / Restroom Office 21.0 °C II
Hallway / Utility 17.5 °C III
Workshop 17.0 °C III
Storage / Frost Protection 16.0 °C III

6) Comfort Band: Static vs. Adaptive

A) Static comfort band

If adaptive is not applicable, the blueprint uses fixed category bands depending on the season (heating/cooling/transition).

B) Adaptive comfort band (optional)

Adaptive is active only if:

  • Trm is numeric and within 10–30 °C
  • If Trm entity is weather.*, band shifting is disabled by default to avoid jumps
    (enable Allow Adaptive from Weather if you really want it)

Neutral temperature:

  • T_neutral = 0.33 * Trm + 18.8 (rounded to 0.1)

Band width by category:

  • Category I: ±2 K
  • Category II: ±3 K
  • Category III: ±4 K

Tip: For stable behavior, feed a smoothed sensor (true running mean) into trm_sensor.


7) Season logic & Summer lockout

Season derived from Trm:

  • Trm < 10 °C → heating
  • Trm > 15 °C → cooling
  • 10–15 °C → transition
  • If Trm missing → Quick Start behavior based on thermostat mode/action

Transition Season Policy

  • Bias Heating / Bias Cooling / Neutral / Auto

Summer Cut-Off (Heating Limit)

  • If Trm exceeds summer_lock_trm (default 19 °C), heating can be shut down (OFF)
  • If the thermostat does not support OFF, the blueprint falls back to the configured minimum temperature

8) Presence / Eco / Sleep behavior

Starting from the comfort target (already clamped into the chosen band):

Absent (Eco)

  • Shift by eco_shift_k (default 2.0 K)
    • heating: lower target
    • cooling: raise target

Sleep

  • Shift by sleep_shift_k (default 2.0 K)
    • heating: always cooler
    • cooling: configurable
      • OFF (default): warmer / less cooling (energy saving)
      • ON: cooler (comfort)

Allow Deep Eco

  • Enabled (default): Eco may drop below strict band limits
  • Disabled: Eco stays within the comfort band

9) Radiant correction (Operative / Globe sensor)

If you provide an operative temperature sensor:

  • rad_offset = clamp(air_temp - operative_temp, -3 … +3)
  • target += rad_offset

This helps compensate for cold/warm surfaces (radiant discomfort).


10) Safety logic (Frost / Mold / Dewpoint)

Frost floor (heating)

  • minimum_limit_temp (default 16 °C)

Mold guard (heating only)

  • If RH > mold_protection_rh (default 65%), minimum becomes 18 °C

Dewpoint guard (cooling only, requires humidity sensor)

The blueprint uses a simple approximation:

  • dp ā‰ˆ current_temp - ((100 - RH) / 5)
  • enforces target >= dp + 2 °C

11) Manual Override (don’t fight the user)

Grace period (always)

Manual setpoint changes immediately stop enforcement. Periodic enforcement also respects recent user interaction.

Persistent ā€œHold until ā€¦ā€ (optional)

If Override Behavior = Keep until...:

  • Provide an input_datetime helper (must have date & time)
  • Any manual change arms the hold for manual_hold_minutes (default 75 minutes)
  • While active, the automation will not overwrite setpoints (except window-close wake logic)

Detection sensitivity

  • Strict: dashboard/app changes only (requires user_id context)
  • Lenient (default): best-effort detection of physical/hardware changes

12) Smart Learning (optional)

If enabled and a learning helper is set:

  • On the debounced ā€œsettledā€ manual change trigger, the blueprint adjusts a learned offset
  • Step size: learn_step_k (default 0.5 K)
  • Maximum learned offset: learn_max_k (default 1.0 K)
  • Additional safety: learning is always clamped to the current comfort band

Best practice: Put the helper on your dashboard so you can reset it to 0.0 anytime.


13) Ramp Limiting (optional)

If enabled, setpoint changes happen gradually:

  • Heating ramp speed: ramp_up_kph (°C/h)
  • Cooling ramp speed: ramp_down_kph (°C/h)

This reduces valve movement and can improve battery life, but the system will feel ā€œslowerā€ to react.


14) Recommended Helpers (how to create)

A) Learning Offset Helper (input_number)

  • Settings → Devices & Services → Helpers → Number
  • Example:
    • Name: Heating Learn Offset
    • Min: -3
    • Max: +3
    • Step: 0.1

B) Manual Hold Helper (input_datetime)

  • Helpers → Date and/or Time
  • Enable Date & Time (not date-only)

15) Suggested minimal dashboard

Entities card:

  • Thermostat (climate)
  • Window sensor
  • Occupancy / Sleep
  • Humidity
  • Trm sensor
  • Learn Offset (input_number)
  • Manual Hold until (input_datetime)

Buttons (optional):

  • Reset Learn Offset → set helper to 0
  • Force Comfort (Pre-Heat) toggle

16) Troubleshooting

ā€œIt keeps overwriting my manual setpoint.ā€

  • Enable Keep until… and provide the input_datetime helper
  • Use Lenient detection if you adjust the thermostat physically

ā€œAdaptive comfort jumps around.ā€

  • Don’t use weather.* for band shifting unless you really want it
  • Feed a smoothed / averaged sensor as Trm

ā€œThermostat won’t turn OFF.ā€

  • Some devices don’t support hvac_mode: off → use window_open_preset or rely on min temp fallback

ā€œToo many tiny setpoint changes.ā€

  • Enable Ramp Limiting
  • Check your thermostat’s target_temp_step