A Home Assistant custom integration for Themo smart thermostats, built directly on the Themo Public API v2.1.
It draws inspiration from the pythemo library / homeassistant-pythemo integration by
Jonne Datanen.
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.
- Climate per thermostat: Off / Heat (Manual) / Auto (schedule) modes, target temperature, current temperature, and heating action.
- Schedules: switch the active heating schedule per thermostat from the climate preset selector ("Home" / "Away" etc.). A read-only websocket command exposes the full weekly setpoint grid for custom cards.
- Sensors: room temperature, floor temperature (only when the device has a floor sensor), and outside temperature.
- Light: thermostat backlight on/off.
- Heating activity: a binary sensor per thermostat showing whether the heating element is on right now.
- Daily heating %: two sensors per thermostat — a running share of the elapsed day and a cumulative share of the full 24 h — both reset at local midnight. Computed directly from on/off time, independent of the configured element power.
- Energy: hourly consumption imported as Home Assistant long-term statistics (with up to 14 days of backfill), one per thermostat, for the Energy dashboard.
- Home Assistant 2025.1.0 or newer.
- A Themo account (the same email and password you use in the Themo app).
- In Home Assistant, open HACS.
- Open the three-dot menu -> Custom repositories.
- Add
https://github.com/jnaatanen/pd-hathemowith category Integration. - Install PapaDog's Home Assistant Themo Integration.
- Restart Home Assistant.
- Copy
custom_components/pd_hathemointo your Home Assistantconfig/custom_components/directory. - Restart Home Assistant.
- Go to Settings -> Devices & Services -> Add Integration.
- Search for Themo and select it.
- Enter your Themo account email and password.
Each thermostat is added as a device with a climate entity, temperature sensors, and a backlight light.
After setup, each thermostat reports hourly consumption as a long-term statistic named
<room> energy (unit kWh). To see it:
- Go to Settings -> Dashboards -> Energy.
- Add each
<room> energystatistic as a consumption source.
Up to 14 days of history is backfilled on first run; the Energy dashboard may take a couple of hours to render newly added sources.
Each thermostat exposes a <room> Heating binary sensor (on while the element is heating)
and two daily percentage sensors (running and cumulative) that reset at local midnight.
The percentage sensors cover the current day only. For longer periods — e.g. weekly or
monthly heating time — add a Home Assistant History Stats helper on the
<room> Heating binary sensor with your chosen start/end and type: time (hours on) or
type: ratio (percentage). The binary sensor is the source of truth; build whatever
longer-term meter or sensor best fits your needs on top of it.
Each thermostat's named heating schedules (the MinTemperature programs, e.g. "Home" /
"Away") are exposed as climate presets. Select a preset on the climate entity — or call
climate.set_preset_mode from an automation — to activate that schedule. Activating one
schedule deactivates the previously active one.
A companion Lovelace card, pd-themo-card, pairs with this integration to display thermostats and their schedules. Build it with the read-only websocket command below.
For custom cards, a read-only websocket command returns the full weekly setpoint grid:
const result = await hass.connection.sendMessagePromise({
type: "pd_hathemo/schedules",
device_id: 28920, // the Themo device id
});
// result.schedules: [{ id, name, parameter, unit, active,
// setpoints: [{ day, hour, value }, ...] }] // day 0=Sun..6=Sat, hour 0-23, value in C- The integration is cloud polling: device state is read every ~2 minutes, energy statistics every ~10 minutes, and schedules every ~15 minutes.
- Control commands (temperature, mode, backlight) are applied optimistically because the Themo cloud reflects commanded state with a delay.
Possible future additions (not yet implemented):
- Schedule setpoint editing — the integration currently lets you switch the active
schedule; editing the weekly setpoints (the
Day/Hour/Valuegrid) from Home Assistant or a card is a possible future addition.
MIT (c) Jouko Naatanen.