I recently added support support for the Sensirion SCD4x CO₂ Gadget (Reference design for SCD4x CO₂ sensors) to the Passive BLE Monitor integration for Home Assistant. BLE monitor for passive BLE sensors

Sensirion SCD4x CO₂ Gadget

Sensirion SCD4x CO₂ Gadget

The SCD4x CO₂ gadget is a simple reference design circuit board of Sensirion’s SCD4x CO₂ sensor product line. Its the most affordable and simples CO₂ sensor I could find.

It is equipped with a LED indicating the indoor air quality based on the measured CO₂ concentration. Power is supplied via a standard USB-A plug. It also incorporates a Bluetooth Low Energy module allowing it to communicate measurements with Bluetooth devices.

BLE protocol

The sensor is transmitting it’s readings via bluetooth and the Sensirion MyAmbience CO2 App (Android + iOS) can be used to read them in real-time or download a log of past CO2 levels.

The same protocol is used by a ton of other Sensirion BLE devices, though I haven’t added support for them as I don’t have them myself. It also doesn’t implement any of the other bluetooth features (LED control, download of past data etc.)

I initially was looking whether I would try to reverse engineer the data sent between the mobile app and the device, but eventually found yet another Sensirion reference software implementation which is the . It’s compatible with the mobile app and looks like it’s very similar to the software running on the reference board gadget.

I re-wrote the parsing in Python, and that was it. The code is quite simple and available in the pull request for the Passive BLE Monitor: .

Two points of notice:

  • The sensor also transmits temperature and humidity. Something which isn’t supported in the official app.
  • The official app also implements a download of (volatile) historic data via an active bluetooth connections, something I didn’t look into.