A multi-thermostat Home Assistant Lovelace card for
Themo smart thermostats, built for the
pd_hathemo integration. It puts every
thermostat in one view: a zone overview grid on the left, and a detail panel on the
right for the selected zone — current temperature ring, setpoint stepper, Off / Heat /
Auto mode, the device's heating schedule (heatmap + preset switch), room/floor sensors,
daily heating %, and the backlight toggle.
Requires the
pd_hathemointegration. Install and configure that first. This card only visualizes and controls the entities that integration exposes (climate.*, the temperature sensors, the heating binary sensor, the backlight light, the daily-heating sensors, and the schedule websocket). All device discovery, cloud communication and the hard part belong to that project.
This is a personal hobby project, not affiliated with or endorsed by Themo. It is provided as is, with no warranty and no guarantee of fitness, correctness, or that it works at all. The author accepts no liability for any damage, data loss, unexpected heating behaviour, energy cost, or any other consequence arising from its use. Use it entirely at your own risk. See LICENSE for the full terms.
- Home Assistant 2025.1.0 or newer.
- The
pd_hathemointegration installed, configured, and exposing at least oneclimate.*thermostat.
- In Home Assistant, open HACS.
- Open the three-dot menu → Custom repositories.
- Add
https://github.com/jnaatanen/pd-themo-cardwith category Lovelace (dashboard). - Install PapaDog's Themo Control Card. HACS adds the dashboard resource for you.
- Copy
themo-card.jsinto/config/www/. - Settings → Dashboards → ⋮ → Resources → Add
/local/themo-card.jsas a JavaScript Module. - Add the card to a dashboard (see
examples/lovelace.yaml).
The desktop layout is a wide two-column card (overview + detail side by side, ~1440px). Home Assistant's default masonry view caps every card at roughly one column (~480px) — in such narrow slots the card automatically renders its mobile layout instead (header card, zone list, bottom-sheet detail).
To get the side-by-side desktop layout, put the card in a full-width slot:
- Edit dashboard → the view's settings (pencil) → View type: Panel (1 card).
The switch is automatic by card width — mobile below 600px, the tablet / wall-panel
layout at 600–1099px, desktop at 1100px and up — and can be forced with the layout
option (auto | desktop | tablet | mobile).
type: custom:themo-card
title: Themo Heating
# entities: # optional — auto-discovered from pd_hathemo if omitted
# - climate.themo_living_room
# - climate.themo_kitchen
# default_zone: climate.themo_living_room
# step: 0.5
# sun_entity: sun.sun
# energy:
# today_entity: sensor.themo_energy_today
# quick_actions:
# - { name: "Boost +2° 1h", icon: mdi:flash, service: script.themo_boost }Nothing is required — with no options the card auto-discovers every pd_hathemo
thermostat and shows the first one in the detail panel.
| Option | Default | Notes |
|---|---|---|
title |
Themo Heating |
Card heading. |
layout |
auto |
auto switches by card width: <600px mobile, 600–1099px tablet, ≥1100px desktop. desktop / tablet / mobile force a layout. |
entities |
(auto) | Explicit list of climate.* thermostats and their order. When omitted, the card auto-discovers every thermostat from the pd_hathemo platform. |
default_zone |
first zone | Which climate.* the detail panel opens on initially. |
step |
0.5 |
Setpoint +/- step. The thermostat's own target_temp_step is used when available. |
sun_entity |
(off) | A sun.* entity. When set, adds a Sunrise → Sunset stat to the strip. |
energy.today_entity |
(off) | A kWh sensor (your own template/utility-meter sensor) shown as a daily-energy glance card. |
energy.cost_entity, energy.spot_entity |
(off) | Cost and spot-price sensors (external pricing data); shown in the tablet layout's footer stats when set. |
quick_actions |
[] |
Buttons/chips that call a service. Each: { name, icon?, description?, service, service_data? } (e.g. point at your own script.*). description shows as a sub-line on the tablet layout's House actions buttons. |
The pd_hathemo integration names entities after each thermostat's device. The card does
not assume a fixed id scheme — it:
- Auto-discovers
climate.*entities whose platform ispd_hathemo(or uses yourentitieslist). - For each thermostat, resolves the sibling entities on the same device — room / floor / outside temperature, the heating binary sensor, the backlight light, and the daily-heating sensor.
- Reads the device's heating schedules through the integration's
pd_hathemo/scheduleswebsocket command (the weekly setpoint grid) to draw the schedule heatmap and the "next change" readout, and switches the active schedule via the climate preset selector.
- Multi-zone overview — every thermostat as a tile (current → target temp, mode, live "heating" accent), with house-average and active-zone stats.
- Detail panel — temperature ring, setpoint stepper (Heat mode), Off / Heat / Auto mode tiles, room/floor sensor and daily-heating readouts, tappable backlight toggle.
- Schedules — today's setpoint heatmap, "next change → temp", and one-tap switching of the active schedule (Home / Away / …) via climate presets.
- Optional sections — Sunrise → Sunset, a daily-energy glance, and quick-action chips appear only when you configure their source.
- Three layouts in one card — the full two-column desktop view in wide (Panel) slots, a touch-first tablet / wall-panel view (large zone tiles, glance top bar, focus rail with House actions) in mid-width slots, and a phone-optimized view (header card, zone list, bottom-sheet zone detail) in narrow slots — switching automatically.
- Graphical (GUI) card config editor.
- Schedule setpoint editing (the integration is currently read-only for the weekly grid).
pd_hathemointegration — the data source this card depends on.
MIT (c) Jouko Naatanen.

