private@homelab: ~/latest
Home Assistant · Zigbee2MQTT · local control
private@homelab:~$ cat guides/article.md
· ·
6–9 minutes
read

Xiaomi MJWSD05MMC + Home Assistant: Local via BTHome

Flash pvvx firmware on the Xiaomi Mijia Thermometer 3 (MJWSD05MMC) and add it to Home Assistant locally via BTHome — no Mi Home cloud, no ESP32 needed.

Xiaomi MJWSD05MMC + Home Assistant: Local Readings via BTHome

The Xiaomi Mijia Thermometer 3 (MJWSD05MMC) can send temperature, humidity, and battery readings directly to Home Assistant over Bluetooth. Flash the pvvx firmware and select BTHome v2, and those readings can stay local without Mi Home or a Xiaomi cloud connection.

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 Thermometer 3 has a larger clock display showing temperature, humidity, time, date, and day of week. It suits a desk or countertop where you want to read those values without opening HA. The smaller LYWSD03MMC is easier to tuck into a cabinet. Do not use one model’s physical dimensions, battery, or firmware file for the other.

The Thermometer 3 is easier to read from across a room. The smaller LYWSD03MMC fits better inside a cabinet or beside a window frame. Both use the same HA integration path.

The MJWSD05MMC’s clock does not sync through BTHome. Set it through the flasher’s Set time control after connecting over BLE. Displayed time and the temperature/humidity advertisements are separate functions.


What you need before you start

Three things:

A browser with Web Bluetooth support. The pvvx project documents Chromium-based browsers, including Chrome and Edge, with platform-specific requirements. Firefox is not the route used here. A laptop near the sensor makes it easier to keep the Bluetooth connection stable throughout flashing.

A working Bluetooth receiver for Home Assistant. Check that HA can use a built-in radio, a supported USB adapter, or an ESPHome Bluetooth proxy. Home Assistant Green has no onboard Bluetooth, so it needs an adapter or proxy; see Nabu Casa’s hardware FAQ. For other hosts, check the actual hardware and HA’s Bluetooth adapter guidance before buying a dongle. A proxy on an ESP32 is also useful when the sensor is outside the host’s Bluetooth range.

The exact MJWSD05MMC model and a reliable battery. Reset the sensor’s stored binding before activation, using the two-button sequence below. Removing an entry from the Mi Home app alone is not the same as resetting the sensor. The pvvx project distinguishes Chinese (ch) and English (en) MJWSD05MMC variants; keep the matching firmware selection.


Flashing pvvx firmware via the Telink Web flasher

The pvvx project provides a browser-based flasher. It communicates with the sensor over Bluetooth, so you do not need a USB cable or a command-line flashing tool.

Enable experimental web platform features

If your platform requires it, enable chrome://flags/#enable-experimental-web-platform-features and relaunch the browser. Follow the current pvvx instructions for your operating system; an unavailable Bluetooth picker is a browser/platform issue to resolve before flashing.

Connect and flash

Open the Telink flasher. For the MJWSD05MMC, hold both buttons until the screen blinks, release, then briefly press the top button followed by the bottom button. When the Bluetooth symbol flashes, choose Connect in the flasher and select the sensor.

Use Do Activation if offered. Let the flasher identify the model and offer its matching custom firmware, select that version, then use Start Flashing. Keep the device nearby and wait for completion and reboot. Do not substitute an LYWSD03MMC file or the other language variant.

Switch to BTHome v2 advertisement format

After flashing, reconnect and check which advertisement format is selected. Choose BTHome v2 if necessary; defaults can differ between firmware versions.

The MJWSD05MMC uses Bluetooth, with no Wi-Fi or device web server. In the connected flasher, change the advertisement format to BTHome and use Send Config to apply it. Check that HA receives the new advertisements before moving the sensor to its final position.

BTHome is supported by HA’s native integration, without HACS. Unencrypted BTHome advertisements do not need a Xiaomi bind key. If you enable BTHome encryption, supply its encryption key when HA requests it.


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

If the device appears in BTHome but its entities remain unavailable or never update, try removing and adding its integration entry again.

First check the configured advertisement format, receiver or proxy coverage, battery, and any encryption key. Watch for fresh Bluetooth advertisements rather than assuming a stale MAC cache. If HA still has an obsolete integration entry after the firmware change, remove that device entry and add the discovered BTHome device again. Keep the entity names needed by your automations.


Using the sensor in automations

Once the entities are live, the MJWSD05MMC behaves like any other HA sensor.

Temperature and humidity readings are useful for a few simple automations:

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. Use the sensor’s History view or a dashboard history graph to compare humidity around cooking, showers, or ventilation. Check times against the relevant automation traces. HA’s Energy Dashboard is not the place to graph humidity.

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.


What stays local with BTHome

With pvvx configured for BTHome v2, the sensor broadcasts readings over Bluetooth to HA. The sensor has no Wi-Fi connection, and this setup does not use Mi Home to relay its readings to Xiaomi’s servers.

The BTHome integration processes readings locally. You do not need Nabu Casa for it, although you can still use Nabu Casa to access Home Assistant remotely.

To use Mi Home again after flashing, restore the original Xiaomi firmware. If you want to keep the stock firmware, HA’s Xiaomi BLE integration can read its Xiaomi advertisements using a bind key, which can be obtained through the Telink flasher before flashing. Choose that route if Mi Home compatibility still matters to your household.

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 separate time sync. Use the flasher’s Set time control after connecting over BLE. BTHome readings do not set the clock. Check the displayed time again after changing the battery; the sensor can still deliver valid environmental readings while its clock is wrong.

Restoring Mi Home compatibility requires the original firmware. Flashing pvvx removes the normal Mi Home setup. If someone else relies on the Mi Home app to read this sensor, account for that before flashing.

Reporting interval vs. battery life. Faster advertisements and more frequent measurements can use more power. Start with the firmware’s normal settings and watch the update rate in HA before shortening them. Room temperature and humidity seldom need second-by-second reports, and battery life also depends on the battery and radio environment.

Bluetooth range. Test readings at the intended location; walls, receiver placement, and interference affect coverage. If updates become intermittent, place an ESPHome Bluetooth proxy closer to the sensor and check that HA is receiving it through that proxy before changing firmware settings.


For Zigbee-based temperature and humidity sensing in the same ecosystem, the Aqara WSDCGQ12LM is a solid alternative and doesn’t require firmware flashing.

local-firstHome Assistantno-cloud