A Lovelace custom card and badge for Home Assistant that show and control
Harvia sauna heaters. Built for the
ha-harvia-sauna integration
(Xenio WiFi via myHarvia, Fenix via harvia.io), with a modular adapter design so
more sauna models and integrations can be added over time. Theme-first,
multilingual (sv/fi/en/de), and configurable down to which value sits in which
slot.
| Light | Dark |
|---|---|
![]() |
![]() |
| Status dashboard | Thermostat dial | Compact |
|---|---|---|
![]() |
![]() |
![]() |
The companion badge, in several appearances:
Screenshots are shown across the supported languages — English, German, Swedish and Finnish; the card follows your Home Assistant locale (with a per-card override).
- Show and control in one card — current/target temperature with a stepper, start/stop a session, and toggle power, light, fan and steamer.
- Climate presets and smart preheat — one-tap preset chips (when the integration has presets configured), and an optional "ready by" scheduler that starts the heater so the sauna is hot when you want it.
- Door-aware start — an open door disables starting (lock indicator, dimmed controls) since the heater refuses to start with the door open; stopping is never blocked.
- Three theme-first layouts —
status-dashboard(default),thermostat-hero(a 270° dial) andcompact— all styled with Home Assistant CSS variables, no hard-coded colours. - Configure what each layout shows. Pick from every value the integration exposes (53 of them): temperatures, humidity, remaining time, power, energy, sessions (today/week), session records, door/heating/steam, cloud connection, ready time, the auxiliary switches, and diagnostics. Each layout keeps its own selection.
- Reorderable tiles (dashboard/thermostat) and left/middle/right slots (compact), edited in the visual editor — drag or ▲▼, add/remove, reset.
- A companion badge for dashboard badge rows, with the same value catalog and six appearances (chip, icon, value, and three gauge variants).
- Auto-detection — finds your Harvia device automatically; no entity IDs to type. Resolves entities by their translation key, so localized entity IDs don't matter.
- Works beyond Harvia, too — a manual mapping mode lets you point the card
at your own entities (a
climateentity plus any switches and sensors), for DIY / KNX / non-Harvia saunas. See Integrations and compatibility. - Multilingual — Swedish, Finnish, English, German out of the box (more on request), following Home Assistant's locale, with a per-card override.
- Visual editor and card-picker suggestion on Home Assistant 2026.6+.
While the sauna runs, the main area turns into a live temperature graph — a rising heat-up curve toward the target, a falling cool-down afterwards, or the whole session as one two-tone arc. The tiles track the session as it goes.
| Heating up | Whole session |
|---|---|
![]() |
![]() |
![]() |
![]() |
See Configuration → Temperature graph for the heat-up, cool-down and whole-session options.
For Harvia heaters: the
ha-harvia-sauna integration,
installed and set up for your heater (Harvia Xenio WiFi or Fenix). The
card auto-detects the device it controls.
For any other sauna: no integration required — use manual mapping to point the
card at your own climate, switch and sensor entities. See
Integrations and compatibility.
- HACS → ⋮ → Custom repositories.
- Add
https://github.com/krissen/sauna-cardwith category Dashboard. - Install sauna-card, then reload your browser.
Download sauna-card.js from the
latest release (or build it
yourself with npm run build), copy it to config/www/community/sauna-card/,
and add a dashboard resource (Settings → Dashboards → ⋮ → Resources):
/local/community/sauna-card/sauna-card.js (type: JavaScript Module)
The card and badge auto-detect your Harvia device — there are no entity IDs to type. Adding the card is enough to get a working dashboard.
- Open a dashboard → Edit dashboard → Add card, and search for Sauna. On Home Assistant 2026.6+, picking a Harvia climate entity in the card picker also suggests sauna-card directly, pre-configured for that device.
- The card detects your heater automatically. Choose a layout — status dashboard, thermostat dial, or compact.
- Tailor what each layout shows in the visual editor: reorder tiles by drag or ▲▼, add or remove values from the full catalog, or set the compact left/middle/right slots. Each layout keeps its own selection, and Reset restores the defaults.
Add the companion badge the same way from a view's badge row (Add badge → search Sauna).
The minimal card and badge are just:
type: custom:sauna-cardtype: custom:sauna-badgeEverything the editor sets is plain YAML too. For example, a thermostat dial with two extra values below it, controls limited to power, and tap-to-more-info turned off:
type: custom:sauna-card
layout: thermostat-hero
hero_items: [humidity, remaining]
controls: power
tap_more_info: falseSee the configuration reference for every option and the full value catalog, or the quick start for a guided walk-through.
- Installation
- Quick start
- Configuration reference — every card and badge option, the value catalog, and examples
- Integrations and compatibility — Harvia and manual mapping for any other sauna
- Localization
- Troubleshooting
Contributions are welcome — translations, support for more sauna models and integrations, fixes and docs. See CONTRIBUTING.md; the developer documentation (the entry point for extending the card) lives in docs/dev/.
- Bugs: GitHub Issues
- Docs: the
docs/folder - Like it? Buy me a coffee!
MIT © Kristian Niemi









