Skip to content
Home Assistant TestFlight
Sensors

Passive BLE monitor

custom-components/ble_monitor · v14.3.0

HACSLocal polling

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.

EntityShows up asNote
binary_sensorSensor (motion, contact, leak, smoke…)
sensorSensor (temperature, humidity, air quality…)
device_trackerPresence (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
DeviceIn Home AssistantIn Apple HomeWhat they saidSource
Acconeer XM126 distance sensorWorks LocalSupport added
Saved copy

The original text was already deleted or overwritten when we archived it.

PR #1337 · 2024-03
Linptech Pressure SensorWorks LocalParser and sensor types added
Saved copy
Add 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 MS1Works LocalBrand and model support added
Saved copy
Add 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 MS2Works LocalBrand and model support added
Saved copy
Add 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 ST10Works LocalBrand and model support added
Saved copy
Add 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 ST5Works LocalBrand and model support added
Saved copy
Add 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 ST6Works LocalBrand and model support added
Saved copy
Add 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 ST8Works LocalBrand and model support added
Saved copy
Add 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 ST9Works LocalBrand and model support added
Saved copy
Add 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 SW2Works LocalBrand and model support added
Saved copy
Add 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-DisplayWorks LocalSupport added with debugging tools
Saved copy
Add 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 LiteWorks LocalUnencrypted 0xFDCD advertisements now parsed
Saved copy
Add 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 TP357SWorks LocalParser loosened for its two extra bytes
Saved copy
tl;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 TrackerWorks LocalWorks as a device tracker by MAC address
Saved copy
Sensor 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 2SWorks LocalSupport added
Saved copy
Add 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 buttonWorks LocalInvalid button events no longer crash parser
Saved copy
Summary 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 MJWSD06MMCWorks LocalSupported, including units with different device_id
Saved copy
Add support for MJWSD06MMC with different device_id

Excerpt saved from GitHub on 2026-10-23.

PR #1572 · 2026-08
Xiaomi MJWSD07MMCWorks LocalTemperature, humidity and CO2 supported
Saved copy
Summary - 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 T700Works LocalSupport added with T700i
Saved copy
Add 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 T700iWorks LocalSupport added with T700
Saved copy
Add 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 2SPartly works LocalHumidity bug fixed in 11.3.4; contributor adding 2S parsing
Saved copy
I 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 dimmerPartly works LocalDetected as YLKG07YL/YLKG08YL but shows no data
Saved copy
Sensor 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 lockRequested LocalNeeds 32-char MiBeacon V5 key; waiting for data
Saved copy
Sensor 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 ST7Requested LocalSupport PR closed without merge
Saved copy
Add support for Mocreo's ST7 BLE temperature sensor

Excerpt saved from GitHub on 2026-10-23.

PR #1524 · 2026-02
Otodata propane tank monitorRequested LocalParser PR closed without merge
Saved copy
Description 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 sensorWon’t be supported LocalBroadcasts no data passively; needs connection, out of scope
Saved copy
Sensor 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 stars2,249
Latest version14.3.0 (2026-09-30)
Set up in the UIYes
Maintainers@Ernst79, @myhomeiot
LicenseMIT

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.

ForkStarsLast pushDescription
pvvx/ble_monitor★ 122021-12-17Passively monitors BLE messages from Xiaomi Mijia BLE MiBeacon, Qingping, ATC, Xiaomi Scale and Kegtron sensors
a1ien/sensor.mitemp_bt★ 32020-05-05Xiaomi 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.