RadonEye RD200 (Version 2 and now Version 1) Integration for Homeasssistant. Throw me a github star if you use this!
Based on: https://github.com/EtoTen/radonreader/ and the AirThings BLE Homeassistant Integration (https://github.com/home-assistant/core/tree/dev/homeassistant/components/airthings_ble) and https://github.com/vincegio/airthings-ble, and the ESPHome Native Integration (https://esphome.io/components/sensor/radon_eye_ble.html)
Works for RD200 Version 2 units with serial numbers starting with either FR:RU (United States) , FR:RE (Spain), FR:GI, FR:H, FR:GL, FR:I (??? all sold in the US), FR:RD and FR:GJ. Now works for version 1 (FR:R2 serial numbers). V1 integration currently only supports current radon value, 1 day and 1 month readings, peak and uptime. Note the box and the device display do not show the "FR:" portion of the serial number.
If you are pretty sure it is a version 2 device, but has a differnet serial number prefix, edit the manifest.json and line 152 in config_flow.py to include you prefix. If it works, post an issue or a PR and I can add it in.
A python script is posted for people to help find important fields in the V2.
If use ESPHome BT proxy, update to at least ESPHome 2022.12.4 to allow Version 2 radon peak value to work correctly.
If updated to Home Assistant 2024.1.0 or later, please run at least version 4.1 of the integration as previous releases will error. Home Assistant made changes and did not provide any depreciation time buffer. home-assistant/core#107004
If you update to 4.2, you must run Homeassistant 2024.1.0 or later. If you get an error about "close_stale_connections_by_address" you need to update to homeassistant 2024.1.x or revert back to version 4.1 of this integration
If use a Raspberry Pi built-in BT adapter, the Peak and Uptime sensor may not work after the first update and cause itegration to hang. Being investigated. Two options to work around: Use an ESPHome proxy (recommended) or comment out (add a #) to line 257 and 258 of the parser.py, like so:
#device = await self._get_radon_peak(client, device)
#device = await self._get_radon_uptime(client, device)
An issue has been created in homeassistant for the BT performance, but it could just be the Raspberry Pi BT adapter stinks! home-assistant/core#90307
For VMWare: A user solved "regularly loosing-connection" on their Win10/Nuc running Home-Assistant in a VMWare Virtual machine by updating from VMware Pro 15 to VMWare (free) Verions 16.
- Add this repo into HACS
- Install integration
- Restart Homeassistant
- Wait a few minutes and HA should find it automatically
- If not found automatically, Go to Settings->Device and Services->Add Integration (blue button at bottom right) -> search for RD200
- It should find it and set it up
Note: If used the ESPHome integration in the past, you must remove the RD200 MAC address from the ble_client:
section.
Now - Actual count pulses (note that this is a real time parameter and it is updated on the device when the ion chamber fires, as we read the device every 10 minutes in HA it may not make sense. Users who want to use this parameter should consider changing DEFAULT_SCAN_INTERVAL in const.py to 1min (60) or almost 2min (120).
Last - Last 10min pulse count until next radon value update.
Reading | Write Value | Data Location | Data Format | Unit | Added in Integration |
---|---|---|---|---|---|
Current Radon |
0x50 |
data[2:4] |
little endian ushort | Bq/m3 | Yes |
Average Day Radon |
0x50 |
data[4:6] |
little endian ushort | Bq/m3 | Yes |
Average Month Radon |
0x50 |
data[6:8] |
little endian ushort | Bq/m3 | Yes |
Radon C pulse now |
0x50 |
data[8:10] |
little endian ushort | Pulses | Yes |
Radon C pulse last |
0x50 |
data[10:12] |
little endian ushort | Pulses | Yes |
Peak Radon |
0x40 |
data[51:53] |
little endian ushort | Bq/m3 | Yes |
Serial |
0x40 |
data[8:11] + data[2:8] + data[11:15] |
chars | No | |
Model |
0x40 |
data[16:21] |
chars | Yes | |
Firmware |
0x40 |
data[22:30] |
chars | Yes | |
Uptime Minutes Field |
0x51 |
data[4:8] |
little endian uint | minutes | Yes |
Uptime seconds Field |
?? |
?? |
little endian ushort | ?? | no: hard coded to 0 |