The idea is to find out if the Luftdaten sensors inacurracy can be compensated with a statistical model.
For this, i compare the measurements from the official air quality stations of the Umweltbundesamt (German Environment Agency) with the nearest Luftdaten sensors. There are two related structural flaw with those Luftdaten Sensors (which by the way is an excellent citizen initiative) :
- the SDS011 laser particle sensors spin out once the humidity is above 70%
- the cheap (but easy to plug, e.g. without soldering) humidity sensors DHT22 that is used by 80% of the installation performs badly.
The bulgarian counterpart of this project uses exclusively the better BOSCH BME280 for temperature and humidity measurements.
There are already some publications on that topics, and i tried to follow the path of Norbert Streibl
By focusing on the Luftdaten sensors within a range of less than 2 kilometers from an official station, and filtering on Luftdaten sensors with BME280 only, we can analyse a pool of roughly 200 locations datasets, and check whether the different compensation formula proposed by Mr Streibl fit with the "reference" values provided by the Umweltbundesamt.
All the scrapping scripts for both Luftdaten and the Umweltbundesamt are available on the github repo
Try it
Pick a sensor location, then a growth function and its parameters: the corrected sensor values (in green) are the raw ones divided by the growth factor computed from the BME280 humidity. The closer the green line sticks to the official measurements (in navy), the better the correction. The dashed red line on the humidity strip marks the 70% threshold where the SDS011 starts to drift.
The sample covers 14 locations across Germany, each with an SDS011 and a BME280 on the same site, less than 2 km from an official Umweltbundesamt PM10 station, over the humid winter from October 2018 to March 2019. Values are centred 24 hours means. The lag slider shifts the reference series by a few hours.
Across the sample, the ratio between sensor and reference climbs from about 0.5 in dry air (below 50% humidity) to 1.2 above 85%: the SDS011 rather under-reads in dry conditions, and humidity inflates its values by a factor of more than two.
The sensor data comes from the sensor.community archive (ODbL), the reference data from the Umweltbundesamt (dl-de/by-2-0).