From firmware version 3.0.10 onwards, the AirGradient ONE and Open Air monitors have below API available.
The monitors run a mDNS discovery. So within the same network, the monitor can be accessed through:
http://airgradient_{{serialnumber}}.local
The following requests are possible:
With the path "/measures/current" you can get the current air quality data.
http://airgradient_ecda3b1eaaaf.local/measures/current
“ecda3b1eaaaf” being the serial number of your monitor.
You get the following response:
{
"wifi": -46,
"serialno": "ecda3b1eaaaf",
"rco2": 447,
"pm01": 3,
"pm02": 7,
"pm10": 8,
"pm003Count": 442,
"atmp": 25.87,
"atmpCompensated": 24.47,
"rhum": 43,
"rhumCompensated": 49,
"tvocIndex": 100,
"tvocRaw": 33051,
"noxIndex": 1,
"noxRaw": 16307,
"boot": 6,
"bootCount": 6,
"ledMode": "pm",
"firmware": "3.1.3",
"model": "I-9PSL",
"monitorDisplayCompensatedValues": true
}
Properties | Type | Explanation |
---|---|---|
serialno |
String | Serial Number of the monitor |
wifi |
Number | WiFi signal strength |
pm01 |
Number | PM1.0 in ug/m3 (atmospheric environment) |
pm02 |
Number | PM2.5 in ug/m3 (atmospheric environment) |
pm10 |
Number | PM10 in ug/m3 (atmospheric environment) |
pm02Compensated |
Number | PM2.5 in ug/m3 with correction applied (from fw version 3.1.4 onwards) |
pm01Standard |
Number | PM1.0 in ug/m3 (standard particle) |
pm02Standard |
Number | PM2.5 in ug/m3 (standard particle) |
pm10Standard |
Number | PM10 in ug/m3 (standard particle) |
rco2 |
Number | CO2 in ppm |
pm003Count |
Number | Particle count 0.3um per dL |
pm005Count |
Number | Particle count 0.5um per dL |
pm01Count |
Number | Particle count 1.0um per dL |
pm02Count |
Number | Particle count 2.5um per dL |
pm50Count |
Number | Particle count 5.0um per dL (only for indoor monitor) |
pm10Count |
Number | Particle count 10um per dL (only for indoor monitor) |
atmp |
Number | Temperature in Degrees Celsius |
atmpCompensated |
Number | Temperature in Degrees Celsius with correction applied |
rhum |
Number | Relative Humidity |
rhumCompensated |
Number | Relative Humidity with correction applied |
tvocIndex |
Number | Senisiron VOC Index |
tvocRaw |
Number | VOC raw value |
noxIndex |
Number | Senisirion NOx Index |
noxRaw |
Number | NOx raw value |
boot |
Number | Counts every measurement cycle. Low boot counts indicate restarts. |
bootCount |
Number | Same as boot property. Required for Home Assistant compatability. (deprecated soon!) |
ledMode |
String | Current configuration of the LED mode |
firmware |
String | Current firmware version |
model |
String | Current model name |
Compensated values apply correction algorithms to make the sensor values more accurate. Temperature and relative humidity correction is only applied on the outdoor monitor Open Air but the properties _compensated will still be send also for the indoor monitor AirGradient ONE.
"/config" path returns the current configuration of the monitor.
{
"country": "TH",
"pmStandard": "ugm3",
"ledBarMode": "pm",
"abcDays": 7,
"tvocLearningOffset": 12,
"noxLearningOffset": 12,
"mqttBrokerUrl": "",
"temperatureUnit": "c",
"configurationControl": "local",
"postDataToAirGradient": true,
"ledBarBrightness": 100,
"displayBrightness": 100,
"offlineMode": false,
"model": "I-9PSL",
"monitorDisplayCompensatedValues": true,
"corrections": {
"pm02": {
"correctionAlgorithm": "epa_2021",
"slr": {}
}
}
}
}
Configuration parameters can be changed with a PUT request to the monitor, e.g.
Example to force CO2 calibration
curl -X PUT -H "Content-Type: application/json" -d '{"co2CalibrationRequested":true}' http://airgradient_84fce612eff4.local/config
Example to set monitor to Celsius
curl -X PUT -H "Content-Type: application/json" -d '{"temperatureUnit":"c"}' http://airgradient_84fce612eff4.local/config
If you use command prompt on Windows, you need to escape the quotes:
-d "{\"param\":\"value\"}"
If the monitor is set up on the AirGradient dashboard, it will also receive the configuration parameters from there. In case you do not want this, please set configurationControl
to local
. In case you set it to cloud
and want to change it to local
, you need to make a factory reset.
Properties | Description | Type | Accepted Values | Example |
---|---|---|---|---|
country |
Country where the device is. | String | Country code as ALPHA-2 notation | {"country": "TH"} |
model |
Hardware identifier (only GET). | String | I-9PSL-DE | {"model": "I-9PSL-DE"} |
pmStandard |
Particle matter standard used on the display. | String | ugm3 : ug/m3 us-aqi : USAQI |
{"pmStandard": "ugm3"} |
ledBarMode |
Mode in which the led bar can be set. | String | co2 : LED bar displays CO2 pm : LED bar displays PM off : Turn off LED bar |
{"ledBarMode": "off"} |
displayBrightness |
Brightness of the Display. | Number | 0-100 | {"displayBrightness": 50} |
ledBarBrightness |
Brightness of the LEDBar. | Number | 0-100 | {"ledBarBrightness": 40} |
abcDays |
Number of days for CO2 automatic baseline calibration. | Number | Maximum 200 days. Default 8 days. | {"abcDays": 8} |
mqttBrokerUrl |
MQTT broker URL. | String | {"mqttBrokerUrl": "mqtt://192.168.0.18:1883"} |
|
temperatureUnit |
Temperature unit shown on the display. | String | c or C : Degree Celsius °C f or F : Degree Fahrenheit °F |
{"temperatureUnit": "c"} |
configurationControl |
The configuration source of the device. | String | both : Accept local and cloud configuration local : Accept only local configuration cloud : Accept only cloud configuration |
{"configurationControl": "both"} |
postDataToAirGradient |
Send data to AirGradient cloud. | Boolean | true : Enabled false : Disabled |
{"postDataToAirGradient": true} |
co2CalibrationRequested |
Can be set to trigger a calibration. | Boolean | true : CO2 calibration (400ppm) will be triggered |
{"co2CalibrationRequested": true} |
ledBarTestRequested |
Can be set to trigger a test. | Boolean | true : LEDs will run test sequence |
{"ledBarTestRequested": true} |
noxLearningOffset |
Set NOx learning gain offset. | Number | 0-720 (default 12) | {"noxLearningOffset": 12} |
tvocLearningOffset |
Set VOC learning gain offset. | Number | 0-720 (default 12) | {"tvocLearningOffset": 12} |
offlineMode |
Set monitor to run without WiFi. | Boolean | false : Disabled (default) true : Enabled |
{"offlineMode": true} |
monitorDisplayCompensatedValues |
Set the display show the PM value with/without compensate value (only on 3.1.9) | Boolean | false : Without compensate (default) true : with compensate |
{"monitorDisplayCompensatedValues": false } |
corrections |
Sets correction options to display and measurement values on local server response. (version >= 3.1.11) | Object | see corrections section | see corrections section |
The corrections
object allows configuring PM2.5 correction algorithms and parameters locally. This affects both the display and local server response values.
Example correction configuration:
{
"corrections": {
"pm02": {
"correctionAlgorithm": "<Option In String>",
"slr": {
"intercept": 0,
"scalingFactor": 0,
"useEpa2021": false
}
}
}
}
Algorithm | Value | Description | SLR required |
---|---|---|---|
Raw | "none" |
No correction (default) | No |
EPA 2021 | "epa_2021" |
Use EPA 2021 correction factors on top of raw value | No |
PMS5003_20240104 | "slr_PMS5003_20240104" |
Correction for PMS5003 sensor batch 20240104 | Yes |
PMS5003_20231218 | "slr_PMS5003_20231218" |
Correction for PMS5003 sensor batch 20231218 | Yes |
PMS5003_20231030 | "slr_PMS5003_20231030" |
Correction for PMS5003 sensor batch 20231030 | Yes |
NOTES:
- Set
useEpa2021
totrue
if want to apply EPA 2021 correction factors on top of SLR correction value, otherwisefalse
intercept
andscalingFactor
values can be obtained from this article- If
configurationControl
is set tolocal
(eg. when using Home Assistant), correction need to be set manually, see examples below
Examples:
- PMS5003_20231030
curl --location -X PUT 'http://airgradient_84fce612eff4.local/config' --header 'Content-Type: application/json' --data '{"corrections":{"pm02":{"correctionAlgorithm":"slr_PMS5003_20231030","slr":{"intercept":0,"scalingFactor":0.02838,"useEpa2021":true}}}}'
- PMS5003_20231218
curl --location -X PUT 'http://airgradient_84fce612eff4.local/config' --header 'Content-Type: application/json' --data '{"corrections":{"pm02":{"correctionAlgorithm":"slr_PMS5003_20231218","slr":{"intercept":0,"scalingFactor":0.03525,"useEpa2021":true}}}}'
- PMS5003_20240104
curl --location -X PUT 'http://airgradient_84fce612eff4.local/config' --header 'Content-Type: application/json' --data '{"corrections":{"pm02":{"correctionAlgorithm":"slr_PMS5003_20240104","slr":{"intercept":0,"scalingFactor":0.02896,"useEpa2021":true}}}}'