Passive BLE monitor
custom-components/ble_monitor · v14.3.0
BLE monitor for passive BLE sensors
In Apple Home through HomeKit Bridge
What HomeKit Bridge makes of each kind of entity this integration creates, read from its source code. A device only gets the ones that apply to it.
| Entity | Shows up as | Note |
|---|---|---|
binary_sensor | Sensor (motion, contact, leak, smoke…) | |
sensor | Sensor (temperature, humidity, air quality…) | |
device_tracker | Presence (as an occupancy sensor) |
What people report
Wide range of passive Bluetooth sensors (Xiaomi, MOCREO, Qingping, ThermoPro) are added quickly by the maintainers; devices needing active connections or unknown encryption are not supported.
- Works20
- Partly works2
- Requested3
- Won’t be supported1
| Device | In Home Assistant | In Apple Home | What they said | Source |
|---|---|---|---|---|
| Acconeer XM126 distance sensor | Works Local | Support addedSaved copyThe original text was already deleted or overwritten when we archived it. | PR #1337 · 2024-03 | |
| Linptech Pressure Sensor | Works Local | Parser and sensor types addedSaved copyAdd support for Linptech Pressure Sensor PS1BB (fix for #1367) - [x] Add parser for PS1BB - [x] Add parser test - [x] Add new binary sensor types - [x] Add new sensor types - [x] Documentation Excerpt saved from GitHub on 2026-10-23. | PR #1368 · 2024-06 | |
| MOCREO MS1 | Works Local | Brand and model support addedSaved copyAdd MOCREO brand and add support for MS1, MS2, ST5, ST6, ST8, ST9, ST10, and SW2. Excerpt saved from GitHub on 2026-10-23. | PR #1472 · 2025-06 | |
| MOCREO MS2 | Works Local | Brand and model support addedSaved copyAdd MOCREO brand and add support for MS1, MS2, ST5, ST6, ST8, ST9, ST10, and SW2. Excerpt saved from GitHub on 2026-10-23. | PR #1472 · 2025-06 | |
| MOCREO ST10 | Works Local | Brand and model support addedSaved copyAdd MOCREO brand and add support for MS1, MS2, ST5, ST6, ST8, ST9, ST10, and SW2. Excerpt saved from GitHub on 2026-10-23. | PR #1472 · 2025-06 | |
| MOCREO ST5 | Works Local | Brand and model support addedSaved copyAdd MOCREO brand and add support for MS1, MS2, ST5, ST6, ST8, ST9, ST10, and SW2. Excerpt saved from GitHub on 2026-10-23. | PR #1472 · 2025-06 | |
| MOCREO ST6 | Works Local | Brand and model support addedSaved copyAdd MOCREO brand and add support for MS1, MS2, ST5, ST6, ST8, ST9, ST10, and SW2. Excerpt saved from GitHub on 2026-10-23. | PR #1472 · 2025-06 | |
| MOCREO ST8 | Works Local | Brand and model support addedSaved copyAdd MOCREO brand and add support for MS1, MS2, ST5, ST6, ST8, ST9, ST10, and SW2. Excerpt saved from GitHub on 2026-10-23. | PR #1472 · 2025-06 | |
| MOCREO ST9 | Works Local | Brand and model support addedSaved copyAdd MOCREO brand and add support for MS1, MS2, ST5, ST6, ST8, ST9, ST10, and SW2. Excerpt saved from GitHub on 2026-10-23. | PR #1472 · 2025-06 | |
| MOCREO SW2 | Works Local | Brand and model support addedSaved copyAdd MOCREO brand and add support for MS1, MS2, ST5, ST6, ST8, ST9, ST10, and SW2. Excerpt saved from GitHub on 2026-10-23. | PR #1472 · 2025-06 | |
| PTX-F1-Display | Works Local | Support added with debugging toolsSaved copyAdd support for PTX-F1-Display and enhance debugging tools. Addressed the Copilot auto-review feedback. Ready to merge. Excerpt saved from GitHub on 2026-10-23. | PR #1533 · 2026-03 | |
| Qingping Temp & RH Monitor Lite | Works Local | Unencrypted 0xFDCD advertisements now parsedSaved copyAdd support for Qingping Temp & RH Monitor Lite (`CGDK2`) devices that advertise using the Qingping `0xFDCD` service with device ID `0x10`. Some CGDK2 units appear to broadcast unencrypted Qingping advertisements in addition to Xiaomi MiBeacon advertisements. The current Qingping parser already supports the payload format used by these devices, so the only required change is mapping Qingping device ID `0x10` to `CGDK2`. ## Example An anonymized packet captured from a CGDK2: 14 16 cd fd 08 10 00 00 00 00 00 00 01 04 1c 01 af 02 02 01 64 Decoded sensor values: - Temperature: `28.4 °C` - … Excerpt saved from GitHub on 2026-10-23. | PR #1616 · 2026-09 | |
| ThermoPro TP357S | Works Local | Parser loosened for its two extra bytesSaved copytl;dr The thermopro TP357S has 2 extra bytes in the ble message # context I bought a TP357S which didn't work out of the box with ble_monitor But from the debug logs I could see that the current parsing works for humidity and temperature e.g. in the debug logs: [code] The local name would match, but the manufacturer specific data is 9 bytes instead of 7 I couldn't figure out what the extra 2 bytes mean, but I know the bytes[3:6] are humidity and temperature as before These are the results using t Excerpt saved from GitHub on 2026-10-23. | PR #1240 · 2023-09 | |
| Tile Tracker | Works Local | Works as a device tracker by MAC addressSaved copySensor Description Tile Tracker ### Additional information Tile These are BLE trackers that previously worked perfectly with the HA inbuilt BLE tracker component - until HA 2022.7. I had many of these Tile devices working without issue. HA log below and Android LightBlue attached. Thank you :-) ### BLE advertisements [code] Excerpt saved from GitHub on 2026-10-23. | Issue #960 · 2022-07 | |
| Xiaomi Human Body Sensor 2S | Works Local | Support addedSaved copyAdd support for Xiaomi Human Body Sensor 2S (XMPIRO2SXS) fix #1325 Excerpt saved from GitHub on 2026-10-23. | PR #1328 · 2024-03 | |
| Xiaomi KS1 / KS1BP button | Works Local | Invalid button events no longer crash parserSaved copySummary Prevent invalid Xiaomi KS1/KS1BP button events from causing parser exceptions. ## Problem `obj560c()`, `obj560d()`, and `obj560e()` returned `None` for unrecognized click values and unsupported device types. The Xiaomi parser passes object-parser results directly to `dict.update()`, so these cases could result in: `TypeError: 'NoneType' object is not iterable` Both the device identifier and click value originate from the BLE advertisement and may contain unexpected values. ## Fix Return an empty result for unrecognized click values and unsupported device types instead of `None`. … Excerpt saved from GitHub on 2026-10-23. | PR #1585 · 2026-09 | |
| Xiaomi MJWSD06MMC | Works Local | Supported, including units with different device_idSaved copyAdd support for MJWSD06MMC with different device_id Excerpt saved from GitHub on 2026-10-23. | PR #1572 · 2026-08 | |
| Xiaomi MJWSD07MMC | Works Local | Temperature, humidity and CO2 supportedSaved copySummary - Add the Xiaomi MJWSD07MMC product ID (`0x9AB9`). - Parse its temperature (`0x5C01`), humidity (`0x5C02`), and CO2 (`0x601D`) objects. - Register the device measurement entities; battery uses the existing `0x5003` battery object. - Add device documentation and regression tests using captured encrypted advertisements. ## Testing - Targeted MJWSD07MMC and battery tests: `2 passed` - Full Xiaomi parser suite: `101 passed`, with one pre-existing Windows-only failure because `time.tzset()` is unavailable. Excerpt saved from GitHub on 2026-10-23. | PR #1615 · 2026-09 | |
| Xiaomi toothbrush T700 | Works Local | Support added with T700iSaved copyAdd support for Xiaomi toothbrush T700 and T700i (fix #1202) - [x] Todo Documentation This PR will be merged after #1200 Excerpt saved from GitHub on 2026-10-23. | PR #1206 · 2023-07 | |
| Xiaomi toothbrush T700i | Works Local | Support added with T700Saved copyAdd support for Xiaomi toothbrush T700 and T700i (fix #1202) - [x] Todo Documentation This PR will be merged after #1200 Excerpt saved from GitHub on 2026-10-23. | PR #1206 · 2023-07 | |
| Air Mentor 2S | Partly works Local | Humidity bug fixed in 11.3.4; contributor adding 2S parsingSaved copyI think I have the code from this forum topic https://community.smartthings.com/t/successfully-integrated-air-quality-monitor-air-mentor-pro-2-in-smartthings-using-raspberry-pi/79574/10 There is a link somewhere in that topic to this file https://github.com/philippeportesppo/AirMentorPro2_SmartThings/blob/93b976c332e9ee2ebb59e47b6584a1558c037b3e/airmentorpro2.py#L61 https://github.com/philippeportesppo/AirMentorPro2_SmartThings See also this issue. https://github.com/custom-components/ble_monitor/issues/768 If it is only one byte, you could try just to convert it from hex to decimals … Excerpt saved from GitHub on 2026-10-23. | Issue #1100 · 2023-01 | |
| Yeelight dimmer | Partly works Local | Detected as YLKG07YL/YLKG08YL but shows no dataSaved copySensor Description yeelight dimmer YLKG07YL / YLKG08YL model YLYKQ-0004 ### Additional information I ordered a yeelight dimmer on aliexpress on batteries YLKG07YL / YLKG08YL The seller sent some new version On the body of the inscription YLYKQ-0004 I don't have a yeelight lamp, I just needed a dimmer. When paired with BLE Monitor, it is defined as YLKG07YL / YLKG08YL but there is no data: [code] Method for obtaining a key by a script: Excerpt saved from GitHub on 2026-10-23. | Issue #999 · 2022-08 | |
| Lockin S50F smart lock | Requested Local | Needs 32-char MiBeacon V5 key; waiting for dataSaved copySensor Description loock.lock.s50f ### Additional information MODEL: loock.lock.s50f (Same as v16 but contain faceID feature) https://www.lockin.com.sg/product-page/lockin-push-pull-smart-lock-s50 This lock can be added in MiHome app. Will grab more adv if insufficient. I though I can use SV40(#1267) for testing but donno how to do that. Thank you ### BLE advertisements ```shell INFO (MainThread) [custom_components.ble_monitor] Attention! Option report_unknown is enabled for sensor with id(s): [''] INFO (Thread-2) [custom_components.ble_monitor.ble_parser] BLE advertisement received from … Excerpt saved from GitHub on 2026-10-23. | Issue #1326 · 2024-03 | |
| MOCREO ST7 | Requested Local | Support PR closed without mergeSaved copyAdd support for Mocreo's ST7 BLE temperature sensor Excerpt saved from GitHub on 2026-10-23. | PR #1524 · 2026-02 | |
| Otodata propane tank monitor | Requested Local | Parser PR closed without mergeSaved copyDescription Adds support for Otodata Bluetooth propane tank level monitors (e.g., MT4AD-TM5040, MT4AD-TM774). ## Changes - Added new parser `otodata.py` for Otodata BLE advertisements (Company ID: 0x03B1) - Parses three packet types: - OTOTELE: Telemetry data containing tank level percentage - OTO3281: Device identification with model information - OTOSTAT: Status packets (currently skipped - purpose unknown) - Added `tank level` sensor type to `const.py` - Added `Propane Tank Monitor` device type to measurement and manufacturer dictionaries - Added `tank level` to AUTO_SENSOR_LIST for … Excerpt saved from GitHub on 2026-10-23. | PR #1521 · 2026-01 | |
| Tuya Smartlife plant sensor | Won’t be supported Local | Broadcasts no data passively; needs connection, out of scopeSaved copySensor Description Tuya SGS01 BLE Sensor that measures soil moisture and temperature ### Additional information Tuya BLE Sensor that measures soil moisture and temperature (https://de.aliexpress.com/item/1005005237033834.html?spm=a2g0o.order_list.order_list_main.67.40415c5fKMbYQ7&gatewayAdapt=glo2deu) ### BLE advertisements ```shell 2023-04-18 21:01:43.088 INFO (Thread-4) [custom_components.ble_monitor.ble_parser] BLE advertisement received from MAC/UUID dc234f328137: service data: [b'\x0c\x16\x01\xa2\x00k\xef\x04\x99\xe9<l|']manufacturer specific data: []local name: UUID16: 418,UUID128: None … Excerpt saved from GitHub on 2026-10-23. | Issue #1161 · 2023-04 |
Gathered from GitHub issues, pull requests, discussions and docs, and from r/homeassistant. These are individual reports, so check the linked thread and the date before you buy.
How it connects
Local polling
Talks to the device on your network, asking it for updates every so often.
Details
| Installs (analytics) | 7,658 (1.08%) |
|---|---|
| GitHub stars | 2,249 |
| Latest version | 14.3.0 (2026-09-30) |
| Set up in the UI | Yes |
| Maintainers | @Ernst79, @myhomeiot |
| License | MIT |
Notable forks
Forks with stars, or with code pushed at least 90 days after the original’s last push. Useful when the original goes quiet.
| Fork | Stars | Last push | Description |
|---|---|---|---|
| pvvx/ble_monitor | ★ 12 | 2021-12-17 | Passively monitors BLE messages from Xiaomi Mijia BLE MiBeacon, Qingping, ATC, Xiaomi Scale and Kegtron sensors |
| a1ien/sensor.mitemp_bt | ★ 3 | 2020-05-05 | Xiaomi BLE monitor sensor |
In ReReHome
Whatever HomeKit Bridge shares reaches Apple Home as normal HomeKit accessories behind your Home Assistant bridge, so ReReHome shows and controls them like any other.
Bridges get their own settings page listing the accessories behind them.
Sources
- Documentation: https://github.com/custom-components/ble_monitor
- Source code: https://github.com/custom-components/ble_monitor
- Issues: https://github.com/custom-components/ble_monitor/issues
- HACS: https://hacs.xyz