AirGradient Forum

Abnormally low CO2 readings

I have an I-9PSL. In the last week I’ve noticed abnormally low CO2 readings when opening the window of the room where the device is.


O-1PST for reference, on a balcony, 5 meters away from the indoor unit.

Lowest value in the last week was 103.

The sensor was working fine until recently. Only thing that might have thrown it off-course was the fact that I left the apartment empty for about a month (from mid-December to mid-January). During this time, the value stayed around 400, but I don’t see how that might have affected it.

Below is the month of December (on the 15th I left):

Running 3.6.0 with following config:

{
  "country": "AT",
  "pmStandard": "ugm3",
  "ledBarMode": "co2",
  "abcDays": 8,
  "tvocLearningOffset": 12,
  "noxLearningOffset": 12,
  "mqttBrokerUrl": "",
  "temperatureUnit": "c",
  "configurationControl": "cloud",
  "postDataToAirGradient": true,
  "ledBarBrightness": 10,
  "displayBrightness": 0,
  "offlineMode": false,
  "monitorDisplayCompensatedValues": false,
  "model": "I-9PSL",
  "disableCloudConnection": false,
  "corrections": {
    "atmp": {
      "correctionAlgorithm": "none",
      "slr": null
    },
    "rhum": {
      "correctionAlgorithm": "none",
      "slr": null
    }
  },
  "httpDomain": "",
  "extendedPmMeasures": false
}

Any idea what might cause the value to drop so low now?

Mine did something like this with values down to 160 ppm and I think it was due to the ABC and insufficient ventilation of the room. I solved the problem with a calibration request leaving the window open long enough.

Based on my understanding of how calibration works, when calibration is triggered, it looks at the readings history for the last 8 days and picks up the lowest value and calibrates against that. In that case, it shouldn’t matter if you open the window during calibration as long as your lowest reading from the previous 8 days was around 400.

However, if that’s indeed how it works, it also creates a problem with abnormally low readings like mine because they will be treated as the new “normal” (400 ppm) and will skew the future measurements.

The automatic calibration, indeed is based on the last 8 days (unless you change the settings), so I requested a calibration from the advanced settings, because I thought the CO2 values in my room were too high in the days before that 160 ppm reading.

That is my understanding of how the calibration works and I run into the same issue, as my home never gets down to 400 due to being nearly always occupied and well sealed.

Around every 3-4 months I take my devices outside for 10 minutes, do a calibration to ensure it is around 400, then wait 5 minutes and bring them inside and turn off the Automatic Baseline Calibration. This works pretty well as long as I’m not moving the sensors around in between as moving can throw it off until the next calibration, along with standard drift over time.

As @gianfranco.bottini mentioned, this might be a good time to request a manual calibration for the unit (either when it is outdoors or when it is near an open window).

You can then disable automatic calibration entirely and just manually calibrate the device every few months. Alternatively, you can decrease the frequency of ABC.

I’m unsure why the device calibrated to a higher-than-ambient concentration (seeing as there were some dips to around 400ppm as per the outdoor monitor), but either a new automatic calibration or manual calibration should solve the issue.

The value briefly climbed to around 400ppm after I triggered the calibration, then starting to slowly decrease. It seems it’s stabilizing around 175ppm.

The device is in a room with the window opened. Door is shut, no source of CO2 in the room.

How quickly after opening the window did you trigger calibration? It needs to be at near ambient levels when you click the Calibrate option, otherwise it is still too high as you see. Now that it has mostly leveled off, I would do the calibration again and it should stay near 400

1 Like

I’ve found when doing manual calibration that it does take 20 minutes or so to settle after being placed in a minimal CO2 environment. If you trigger the calibration too soon it will continue to decrease as @gis’s graph shows.

By the way, how do you disable automatic baseline calibration using the local API? There is only the abcDays parameter relating to this; is setting it to zero the way? (If so it might be worth documenting that here.)

@ABR I think you’re right, I disabled ABC through the Advanced Settings in the AirGradient Dashboard and my config file has abcDays set to 0

{“country”:“IT”,
“pmStandard”:“ugm3”,
“ledBarMode”:“co2”,
"abcDays":0,
“tvocLearningOffset”:12,
“noxLearningOffset”:12,
“mqttBrokerUrl”:"",
“httpDomain”:"",
“temperatureUnit”:“c”,
“disableCloudConnection”:false,
“configurationControl”:“both”,
“postDataToAirGradient”:true,
“ledBarBrightness”:33,
“displayBrightness”:10,
“offlineMode”:false,
“monitorDisplayCompensatedValues”:false,
“model”:“I-9PSL-DE”,
“extendedPmMeasures”:false
}

I think that was the issue. I did another calibration after waiting for a while and now it seems it’s back to normal:


After Wednesday evening when I triggered the last calibration, the value didn’t drop below 400 anymore. So I’d say the issue is solved. Thanks to all who replied!

For me there’s still the question of how the calibration actually works.

On one hand, we’re told that ABC requires the sensor to be exposed to fresh air for about 30 minutes in the last 7 days.

On the other hand, when we trigger the manual calibration in the dashboard, we’re told to first ventilate the room (and keep CO2 out during calibration).

These two explanations seem conflicting to me. If ABC requires 30 mins of exposure in the last 7 days, why manual calibration requires to ventilate the room before triggering it? At least in my case, I made sure the sensor was exposed to fresh air and I don’t remember a week passing by where the value didn’t drop to around 400ppm. However, despite that, it seems the ABC didn’t really do its job properly. Based on my limited observations, manual calibration is required (following the procedure explained in the dashboard) periodically (probably as advised by @MallocArray here) because ABC seems to be failing at its job after a while.

Just because the sensor reports it getting to 400 in the past week, doens’t mean that your location actually got to an ambient level of CO2, it only means that the sensor believed it got down to 400, which is what ABC is designed to do. Whatever the lowest value is for the last week becomes 400 when ABC happens. If your house doesn’t really get below 600 over the last week, it now becomes 400 and you are showing 200 too low. This is what happens for my house.

By purposely ventilating a room or placing the sensor outside for awhile, you are ensuring it gets a chance to experience ambient levels so 400 becomes close to an actual 400 value.

If you do a manual calibration without ventilating the room, you have no idea what the current value actually is, but the sensor will now treat it as 400, so if you had been in the room all day and it was actually something like 1200 but you did a manual calibration, it becomes 400 anyway and is way off.

Does that make any sense?

I get what you’re saying and yes, it makes sense. Basically, you shouldn’t have ABC enabled unless you can guarantee the sensor actually experiences 400 ppm at least once within a week. Otherwise, you risk recalibrating against a higher value which will then skew future reading.

The thing is, in my case, the sensor is about 3 meters away from a window which is opened daily. Looking at old graphs, the reading dropped below 500 daily, so, while I cannot guarantee 100%, I am reasonably confident the sensor actually experienced close to 400 ppm often enough.

Unfortunately, the ABC is rather opaque. We know neither when it was last triggered nor against which actual value. I don’t know if the sensor doesn’t expose this information or if it’s just the API that doesn’t expose it. Without these details, I can’t draw any clear conclusions. I’ve disabled ABC on my internal sensors as well and I’ll just trigger manual calibrations periodically like you do.