mirror of
https://github.com/airgradienthq/arduino.git
synced 2025-07-16 02:02:11 +02:00
Merge pull request #256 from airgradienthq/restructure-agvalue
Restructure Measurements class
This commit is contained in:
@ -62,7 +62,7 @@ CC BY-SA 4.0 Attribution-ShareAlike 4.0 International License
|
||||
#define SENSOR_TVOC_UPDATE_INTERVAL 1000 /** ms */
|
||||
#define SENSOR_CO2_UPDATE_INTERVAL 4000 /** ms */
|
||||
#define SENSOR_PM_UPDATE_INTERVAL 2000 /** ms */
|
||||
#define SENSOR_TEMP_HUM_UPDATE_INTERVAL 2000 /** ms */
|
||||
#define SENSOR_TEMP_HUM_UPDATE_INTERVAL 6000 /** ms */
|
||||
#define DISPLAY_DELAY_SHOW_CONTENT_MS 2000 /** ms */
|
||||
#define FIRMWARE_CHECK_FOR_UPDATE_MS (60*60*1000) /** ms */
|
||||
|
||||
@ -89,7 +89,6 @@ static LocalServer localServer(Serial, openMetrics, measurements, configuration,
|
||||
wifiConnector);
|
||||
|
||||
static uint32_t factoryBtnPressTime = 0;
|
||||
static int getCO2FailCount = 0;
|
||||
static AgFirmwareMode fwMode = FW_MODE_I_9PSL;
|
||||
|
||||
static bool ledBarButtonTest = false;
|
||||
@ -115,6 +114,8 @@ static void firmwareCheckForUpdate(void);
|
||||
static void otaHandlerCallback(OtaState state, String mesasge);
|
||||
static void displayExecuteOta(OtaState state, String msg,
|
||||
int processing);
|
||||
static int calculateMaxPeriod(int updateInterval);
|
||||
static void setMeasurementMaxPeriod();
|
||||
|
||||
AgSchedule dispLedSchedule(DISP_UPDATE_INTERVAL, updateDisplayAndLedBar);
|
||||
AgSchedule configSchedule(SERVER_CONFIG_SYNC_INTERVAL,
|
||||
@ -165,6 +166,10 @@ void setup() {
|
||||
|
||||
/** Init sensor */
|
||||
boardInit();
|
||||
setMeasurementMaxPeriod();
|
||||
|
||||
// Uncomment below line to print every measurements reading update
|
||||
// measurements.setDebug(true);
|
||||
|
||||
/** Connecting wifi */
|
||||
bool connectToWifi = false;
|
||||
@ -317,17 +322,16 @@ void loop() {
|
||||
}
|
||||
|
||||
static void co2Update(void) {
|
||||
if (!configuration.hasSensorS8) {
|
||||
// Device don't have S8 sensor
|
||||
return;
|
||||
}
|
||||
|
||||
int value = ag->s8.getCo2();
|
||||
if (utils::isValidCO2(value)) {
|
||||
measurements.CO2 = value;
|
||||
getCO2FailCount = 0;
|
||||
Serial.printf("CO2 (ppm): %d\r\n", measurements.CO2);
|
||||
measurements.update(Measurements::CO2, value);
|
||||
} else {
|
||||
getCO2FailCount++;
|
||||
Serial.printf("Get CO2 failed: %d\r\n", getCO2FailCount);
|
||||
if (getCO2FailCount >= 3) {
|
||||
measurements.CO2 = utils::getInvalidCO2();
|
||||
}
|
||||
measurements.update(Measurements::CO2, utils::getInvalidCO2());
|
||||
}
|
||||
}
|
||||
|
||||
@ -360,8 +364,8 @@ static void createMqttTask(void) {
|
||||
|
||||
/** Send data */
|
||||
if (mqttClient.isConnected()) {
|
||||
String payload = measurements.toString(
|
||||
true, fwMode, wifiConnector.RSSI(), ag, &configuration);
|
||||
String payload =
|
||||
measurements.toString(true, fwMode, wifiConnector.RSSI(), *ag, configuration);
|
||||
String topic = "airgradient/readings/" + ag->deviceId();
|
||||
|
||||
if (mqttClient.publish(topic.c_str(), payload.c_str(),
|
||||
@ -982,240 +986,110 @@ static void updateDisplayAndLedBar(void) {
|
||||
}
|
||||
|
||||
static void updateTvoc(void) {
|
||||
measurements.TVOC = ag->sgp41.getTvocIndex();
|
||||
measurements.TVOCRaw = ag->sgp41.getTvocRaw();
|
||||
measurements.NOx = ag->sgp41.getNoxIndex();
|
||||
measurements.NOxRaw = ag->sgp41.getNoxRaw();
|
||||
if (!configuration.hasSensorSGP) {
|
||||
return;
|
||||
}
|
||||
|
||||
Serial.println();
|
||||
Serial.printf("TVOC index: %d\r\n", measurements.TVOC);
|
||||
Serial.printf("TVOC raw: %d\r\n", measurements.TVOCRaw);
|
||||
Serial.printf("NOx index: %d\r\n", measurements.NOx);
|
||||
Serial.printf("NOx raw: %d\r\n", measurements.NOxRaw);
|
||||
measurements.update(Measurements::TVOC, ag->sgp41.getTvocIndex());
|
||||
measurements.update(Measurements::TVOCRaw, ag->sgp41.getTvocRaw());
|
||||
measurements.update(Measurements::NOx, ag->sgp41.getNoxIndex());
|
||||
measurements.update(Measurements::NOxRaw, ag->sgp41.getNoxRaw());
|
||||
}
|
||||
|
||||
static void updatePMS5003() {
|
||||
if (ag->pms5003.connected()) {
|
||||
measurements.update(Measurements::PM01, ag->pms5003.getPm01Ae());
|
||||
measurements.update(Measurements::PM25, ag->pms5003.getPm25Ae());
|
||||
measurements.update(Measurements::PM10, ag->pms5003.getPm10Ae());
|
||||
measurements.update(Measurements::PM03_PC, ag->pms5003.getPm03ParticleCount());
|
||||
} else {
|
||||
measurements.update(Measurements::PM01, utils::getInvalidPmValue());
|
||||
measurements.update(Measurements::PM25, utils::getInvalidPmValue());
|
||||
measurements.update(Measurements::PM10, utils::getInvalidPmValue());
|
||||
measurements.update(Measurements::PM03_PC, utils::getInvalidPmValue());
|
||||
}
|
||||
}
|
||||
|
||||
static void updatePm(void) {
|
||||
bool restart = false;
|
||||
if (ag->isOne()) {
|
||||
if (ag->pms5003.connected()) {
|
||||
measurements.pm01_1 = ag->pms5003.getPm01Ae();
|
||||
measurements.pm25_1 = ag->pms5003.getPm25Ae();
|
||||
measurements.pm10_1 = ag->pms5003.getPm10Ae();
|
||||
measurements.pm03PCount_1 = ag->pms5003.getPm03ParticleCount();
|
||||
updatePMS5003();
|
||||
return;
|
||||
}
|
||||
|
||||
Serial.println();
|
||||
Serial.printf("PM1 ug/m3: %d\r\n", measurements.pm01_1);
|
||||
Serial.printf("PM2.5 ug/m3: %d\r\n", measurements.pm25_1);
|
||||
Serial.printf("PM10 ug/m3: %d\r\n", measurements.pm10_1);
|
||||
Serial.printf("PM0.3 Count: %d\r\n", measurements.pm03PCount_1);
|
||||
Serial.printf("PM firmware version: %d\r\n", ag->pms5003.getFirmwareVersion());
|
||||
ag->pms5003.resetFailCount();
|
||||
// Open Air Monitor series, can have two PMS5003T sensor
|
||||
bool newPMS1Value = false;
|
||||
bool newPMS2Value = false;
|
||||
|
||||
// Read PMS channel 1 if available
|
||||
int channel = 1;
|
||||
if (configuration.hasSensorPMS1) {
|
||||
if (ag->pms5003t_1.connected()) {
|
||||
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::PM03_PC, ag->pms5003t_1.getPm03ParticleCount(), 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;
|
||||
} else {
|
||||
ag->pms5003.updateFailCount();
|
||||
Serial.printf("PMS read failed %d times\r\n", ag->pms5003.getFailCount());
|
||||
if (ag->pms5003.getFailCount() >= PMS_FAIL_COUNT_SET_INVALID) {
|
||||
measurements.pm01_1 = utils::getInvalidPmValue();
|
||||
measurements.pm25_1 = utils::getInvalidPmValue();
|
||||
measurements.pm10_1 = utils::getInvalidPmValue();
|
||||
measurements.pm03PCount_1 = utils::getInvalidPmValue();
|
||||
}
|
||||
|
||||
if (ag->pms5003.getFailCount() >= ag->pms5003.getFailCountMax()) {
|
||||
restart = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
bool pmsResult_1 = false;
|
||||
bool pmsResult_2 = false;
|
||||
if (configuration.hasSensorPMS1 && ag->pms5003t_1.connected()) {
|
||||
measurements.pm01_1 = ag->pms5003t_1.getPm01Ae();
|
||||
measurements.pm25_1 = ag->pms5003t_1.getPm25Ae();
|
||||
measurements.pm10_1 = ag->pms5003t_1.getPm10Ae();
|
||||
measurements.pm03PCount_1 = ag->pms5003t_1.getPm03ParticleCount();
|
||||
measurements.temp_1 = ag->pms5003t_1.getTemperature();
|
||||
measurements.hum_1 = ag->pms5003t_1.getRelativeHumidity();
|
||||
|
||||
pmsResult_1 = true;
|
||||
|
||||
Serial.println();
|
||||
Serial.printf("[1] PM1 ug/m3: %d\r\n", measurements.pm01_1);
|
||||
Serial.printf("[1] PM2.5 ug/m3: %d\r\n", measurements.pm25_1);
|
||||
Serial.printf("[1] PM10 ug/m3: %d\r\n", measurements.pm10_1);
|
||||
Serial.printf("[1] PM3.0 Count: %d\r\n", measurements.pm03PCount_1);
|
||||
Serial.printf("[1] Temperature in C: %0.2f\r\n", measurements.temp_1);
|
||||
Serial.printf("[1] Relative Humidity: %d\r\n", measurements.hum_1);
|
||||
Serial.printf("[1] Temperature compensated in C: %0.2f\r\n",
|
||||
ag->pms5003t_1.compensateTemp(measurements.temp_1));
|
||||
Serial.printf("[1] Relative Humidity compensated: %0.2f\r\n",
|
||||
ag->pms5003t_1.compensateHum(measurements.hum_1));
|
||||
Serial.printf("[1] PM firmware version: %d\r\n", ag->pms5003t_1.getFirmwareVersion());
|
||||
|
||||
ag->pms5003t_1.resetFailCount();
|
||||
} else {
|
||||
if (configuration.hasSensorPMS1) {
|
||||
ag->pms5003t_1.updateFailCount();
|
||||
Serial.printf("[1] PMS read failed %d times\r\n", ag->pms5003t_1.getFailCount());
|
||||
|
||||
if (ag->pms5003t_1.getFailCount() >= PMS_FAIL_COUNT_SET_INVALID) {
|
||||
measurements.pm01_1 = utils::getInvalidPmValue();
|
||||
measurements.pm25_1 = utils::getInvalidPmValue();
|
||||
measurements.pm10_1 = utils::getInvalidPmValue();
|
||||
measurements.pm03PCount_1 = utils::getInvalidPmValue();
|
||||
measurements.temp_1 = utils::getInvalidTemperature();
|
||||
measurements.hum_1 = utils::getInvalidHumidity();
|
||||
}
|
||||
|
||||
if (ag->pms5003t_1.getFailCount() >= ag->pms5003t_1.getFailCountMax()) {
|
||||
restart = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (configuration.hasSensorPMS2 && ag->pms5003t_2.connected()) {
|
||||
measurements.pm01_2 = ag->pms5003t_2.getPm01Ae();
|
||||
measurements.pm25_2 = ag->pms5003t_2.getPm25Ae();
|
||||
measurements.pm10_2 = ag->pms5003t_2.getPm10Ae();
|
||||
measurements.pm03PCount_2 = ag->pms5003t_2.getPm03ParticleCount();
|
||||
measurements.temp_2 = ag->pms5003t_2.getTemperature();
|
||||
measurements.hum_2 = ag->pms5003t_2.getRelativeHumidity();
|
||||
|
||||
pmsResult_2 = true;
|
||||
|
||||
Serial.println();
|
||||
Serial.printf("[2] PM1 ug/m3: %d\r\n", measurements.pm01_2);
|
||||
Serial.printf("[2] PM2.5 ug/m3: %d\r\n", measurements.pm25_2);
|
||||
Serial.printf("[2] PM10 ug/m3: %d\r\n", measurements.pm10_2);
|
||||
Serial.printf("[2] PM3.0 Count: %d\r\n", measurements.pm03PCount_2);
|
||||
Serial.printf("[2] Temperature in C: %0.2f\r\n", measurements.temp_2);
|
||||
Serial.printf("[2] Relative Humidity: %d\r\n", measurements.hum_2);
|
||||
Serial.printf("[2] Temperature compensated in C: %0.2f\r\n",
|
||||
ag->pms5003t_1.compensateTemp(measurements.temp_2));
|
||||
Serial.printf("[2] Relative Humidity compensated: %0.2f\r\n",
|
||||
ag->pms5003t_1.compensateHum(measurements.hum_2));
|
||||
Serial.printf("[2] PM firmware version: %d\r\n", ag->pms5003t_2.getFirmwareVersion());
|
||||
|
||||
ag->pms5003t_2.resetFailCount();
|
||||
} else {
|
||||
if (configuration.hasSensorPMS2) {
|
||||
ag->pms5003t_2.updateFailCount();
|
||||
Serial.printf("[2] PMS read failed %d times\r\n", ag->pms5003t_2.getFailCount());
|
||||
|
||||
if (ag->pms5003t_2.getFailCount() >= PMS_FAIL_COUNT_SET_INVALID) {
|
||||
measurements.pm01_2 = utils::getInvalidPmValue();
|
||||
measurements.pm25_2 = utils::getInvalidPmValue();
|
||||
measurements.pm10_2 = utils::getInvalidPmValue();
|
||||
measurements.pm03PCount_2 = utils::getInvalidPmValue();
|
||||
measurements.temp_2 = utils::getInvalidTemperature();
|
||||
measurements.hum_2 = utils::getInvalidHumidity();
|
||||
}
|
||||
|
||||
if (ag->pms5003t_2.getFailCount() >= ag->pms5003t_2.getFailCountMax()) {
|
||||
restart = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (configuration.hasSensorPMS1 && configuration.hasSensorPMS2 &&
|
||||
pmsResult_1 && pmsResult_2) {
|
||||
/** Get total of PMS1*/
|
||||
measurements.pm1Value01 = measurements.pm1Value01 + measurements.pm01_1;
|
||||
measurements.pm1Value25 = measurements.pm1Value25 + measurements.pm25_1;
|
||||
measurements.pm1Value10 = measurements.pm1Value10 + measurements.pm10_1;
|
||||
measurements.pm1PCount =
|
||||
measurements.pm1PCount + measurements.pm03PCount_1;
|
||||
measurements.pm1temp = measurements.pm1temp + measurements.temp_1;
|
||||
measurements.pm1hum = measurements.pm1hum + measurements.hum_1;
|
||||
|
||||
/** Get total of PMS2 */
|
||||
measurements.pm2Value01 = measurements.pm2Value01 + measurements.pm01_2;
|
||||
measurements.pm2Value25 = measurements.pm2Value25 + measurements.pm25_2;
|
||||
measurements.pm2Value10 = measurements.pm2Value10 + measurements.pm10_2;
|
||||
measurements.pm2PCount =
|
||||
measurements.pm2PCount + measurements.pm03PCount_2;
|
||||
measurements.pm2temp = measurements.pm2temp + measurements.temp_2;
|
||||
measurements.pm2hum = measurements.pm2hum + measurements.hum_2;
|
||||
|
||||
measurements.countPosition++;
|
||||
|
||||
/** Get average */
|
||||
if (measurements.countPosition == measurements.targetCount) {
|
||||
measurements.pm01_1 =
|
||||
measurements.pm1Value01 / measurements.targetCount;
|
||||
measurements.pm25_1 =
|
||||
measurements.pm1Value25 / measurements.targetCount;
|
||||
measurements.pm10_1 =
|
||||
measurements.pm1Value10 / measurements.targetCount;
|
||||
measurements.pm03PCount_1 =
|
||||
measurements.pm1PCount / measurements.targetCount;
|
||||
measurements.temp_1 = measurements.pm1temp / measurements.targetCount;
|
||||
measurements.hum_1 = measurements.pm1hum / measurements.targetCount;
|
||||
|
||||
measurements.pm01_2 =
|
||||
measurements.pm2Value01 / measurements.targetCount;
|
||||
measurements.pm25_2 =
|
||||
measurements.pm2Value25 / measurements.targetCount;
|
||||
measurements.pm10_2 =
|
||||
measurements.pm2Value10 / measurements.targetCount;
|
||||
measurements.pm03PCount_2 =
|
||||
measurements.pm2PCount / measurements.targetCount;
|
||||
measurements.temp_2 = measurements.pm2temp / measurements.targetCount;
|
||||
measurements.hum_2 = measurements.pm2hum / measurements.targetCount;
|
||||
|
||||
measurements.countPosition = 0;
|
||||
|
||||
measurements.pm1Value01 = 0;
|
||||
measurements.pm1Value25 = 0;
|
||||
measurements.pm1Value10 = 0;
|
||||
measurements.pm1PCount = 0;
|
||||
measurements.pm1temp = 0;
|
||||
measurements.pm1hum = 0;
|
||||
measurements.pm2Value01 = 0;
|
||||
measurements.pm2Value25 = 0;
|
||||
measurements.pm2Value10 = 0;
|
||||
measurements.pm2PCount = 0;
|
||||
measurements.pm2temp = 0;
|
||||
measurements.pm2hum = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (pmsResult_1 && pmsResult_2) {
|
||||
measurements.Temperature =
|
||||
(measurements.temp_1 + measurements.temp_2) / 2;
|
||||
measurements.Humidity = (measurements.hum_1 + measurements.hum_2) / 2;
|
||||
} else {
|
||||
if (pmsResult_1) {
|
||||
measurements.Temperature = measurements.temp_1;
|
||||
measurements.Humidity = measurements.hum_1;
|
||||
}
|
||||
if (pmsResult_2) {
|
||||
measurements.Temperature = measurements.temp_2;
|
||||
measurements.Humidity = measurements.hum_2;
|
||||
}
|
||||
}
|
||||
|
||||
if (configuration.hasSensorSGP) {
|
||||
float temp;
|
||||
float hum;
|
||||
if (pmsResult_1 && pmsResult_2) {
|
||||
temp = (measurements.temp_1 + measurements.temp_2) / 2.0f;
|
||||
hum = (measurements.hum_1 + measurements.hum_2) / 2.0f;
|
||||
} else {
|
||||
if (pmsResult_1) {
|
||||
temp = measurements.temp_1;
|
||||
hum = measurements.hum_1;
|
||||
}
|
||||
if (pmsResult_2) {
|
||||
temp = measurements.temp_2;
|
||||
hum = measurements.hum_2;
|
||||
}
|
||||
}
|
||||
ag->sgp41.setCompensationTemperatureHumidity(temp, hum);
|
||||
// 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::PM03_PC, utils::getInvalidPmValue(), channel);
|
||||
measurements.update(Measurements::Temperature, utils::getInvalidTemperature(), channel);
|
||||
measurements.update(Measurements::Humidity, utils::getInvalidHumidity(), channel);
|
||||
}
|
||||
}
|
||||
|
||||
if (restart) {
|
||||
Serial.printf("PMS failure count reach to max set %d, restarting...", ag->pms5003.getFailCountMax());
|
||||
ESP.restart();
|
||||
// Read PMS channel 2 if available
|
||||
channel = 2;
|
||||
if (configuration.hasSensorPMS2) {
|
||||
if (ag->pms5003t_2.connected()) {
|
||||
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::PM03_PC, ag->pms5003t_2.getPm03ParticleCount(), 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
|
||||
measurements.update(Measurements::PM01, utils::getInvalidPmValue(), channel);
|
||||
measurements.update(Measurements::PM25, utils::getInvalidPmValue(), channel);
|
||||
measurements.update(Measurements::PM10, utils::getInvalidPmValue(), channel);
|
||||
measurements.update(Measurements::PM03_PC, utils::getInvalidPmValue(), channel);
|
||||
measurements.update(Measurements::Temperature, utils::getInvalidTemperature(), channel);
|
||||
measurements.update(Measurements::Humidity, utils::getInvalidHumidity(), channel);
|
||||
}
|
||||
}
|
||||
|
||||
if (configuration.hasSensorSGP) {
|
||||
float temp, hum;
|
||||
if (newPMS1Value && newPMS2Value) {
|
||||
// Both PMS has new valid value
|
||||
temp = (measurements.getFloat(Measurements::Temperature, 1) +
|
||||
measurements.getFloat(Measurements::Temperature, 2)) /
|
||||
2.0f;
|
||||
hum = (measurements.getFloat(Measurements::Humidity, 1) +
|
||||
measurements.getFloat(Measurements::Humidity, 2)) /
|
||||
2.0f;
|
||||
} else if (newPMS1Value) {
|
||||
// Only PMS1 has new valid value
|
||||
temp = measurements.getFloat(Measurements::Temperature, 1);
|
||||
hum = measurements.getFloat(Measurements::Humidity, 1);
|
||||
} else {
|
||||
// Only PMS2 has new valid value
|
||||
temp = measurements.getFloat(Measurements::Temperature, 2);
|
||||
hum = measurements.getFloat(Measurements::Humidity, 2);
|
||||
}
|
||||
|
||||
// Update compensation temperature and humidity for SGP41
|
||||
ag->sgp41.setCompensationTemperatureHumidity(temp, hum);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1228,8 +1102,7 @@ static void sendDataToServer(void) {
|
||||
return;
|
||||
}
|
||||
|
||||
String syncData = measurements.toString(false, fwMode, wifiConnector.RSSI(),
|
||||
ag, &configuration);
|
||||
String syncData = measurements.toString(false, fwMode, wifiConnector.RSSI(), *ag, configuration);
|
||||
if (apiClient.postToServer(syncData)) {
|
||||
Serial.println();
|
||||
Serial.println(
|
||||
@ -1241,24 +1114,53 @@ static void sendDataToServer(void) {
|
||||
static void tempHumUpdate(void) {
|
||||
delay(100);
|
||||
if (ag->sht.measure()) {
|
||||
measurements.Temperature = ag->sht.getTemperature();
|
||||
measurements.Humidity = ag->sht.getRelativeHumidity();
|
||||
float temp = ag->sht.getTemperature();
|
||||
float rhum = ag->sht.getRelativeHumidity();
|
||||
|
||||
Serial.printf("Temperature in C: %0.2f\r\n", measurements.Temperature);
|
||||
Serial.printf("Relative Humidity: %d\r\n", measurements.Humidity);
|
||||
Serial.printf("Temperature compensated in C: %0.2f\r\n",
|
||||
measurements.Temperature);
|
||||
Serial.printf("Relative Humidity compensated: %d\r\n",
|
||||
measurements.Humidity);
|
||||
measurements.update(Measurements::Temperature, temp);
|
||||
measurements.update(Measurements::Humidity, rhum);
|
||||
|
||||
// Update compensation temperature and humidity for SGP41
|
||||
if (configuration.hasSensorSGP) {
|
||||
ag->sgp41.setCompensationTemperatureHumidity(measurements.Temperature,
|
||||
measurements.Humidity);
|
||||
ag->sgp41.setCompensationTemperatureHumidity(temp, rhum);
|
||||
}
|
||||
} else {
|
||||
measurements.Temperature = utils::getInvalidTemperature();
|
||||
measurements.Humidity = utils::getInvalidHumidity();
|
||||
measurements.update(Measurements::Temperature, utils::getInvalidTemperature());
|
||||
measurements.update(Measurements::Humidity, utils::getInvalidHumidity());
|
||||
Serial.println("SHT read failed");
|
||||
}
|
||||
}
|
||||
|
||||
/* Set max period for each measurement type based on sensor update interval*/
|
||||
void setMeasurementMaxPeriod() {
|
||||
/// 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 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));
|
||||
// Temperature and Humidity
|
||||
if (configuration.hasSensorSHT) {
|
||||
/// Max period for SHT sensors measurements
|
||||
measurements.maxPeriod(Measurements::Temperature,
|
||||
calculateMaxPeriod(SENSOR_TEMP_HUM_UPDATE_INTERVAL));
|
||||
measurements.maxPeriod(Measurements::Humidity,
|
||||
calculateMaxPeriod(SENSOR_TEMP_HUM_UPDATE_INTERVAL));
|
||||
} else {
|
||||
/// Temp and hum data retrieved from PMS5003T sensor
|
||||
measurements.maxPeriod(Measurements::Temperature,
|
||||
calculateMaxPeriod(SENSOR_PM_UPDATE_INTERVAL));
|
||||
measurements.maxPeriod(Measurements::Humidity, calculateMaxPeriod(SENSOR_PM_UPDATE_INTERVAL));
|
||||
}
|
||||
}
|
||||
|
||||
int calculateMaxPeriod(int updateInterval) {
|
||||
// 0.5 is 50% reduced interval for max period
|
||||
return (SERVER_SYNC_INTERVAL - (SERVER_SYNC_INTERVAL * 0.5)) / updateInterval;
|
||||
}
|
Reference in New Issue
Block a user