ENG | Switchbot CO2 Monitor BLE protocol
Notes on decoding the SwitchBot Meter Pro CO2 monitor's BLE advertisement: manufacturer data byte layout for temperature, humidity, and CO2.
This article contains nothing new, it is for my reference.
We have CO2/temp/humidity monitor in our office, which I decided to explore a bit. It turned out to be a SwitchBot Meter Pro CO2 monitor. Interesting device which has relatively nice design, runs on two AA batteries, it turned out it has a mobile app for configuration. After a bit exploration, it turned out it uses BLE (Bluetooth Low Energy) and older device even has some documentation (https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/meter.md), but BLE API repo was not updated in 2 years.
It shows UUID: 0xfd3d, data 0x350064.
Then manufacturer data are interesting
1
2
3
4
5
6
7
8
9
10
11
12
Position
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
Data
B0 E9 FE BB ED 67 98 64 02 99 2D 00 14 02 59 00
^^^^^^^^^^^^^^^^^ MAC Address B0:E9:FE:BB:ED:67
^^ Temperature fraction (*0.1) 0.2
^^ Temperature integer part (&7f) and sign (&80)
0b10011001 -> (+) 16+8+1 = +25C
^^ Humidity
0b00101101 -> 32+8+4+1 = 45%
^^^^^ CO2 ppm as big-endian
512+89 = 601ppm
Actually start of data block contains bytes 0x69 0x09 (or 0x0969 depending on byte order) which are manufacturer ID (Woan Technology).
Yes, that is all. Protocol likely has battery level, ways how to set CO2 measurement frequency, celsius or fahrenheit, it’s unclear where station gets time and date. And it can fit into larger ecosystem and very likely has internal data storage and phone -> cloud sync option. But I had other things to do at work.
Nonetheless, with this information it is possible to read data using some microcontroller and add independent display or data logger.


