In the previous post, we went through getting a root shell on QingPing Air Quality Monitor Gen 2 (also known as CGS2). Recently, I’ve been playing around with Matter + Thread and have set up a sizable network in my home. Naturally, I’d love to have Air Quality data available. I’m currently using an Apple TV as a hub and am using Apple Home app to control and view things around the house.
Since we have full control over the CGS2, it seemed like a simple issue to extend it to support Matter.

There were two routes:
It turns out that matter.js exists and is a full Matter stack implemented purely in node. Additionally, suitable NodeJS arm64 build straight up runs on older glibc so we don’t have to do any weird trickery. With matter.js it was a simple matter (no pun intended) to implement a responder exposing all CGS2 sensors to the Matter network.
Small hickup exists in the fact that Apple Home (and similar as far as I know) insist on provisioning devices over BLE. CGS2 has a bluetooth chip, but doesn’t have bluetoothd nor bluez. It’d be a pain to try to cross compile those, so I opted to instead use a simple trick. We first provision the device into a temporary matter network and then we pair it to Apple Home as a secondary admin network. To do the first pairing you can simply use chip-tool from Matter SDK, but for this instance it was simpler to have a small utility that does all the steps on the device itself.
Loads more details in the updated repository along with deployment guides.
Reach out and let me know if you happen to try this. Peace on Earth.