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.2.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.2-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: caldera_sauna-0.0.2.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.2.tar.gz
Algorithm Hash digest
SHA256 40be21109542ef2fb278001264a683c63746eb174455192ec37a25405548aa1b
MD5 486a25ef818ed04f25b6503f0c063c36
BLAKE2b-256 c30aa8842ba6a37821c83d3c16198d1d5e898a4902ac30764fbc3e008dd7f927

See more details on using hashes here.

File details

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

File metadata

  • Download URL: caldera_sauna-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 11.2 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 22c8b0b65418f1d067392b140458788fc1a05789e61cff47cf5cadd15a628d2f
MD5 13189d66cb0770c6f1145ff4cd9b4bf6
BLAKE2b-256 75d5cc8cbd87dc70798bb83c39393cd80bb7cb9af1829f180a1c9c98cdcb6e4e

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

This release

0.0.2 This release

2 files

0.0.1

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