When using the PurpleAir Utility or a Classic-SD sensor modified to record SD data every second data is not in CSV format. Instead, it is in a custom format described below, which may require additional processing to use.
1-second Reports
Every second, one of the laser counters will report. Five reports will be recorded from channel A, then five reports from channel B. This process repeats until the next 2-minute report. This 2-minute report is the averaged data that is uploaded to our API as “Real-time” data. This is the same “Real-time” data you will see for sensors on our map. Intermittent reports from gas sensor (if gas sensor applicable) are recorded about every three seconds, and will appear interspersed with the 1-second reports from the laser counters. Example reports are found below.
Channel A report
.0h10:54.538 2022/12/30T22:10:10z: DATA A(34),82,14,29,859.35,0.03,17872,-57,654,222,508,955,147,338,636,505,388,38928,11925,4614,1296,592,368,25.00Channel A report
.0h10:55.456 2022/12/30T22:10:11z: DATA A(35),82,14,29,859.35,0.03,17872,-57,655,223,508,967,148,338,644,505,388,38850,11927,4602,1318,610,372,25.00Gas Sensor Report
.0h10:56.598 2022/12/30T22:10:12z: p:85936.06 gasR:12917166.00 iaq:25.00 iaqA:0 T:28.12(28.18) H:14.92(14.87) sIaq:25.00 co2Eq:500.00 breathVocEq:0.50Channel B report
.0h10:57.350 2022/12/30T22:10:13z: DATA B(34),82,14,29,859.36,0.03,17872,-56,657,205,485,1018,136,323,678,490,373,35928,11126,4122,1506,756,376,25.00Channel B report
.0h10:58.267 2022/12/30T22:10:14z: DATA B(35),82,14,29,859.36,0.02,17872,-56,658,203,490,1044,135,326,695,493,376,35853,11090,4177,1570,790,390,25.00
1-second Report Breakdown
Channel A Report
.0h11:24.761 2022/12/30T22:10:40z: DATA A(48),82,14,29,859.38,0.03,17872,-59,684,221,496,874,146,330,581,497,380,38442,11710,4418,1206,506,284,25.00
Name | Value |
---|---|
Uptime (written out; includes milliseconds) | .0h11:24.761 |
UTCDateTime | 2022/12/30T22:10:40z |
Channel (number of samples from channel since last upload) | DATA A(48) |
current_temp_f | 82 |
current_humidity | 14 |
current_dewpoint_f | 29 |
pressure | 859.38 |
adc | 0.03 |
mem | 17872 |
rssi | -59 |
uptime | 684 |
pm1_0_cf_1 | 221 |
pm2_5_cf_1 | 496 |
pm10_0_cf_1 | 874 |
pm1_0_atm | 146 |
pm2_5_atm | 330 |
pm10_0_atm | 581 |
pm2.5_aqi_cf_1 | 497 |
pm2.5_aqi_atm | 380 |
p_0_3_um | 38442 |
p_0_5_um | 11710 |
p_1_0_um | 4418 |
p_2_5_um | 1206 |
p_5_0_um | 506 |
p_10_0_um | 284 |
gas | 25.00 |
2-minute Report
Below is an example of the three sections of a 2-minute report. Section 1 is the raw 2-minute data. This data is used to create the 2-minute report that is uploaded to the API (Section 3). Sections 2 and 3 will be broken down below the example.
1.
{“SensorId”:“xx:xx:xx:xx:xx:xx”,“DateTime”:“2022/12/30T22:00:59z”,“Geo”:“PurpleAir-6e32”,“Mem”:12345,“memfrag”:3,“memfb”:35824,“memcs”:2464,“Id”:1,“lat”:0.000000,“lon”:0.000000,“Adc”:“nan”,“loggingrate”:15,“place”:“”,“version”:“7.02”,“uptime”:103,“rssi”:-62,“period”:103,“httpsuccess”:1,“httpsends”:1,“hardwareversion”:“3.0”,“hardwarediscovered”:“3.0+OPENLOG+NO-DISK+RV3028+BME680+PMSX003-A+PMSX003-B”,“current_temp_f”:82,“current_humidity”:15,“current_dewpoint_f”:30,“pressure”:859.56,“current_temp_f_680”:82,“current_humidity_680”:15,“current_dewpoint_f_680”:30,“pressure_680”:859.56,“gas_680”:“nan”,“p25aqic_b”:“rgb(0,228,0)”,“pm2.5_aqi_b”:0,“pm1_0_cf_1_b”:0.00,“p_0_3_um_b”:72.33,“pm2_5_cf_1_b”:0.00,“p_0_5_um_b”:22.96,“pm10_0_cf_1_b”:0.00,“p_1_0_um_b”:3.38,“pm1_0_atm_b”:0.00,“p_2_5_um_b”:0.22,“pm2_5_atm_b”:0.00,“p_5_0_um_b”:0.00,“pm10_0_atm_b”:0.00,“p_10_0_um_b”:0.00,“p25aqic”:“rgb(0,228,0)”,“pm2.5_aqi”:1,“pm1_0_cf_1”:0.00,“p_0_3_um”:128.02,“pm2_5_cf_1”:0.19,“p_0_5_um”:30.47,“pm10_0_cf_1”:0.33,“p_1_0_um”:7.02,“pm1_0_atm”:0.00,“p_2_5_um”:3.23,“pm2_5_atm”:0.19,“p_5_0_um”:0.56,“pm10_0_atm”:0.33,“p_10_0_um”:0.00,“wlstate”:“Connected”,“status_0”:2,“status_1”:2,“status_2”:2,“status_3”:0,“status_4”:0,“status_5”:0,“status_7”:0,“status_8”:0,“status_9”:0}
2.
UTCDateTime,mac_address,firmware_ver,hardware,current_temp_f,current_humidity,current_dewpoint_f,pressure,adc,mem,rssi,uptime,pm1_0_cf_1,pm2_5_cf_1,pm10_0_cf_1,pm1_0_atm,pm2_5_atm,pm10_0_atm,pm2.5_aqi_cf_1,pm2.5_aqi_atm,p_0_3_um,p_0_5_um,p_1_0_um,p_2_5_um,p_5_0_um,p_10_0_um,pm1_0_cf_1_b,pm2_5_cf_1_b,pm10_0_cf_1_b,pm1_0_atm_b,pm2_5_atm_b,pm10_0_atm_b,pm2.5_aqi_cf_1_b,pm2.5_aqi_atm_b,p_0_3_um_b,p_0_5_um_b,p_1_0_um_b,p_2_5_um_b,p_5_0_um_b,p_10_0_um_b,gas
3.
2022/12/30T22:01:01z,xx:xx:xx:xx:xx:xx,7.02,3.0+OPENLOG+NO-DISK+RV3028+BME680+PMSX003-A+PMSX003-B,82,15,30,859.56,nan,36848,-63,105,0.00,0.19,0.33,0.00,0.19,0.33,1,1,128.02,30.47,7.02,3.23,0.56,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0,0,72.33,22.96,3.38,0.22,0.00,0.00,nan
2 and 3 Side-by-Side (from 2-min report)
Below is a table showing Section 2 (headers) next to Section 3 (values).
2. Name | 3. Value |
---|---|
UTCDateTime | 2022/12/30T22:01:01z |
mac_address | xx:xx:xx:xx:xx:xx |
firmware_ver | 7.02 |
hardware | 3.0+OPENLOG+NO-DISK+RV3028+BME680+PMSX003-A+PMSX003-B |
current_temp_f | 82 |
current_humidity | 15 |
current_dewpoint_f | 30 |
pressure | 859.56 |
adc | NaN |
mem | 36848 |
rssi | -63 |
uptime | 105 |
pm1_0_cf_1 | 0.00 |
pm2_5_cf_1 | 0.19 |
pm10_0_cf_1 | 0.33 |
pm1_0_atm | 0.00 |
pm2_5_atm | 0.19 |
pm10_0_atm | 0.33 |
pm2.5_aqi_cf_1 | 1 |
pm2.5_aqi_atm | 1 |
p_0_3_um | 128.02 |
p_0_5_um | 30.47 |
p_1_0_um | 7.02 |
p_2_5_um | 3.23 |
p_5_0_um | 0.56 |
p_10_0_um | 0.00 |
pm1_0_cf_1_b | 0.00 |
pm2_5_cf_1_b | 0.00 |
pm10_0_cf_1_b | 0.00 |
pm1_0_atm_b | 0.00 |
pm2_5_atm_b | 0.00 |
pm10_0_atm_b | 0.00 |
pm2.5_aqi_cf_1_b | 0 |
pm2.5_aqi_atm_b | 0 |
p_0_3_um_b | 72.33 |
p_0_5_um_b | 22.96 |
p_1_0_um_b | 3.38 |
p_2_5_um_b | 0.22 |
p_5_0_um_b | 0.00 |
p_10_0_um_b | 0.00 |
gas | NaN |