Monitoring Carbon Monoxide at Home

, 3 minutes to read, 85 views

It’s probably no surprise to anyone reading this blog that I measure almost everything in my home—especially with my Apollo Air-1. Recently, the Air-1 received a software update, which, while not unusual, surprisingly started giving me useful values for Carbon Monoxide (CO) concentration.

A software update started displaying useful values for Carbon Monoxide concentration.

Before this update, I assumed CO readings were unreliable, mainly providing rough values—typically just 0 ppm when low or a generic “higher” value when CO was detected1. As a result, I didn’t pay much attention to it.

A Little Background on Carbon Monoxide

In Switzerland, CO monitoring isn’t all that common. Many homes don’t use any combustion processes, so CO monitors are less prevalent here than in other countries.

Health Canada infographic explaining the dangers of Carbon Monoxide

CO is a dangerous gas, especially in spaces with open flames, like gas stoves or wood-burning stoves. We don’t have these in our apartment, so I hadn’t prioritised monitoring here2.

Monitoring and Alerts

Since I already have the sensor, I figured I should set up monitoring. As this is an ESPHome device rather than a prebuilt system, it doesn’t come with a built-in alarm function or defined limits. So, I added a CO tile to my dashboard next to the Carbon Dioxide (CO₂) reading.

Two tiles on my Home Assistant dashboard showing current Carbon Monoxide and Carbon Dioxide levels

I also wanted an alert if CO levels exceeded a certain threshold. I wasn’t about to experiment with these limits—it’s too dangerous and would take far too much time. Ideally, I’d rely on trusted organisations, but I couldn’t find clear guidance from Swiss authorities on acceptable CO levels. However, I did find some guidelines from the World Health Organisation3, which I used to set up notifications4. CO exposure levels are typically provided as average limits over periods like 15 minutes, 1 hour, 8 hours, and 24 hours. I decided not to aggregate readings over 15 minutes, instead using the current reading as an immediate threshold. If levels exceed this for 15 minutes, I get an instant alert.

Here are the limits I’ve set:

TimeLimit
15 minutes587 ppm
1 hour30 ppm
8 hours9 ppm
24 hours6 ppm

So far, I haven’t received any alerts. Background levels hover around 4 ppm, likely due to occasional street traffic nearby. As long as notifications stay silent, I’m in good shape, and the tracking continues smoothly.


  1. It was consistently at 0 ppm, which is far preferable to seeing high levels, given how dangerous CO can be. ↩︎

  2. We do have a holiday home with a wood-burning stove, where installing a CO monitor is definitely a priority. ↩︎

  3. The WHO values are a bit tricky to source directly. I found this chart, which lacks a direct WHO source, and this book chapter which lists values in mg/m³ rather than ppm, so conversions can be confusing. ↩︎

  4. Perhaps a good sign—I haven’t received any notifications for high CO levels yet. ↩︎

  5. This value isn’t aggregated; a notification triggers immediately if the reading exceeds this threshold. ↩︎

Tags: ESPHome, Home Assistant, Smart Home