Skip to main content

caldera-sauna

Local control library for Relaxe Caldera infrared saunas over Bluetooth LE, plus (planned) a Home Assistant custom integration. Reverse-engineered from the manufacturer Android app — see PROTOCOL.md for the full wire protocol.

The sauna exposes a cheap serial-over-BLE module (service FFF0, characteristic FFF1 for both commands and status notifications) speaking a plain ASCII protocol. No pairing/PIN/auth.

Layout

src/caldera_sauna/
  protocol.py   pure codec (no I/O) — encode commands, decode status frames
  device.py     bleak + bleak-retry-connector transport (proxy-compatible)
  monitor.py    read-only CLI: scan, connect, print decoded state
scripts/probe.py  throwaway GATT dump / notify probe (read-only)
tests/            unit tests for the codec (no hardware needed)

Dev quickstart

python3 -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"
pytest          # 23 tests, no hardware
ruff check src tests scripts

Device config

Device-specific info stays out of git. Copy the example and fill in your sauna's BLE address (find it with bluetoothctl scan on or nRF Connect):

cp .env.example .env
# edit .env -> CALDERA_SAUNA_ADDRESS=...

The scripts/ tools read .env; if no address is set they scan for a device whose name contains CALDERA_SAUNA_NAME (default Sauna).

Read-only monitor (safe — sends no commands)

caldera-sauna-monitor                    # scan for a 'Sauna' device by name
caldera-sauna-monitor <BLE_ADDRESS>      # or target a specific address

The module allows only one connection at a time. Disconnect the phone app before connecting from here.

Home Assistant integration

Exposes the sauna as a climate entity (power + current/target temperature, timer attribute), a switch (cabin lamp), and a light (mood light with the color presets as effects). It uses Home Assistant's Bluetooth stack, so it works directly on a host adapter or through an ESPHome BLE proxy near the sauna.

Install via HACS (recommended)

  1. HACS → ⋮ → Custom repositories → add https://github.com/realark/caldera-ble with category Integration.
  2. Install Caldera Sauna, then restart Home Assistant. (Home Assistant will pull the caldera-sauna library from PyPI automatically.)
  3. The sauna should be auto-discovered (Settings → Devices & Services). If not, add it manually — make sure the phone app is disconnected first, since the module allows only one connection at a time.

Manual install

Copy custom_components/caldera_sauna/ into your HA config/custom_components/ and restart.

Status

  • Protocol reverse-engineered and documented
  • Codec + unit tests
  • BLE transport + read-only monitor, verified on real hardware
  • Verified write commands (power/temp/timer/light) against hardware
  • Home Assistant custom integration (climate + light + switch)
  • Published to PyPI + HACS
  • Auto-reconnect on BLE drop; relabel light effects to real colors

Disclaimer

Independent, unofficial project. Not affiliated with, endorsed by, or supported by Relaxe or Caldera. Reverse-engineered for personal interoperability. Use at your own risk — it can turn on a heater.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

caldera_sauna-0.0.1.tar.gz (14.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

caldera_sauna-0.0.1-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file caldera_sauna-0.0.1.tar.gz.

File metadata

  • Download URL: caldera_sauna-0.0.1.tar.gz
  • Upload date:
  • Size: 14.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.3

File hashes

Hashes for caldera_sauna-0.0.1.tar.gz
Algorithm Hash digest
SHA256 29fafdda8799ba2db4b4faf1b24be1a51bc943eb30871aaeb443ea6114be7393
MD5 34e60b3c10d2a0237b1ac2051e74550c
BLAKE2b-256 08b81b50a6aebd64a48ca593b6ffa5dc0c38e81a398cbf2c457cd352a1132a89

See more details on using hashes here.

File details

Details for the file caldera_sauna-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: caldera_sauna-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 11.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.3

File hashes

Hashes for caldera_sauna-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 afa645adf1a65c604dee3aa1d8d401d5bd334cfb017f73d860b5fff7ead38b07
MD5 62bf7b15bde4badfca09c741db7cb386
BLAKE2b-256 7cfb5051580a708492c623e5c93d36a9e7254b26a06932df8496e458ac8e396c

See more details on using hashes here.

Release history Release notifications | RSS feed

0.0.6

2 files

0.0.5

2 files

0.0.4

2 files

0.0.3

2 files

0.0.2

2 files

This release

0.0.1 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page