Flash Xiaomi LYWSD03MMC BLE sensor with Zigbee firmware
Intro
In 2021 I wrote about some awesome cheap Xiaomi temperature and humudity sensors. They come with a very battery-efficient eInk screen and all you needed to incorporate them into Home Assistant was an ESP32 flashed with the Bluetooth Proxy firmware.
Recently, I discovered the small square LYWSD03MMC sensors not only can be flashed to support the BTHome BLE broadcast format, but there now exists an (experimental) firmware that enables the sensors to communicate via Zigbee as well. Zigbee2MQTT (and maybe also ZHA) support these devices, giving you another method of integrating these in Home Assistant :)
Flashing the LYWSD03MMC
Requirements
All you need for this process are:
- a Xiaomi LYWSD03MMC temperature and humidity sensor
- a laptop/computer/… with Edge, Chrome or Opera browser

Flashing process
First, in your browser, enable the Expirimental Web Platform Features
- Edge: edge://flags/#enable-experimental-web-platform-features
- Chrome: chrome://flags/#enable-experimental-web-platform-features
- Opera: opera://flags/#enable-experimental-web-platform-features
Open the Telink Flasher tool in your browser and follow these steps:
- Check the box next to “Get Advertising MAC”.
- Click on the blue “Connect” button.
- In the pop-up, look for your sensor and click “Pair”.
The name will probably contain LYWSD03 or ATC (if you’ve flashed in in the past). - Once the connection is established, more buttons and fields will appear on your screen.
- Press the button to select the Zigbee firmware (currently: Z03MMC_v0119.bin).

Firmware options - A pop-up warning you of the experimental nature of this firmware will appear.
Press “OK”.
Be warned - Press “Start Flashing”.
You can follow the flashing process in the blue box at the top of the page.
Flashing… - Once flashing is done, the blue section will read “Status: Disconnected.”
At the bottom of the page, the logs will also read “Update done after xxx seconds”.
Connecting with Zigbee2MQTT
This process is the same as for any other Zigbee device you want to add.
- Take out the battery from the sensor.
- Open the Zigbee2MQTT portal.
- Press the “Permit join (All)” button or first select a preferred router you want to connect the sensor to.
- Insert the battery into the sensor again and wait until a pop-up appears on the Z2M dashboard.
- Z2M will automatically recognise the device and will configure everything that’s needed for the sensor to function.
- If you set up the automation, Home Assistant will also show you a notification indicating a new device joined your network.
- Once the device is set up, you can change it’s name (incl. entity id in Home Assistant), give it a description, etc.

And we’re done :)
In less than 2 minutes, our beloved eInk temperature sensor has been converted from BLE to Zigbee!
LYWSD03MMC-z
Since version v0120 of pvvx’s ZigbeeTlc firmware it appears the device is identified as LYWSD03MMC-z to differentiate it from the devbis firmware version.
As a result of that, Zigbee2MQTT doesn’t recognise/support the device (yet).
To fix this, you need to do is add an External Converter to Z2M.
- Download lywsd03mmc-z.js and save it in your Z2M config folder.
- In the Z2M dashboard go to Settings > Settings > External converters and add
lywsd03mmc-z.js. - Restart Z2M so it loads the config.
Previously added devices (that still report as LYWSD03MMC minux the -z) may now start throwing errors.
To fix this, you’ll need to remove them from Zigbee2MQTT and join them again.

There’s already a GitHub issue open to add support for the -z.
So, in the future, support for both the devbis and the ZigbeeTlc versions will likely be available out-of-the-box so adding a custom External Converter won’t be needed anymore.