A custom Home Assistant integration for Radiacode radiation detectors via Bluetooth Low Energy.
Connects wirelessly using HA's built-in Bluetooth stack — works with local Bluetooth adapters and ESPHome Bluetooth proxies for whole-home coverage.
- Real-time radiation monitoring — dose rate (µSv/h) and count rate (CPS) updated every 5 seconds
- Accumulated dose tracking — total dose since the device was last reset
- Device diagnostics — battery level and internal temperature
- Device controls — adjust display settings, alarm thresholds, sound/vibration, and more directly from HA
- Auto-discovery — HA automatically detects Radiacode devices over Bluetooth
- BT proxy support — works through ESPHome Bluetooth proxies; no direct Bluetooth adapter required on the HA host
- Persistent connection — keeps the BLE link open between polls to minimise reconnect overhead
| Sensor | Unit | Description |
|---|---|---|
| Dose Rate | µSv/h | Real-time ambient radiation dose rate |
| Count Rate | cps | Raw detector counts per second |
| Accumulated Dose | µSv | Total dose accumulated since last device reset |
| Battery | % | Device battery level (diagnostic) |
| Temperature | °C | Device internal temperature (diagnostic) |
Note: Dose Rate and Count Rate update every ~5 s. Battery, Temperature, and Accumulated Dose are reported by the device approximately once per minute and are cached between updates.
The integration exposes the full Radiacode configuration as writable HA entities.
| Entity | Description |
|---|---|
| Sound | Enable/disable click sound on detection events |
| Vibration | Enable/disable vibration on detection events |
| Display | Turn the device display on or off |
| Display Backlight | Enable/disable display backlight |
| Entity | Unit | Range | Description |
|---|---|---|---|
| Display Brightness | — | 0–9 | Screen brightness level |
| Dose Rate Alarm L1 | µSv/h | 0–655 | Level 1 dose rate alarm threshold |
| Dose Rate Alarm L2 | µSv/h | 0–655 | Level 2 dose rate alarm threshold |
| Count Rate Alarm L1 | cps | 0–6553 | Level 1 count rate alarm threshold |
| Count Rate Alarm L2 | cps | 0–6553 | Level 2 count rate alarm threshold |
| Accumulated Dose Alarm L1 | µSv | 0–655 | Level 1 accumulated dose alarm threshold |
| Accumulated Dose Alarm L2 | µSv | 0–655 | Level 2 accumulated dose alarm threshold |
| Entity | Options | Description |
|---|---|---|
| Display Auto-Off | 5 s / 10 s / 15 s / 30 s | Display timeout duration |
| Display Orientation | Auto / Right / Left | Screen rotation mode |
| Entity | Description |
|---|---|
| Reset Accumulated Dose | Clears the accumulated dose counter on the device |
- Home Assistant
- Radiacode RC-102, RC-103, or RC-110 (tested with firmware 4.8)
- Bluetooth — one of:
- A Bluetooth adapter on your HA host (USB dongle or built-in), or
- One or more ESPHome Bluetooth proxies within range of the device
The Radiacode does not need to be paired with the Radiacode phone app to work with this integration.
- Open HACS in Home Assistant → Integrations
- Click the three-dot menu (⋮) → Custom repositories
- Add
https://github.com/303Bryan/ha-radiacodewith category Integration - Click Radiacode in the integration list → Download
- Restart Home Assistant
- Download the latest release
- Copy the
custom_components/radiacode/folder into your HAconfig/custom_components/directory - Restart Home Assistant
If HA detects your Radiacode over Bluetooth, a notification will appear on the Integrations page:
- Go to Settings → Devices & Services
- Click Configure on the discovered Radiacode device
- Confirm to add it
If auto-discovery doesn't trigger:
- Go to Settings → Devices & Services → Add Integration
- Search for Radiacode
- Enter the Bluetooth MAC address of your device
For the best results with BT proxies:
- Flash an ESP32 board with the ESPHome Bluetooth proxy firmware
- Place the proxy within ~5 m of your Radiacode device
- Ensure the proxy is added to HA (it will appear as an ESPHome device)
Tips for reliable operation:
- Keep the proxy within strong signal range of the Radiacode (RSSI better than −80 dBm)
- Each ESP32 proxy supports up to 3 simultaneous BLE connections — don't overload it with other BLE devices
- If the sensor shows unavailable periodically, the BLE link is dropping; move the proxy closer
- BT proxy notification buffer — ESPHome proxies can forward approximately 28 BLE notification packets per transfer. For large data buffers (accumulated while the device was disconnected), the integration automatically uses whatever data arrived before the buffer filled. No data is lost; the next poll will catch up.
- RareData update rate — Battery, Temperature, and Accumulated Dose are updated by the device approximately once per minute, regardless of the poll interval.
- Single connection — The Radiacode can only maintain one BLE connection at a time. While this integration is connected, the Radiacode mobile app will not be able to connect to the device (and vice versa).
This usually means the BLE link is dropping. Check:
- RSSI — look in HA logs for
RSSI=values on the proxy. Below −85 dBm is marginal; below −95 dBm is unreliable. Move the proxy closer. - Proxy slot usage — the log will show
slots=X/3 free. If you see0/3 freeconsistently, other BLE devices are competing for the proxy's connection slots. - Device battery — a low battery can cause the Radiacode to disconnect unexpectedly.
- Confirm the Radiacode is powered on and not connected to another device (phone app, etc.)
- Verify the MAC address is correct
- Check HA logs (
Settings → System → Logs) for detailed error messages - Try moving a Bluetooth proxy closer to the device
Bug reports and pull requests are welcome! Please open an issue before starting large changes.
The BLE protocol implementation is based on reverse-engineering work from:
- cdump/radiacode — Python library (MIT)
- mkgeiger/RadiaCode — Arduino/ESP32 library (MIT)
MIT © 2025 Bryan Fleming