Home Assistant projects
All projects

Heating Card

Lovelace card · Climate & weather
v1.1.0 · Nov 13, 2026 HA 2024.8.0+ Marketplace

Thermostats, pilot wire radiators and weekly schedules, zone by zone.

A card for the heating of the home, zone by zone: thermostats and radiator valves with their presets, pilot wire radiators with their orders, and the week of a schedule helper. A mini card and an overview of the whole home, floor by floor, come with it.

Highlights

  • Zones found by area, as text tabs, a flickering flame on a zone that heats
  • Animated thermostat with target, presets, boost and what it really does
  • Pilot wire radiators: comfort, eco, frost protection, off, comfort −1 / −2
  • Weekly schedule of a schedule helper, today highlighted with a "now" line
  • Valve opening, battery, humidity and window open alerts
  • Overview card of the whole home, floor by floor
  • Mini card with a detail button showing the full card

Works with

Cards

heating-cardheating-mini-cardheating-overview-card
type: custom:heating-card

Install

  1. 1Open the repository in the Marketplace with the Add to Marketplace button above, or addgithub.com/juju35/ha-heating-card as a custom repository (category Dashboard).
  2. 2Download it from the Marketplace.
  3. 3Reload the browser and add the card from the dashboard editor.

Documentation

From the README

Features

Features

  • Three cards: a full Heating Card (custom:heating-card), a compact Heating Mini Card (custom:heating-mini-card) and a Heating Overview Card (custom:heating-overview-card) for the whole home
  • Several zones, as text tabs under the header (the selected one underlined in its color, a flickering flame on a zone that heats); found automatically by area or set with zones
  • Thermostat (from the thermostat card of ha-climate-air-card): animated illustration (round wall thermostat, column radiator or radiator valve, picked from the device model and name), room temperature and target, heating modes (Heat, Auto) and a power button
  • Target: − / + buttons sent once the taps stop, a scale from the entity's minimum to its maximum with the room temperature as a tick, keyboard spin button (arrows, Page Up / Down, Home / End), buttons off at the limits, a low / high range for thermostats that set one
  • What it does from hvac_action (Heating, Preheating, Idle, Off, Defrosting): the flame flickers and warm air rises only while it really heats; Boost doubles the animation speed, in red
  • Presets as segmented buttons (Comfort, Eco, Away, Boost, Frost protection, Comfort −1 / −2…), a dropdown when there are more than seven; a tap on the selected one goes back to manual
  • The fan mode, swing mode and target humidity of the thermostats that have them, as dropdowns
  • Pilot wire radiators: one row of orders per radiator (select or switch relay), each order in its color (−1 / −2 stay on the icon-only buttons of comfort −1 / −2); the radiator glows on comfort and breathes on eco
  • Weekly schedule: the week of a schedule helper as seven rows of time slots, today highlighted with a pulsing "now" line, and its state (On until 22:00)
  • Valve opening, battery, humidity, outdoor temperature and power chips; Window open and Low battery (15 % or less) alerts; the thermostat's other switches (child lock, window detection…) as option toggles
  • The header icon and status pill follow the whole home: heating, idle, off or unavailable; the subtitle counts the zones heating
  • Mini card: the overview of the zones, one row each, a click unfolding the full card on that zone; on one zone, the compact thermostat with − / + and power. Detail button at the top right; a click anywhere outside the card brings the compact view back
  • Overview card: the heating of the whole home at a glance, floor by floor (one tile per zone: state, room temperature and target, preset, pilot wire radiators, schedule, alerts), a summary (zones heating, average room temperature from the coldest to the warmest zone, average target, open windows, low batteries, devices offline, pilot wire radiators per order) and quick actions for every zone (Comfort, Eco, Frost protection, Away, Off) confirmed at the top of the card; a tap on a zone unfolds the full card on it. The zones that heat glow, their flame flickers and heat rises over them; filters by area, floor and entity, sorts, compact tiles
  • Collapsible sections (the schedule folded by default), folded back on a click elsewhere
  • Sections view: the full card and the overview take 12 columns and at least 6, the mini card 6; narrow widths get their own layout (see Screenshots)
  • Click a chip, the illustration or the schedule state to open its Home Assistant history (more-info dialog)
  • Visual editor in the dashboard UI for every card, zones and overview filters included (no YAML needed)
  • Light and dark mode, English, French, German, Spanish, Serbian (Cyrillic and Latin), Italian, Dutch, European Portuguese, Polish, Romanian, Danish, Swedish, Bulgarian, Russian, Ukrainian, Hungarian, Slovak, Czech, Slovenian, Latvian and Greek
  • Single file, no external dependency, the illustrations and icons are embedded

Supported integrations

Supported integrations

Entities Integrations (examples) What the cards show
climate that heats and cannot cool, dry or only blow Netatmo, tado°, Zigbee2MQTT and ZHA radiator valves and thermostats, Generic Thermostat, Heatzy Thermostat: target, modes, presets, hvac_action, and the valve, window and battery sensors of its device
select offering pilot wire orders Zigbee2MQTT / ZHA pilot wire modules (Nodon SIN-4-FP-21, Legrand cable outlet…), any select whose options are pilot wire orders Pilot wire orders, comfort / comfort −1 / comfort −2 / eco / frost protection / off
switch A relay on the pilot wire (with or without a diode) The two orders set with switch_on / switch_off
schedule Home Assistant's Schedule helper Weekly plan and current state
sensor Any temperature and humidity sensor Room temperature and humidity of a zone without thermostat

Pilot wire orders are recognized whatever the integration spells them: comfort, comfort_-1, comfort-2, eco, frost_protection, off, and French names (Confort, Hors-gel, Arrêt…). Air conditioners and heat pumps that can cool are left out (see ha-climate-air-card).

Prerequisites

Prerequisites

Home Assistant 2024.8 or later. The week of every schedule is read with the schedule.get_schedule action (Home Assistant 2025.1 or later); on earlier versions, only the schedules created in the UI are drawn.

Configuration

Configuration

Card types#

Card Type
Heating Card custom:heating-card
Heating Mini Card custom:heating-mini-card
Heating Overview Card custom:heating-overview-card

Visual editor#

Edit a dashboard, click Add card and search for Heating Card, Heating Mini Card or Heating Overview Card. Without zones, every heating thermostat and pilot wire radiator is found and grouped by area. Open Add a zone to set your own: name, thermostat, pilot wire radiators, room temperature and humidity sensors, schedule, window sensor, illustration and, for a relay, the orders it sends. The overview's editor sets the areas and floors to show or leave out, the entities to add or leave out, the grouping, the sort, what a tap on a zone does, the parts shown and the quick actions offered. The preview updates live, and options left at their default are kept out of the generated YAML.

Minimal#

type: custom:heating-card
type: custom:heating-mini-card
type: custom:heating-overview-card

One thermostat:

type: custom:heating-card
entity: climate.living_room
schedule: schedule.living_room_heating

Coming from ha-climate-air-card#

The thermostat card of ha-climate-air-card lives on here: replace custom:climate-air-thermostat-card with custom:heating-card and custom:climate-air-thermostat-mini-card with custom:heating-mini-card. Its options keep their names and meaning: entity, name, icon, illustration, entities, show_title, show_subtitle, show_controls, show_sensors, show_alerts, zoom and language.

type: custom:heating-card
entity: climate.bedroom_radiator
illustration: valve

Since ha-climate-air-card 2.0.0, its custom:climate-air-overview-card shows air conditioners, purifiers and fans only: the thermostats moved to custom:heating-overview-card, which shows them by zone (an area's thermostat, pilot wire radiators and schedule together), floor by floor. What the old overview showed of a thermostat is here: what it does (Heating, Idle, Off), its target, the room temperature, the Window open and Low battery alerts, the flickering flame while it heats, a tap unfolding its full card, and the detail button. These options keep their name and meaning: title, columns, show_title, show_alerts, include, exclude and language. zoom still shows or hides the detail button, which now switches to the full card. group_by: area needs no option any more (a zone is an area; group_by: floor, the default, groups the areas by floor); show_all neither (every zone is always shown, the summary tells which ones heat); the tiles show the zone's state icon, so icon, icons, illustrations and devices are not used.

type: custom:heating-overview-card
exclude:
  - climate.garage_frost_guard

Full options#

type: custom:heating-card
title: Heating
zones:
  - name: Living room
    entity: climate.living_room_thermostat
    pilot_wire:
      - select.living_room_radiator_pilot_wire_mode
    schedule: schedule.living_room_heating
  - name: Bedroom
    entity: climate.bedroom_radiator_valve
    illustration: valve
    window: binary_sensor.bedroom_window
  - name: Bathroom
    pilot_wire: select.towel_radiator_mode
    temperature: sensor.bathroom_temperature
    humidity: sensor.bathroom_humidity
  - name: Hallway
    pilot_wire: switch.hallway_radiator_relay
    switch_on: eco
    switch_off: comfort
show_title: true
show_subtitle: true
show_controls: true
show_sensors: true
show_alerts: true
show_pilot_wire: true
show_schedule: true
collapsed:
  - schedule
language: en
type: custom:heating-mini-card
zoom: true
type: custom:heating-overview-card
title: Home heating
floors:
  - ground_floor
  - first_floor
exclude_areas:
  - garage
include:
  - climate.hidden_radiator_valve
exclude:
  - select.attic_radiator_pilot_wire_mode
group_by: floor
sort: state
columns: 2
compact: false
detail: card
show_title: true
show_subtitle: true
show_summary: true
show_actions: true
show_alerts: true
show_pilot_wire: true
show_schedule: true
actions:
  - comfort
  - eco
  - frost
  - away
zoom: true
language: en

Options reference#

Option Card Default Description
zones All Auto The zones (see Zone options); a zone may also be a bare entity id: a thermostat, or a pilot wire select / switch. Without zones, entity or pilot_wire, every zone is found by area
entity, pilot_wire, … Full, Mini — One zone set at the top level: every zone option works there too
title All Heating, or the zone name with one zone Card title (name is accepted too)
show_title All true Show the title in the header (e.g. false under a section heading of your own)
show_subtitle All true Show the subtitle (zones heating, or the zone and its preset)
show_controls All true Modes, power, target, presets and option toggles (the overview's full card)
show_sensors All true Valve, battery, humidity, outdoor temperature and power chips (the overview's full card)
show_alerts All true Window open and Low battery alerts (and Device offline on the overview)
show_pilot_wire Full, Overview true Pilot wire section; on the overview, the pilot wire orders of the summary and of the tiles
show_schedule Full, Overview true Weekly schedule section; on the overview, the schedule state of the tiles
collapsed Full [schedule] Sections folded at first: pilot_wire, schedule
zoom Mini, Overview true Detail button at the top right that unfolds the full card (a click elsewhere folds it back)
language All Auto Force language: en, fr, de, es, sr, sr-Latn, it, nl, pt, pl, ro, da, sv, bg, ru, uk, hu, sk, cs, sl, lv or el (auto-detects from HA settings; pt-BR gets European Portuguese)

Overview options#

Option Default Description
areas Every area Only the zones of these areas (area ids)
exclude_areas — Areas left out
floors Every floor Only the zones of these floors (floor ids)
exclude_floors — Floors left out
include — Thermostats (climate) or pilot wire radiators (select / switch) not found on their own (a hidden entity, say): added to their area's zone, else as a zone of their own
exclude — Entities left out: a thermostat (its zone goes too, unless it has pilot wire radiators, which then show with the area's room temperature) or a pilot wire radiator
group_by floor floor: the zones under their floor's name (in the order of the floor levels, the areas without floor last, under Other areas); none: all together. Without floors in Home Assistant, the zones are not grouped
sort area Order of the zones within a floor: area (the area registry's), name, temperature (coldest first) or state (alerts, then heating, on, off, offline)
columns Auto Number of tile columns (1 to 6); by default as many as fit, 150 px each at least
compact false One line per zone: state icon, name and room temperature (an alert shows as a dot on the icon)
detail card What a tap on a zone does: card unfolds the full card on that zone (back to the overview with the detail button or a click elsewhere), more-info opens the more-info dialog of its thermostat (or first pilot wire radiator), none nothing
show_summary true The summary: zones heating, average room temperature (coldest – warmest), average target, then the open windows, low batteries, devices offline and pilot wire radiators per order
show_actions true The quick actions for every zone
actions [comfort, eco, frost, away] The quick actions offered: comfort, eco, frost, away, off (see Overview)

The zones option works on the overview too: its zones are then the ones shown, grouped by the floor of their area.

Zone options#

Option Default Description
name Area or device name Zone name (tab and row)
entity — The thermostat (climate)
pilot_wire — Pilot wire radiators: one entity or a list (select or switch)
temperature / humidity The thermostat's, or the area's sensors (automatic zones) Room temperature and humidity sensors
schedule The area's schedule helper (automatic zones) A schedule helper drawn as the zone's week
window The device's open-window sensor binary_sensor raising the Window open alert
illustration auto dial (round wall thermostat), radiator or valve (radiator valve); auto picks one from the device model and name, radiator for a pilot wire zone
icon — An mdi: icon instead of the illustration
switch_on / switch_off comfort / off The orders a switch relay sends when on and off: comfort, comfort_1, comfort_2, eco, frost, off (e.g. eco / comfort for a relay with a diode)
entities Auto Override the sensors found on the thermostat's device: indoor_temp, outdoor_temp, humidity, power, valve, window, battery

How it works

How it works

Zones#

Without zones, the cards take every heating thermostat (a climate entity with a heating mode and no cooling, drying or fan-only mode) and every pilot wire select of the instance (except the selects of an air conditioner's or a fan's device), hidden entities left out, and group them by area, in the order of the area registry: an area's first thermostat, all its pilot wire radiators and its schedule helper make one zone; a zone without thermostat takes the area's temperature and humidity sensors. A second thermostat in an area (named after its device), and entities without an area, get a zone of their own.

Thermostats#

The sensors of a thermostat's device are found through the entity registry, by translation key, entity id (English, French, German and Spanish) or device class: room and outdoor temperature, humidity, power, valve opening, open-window detection and battery. A thermostat heats when its hvac_action says so (heating, preheating), or, without hvac_action, while its valve is open. The power button turns the thermostat off with climate.set_hvac_mode (climate.turn_off when it has no off mode) and back on with set_hvac_mode in the mode it had before the card turned it off (else Heat, Auto, then Heat/Cool), which every thermostat takes, unlike climate.turn_on. A target change is shown at once, sent 0.9 s after the last tap, and kept on screen until the entity reports it (10 s at most); a target still waiting when the card is removed is sent right away.

Pilot wire#

A select is a pilot wire radiator when at least three of its options are pilot wire orders. A button calls select.select_option with the select's own spelling of the order. A switch relay offers the two orders of switch_on and switch_off and calls switch.turn_on / turn_off.

Overview#

The overview takes the same zones as the other cards (found by area, or zones), less exclude, plus include, kept by areas / floors and their exclusions, and groups them by the floor of their area (hass.floors, Home Assistant 2024.4 or later). A zone heats as on the other cards (hvac_action, else its valve); the averages take every zone with a room temperature, and the thermostats that are on with a single target.

A quick action sets every zone it can reach, once confirmed:

Quick action Thermostat (on) Pilot wire radiator
comfort Preset comfort, else home, else none (manual) Comfort
eco Preset eco Eco
frost Preset frost protection, else away Frost protection
away Preset away, else frost protection, else eco Frost protection, else eco
off Turned off (set_hvac_mode: off, else climate.turn_off) Off

A thermostat turned off or offline is left as it is (only off reaches it, as already off), and so is a device without such a preset or order: the confirmation lists the zones left out. A quick action every zone it reaches has already taken shows as pressed.

Schedules#

The week is read once per state change of the schedule with schedule.get_schedule, else with the list of the schedule helpers created in the UI (matched by unique id or name), and shared by every card of the page. The "now" line moves every minute.

Support

Support

If you find this project useful, you can support its development:

Buy Me a Coffee

Changelog

CHANGELOG.md

1.1.0Nov 13, 2026Latest

Features

  • Heating Overview Card (custom:heating-overview-card): the heating of the whole home at a glance, taking over the thermostats of ha-climate-air-card's overview (removed there in 2.0.0).
    • The zones floor by floor (Home Assistant's floors, in the order of their levels, the areas without floor under Other areas), one tile each: state icon, room temperature and target, what it does and its preset, its pilot wire radiators in the color of their order, its schedule (On until 22:00), Window open, Low battery and Device offline alerts; each floor's heading counts its zones heating and gives its average temperature.
    • A summary: zones heating (and which), average room temperature from the coldest to the warmest zone, average target, then the open windows, low batteries, devices offline and the pilot wire radiators per order, a count each.
    • Quick actions for every zone: Comfort, Eco, Frost protection, Away and Off (actions), confirmed at the top of the card with the zones they set and those they cannot reach; each thermostat takes the closest preset it offers, each pilot wire radiator its own spelling of the order; a quick action every zone has already taken shows as pressed.
    • Animations: a zone that heats glows from the bottom of its tile, its flame flickers and heat rises over it (twice as fast and in red on Boost); a pilot wire radiator on comfort glows too, on eco its tile breathes; an alert's icon pulses.
    • A tap on a zone unfolds the full card on it (detail: card), or opens its more-info dialog (more-info); the detail button switches to the full card and back, and a click elsewhere brings the overview back.
    • Filters by area and floor (areas, exclude_areas, floors, exclude_floors) and entity (include, exclude), group_by, sort (area order, name, coldest first, alerts and heating first), columns, compact tiles, show_summary, show_actions, show_alerts, show_pilot_wire, show_schedule, zoom, and a visual editor for all of them.
    • Its new texts in the 22 languages of the cards.

1.0.0Nov 13, 2026

Features

  • Heating Card (custom:heating-card): the heating of the home zone by zone, as text tabs under the header (the selected one underlined in its color, a flickering flame on a zone that heats).
    • Thermostat part taken from the thermostat card of ha-climate-air-card: animated illustration (round wall thermostat, column radiator or radiator valve, picked from the device model and name or set with illustration), room temperature and target, − / + sent once the taps stop (a low / high range gets both ends), heating modes, presets as segmented buttons, valve, battery, humidity, outdoor temperature and power chips, Window open and Low battery alerts, the device's other switches (child lock…) as option toggles.
    • Target: a scale from the entity's minimum to its maximum under the stepper, with the room temperature as a tick; the value is a keyboard spin button (arrows, Page Up / Down, Home / End); the − / + buttons turn off at the limits; the pending target shows in the accent color until the entity reports it.
    • hvac_action: Heating, Preheating, Idle, Off, Defrosting; the animations run only while it really heats (or, without hvac_action, while its valve is open); Boost doubles their speed, in red.
    • Presets: a tap on the selected preset goes back to none (manual) when the entity offers it; frost protection and comfort −1 / −2 recognized with their own label and icon.
    • Power button only when the thermostat can be turned off (climate.turn_off when it has no off mode); back on with the mode it had (set_hvac_mode, which every thermostat takes).
    • Fan mode, swing mode and target humidity as dropdowns for the thermostats that have them, and every mode of a heat pump set by hand, as in the ha-climate-air-card thermostat card; its options keep their names (entity, name, icon, illustration, entities, show_*, zoom, language).
    • Pilot wire radiators: select entities offering at least three pilot wire orders (comfort, comfort −1, comfort −2, eco, frost protection, off, whatever the integration spells them: Zigbee2MQTT, ZHA, Heatzy, French option names…), or a switch relay with switch_on / switch_off; one segmented row per radiator, each order in its color, the radiator glowing on comfort and breathing on eco.
    • Weekly schedule: a schedule helper read with schedule.get_schedule (or the helpers' list created in the UI), drawn as seven rows of time slots with a pulsing "now" line on today, and its state (On until 22:00).
    • Zones found automatically, grouped by area (thermostat, pilot wire radiators, schedule, room temperature and humidity sensors), or set with zones, entity or pilot_wire.
  • Heating Mini Card (custom:heating-mini-card): the overview of the zones, one row each (state, preset, alert, room temperature and target), a click unfolding the full card on that zone; on one zone, the compact thermostat with − / + and power. Detail button at the top right, back to the compact view on a click elsewhere.
  • Visual editor for both cards, the zones as folded sections; English, French, German, Spanish, Serbian (Cyrillic and Latin), Italian, Dutch, European Portuguese, Polish, Romanian, Danish, Swedish, Bulgarian, Russian, Ukrainian, Hungarian, Slovak, Czech, Slovenian, Latvian and Greek, each language but English loaded on demand.