Include other PMS data to measurements

This commit is contained in:
samuelbles07
2024-10-22 17:13:15 +07:00
parent fd1f35f6d8
commit eeba41f497
3 changed files with 144 additions and 21 deletions

View File

@ -1001,12 +1001,24 @@ static void updatePMS5003() {
measurements.update(Measurements::PM01, ag->pms5003.getPm01Ae());
measurements.update(Measurements::PM25, ag->pms5003.getPm25Ae());
measurements.update(Measurements::PM10, ag->pms5003.getPm10Ae());
measurements.update(Measurements::PM01_SP, ag->pms5003.getPm01Sp());
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::PM01_PC, ag->pms5003.getPm01ParticleCount());
measurements.update(Measurements::PM25_PC, ag->pms5003.getPm25ParticleCount());
measurements.update(Measurements::PM10_PC, ag->pms5003.getPm10ParticleCount());
} else {
measurements.update(Measurements::PM01, utils::getInvalidPmValue());
measurements.update(Measurements::PM25, utils::getInvalidPmValue());
measurements.update(Measurements::PM10, utils::getInvalidPmValue());
measurements.update(Measurements::PM01_SP, utils::getInvalidPmValue());
measurements.update(Measurements::PM25_SP, utils::getInvalidPmValue());
measurements.update(Measurements::PM10_SP, utils::getInvalidPmValue());
measurements.update(Measurements::PM03_PC, utils::getInvalidPmValue());
measurements.update(Measurements::PM01_PC, utils::getInvalidPmValue());
measurements.update(Measurements::PM25_PC, utils::getInvalidPmValue());
measurements.update(Measurements::PM10_PC, utils::getInvalidPmValue());
}
}
@ -1027,18 +1039,28 @@ static void updatePm(void) {
measurements.update(Measurements::PM01, ag->pms5003t_1.getPm01Ae(), channel);
measurements.update(Measurements::PM25, ag->pms5003t_1.getPm25Ae(), channel);
measurements.update(Measurements::PM10, ag->pms5003t_1.getPm10Ae(), channel);
measurements.update(Measurements::PM01_SP, ag->pms5003t_1.getPm01Sp(), channel);
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::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);
measurements.update(Measurements::Humidity, ag->pms5003t_1.getRelativeHumidity(), channel);
// flag that new valid PMS value exists
newPMS2Value = true;
newPMS1Value = true;
} else {
// PMS channel 1 now is not connected, update using invalid value
measurements.update(Measurements::PM01, utils::getInvalidPmValue(), channel);
measurements.update(Measurements::PM25, utils::getInvalidPmValue(), channel);
measurements.update(Measurements::PM10, utils::getInvalidPmValue(), channel);
measurements.update(Measurements::PM01_SP, utils::getInvalidPmValue(), channel);
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::PM01_PC, utils::getInvalidPmValue(), channel);
measurements.update(Measurements::PM25_PC, utils::getInvalidPmValue(), channel);
measurements.update(Measurements::Temperature, utils::getInvalidTemperature(), channel);
measurements.update(Measurements::Humidity, utils::getInvalidHumidity(), channel);
}
@ -1051,18 +1073,28 @@ static void updatePm(void) {
measurements.update(Measurements::PM01, ag->pms5003t_2.getPm01Ae(), channel);
measurements.update(Measurements::PM25, ag->pms5003t_2.getPm25Ae(), channel);
measurements.update(Measurements::PM10, ag->pms5003t_2.getPm10Ae(), channel);
measurements.update(Measurements::PM01_SP, ag->pms5003t_2.getPm01Sp(), channel);
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::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);
measurements.update(Measurements::Humidity, ag->pms5003t_2.getRelativeHumidity(), channel);
// flag that new valid PMS value exists
newPMS2Value = true;
} else {
// PMS channel channel now is not connected, update using invalid value
// PMS channel 2 now is not connected, update using invalid value
measurements.update(Measurements::PM01, utils::getInvalidPmValue(), channel);
measurements.update(Measurements::PM25, utils::getInvalidPmValue(), channel);
measurements.update(Measurements::PM10, utils::getInvalidPmValue(), channel);
measurements.update(Measurements::PM01_SP, utils::getInvalidPmValue(), channel);
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::PM01_PC, utils::getInvalidPmValue(), channel);
measurements.update(Measurements::PM25_PC, utils::getInvalidPmValue(), channel);
measurements.update(Measurements::Temperature, utils::getInvalidTemperature(), channel);
measurements.update(Measurements::Humidity, utils::getInvalidHumidity(), channel);
}
@ -1133,18 +1165,31 @@ static void tempHumUpdate(void) {
/* Set max period for each measurement type based on sensor update interval*/
void setMeasurementMaxPeriod() {
int max;
/// Max period for S8 sensors measurements
measurements.maxPeriod(Measurements::CO2, calculateMaxPeriod(SENSOR_CO2_UPDATE_INTERVAL));
/// Max period for SGP sensors measurements
measurements.maxPeriod(Measurements::TVOC, calculateMaxPeriod(SENSOR_TVOC_UPDATE_INTERVAL));
measurements.maxPeriod(Measurements::TVOCRaw, calculateMaxPeriod(SENSOR_TVOC_UPDATE_INTERVAL));
measurements.maxPeriod(Measurements::NOx, calculateMaxPeriod(SENSOR_TVOC_UPDATE_INTERVAL));
measurements.maxPeriod(Measurements::NOxRaw, calculateMaxPeriod(SENSOR_TVOC_UPDATE_INTERVAL));
max = calculateMaxPeriod(SENSOR_TVOC_UPDATE_INTERVAL);
measurements.maxPeriod(Measurements::TVOC, max);
measurements.maxPeriod(Measurements::TVOCRaw, max);
measurements.maxPeriod(Measurements::NOx, max);
measurements.maxPeriod(Measurements::NOxRaw, max);
/// Max period for PMS sensors measurements
measurements.maxPeriod(Measurements::PM25, calculateMaxPeriod(SENSOR_PM_UPDATE_INTERVAL));
measurements.maxPeriod(Measurements::PM01, calculateMaxPeriod(SENSOR_PM_UPDATE_INTERVAL));
measurements.maxPeriod(Measurements::PM10, calculateMaxPeriod(SENSOR_PM_UPDATE_INTERVAL));
measurements.maxPeriod(Measurements::PM03_PC, calculateMaxPeriod(SENSOR_PM_UPDATE_INTERVAL));
max = calculateMaxPeriod(SENSOR_PM_UPDATE_INTERVAL);
measurements.maxPeriod(Measurements::PM25, max);
measurements.maxPeriod(Measurements::PM01, max);
measurements.maxPeriod(Measurements::PM10, max);
measurements.maxPeriod(Measurements::PM25_SP, max);
measurements.maxPeriod(Measurements::PM01_SP, max);
measurements.maxPeriod(Measurements::PM10_SP, max);
measurements.maxPeriod(Measurements::PM03_PC, max);
measurements.maxPeriod(Measurements::PM01_PC, max);
measurements.maxPeriod(Measurements::PM25_PC, max);
measurements.maxPeriod(Measurements::PM10_PC, max);
// Temperature and Humidity
if (configuration.hasSensorSHT) {
/// Max period for SHT sensors measurements

View File

@ -41,10 +41,34 @@ void Measurements::maxPeriod(MeasurementType type, int max) {
_pm_10[0].update.max = max;
_pm_10[1].update.max = max;
break;
case PM01_SP:
_pm_01_sp[0].update.max = max;
_pm_01_sp[1].update.max = max;
break;
case PM25_SP:
_pm_25_sp[0].update.max = max;
_pm_25_sp[1].update.max = max;
break;
case PM10_SP:
_pm_10_sp[0].update.max = max;
_pm_10_sp[1].update.max = max;
break;
case PM03_PC:
_pm_03_pc[0].update.max = max;
_pm_03_pc[1].update.max = max;
break;
case PM01_PC:
_pm_01_pc[0].update.max = max;
_pm_01_pc[1].update.max = max;
break;
case PM25_PC:
_pm_25_pc[0].update.max = max;
_pm_25_pc[1].update.max = max;
break;
case PM10_PC:
_pm_10_pc[0].update.max = max;
_pm_10_pc[1].update.max = max;
break;
};
}
@ -91,10 +115,34 @@ bool Measurements::update(MeasurementType type, int val, int ch) {
temporary = &_pm_10[ch];
invalidValue = utils::getInvalidPmValue();
break;
case PM01_SP:
temporary = &_pm_01_sp[ch];
invalidValue = utils::getInvalidPmValue();
break;
case PM25_SP:
temporary = &_pm_25_sp[ch];
invalidValue = utils::getInvalidPmValue();
break;
case PM10_SP:
temporary = &_pm_10_sp[ch];
invalidValue = utils::getInvalidPmValue();
break;
case PM03_PC:
temporary = &_pm_03_pc[ch];
invalidValue = utils::getInvalidPmValue();
break;
case PM01_PC:
temporary = &_pm_01_pc[ch];
invalidValue = utils::getInvalidPmValue();
break;
case PM25_PC:
temporary = &_pm_25_pc[ch];
invalidValue = utils::getInvalidPmValue();
break;
case PM10_PC:
temporary = &_pm_10_pc[ch];
invalidValue = utils::getInvalidPmValue();
break;
default:
break;
};
@ -344,16 +392,34 @@ String Measurements::measurementTypeStr(MeasurementType type) {
str = "NOxRaw";
break;
case PM25:
str = "PM25";
str = "PM25_AE";
break;
case PM01:
str = "PM01";
str = "PM1_AE";
break;
case PM10:
str = "PM10";
str = "PM10_AE";
break;
case PM25_SP:
str = "PM25_SP";
break;
case PM01_SP:
str = "PM1_SP";
break;
case PM10_SP:
str = "PM10_SP";
break;
case PM03_PC:
str = "PM03";
str = "PM003_PC";
break;
case PM01_PC:
str = "PM01_PC";
break;
case PM25_PC:
str = "PM25_PC";
break;
case PM10_PC:
str = "PM10_PC";
break;
default:
break;

View File

@ -46,10 +46,16 @@ public:
TVOCRaw,
NOx, // index value
NOxRaw,
PM25,
PM01,
PM10,
PM03_PC, // Particle count
PM01, // PM1.0 under atmospheric environment
PM25, // PM2.5 under athompheric environment
PM10, // PM10 under atmospheric environment
PM01_SP, // PM1.0 standard particle
PM25_SP, // PM2.5 standard particle
PM10_SP, // PM10 standard particle
PM03_PC, // Particle 0.3 count
PM01_PC, // Particle 1.0 count
PM25_PC, // Particle 2.5 count
PM10_PC, // Particle 10 count
};
/**
@ -129,10 +135,16 @@ private:
IntegerValue _tvoc_raw;
IntegerValue _nox; // Index value
IntegerValue _nox_raw;
IntegerValue _pm_25[2];
IntegerValue _pm_01[2];
IntegerValue _pm_10[2];
IntegerValue _pm_01[2]; // pm 1.0 atmospheric environment
IntegerValue _pm_25[2]; // pm 2.5 atmospheric environment
IntegerValue _pm_10[2]; // pm 10 atmospheric environment
IntegerValue _pm_01_sp[2]; // pm 1.0 standard particle
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_01_pc[2]; // particle count 1.0
IntegerValue _pm_25_pc[2]; // particle count 2.5
IntegerValue _pm_10_pc[2]; // particle count 10
bool _debug = false;