The four pack turns up in a padded envelope, four white squares about the size of a matchbox with an LCD on the front, and between them they cost less than one branded sensor. You drop a coin cell into the first one and the screen wakes up with a temperature on it. The hub sitting eight feet away sees nothing at all.
The sensor is working perfectly. It is broadcasting several times a minute, quite happily, and what comes out of it is encrypted MiBeacon, scrambled with a key that lives in your Xiaomi account rather than on the device. So the readings really are in the air, and they really are unreadable: not to our hub, not to Home Assistant, not to anything that is not the Xiaomi app. That is Xiaomi keeping their ecosystem theirs, which is their business, and it leaves everybody outside it in exactly the same spot.
Two projects, one job
People have been replacing the firmware on these things for years, and there are two names worth knowing. ATC came first and still does the job. pvvx grew out of it, is the more actively developed of the two, and is what most people install now, partly because it can advertise in several formats including BTHome, which we read as well. Either one leaves you with a sensor broadcasting in the clear. Absent a reason to prefer otherwise, install pvvx.
No cable, no soldering, no case to open
Reflashing sounds like a bench job with a programmer and a set of test clips, and it is nothing of the sort. The sensor accepts firmware over Bluetooth, and a community web tool does the whole thing from a browser tab using Web Bluetooth. The sensor sits on the table. The laptop talks to it directly, over the air, and nothing gets opened or soldered or plugged into anything.
What you need is a Chromium browser on a real computer, which means Chrome or Edge on a desktop or a laptop. Web Bluetooth does not exist in Safari or Firefox and it will not work from an iPhone, so if the phone is your only device, this is the evening you borrow somebody’s laptop. Keep the sensor within a few feet of the machine while you work, closer being better. Set aside about fifteen minutes for the first one, most of which is you reading carefully rather than anything actually happening, and two minutes each for the rest.
Put a fresh CR2032 in before you start. This is the step people skip and it is the one that causes real trouble. An interrupted flash is how you end up with a sensor that is genuinely awkward to recover, and a coin cell that has been in a drawer for a year can read fine on a meter and still sag under the load of a sustained radio write. New battery, every time, even on a sensor you unboxed this morning.
How it goes, roughly
You will not get click-by-click instructions from us, and that is deliberate rather than lazy. The flasher is a community tool whose interface changes whenever its author changes it, and a stale walkthrough is worse than none at all: you would follow it, find the buttons did not match, and have no way of telling whether you were on the wrong page or one click from breaking something. The shape of the process does not go stale, so here is the shape.
- Connect. The tool scans over Bluetooth and shows what is nearby. Yours turns up as an LYWSD03MMC. With four of them on the table you will have no idea which is which, so do them one at a time and move the finished ones out of the room.
- It reads the device. The tool works out the hardware revision and which firmware belongs on it. This is the step that catches a sensor which turns out not to be an LYWSD03MMC at all, which happens more often than you would expect.
- Activate. Some paths unlock the device with a token before anything can be written to it. The tool handles this itself, and the only reason to know the step exists is so that seeing it does not read as a failure.
- Flash. A progress bar, well under a minute. Do not close the tab and do not wander off with the laptop, because walking out of Bluetooth range mid-write is the same problem as the battery dying mid-write.
- It reboots. The screen comes back, the temperature reappears, and the sensor is now broadcasting in the clear. That is the whole job.
Search for the pvvx LYWSD03MMC web flasher, or the ATC MiThermometer project, and use whichever tool is linked from the project’s own repository rather than a mirror somebody else put up. That advice ages a great deal better than a link from us would.
Once it is flashed, two settings matter
The same tool gives you a configuration page, and for RV use there are two things on it worth touching. First is the advertising interval, meaning how often the sensor speaks up. Faster buys a more responsive reading at the cost of battery life, slower does the reverse, and the default is sensible enough that most people leave it alone. The exception is a sensor living at the edge of range, where more broadcasts means more chances one of them lands, so speeding it up genuinely helps out in the wet bay.
Second is the broadcast format. pvvx will advertise in several of them, and RoamVitals reads both its own custom format and BTHome, so either suits us. Pick BTHome if you also run Home Assistant, because then one sensor feeds both without a bridge sitting in the middle translating.
Choose an encrypted BTHome format and the tool hands you a bind key. Save that key against the sensor in the hub or nothing decodes, and nothing is exactly what you will see: no error, no warning, just a sensor with no readings. Unencrypted is simpler, and there is very little to protect in a temperature reading from your own camper.
What usually goes wrong
The tool cannot see the sensor at all. Nine times in ten this is the browser. Web Bluetooth wants Chrome or Edge on a desktop, and on Linux it sometimes wants a flag turned on as well. If the browser is right, check the dull things: battery seated, screen on, sensor actually awake.
Connecting and then dropping is usually distance, or something else already talking to the sensor, so move closer and shut the Xiaomi app along with anything else holding its one connection. A flash that dies partway through feels like a catastrophe and rarely is one. Fit a fresh cell, sit closer to the laptop, run it again. These devices are considerably harder to break permanently than the process makes them feel, and a failed write normally leaves the thing recoverable by the same tool that just failed on it.
Then there is the sensor that flashed perfectly and still does not appear in RoamVitals. Check the broadcast format is one we read, and if you picked an encrypted one, check the bind key really did get saved against the sensor. With both of those right you have stopped troubleshooting a flash and started troubleshooting range, and a sensor two walls away behind the fridge is a different post.
Is it worth an afternoon?
For one sensor, arguably not. Buy a Govee, put it on a shelf, get on with your day. For four or six it clearly is, and the reason has little to do with the money saved per unit. It is that at this price you stop rationing sensors. One in the bedroom, one in the wet bay, one by the fridge, one in the pass-through, because each additional one costs almost nothing and placing it stops being a decision you weigh up. That changes what you can see about your rig far more than any single better sensor would.
Do the first one on a wet afternoon with nothing else booked, since that is the one that takes the reading and the fiddling. The rest are two minutes each at the picnic table while the coffee brews. For where these sit against the alternatives, see the temperature sensor comparison, and the compatibility database for exactly what we read from each.