Xiaomi MJWSD05MMC + Home Assistant: Local Readings via BTHome
The Xiaomi Mijia Thermometer 3 (MJWSD05MMC) is not a sensor you’d normally associate with local-first setups. Out of the box it reports to Mi Home, and that’s the end of the story Xiaomi tells. But flash the pvvx open-source firmware, switch the advertisement mode to BTHome v2, and the whole picture changes: temperature, humidity, and battery level land in Home Assistant over Bluetooth, entirely local, with no Xiaomi server anywhere in the path.
This guide covers the MJWSD05MMC specifically — not the older LYWSD03MMC credit-card sensor, though they share the same firmware ecosystem. If you have the big-screen clock model (the one showing time, date, and day of week), this is the right guide for you.
MJWSD05MMC vs LYWSD03MMC: what’s the same, what’s different
If you’ve already set up a LYWSD03MMC with pvvx and BTHome, the MJWSD05MMC will feel familiar at the firmware level. The pvvx firmware supports both devices, the Telink Web flasher works the same way, and the BTHome v2 advertisement path into HA is identical.
The hardware is different. The Thermometer 3 has a considerably larger 62.6 x 53.2 mm LCD panel that shows temperature, humidity, the current time, date, and day of week. It’s designed to sit on a desk or countertop rather than blend into a wall. Same CR2450 coin cell battery, but the bigger screen means it draws a bit more power.
Practically speaking: if you want something that reads at a glance from across a room, the Thermometer 3 makes sense. If you want something small enough to tuck inside a cabinet or along a window frame, the LYWSD03MMC is the better fit. Either way, the HA integration path is the same.
One difference worth knowing upfront: the clock display on the MJWSD05MMC does not sync automatically through BTHome. After flashing, the displayed time needs to be set manually via the Telink flasher’s settings page (over BLE) or the pvvx Android app. The temperature and humidity readings reported to HA are completely unaffected — this is purely cosmetic. I’ll cover this in the caveats section.
What you need before you start
Three things:
A Chrome or Edge browser. The Telink Web flasher uses the Web Bluetooth API, which only Chrome and Edge support. Firefox won’t work. Mobile Chrome on Android works if your phone has BT 4.0+ and you’re comfortable running the flasher from your phone, but a desktop browser is easier.
A Bluetooth adapter on your HA host. The BTHome integration works over Bluetooth directly from the machine running HA — no extra hardware needed. Home Assistant Yellow and Home Assistant Green have Bluetooth built in. If you’re running HA on a generic x86 machine or a Raspberry Pi without onboard BT, a USB Bluetooth dongle (anything with the CSR 8510 or the Intel AX200/AX210 chipset works well) is enough. If you don’t have Bluetooth on your HA host and don’t want to buy a dongle, the ESPHome BLE proxy path is the alternative — but it requires a dedicated ESP32 board, which is more hardware for a sensor that costs less than ten dollars. BTHome is the path I’d take.
The MJWSD05MMC in an unbound state. If the sensor is already paired to Mi Home on another account, remove it from that account first. If you bought it new, you can skip straight to flashing.
Flashing pvvx firmware via the Telink Web flasher
This is the step most guides make sound more complicated than it is. The pvvx project provides a browser-based flasher — no drivers to install, no USB cable, no command line.
Enable experimental web platform features
Open Chrome and go to chrome://flags/#enable-experimental-web-platform-features. Set it to Enabled, then relaunch Chrome. This flag exposes the Web Bluetooth API, which the flasher needs to communicate with the sensor.
Connect and flash
Navigate to the pvvx Telink flasher (the URL is in the pvvx GitHub repo — search for pvvx ATC_MiThermometer github and look for the TelinkMiFlasher.html link). Click Connect, and Chrome will show a Bluetooth device picker. Put your MJWSD05MMC into pairing mode by holding the button on the side until the screen shows the pairing icon, then select it from the list.
Once connected, the flasher reads the current firmware version from the device. Hit Do Activation first if the button appears — this unlocks the device for third-party firmware. Then click Flash Firmware and select the BTH firmware file for the MJWSD05MMC. The flash takes about 30 seconds. The sensor will reboot automatically.
Switch to BTHome v2 advertisement format
This is the step the brief flags as the most common point of failure, and it’s worth being explicit about. After flashing, the device defaults to Xiaomi advertisement format — not BTHome v2. In that state, HA’s BTHome integration won’t see it.
After the reboot, reconnect via the flasher. The MJWSD05MMC is a Bluetooth-only device — it has no Wi-Fi and no web server of its own, so all configuration happens over BLE through the Telink flasher’s settings page (reached by clicking Connect, then opening the configuration panel once the device is connected). Find the Advertisement setting and switch it from Xiaomi to BTHome v2. Save. The sensor will start broadcasting in BTHome format immediately.
The MJWSD05MMC supports four advertisement modes: Xiaomi, ATC, Custom, and BTHome v2. BTHome v2 is the one you want for native HA integration — no HACS required, no bind key required. The other modes exist for compatibility with other ecosystems.
Adding to Home Assistant via the BTHome integration
With the sensor advertising in BTHome v2, head over to HA.
Go to Settings > Devices & Services, click + Add Integration, and search for BTHome. If the MJWSD05MMC is within Bluetooth range of your HA host, it should appear in the device list automatically. Select it and follow the prompts.
HA will create three entities:
- Temperature (°C or °F depending on your HA locale setting)
- Humidity (%)
- Battery (%)
All three update locally over Bluetooth at the interval configured in pvvx. No Xiaomi account, no Mi Home app, no cloud relay.
If the device appears but delivers no data
This is a known snag. The symptom: the MJWSD05MMC shows up in the BTHome integration list, you add it, but the entities stay at “unavailable” or never update.
The fix that works in most cases: remove the integration entry for the device, wait 30 seconds, and re-add it. The root cause is MAC address caching — HA’s Bluetooth scanner occasionally holds a stale entry from before the firmware flash, and the re-add clears it. I’ve seen this take two attempts in some setups. If it’s still not working after a second re-add, check that BTHome v2 is actually selected in the pvvx settings (not ATC or Custom, which look similar in the interface).
Using the sensor in automations
Once the entities are live, the MJWSD05MMC behaves like any other HA sensor.
A few patterns I reach for with temperature/humidity sensors:
Low temperature alert. Create an automation that fires when the temperature entity drops below a threshold. Useful for monitoring unheated spaces — a garage, a server room, or a room you don’t heat at night. In HA’s automation editor, set the trigger to “Numeric state” on the temperature entity, below your threshold, for more than 5 minutes (to avoid alerts from brief sensor fluctuations).
Humidity logging. The humidity entity feeds into HA’s history graphs with no configuration needed. If you want to correlate humidity spikes with specific events (cooking, showers, rain), the HA logbook and the energy dashboard’s “compare dates” feature both work directly with sensor history.
Multi-sensor averaging. If you have multiple MJWSD05MMC units across rooms, a template sensor that averages them gives you a whole-home temperature reading, which is useful for automating HVAC logic without over-reacting to one room’s reading.
Privacy check: is the MJWSD05MMC actually local now?
After flashing pvvx, the Xiaomi BLE stack is replaced entirely. The device no longer sends Xiaomi advertisement packets, and it has no mechanism to contact Xiaomi’s servers — Bluetooth is a local radio protocol with no internet connectivity of its own. The sensor doesn’t know what your Wi-Fi password is and couldn’t transmit to Xiaomi even if the original firmware tried.
On the HA side, the BTHome integration is local-only. No cloud relay, no Nabu Casa required (though Nabu Casa is fine to use for remote access to HA — the BTHome sensor data stays on your local network regardless).
The only caveat: if you want to re-pair the sensor with Mi Home after flashing pvvx, you’d need to reflash the original Xiaomi firmware. Pvvx replaces the original stack, so Mi Home compatibility is gone unless you restore it. If you want both Mi Home and HA simultaneously, the Xiaomi BLE integration in HA supports reading the original Xiaomi advertisement format using a bind key (obtainable from the Telink flasher before flashing). But that path keeps the original firmware intact, which means Xiaomi is still in the picture for the BLE side. The pvvx + BTHome path is the clean local-only option.
For context on how this fits into a broader Xiaomi/Mi Home local strategy, see our Xiaomi Multimode Gateway local integration guide and our explainer on whether these devices work without internet.
Caveats and known limitations
Clock display needs manual time sync. After flashing, the MJWSD05MMC’s display won’t automatically know what time it is. The pvvx firmware doesn’t receive time over BTHome. You can sync the clock via the Telink flasher’s settings page (connected over BLE) or via the pvvx Android companion app. It’s a one-time step and the display keeps time from its internal clock after that — but if you pull the battery, you’ll need to re-sync. For most people this is a minor annoyance. If the clock display is the primary reason you bought the Thermometer 3 over the LYWSD03MMC, it’s worth knowing.
Mi Home compatibility is gone. Flashing pvvx is a one-way door unless you’re willing to re-flash with the original firmware. If you share the device with someone who uses the Mi Home app to read it, they lose that access.
Reporting interval vs. battery life. The pvvx firmware lets you configure how often the sensor sends an advertisement packet. The default is conservative and the CR2450 battery should last around 1.5 years at that interval. If you shorten the interval for faster updates in HA, battery life shortens proportionally. For most sensors, the default interval is fine — temperature and humidity in a room don’t change fast enough to need sub-minute updates.
Bluetooth range. The MJWSD05MMC’s Bluetooth range is typical for BLE coin-cell devices — roughly 10 meters line-of-sight, less through walls. If you’re placing sensors in areas far from your HA host’s Bluetooth adapter, you may get intermittent readings. The ESPHome BLE proxy approach handles this better by letting you place a cheap ESP32 closer to the sensor. For normal in-home placement, the direct BLE path to the HA host is fine.
For Zigbee-based temperature and humidity sensing in the same ecosystem, the Aqara WSDCGQ12LM is a solid alternative and doesn’t require firmware flashing.