mirror of
https://github.com/airgradienthq/arduino.git
synced 2025-07-19 11:42:09 +02:00
New particle count 0.5 and 5.0
This commit is contained in:
@ -1005,8 +1005,10 @@ static void updatePMS5003() {
|
||||
measurements.update(Measurements::PM25_SP, ag->pms5003.getPm25Sp());
|
||||
measurements.update(Measurements::PM10_SP, ag->pms5003.getPm10Sp());
|
||||
measurements.update(Measurements::PM03_PC, ag->pms5003.getPm03ParticleCount());
|
||||
measurements.update(Measurements::PM05_PC, ag->pms5003.getPm05ParticleCount());
|
||||
measurements.update(Measurements::PM01_PC, ag->pms5003.getPm01ParticleCount());
|
||||
measurements.update(Measurements::PM25_PC, ag->pms5003.getPm25ParticleCount());
|
||||
measurements.update(Measurements::PM5_PC, ag->pms5003.getPm5ParticleCount());
|
||||
measurements.update(Measurements::PM10_PC, ag->pms5003.getPm10ParticleCount());
|
||||
} else {
|
||||
measurements.update(Measurements::PM01, utils::getInvalidPmValue());
|
||||
@ -1016,8 +1018,10 @@ static void updatePMS5003() {
|
||||
measurements.update(Measurements::PM25_SP, utils::getInvalidPmValue());
|
||||
measurements.update(Measurements::PM10_SP, utils::getInvalidPmValue());
|
||||
measurements.update(Measurements::PM03_PC, utils::getInvalidPmValue());
|
||||
measurements.update(Measurements::PM05_PC, utils::getInvalidPmValue());
|
||||
measurements.update(Measurements::PM01_PC, utils::getInvalidPmValue());
|
||||
measurements.update(Measurements::PM25_PC, utils::getInvalidPmValue());
|
||||
measurements.update(Measurements::PM5_PC, utils::getInvalidPmValue());
|
||||
measurements.update(Measurements::PM10_PC, utils::getInvalidPmValue());
|
||||
}
|
||||
}
|
||||
@ -1043,6 +1047,7 @@ static void updatePm(void) {
|
||||
measurements.update(Measurements::PM25_SP, ag->pms5003t_1.getPm25Sp(), channel);
|
||||
measurements.update(Measurements::PM10_SP, ag->pms5003t_1.getPm10Sp(), channel);
|
||||
measurements.update(Measurements::PM03_PC, ag->pms5003t_1.getPm03ParticleCount(), channel);
|
||||
measurements.update(Measurements::PM05_PC, ag->pms5003t_1.getPm05ParticleCount(), channel);
|
||||
measurements.update(Measurements::PM01_PC, ag->pms5003t_1.getPm01ParticleCount(), channel);
|
||||
measurements.update(Measurements::PM25_PC, ag->pms5003t_1.getPm25ParticleCount(), channel);
|
||||
measurements.update(Measurements::Temperature, ag->pms5003t_1.getTemperature(), channel);
|
||||
@ -1059,6 +1064,7 @@ static void updatePm(void) {
|
||||
measurements.update(Measurements::PM25_SP, utils::getInvalidPmValue(), channel);
|
||||
measurements.update(Measurements::PM10_SP, utils::getInvalidPmValue(), channel);
|
||||
measurements.update(Measurements::PM03_PC, utils::getInvalidPmValue(), channel);
|
||||
measurements.update(Measurements::PM05_PC, utils::getInvalidPmValue(), channel);
|
||||
measurements.update(Measurements::PM01_PC, utils::getInvalidPmValue(), channel);
|
||||
measurements.update(Measurements::PM25_PC, utils::getInvalidPmValue(), channel);
|
||||
measurements.update(Measurements::Temperature, utils::getInvalidTemperature(), channel);
|
||||
@ -1077,6 +1083,7 @@ static void updatePm(void) {
|
||||
measurements.update(Measurements::PM25_SP, ag->pms5003t_2.getPm25Sp(), channel);
|
||||
measurements.update(Measurements::PM10_SP, ag->pms5003t_2.getPm10Sp(), channel);
|
||||
measurements.update(Measurements::PM03_PC, ag->pms5003t_2.getPm03ParticleCount(), channel);
|
||||
measurements.update(Measurements::PM05_PC, ag->pms5003t_2.getPm05ParticleCount(), channel);
|
||||
measurements.update(Measurements::PM01_PC, ag->pms5003t_2.getPm01ParticleCount(), channel);
|
||||
measurements.update(Measurements::PM25_PC, ag->pms5003t_2.getPm25ParticleCount(), channel);
|
||||
measurements.update(Measurements::Temperature, ag->pms5003t_2.getTemperature(), channel);
|
||||
@ -1093,6 +1100,7 @@ static void updatePm(void) {
|
||||
measurements.update(Measurements::PM25_SP, utils::getInvalidPmValue(), channel);
|
||||
measurements.update(Measurements::PM10_SP, utils::getInvalidPmValue(), channel);
|
||||
measurements.update(Measurements::PM03_PC, utils::getInvalidPmValue(), channel);
|
||||
measurements.update(Measurements::PM05_PC, utils::getInvalidPmValue(), channel);
|
||||
measurements.update(Measurements::PM01_PC, utils::getInvalidPmValue(), channel);
|
||||
measurements.update(Measurements::PM25_PC, utils::getInvalidPmValue(), channel);
|
||||
measurements.update(Measurements::Temperature, utils::getInvalidTemperature(), channel);
|
||||
@ -1186,8 +1194,10 @@ void setMeasurementMaxPeriod() {
|
||||
measurements.maxPeriod(Measurements::PM01_SP, max);
|
||||
measurements.maxPeriod(Measurements::PM10_SP, max);
|
||||
measurements.maxPeriod(Measurements::PM03_PC, max);
|
||||
measurements.maxPeriod(Measurements::PM05_PC, max);
|
||||
measurements.maxPeriod(Measurements::PM01_PC, max);
|
||||
measurements.maxPeriod(Measurements::PM25_PC, max);
|
||||
measurements.maxPeriod(Measurements::PM5_PC, max);
|
||||
measurements.maxPeriod(Measurements::PM10_PC, max);
|
||||
|
||||
// Temperature and Humidity
|
||||
|
@ -57,6 +57,10 @@ void Measurements::maxPeriod(MeasurementType type, int max) {
|
||||
_pm_03_pc[0].update.max = max;
|
||||
_pm_03_pc[1].update.max = max;
|
||||
break;
|
||||
case PM05_PC:
|
||||
_pm_05_pc[0].update.max = max;
|
||||
_pm_05_pc[1].update.max = max;
|
||||
break;
|
||||
case PM01_PC:
|
||||
_pm_01_pc[0].update.max = max;
|
||||
_pm_01_pc[1].update.max = max;
|
||||
@ -65,6 +69,10 @@ void Measurements::maxPeriod(MeasurementType type, int max) {
|
||||
_pm_25_pc[0].update.max = max;
|
||||
_pm_25_pc[1].update.max = max;
|
||||
break;
|
||||
case PM5_PC:
|
||||
_pm_5_pc[0].update.max = max;
|
||||
_pm_5_pc[1].update.max = max;
|
||||
break;
|
||||
case PM10_PC:
|
||||
_pm_10_pc[0].update.max = max;
|
||||
_pm_10_pc[1].update.max = max;
|
||||
@ -132,6 +140,10 @@ bool Measurements::update(MeasurementType type, int val, int ch) {
|
||||
temporary = &_pm_03_pc[ch];
|
||||
invalidValue = utils::getInvalidPmValue();
|
||||
break;
|
||||
case PM05_PC:
|
||||
temporary = &_pm_05_pc[ch];
|
||||
invalidValue = utils::getInvalidPmValue();
|
||||
break;
|
||||
case PM01_PC:
|
||||
temporary = &_pm_01_pc[ch];
|
||||
invalidValue = utils::getInvalidPmValue();
|
||||
@ -140,6 +152,10 @@ bool Measurements::update(MeasurementType type, int val, int ch) {
|
||||
temporary = &_pm_25_pc[ch];
|
||||
invalidValue = utils::getInvalidPmValue();
|
||||
break;
|
||||
case PM5_PC:
|
||||
temporary = &_pm_5_pc[ch];
|
||||
invalidValue = utils::getInvalidPmValue();
|
||||
break;
|
||||
case PM10_PC:
|
||||
temporary = &_pm_10_pc[ch];
|
||||
invalidValue = utils::getInvalidPmValue();
|
||||
@ -162,8 +178,8 @@ bool Measurements::update(MeasurementType type, int val, int ch) {
|
||||
temporary->update.invalidCounter++;
|
||||
if (temporary->update.invalidCounter >= temporary->update.max) {
|
||||
Serial.printf("%s{%d} invalid value update counter reached (%dx)! Setting its average value "
|
||||
"to invalid!",
|
||||
measurementTypeStr(type), ch, temporary->update.max);
|
||||
"to invalid!\n",
|
||||
measurementTypeStr(type).c_str(), ch, temporary->update.max);
|
||||
temporary->update.avg = invalidValue;
|
||||
return false;
|
||||
}
|
||||
@ -233,8 +249,8 @@ bool Measurements::update(MeasurementType type, float val, int ch) {
|
||||
temporary->update.invalidCounter++;
|
||||
if (temporary->update.invalidCounter >= temporary->update.max) {
|
||||
Serial.printf("%s{%d} invalid value update counter reached (%dx)! Setting its average value "
|
||||
"to invalid!",
|
||||
measurementTypeStr(type), ch, temporary->update.max);
|
||||
"to invalid!\n",
|
||||
measurementTypeStr(type).c_str(), ch, temporary->update.max);
|
||||
temporary->update.avg = invalidValue;
|
||||
return false;
|
||||
}
|
||||
@ -414,12 +430,18 @@ String Measurements::measurementTypeStr(MeasurementType type) {
|
||||
case PM03_PC:
|
||||
str = "PM003_PC";
|
||||
break;
|
||||
case PM05_PC:
|
||||
str = "PM005_PC";
|
||||
break;
|
||||
case PM01_PC:
|
||||
str = "PM01_PC";
|
||||
break;
|
||||
case PM25_PC:
|
||||
str = "PM25_PC";
|
||||
break;
|
||||
case PM5_PC:
|
||||
str = "PM05_PC";
|
||||
break;
|
||||
case PM10_PC:
|
||||
str = "PM10_PC";
|
||||
break;
|
||||
@ -604,12 +626,22 @@ JSONVar Measurements::buildPMS(AirGradient &ag, int ch, bool allCh, bool withTem
|
||||
if (utils::isValidPm03Count(_pm_03_pc[ch].update.avg)) {
|
||||
pms["pm003Count"] = ag.round2(_pm_03_pc[ch].update.avg);
|
||||
}
|
||||
if (utils::isValidPm03Count(_pm_05_pc[ch].update.avg)) {
|
||||
pms["pm005Count"] = ag.round2(_pm_05_pc[ch].update.avg);
|
||||
}
|
||||
if (utils::isValidPm03Count(_pm_01_pc[ch].update.avg)) {
|
||||
pms["pm01Count"] = ag.round2(_pm_01_pc[ch].update.avg);
|
||||
}
|
||||
if (utils::isValidPm03Count(_pm_25_pc[ch].update.avg)) {
|
||||
pms["pm02Count"] = ag.round2(_pm_25_pc[ch].update.avg);
|
||||
}
|
||||
if (_pm_5_pc[ch].listValues.empty() == false) {
|
||||
// Only include pm5.0 count when values available on its list
|
||||
// If not, means no pm5_pc available from the sensor
|
||||
if (utils::isValidPm03Count(_pm_5_pc[ch].update.avg)) {
|
||||
pms["pm05Count"] = ag.round2(_pm_5_pc[ch].update.avg);
|
||||
}
|
||||
}
|
||||
if (_pm_10_pc[ch].listValues.empty() == false) {
|
||||
// Only include pm10 count when values available on its list
|
||||
// If not, means no pm10_pc available from the sensor
|
||||
@ -763,6 +795,20 @@ JSONVar Measurements::buildPMS(AirGradient &ag, int ch, bool allCh, bool withTem
|
||||
pms["channels"]["2"]["pm003Count"] = ag.round2(_pm_03_pc[1].update.avg);
|
||||
}
|
||||
|
||||
/// PM0.5 particle count
|
||||
if (utils::isValidPm03Count(_pm_05_pc[0].update.avg) &&
|
||||
utils::isValidPm03Count(_pm_05_pc[1].update.avg)) {
|
||||
float avg = (_pm_05_pc[0].update.avg + _pm_05_pc[1].update.avg) / 2.0f;
|
||||
pms["pm005Count"] = ag.round2(avg);
|
||||
pms["channels"]["1"]["pm005Count"] = ag.round2(_pm_05_pc[0].update.avg);
|
||||
pms["channels"]["2"]["pm005Count"] = ag.round2(_pm_05_pc[1].update.avg);
|
||||
} else if (utils::isValidPm(_pm_05_pc[0].update.avg)) {
|
||||
pms["pm005Count"] = ag.round2(_pm_05_pc[0].update.avg);
|
||||
pms["channels"]["1"]["pm005Count"] = ag.round2(_pm_05_pc[0].update.avg);
|
||||
} else if (utils::isValidPm(_pm_05_pc[1].update.avg)) {
|
||||
pms["pm005Count"] = ag.round2(_pm_05_pc[1].update.avg);
|
||||
pms["channels"]["2"]["pm005Count"] = ag.round2(_pm_05_pc[1].update.avg);
|
||||
}
|
||||
/// PM1.0 particle count
|
||||
if (utils::isValidPm03Count(_pm_01_pc[0].update.avg) &&
|
||||
utils::isValidPm03Count(_pm_01_pc[1].update.avg)) {
|
||||
@ -793,22 +839,8 @@ JSONVar Measurements::buildPMS(AirGradient &ag, int ch, bool allCh, bool withTem
|
||||
pms["channels"]["2"]["pm25Count"] = ag.round2(_pm_25_pc[1].update.avg);
|
||||
}
|
||||
|
||||
// NOTE: No need for particle count 10. When allCh is true, basically monitor using PM5003T, which
|
||||
// don't have PC 10
|
||||
// /// PM10 particle count
|
||||
// if (utils::isValidPm03Count(_pm_10_pc[0].update.avg) &&
|
||||
// utils::isValidPm03Count(_pm_10_pc[1].update.avg)) {
|
||||
// float avg = (_pm_10_pc[0].update.avg + _pm_10_pc[1].update.avg) / 2.0f;
|
||||
// pms["pm10Count"] = ag.round2(avg);
|
||||
// pms["channels"]["1"]["pm10Count"] = ag.round2(_pm_10_pc[0].update.avg);
|
||||
// pms["channels"]["2"]["pm10Count"] = ag.round2(_pm_10_pc[1].update.avg);
|
||||
// } else if (utils::isValidPm(_pm_10_pc[0].update.avg)) {
|
||||
// pms["pm10Count"] = ag.round2(_pm_10_pc[0].update.avg);
|
||||
// pms["channels"]["1"]["pm10Count"] = ag.round2(_pm_10_pc[0].update.avg);
|
||||
// } else if (utils::isValidPm(_pm_10_pc[1].update.avg)) {
|
||||
// pms["pm10Count"] = ag.round2(_pm_10_pc[1].update.avg);
|
||||
// pms["channels"]["2"]["pm10Count"] = ag.round2(_pm_10_pc[1].update.avg);
|
||||
// }
|
||||
// NOTE: No need for particle count 5.0 and 10. When allCh is true, basically monitor using
|
||||
// PM5003T, which don't have PC 5.0 and 10
|
||||
|
||||
if (withTempHum) {
|
||||
/// Temperature
|
||||
|
@ -53,8 +53,10 @@ public:
|
||||
PM25_SP, // PM2.5 standard particle
|
||||
PM10_SP, // PM10 standard particle
|
||||
PM03_PC, // Particle 0.3 count
|
||||
PM05_PC, // Particle 0.5 count
|
||||
PM01_PC, // Particle 1.0 count
|
||||
PM25_PC, // Particle 2.5 count
|
||||
PM5_PC, // Particle 5.0 count
|
||||
PM10_PC, // Particle 10 count
|
||||
};
|
||||
|
||||
@ -142,8 +144,10 @@ private:
|
||||
IntegerValue _pm_25_sp[2]; // pm 2.5 standard particle
|
||||
IntegerValue _pm_10_sp[2]; // pm 10 standard particle
|
||||
IntegerValue _pm_03_pc[2]; // particle count 0.3
|
||||
IntegerValue _pm_05_pc[2]; // particle count 0.5
|
||||
IntegerValue _pm_01_pc[2]; // particle count 1.0
|
||||
IntegerValue _pm_25_pc[2]; // particle count 2.5
|
||||
IntegerValue _pm_5_pc[2]; // particle count 5.0
|
||||
IntegerValue _pm_10_pc[2]; // particle count 10
|
||||
|
||||
bool _debug = false;
|
||||
|
@ -136,6 +136,13 @@ int PMS5003::getPm03ParticleCount(void) {
|
||||
*/
|
||||
int PMS5003::getPm01ParticleCount(void) { return pms.getCount1_0(); }
|
||||
|
||||
/**
|
||||
* @brief Read particle 0.5 count
|
||||
*
|
||||
* @return int particle 0.5 count index
|
||||
*/
|
||||
int PMS5003::getPm05ParticleCount(void) { return pms.getCount0_5(); }
|
||||
|
||||
/**
|
||||
* @brief Read particle 2.5 count
|
||||
*
|
||||
@ -143,6 +150,13 @@ int PMS5003::getPm01ParticleCount(void) { return pms.getCount1_0(); }
|
||||
*/
|
||||
int PMS5003::getPm25ParticleCount(void) { return pms.getCount2_5(); }
|
||||
|
||||
/**
|
||||
* @brief Read particle 5.0 count
|
||||
*
|
||||
* @return int particle 5.0 count index
|
||||
*/
|
||||
int PMS5003::getPm5ParticleCount(void) { return pms.getCount5_0(); }
|
||||
|
||||
/**
|
||||
* @brief Read particle 10 count
|
||||
*
|
||||
|
@ -35,8 +35,10 @@ public:
|
||||
int getPm10Sp(void);
|
||||
// Particle count
|
||||
int getPm03ParticleCount(void);
|
||||
int getPm05ParticleCount(void);
|
||||
int getPm01ParticleCount(void);
|
||||
int getPm25ParticleCount(void);
|
||||
int getPm5ParticleCount(void);
|
||||
int getPm10ParticleCount(void);
|
||||
|
||||
int convertPm25ToUsAqi(int pm25);
|
||||
|
@ -158,6 +158,13 @@ int PMS5003T::getPm03ParticleCount(void) {
|
||||
return pms.getCount0_3();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read particle 0.5 count
|
||||
*
|
||||
* @return int particle 0.5 count index
|
||||
*/
|
||||
int PMS5003T::getPm05ParticleCount(void) { return pms.getCount0_5(); }
|
||||
|
||||
/**
|
||||
* @brief Read particle 1.0 count
|
||||
*
|
||||
|
@ -38,6 +38,7 @@ public:
|
||||
int getPm10Sp(void);
|
||||
// Particle count
|
||||
int getPm03ParticleCount(void);
|
||||
int getPm05ParticleCount(void);
|
||||
int getPm01ParticleCount(void);
|
||||
int getPm25ParticleCount(void);
|
||||
|
||||
|
Reference in New Issue
Block a user