mirror of
https://github.com/airgradienthq/arduino.git
synced 2025-07-20 12:12:08 +02:00
Check value sensor value
This commit is contained in:
@ -1,5 +1,6 @@
|
||||
#include "AgOledDisplay.h"
|
||||
#include "Libraries/U8g2/src/U8g2lib.h"
|
||||
#include "Main/utils.h"
|
||||
|
||||
/** Cast U8G2 */
|
||||
#define DISP() ((U8G2_SH1106_128X64_NONAME_F_HW_I2C *)(this->u8g2))
|
||||
@ -10,8 +11,8 @@
|
||||
* @param hasStatus
|
||||
*/
|
||||
void OledDisplay::showTempHum(bool hasStatus) {
|
||||
char buf[10];
|
||||
if (value.Temperature > -1001) {
|
||||
char buf[16];
|
||||
if (utils::isValidTemperature(value.Temperature)) {
|
||||
if (config.isTemperatureUnitInF()) {
|
||||
float tempF = (value.Temperature * 9) / 5 + 32;
|
||||
if (hasStatus) {
|
||||
@ -36,10 +37,10 @@ void OledDisplay::showTempHum(bool hasStatus) {
|
||||
DISP()->drawUTF8(1, 10, buf);
|
||||
|
||||
/** Show humidty */
|
||||
if (value.Humidity >= 0) {
|
||||
if (utils::isValidHumidity(value.Humidity)) {
|
||||
snprintf(buf, sizeof(buf), "%d%%", value.Humidity);
|
||||
} else {
|
||||
snprintf(buf, sizeof(buf), "%-%%");
|
||||
snprintf(buf, sizeof(buf), "-%%");
|
||||
}
|
||||
|
||||
if (value.Humidity > 99) {
|
||||
@ -283,12 +284,8 @@ void OledDisplay::showDashboard(const char *status) {
|
||||
DISP()->drawUTF8(1, 27, "CO2");
|
||||
|
||||
DISP()->setFont(u8g2_font_t0_22b_tf);
|
||||
if (value.CO2 > 0) {
|
||||
int val = 9999;
|
||||
if (value.CO2 < 10000) {
|
||||
val = value.CO2;
|
||||
}
|
||||
sprintf(strBuf, "%d", val);
|
||||
if (utils::isValidCO2(value.CO2)) {
|
||||
sprintf(strBuf, "%d", value.CO2);
|
||||
} else {
|
||||
sprintf(strBuf, "%s", "-");
|
||||
}
|
||||
@ -309,7 +306,7 @@ void OledDisplay::showDashboard(const char *status) {
|
||||
/** Draw PM2.5 value */
|
||||
DISP()->setFont(u8g2_font_t0_22b_tf);
|
||||
if (config.isPmStandardInUSAQI()) {
|
||||
if (value.pm25_1 >= 0) {
|
||||
if (utils::isValidPMS(value.pm25_1)) {
|
||||
sprintf(strBuf, "%d", ag->pms5003.convertPm25ToUsAqi(value.pm25_1));
|
||||
} else {
|
||||
sprintf(strBuf, "%s", "-");
|
||||
@ -318,7 +315,7 @@ void OledDisplay::showDashboard(const char *status) {
|
||||
DISP()->setFont(u8g2_font_t0_12_tf);
|
||||
DISP()->drawUTF8(48, 61, "AQI");
|
||||
} else {
|
||||
if (value.pm25_1 >= 0) {
|
||||
if (utils::isValidPMS(value.pm25_1)) {
|
||||
sprintf(strBuf, "%d", value.pm25_1);
|
||||
} else {
|
||||
sprintf(strBuf, "%s", "-");
|
||||
@ -333,7 +330,7 @@ void OledDisplay::showDashboard(const char *status) {
|
||||
DISP()->drawStr(85, 27, "tvoc:");
|
||||
|
||||
/** Draw tvocIndexvalue */
|
||||
if (value.TVOC >= 0) {
|
||||
if (utils::isValidVOC(value.TVOC)) {
|
||||
sprintf(strBuf, "%d", value.TVOC);
|
||||
} else {
|
||||
sprintf(strBuf, "%s", "-");
|
||||
@ -342,7 +339,7 @@ void OledDisplay::showDashboard(const char *status) {
|
||||
|
||||
/** Draw NOx label */
|
||||
DISP()->drawStr(85, 53, "NOx:");
|
||||
if (value.NOx >= 0) {
|
||||
if (utils::isValidNOx(value.NOx)) {
|
||||
sprintf(strBuf, "%d", value.NOx);
|
||||
} else {
|
||||
sprintf(strBuf, "%s", "-");
|
||||
@ -353,34 +350,49 @@ void OledDisplay::showDashboard(const char *status) {
|
||||
ag->display.clear();
|
||||
|
||||
/** Set CO2 */
|
||||
snprintf(strBuf, sizeof(strBuf), "CO2:%d", value.CO2);
|
||||
if(utils::isValidCO2(value.CO2)) {
|
||||
snprintf(strBuf, sizeof(strBuf), "CO2:%d", value.CO2);
|
||||
} else {
|
||||
snprintf(strBuf, sizeof(strBuf), "CO2:-");
|
||||
}
|
||||
|
||||
ag->display.setCursor(0, 0);
|
||||
ag->display.setText(strBuf);
|
||||
|
||||
/** Set PM */
|
||||
ag->display.setCursor(0, 12);
|
||||
snprintf(strBuf, sizeof(strBuf), "PM2.5:%d", value.pm25_1);
|
||||
if (utils::isValidPMS(value.pm25_1)) {
|
||||
snprintf(strBuf, sizeof(strBuf), "PM2.5:%d", value.pm25_1);
|
||||
} else {
|
||||
snprintf(strBuf, sizeof(strBuf), "PM2.5:-");
|
||||
}
|
||||
ag->display.setText(strBuf);
|
||||
|
||||
/** Set temperature and humidity */
|
||||
if (value.Temperature <= -1001.0f) {
|
||||
if (config.isTemperatureUnitInF()) {
|
||||
snprintf(strBuf, sizeof(strBuf), "T:-F");
|
||||
} else {
|
||||
snprintf(strBuf, sizeof(strBuf), "T:-C");
|
||||
}
|
||||
} else {
|
||||
if (utils::isValidTemperature(value.Temperature)) {
|
||||
if (config.isTemperatureUnitInF()) {
|
||||
float tempF = (value.Temperature * 9) / 5 + 32;
|
||||
snprintf(strBuf, sizeof(strBuf), "T:%d F", (int)tempF);
|
||||
} else {
|
||||
snprintf(strBuf, sizeof(strBuf), "T:%d C", (int)value.Temperature);
|
||||
}
|
||||
} else {
|
||||
if (config.isTemperatureUnitInF()) {
|
||||
snprintf(strBuf, sizeof(strBuf), "T:-F");
|
||||
} else {
|
||||
snprintf(strBuf, sizeof(strBuf), "T:-C");
|
||||
}
|
||||
}
|
||||
|
||||
ag->display.setCursor(0, 24);
|
||||
ag->display.setText(strBuf);
|
||||
|
||||
snprintf(strBuf, sizeof(strBuf), "H:%d %%", (int)value.Humidity);
|
||||
if (utils::isValidHumidity(value.Humidity)) {
|
||||
snprintf(strBuf, sizeof(strBuf), "H:%d %%", (int)value.Humidity);
|
||||
} else {
|
||||
snprintf(strBuf, sizeof(strBuf), "H:- %%");
|
||||
}
|
||||
|
||||
ag->display.setCursor(0, 36);
|
||||
ag->display.setText(strBuf);
|
||||
|
||||
|
329
src/AgValue.cpp
329
src/AgValue.cpp
@ -1,6 +1,7 @@
|
||||
#include "AgValue.h"
|
||||
#include "AgConfigure.h"
|
||||
#include "AirGradient.h"
|
||||
#include "Main/utils.h"
|
||||
#include "Libraries/Arduino_JSON/src/Arduino_JSON.h"
|
||||
|
||||
String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi,
|
||||
@ -13,36 +14,35 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi,
|
||||
if (localServer) {
|
||||
root["serialno"] = ag->deviceId();
|
||||
}
|
||||
if (config->hasSensorS8) {
|
||||
if (this->CO2 >= 0) {
|
||||
root["rco2"] = this->CO2;
|
||||
}
|
||||
|
||||
if (config->hasSensorS8 && utils::isValidCO2(this->CO2)) {
|
||||
root["rco2"] = this->CO2;
|
||||
}
|
||||
|
||||
if (ag->isOne() || (ag->isPro4_2()) || ag->isPro3_3() || ag->isBasic()) {
|
||||
if (config->hasSensorPMS1) {
|
||||
if (this->pm01_1 >= 0) {
|
||||
if (utils::isValidPMS(this->pm01_1)) {
|
||||
root["pm01"] = this->pm01_1;
|
||||
}
|
||||
if (this->pm25_1 >= 0) {
|
||||
if (utils::isValidPMS(this->pm25_1)) {
|
||||
root["pm02"] = this->pm25_1;
|
||||
}
|
||||
if (this->pm10_1 >= 0) {
|
||||
if (utils::isValidPMS(this->pm10_1)) {
|
||||
root["pm10"] = this->pm10_1;
|
||||
}
|
||||
if (this->pm03PCount_1 >= 0) {
|
||||
if (utils::isValidPMS03Count(this->pm03PCount_1)) {
|
||||
root["pm003Count"] = this->pm03PCount_1;
|
||||
}
|
||||
}
|
||||
|
||||
if (config->hasSensorSHT) {
|
||||
if (this->Temperature > -1001) {
|
||||
if (utils::isValidTemperature(this->Temperature)) {
|
||||
root["atmp"] = ag->round2(this->Temperature);
|
||||
if (localServer) {
|
||||
root["atmpCompensated"] = ag->round2(this->Temperature);
|
||||
}
|
||||
}
|
||||
if (this->Humidity >= 0) {
|
||||
if (utils::isValidHumidity(this->Humidity)) {
|
||||
root["rhum"] = this->Humidity;
|
||||
if (localServer) {
|
||||
root["rhumCompensated"] = this->Humidity;
|
||||
@ -52,107 +52,250 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi,
|
||||
|
||||
} else {
|
||||
if (config->hasSensorPMS1 && config->hasSensorPMS2) {
|
||||
root["pm01"] = ag->round2((this->pm01_1 + this->pm01_2) / 2.0);
|
||||
root["pm02"] = ag->round2((this->pm25_1 + this->pm25_2) / 2.0);
|
||||
root["pm10"] = ag->round2((this->pm10_1 + this->pm10_2) / 2.0);
|
||||
root["pm003Count"] =
|
||||
ag->round2((this->pm03PCount_1 + this->pm03PCount_2) / 2.0);
|
||||
root["atmp"] = ag->round2((this->temp_1 + this->temp_2) / 2.0f);
|
||||
root["rhum"] = ag->round2((this->hum_1 + this->hum_2) / 2.0f);
|
||||
if (localServer) {
|
||||
root["atmpCompensated"] =
|
||||
ag->round2(ag->pms5003t_2.temperatureCompensated(
|
||||
(this->temp_1 + this->temp_2) / 2.0f));
|
||||
root["rhumCompensated"] = (int)ag->pms5003t_2.humidityCompensated(
|
||||
(this->hum_1 + this->hum_2) / 2.0f);
|
||||
if (utils::isValidPMS(this->pm01_1) && utils::isValidPMS(this->pm01_2)) {
|
||||
root["pm01"] = ag->round2((this->pm01_1 + this->pm01_2) / 2.0f);
|
||||
}
|
||||
if (utils::isValidPMS(this->pm25_1) && utils::isValidPMS(this->pm25_2)) {
|
||||
root["pm02"] = ag->round2((this->pm25_1 + this->pm25_2) / 2.0f);
|
||||
}
|
||||
if (utils::isValidPMS(this->pm10_1) && utils::isValidPMS(this->pm10_2)) {
|
||||
root["pm10"] = ag->round2((this->pm10_1 + this->pm10_2) / 2.0f);
|
||||
}
|
||||
if (utils::isValidPMS(this->pm03PCount_1) && utils::isValidPMS(this->pm03PCount_2)) {
|
||||
root["pm003Count"] = ag->round2((this->pm03PCount_1 + this->pm03PCount_2) / 2.0f);
|
||||
}
|
||||
|
||||
float val;
|
||||
if (utils::isValidTemperature(this->temp_1) && utils::isValidTemperature(this->temp_1)) {
|
||||
root["atmp"] = ag->round2((this->temp_1 + this->temp_2) / 2.0f);
|
||||
if (localServer) {
|
||||
val = ag->pms5003t_2.temperatureCompensated((this->temp_1 + this->temp_2) / 2.0f);
|
||||
if (utils::isValidTemperature(val)) {
|
||||
root["atmpCompensated"] = ag->round2(val);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (utils::isValidHumidity(this->hum_1) && utils::isValidHumidity(this->hum_1)) {
|
||||
root["rhum"] = ag->round2((this->hum_1 + this->hum_2) / 2.0f);
|
||||
if (localServer) {
|
||||
val = ag->pms5003t_2.humidityCompensated((this->hum_1 + this->hum_2) / 2.0f);
|
||||
if (utils::isValidHumidity(val)) {
|
||||
root["rhumCompensated"] = (int)val;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (fwMode == FW_MODE_O_1PS || fwMode == FW_MODE_O_1PST) {
|
||||
float val;
|
||||
if (config->hasSensorPMS1) {
|
||||
root["pm01"] = this->pm01_1;
|
||||
root["pm02"] = this->pm25_1;
|
||||
root["pm10"] = this->pm10_1;
|
||||
root["pm003Count"] = this->pm03PCount_1;
|
||||
root["atmp"] = ag->round2(this->temp_1);
|
||||
root["rhum"] = this->hum_1;
|
||||
if (localServer) {
|
||||
root["atmpCompensated"] =
|
||||
ag->round2(ag->pms5003t_1.temperatureCompensated(this->temp_1));
|
||||
root["rhumCompensated"] =
|
||||
(int)ag->pms5003t_1.humidityCompensated(this->hum_1);
|
||||
if (utils::isValidPMS(this->pm01_1)) {
|
||||
root["pm01"] = this->pm01_1;
|
||||
}
|
||||
if (utils::isValidPMS(this->pm25_1)) {
|
||||
root["pm02"] = this->pm25_1;
|
||||
}
|
||||
if (utils::isValidPMS(this->pm10_1)) {
|
||||
root["pm10"] = this->pm10_1;
|
||||
}
|
||||
if (utils::isValidPMS03Count(this->pm03PCount_1)) {
|
||||
root["pm003Count"] = this->pm03PCount_1;
|
||||
}
|
||||
if (utils::isValidTemperature(this->temp_1)) {
|
||||
root["atmp"] = ag->round2(this->temp_1);
|
||||
|
||||
if (localServer) {
|
||||
val = ag->pms5003t_1.temperatureCompensated(this->temp_1);
|
||||
if (utils::isValidTemperature(val)) {
|
||||
root["atmpCompensated"] = ag->round2(val);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (utils::isValidHumidity(this->hum_1)) {
|
||||
root["rhum"] = this->hum_1;
|
||||
|
||||
if (localServer) {
|
||||
val = ag->pms5003t_1.humidityCompensated(this->hum_1);
|
||||
if (utils::isValidHumidity(val)) {
|
||||
root["rhumCompensated"] = (int)val;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (config->hasSensorPMS2) {
|
||||
root["pm01"] = this->pm01_2;
|
||||
root["pm02"] = this->pm25_2;
|
||||
root["pm10"] = this->pm10_2;
|
||||
root["pm003Count"] = this->pm03PCount_2;
|
||||
root["atmp"] = ag->round2(this->temp_2);
|
||||
root["rhum"] = this->hum_2;
|
||||
if (localServer) {
|
||||
root["atmpCompensated"] =
|
||||
ag->round2(ag->pms5003t_2.temperatureCompensated(this->temp_2));
|
||||
root["rhumCompensated"] =
|
||||
(int)ag->pms5003t_2.humidityCompensated(this->hum_2);
|
||||
if(utils::isValidPMS(this->pm01_2)) {
|
||||
root["pm01"] = this->pm01_2;
|
||||
}
|
||||
if(utils::isValidPMS(this->pm25_2)) {
|
||||
root["pm02"] = this->pm25_2;
|
||||
}
|
||||
if(utils::isValidPMS(this->pm10_2)) {
|
||||
root["pm10"] = this->pm10_2;
|
||||
}
|
||||
if(utils::isValidPMS03Count(this->pm03PCount_2)) {
|
||||
root["pm003Count"] = this->pm03PCount_2;
|
||||
}
|
||||
|
||||
float val;
|
||||
if (utils::isValidTemperature(this->temp_2)) {
|
||||
root["atmp"] = ag->round2(this->temp_2);
|
||||
|
||||
if (localServer) {
|
||||
val = ag->pms5003t_2.temperatureCompensated(this->temp_2);
|
||||
if (utils::isValidTemperature(val)) {
|
||||
root["atmpCompensated"] = ag->round2(val);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(utils::isValidHumidity(this->hum_2)) {
|
||||
root["rhum"] = this->hum_2;
|
||||
|
||||
if (localServer) {
|
||||
val = ag->pms5003t_2.humidityCompensated(this->hum_2);
|
||||
if (utils::isValidHumidity(val)) {
|
||||
root["rhumCompensated"] = (int)val;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (fwMode == FW_MODE_O_1P) {
|
||||
float val;
|
||||
if (config->hasSensorPMS1) {
|
||||
root["pm01"] = this->pm01_1;
|
||||
root["pm02"] = this->pm25_1;
|
||||
root["pm10"] = this->pm10_1;
|
||||
root["pm003Count"] = this->pm03PCount_1;
|
||||
root["atmp"] = ag->round2(this->temp_1);
|
||||
root["rhum"] = this->hum_1;
|
||||
if (localServer) {
|
||||
root["atmpCompensated"] =
|
||||
ag->round2(ag->pms5003t_1.temperatureCompensated(this->temp_1));
|
||||
root["rhumCompensated"] =
|
||||
(int)ag->pms5003t_1.humidityCompensated(this->hum_1);
|
||||
if (utils::isValidPMS(this->pm01_1)) {
|
||||
root["pm01"] = this->pm01_1;
|
||||
}
|
||||
if (utils::isValidPMS(this->pm25_1)) {
|
||||
root["pm02"] = this->pm25_1;
|
||||
}
|
||||
if (utils::isValidPMS(this->pm10_1)) {
|
||||
root["pm10"] = this->pm10_1;
|
||||
}
|
||||
if (utils::isValidPMS03Count(this->pm03PCount_1)) {
|
||||
root["pm003Count"] = this->pm03PCount_1;
|
||||
}
|
||||
if (utils::isValidTemperature(this->temp_1)) {
|
||||
root["atmp"] = ag->round2(this->temp_1);
|
||||
|
||||
if (localServer) {
|
||||
val = ag->pms5003t_1.temperatureCompensated(this->temp_1);
|
||||
if (utils::isValidTemperature(val)) {
|
||||
root["atmpCompensated"] = ag->round2(val);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (utils::isValidHumidity(this->hum_1)) {
|
||||
root["rhum"] = this->hum_1;
|
||||
if(localServer) {
|
||||
val = ag->pms5003t_1.humidityCompensated(this->hum_1);
|
||||
if(utils::isValidHumidity(val)) {
|
||||
root["rhumCompensated"] = (int)val;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (config->hasSensorPMS2) {
|
||||
root["pm01"] = this->pm01_2;
|
||||
root["pm02"] = this->pm25_2;
|
||||
root["pm10"] = this->pm10_2;
|
||||
root["pm003Count"] = this->pm03PCount_2;
|
||||
root["atmp"] = ag->round2(this->temp_2);
|
||||
root["rhum"] = this->hum_2;
|
||||
if (localServer) {
|
||||
root["atmpCompensated"] =
|
||||
ag->round2(ag->pms5003t_1.temperatureCompensated(this->temp_2));
|
||||
root["rhumCompensated"] =
|
||||
(int)ag->pms5003t_1.humidityCompensated(this->hum_2);
|
||||
if(utils::isValidPMS(this->pm01_2)) {
|
||||
root["pm01"] = this->pm01_2;
|
||||
}
|
||||
if(utils::isValidPMS(this->pm25_2)) {
|
||||
root["pm02"] = this->pm25_2;
|
||||
}
|
||||
if(utils::isValidPMS(this->pm10_2)) {
|
||||
root["pm10"] = this->pm10_2;
|
||||
}
|
||||
if(utils::isValidPMS03Count(this->pm03PCount_2)) {
|
||||
root["pm003Count"] = this->pm03PCount_2;
|
||||
}
|
||||
if (utils::isValidTemperature(this->temp_2)) {
|
||||
root["atmp"] = ag->round2(this->temp_2);
|
||||
if (localServer) {
|
||||
|
||||
val = ag->pms5003t_1.temperatureCompensated(this->temp_2);
|
||||
if (utils::isValidTemperature(val)) {
|
||||
root["atmpCompensated"] = ag->round2(val);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (utils::isValidHumidity(this->hum_2)) {
|
||||
root["rhum"] = this->hum_2;
|
||||
|
||||
if(localServer) {
|
||||
val = ag->pms5003t_1.humidityCompensated(this->hum_2);
|
||||
if(utils::isValidHumidity(val)) {
|
||||
root["rhumCompensated"] = (int)val;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
float val;
|
||||
if (config->hasSensorPMS1) {
|
||||
root["channels"]["1"]["pm01"] = this->pm01_1;
|
||||
root["channels"]["1"]["pm02"] = this->pm25_1;
|
||||
root["channels"]["1"]["pm10"] = this->pm10_1;
|
||||
root["channels"]["1"]["pm003Count"] = this->pm03PCount_1;
|
||||
root["channels"]["1"]["atmp"] = ag->round2(this->temp_1);
|
||||
root["channels"]["1"]["rhum"] = this->hum_1;
|
||||
if (localServer) {
|
||||
root["channels"]["1"]["atmpCompensated"] =
|
||||
ag->round2(ag->pms5003t_1.temperatureCompensated(this->temp_1));
|
||||
root["channels"]["1"]["rhumCompensated"] =
|
||||
(int)ag->pms5003t_1.humidityCompensated(this->hum_1);
|
||||
if(utils::isValidPMS(this->pm01_1)) {
|
||||
root["channels"]["1"]["pm01"] = this->pm01_1;
|
||||
}
|
||||
if(utils::isValidPMS(this->pm25_1)) {
|
||||
root["channels"]["1"]["pm02"] = this->pm25_1;
|
||||
}
|
||||
if(utils::isValidPMS(this->pm10_1)) {
|
||||
root["channels"]["1"]["pm10"] = this->pm10_1;
|
||||
}
|
||||
if (utils::isValidPMS03Count(this->pm03PCount_1)) {
|
||||
root["channels"]["1"]["pm003Count"] = this->pm03PCount_1;
|
||||
}
|
||||
if(utils::isValidTemperature(this->temp_1)) {
|
||||
root["channels"]["1"]["atmp"] = ag->round2(this->temp_1);
|
||||
|
||||
if (localServer) {
|
||||
val = ag->pms5003t_1.temperatureCompensated(this->temp_1);
|
||||
if (utils::isValidTemperature(val)) {
|
||||
root["channels"]["1"]["atmpCompensated"] = ag->round2(val);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (utils::isValidHumidity(this->hum_1)) {
|
||||
root["channels"]["1"]["rhum"] = this->hum_1;
|
||||
|
||||
if (localServer) {
|
||||
val = ag->pms5003t_1.humidityCompensated(this->hum_1);
|
||||
if (utils::isValidHumidity(val)) {
|
||||
root["channels"]["1"]["rhumCompensated"] = (int)val;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (config->hasSensorPMS2) {
|
||||
root["channels"]["2"]["pm01"] = this->pm01_2;
|
||||
root["channels"]["2"]["pm02"] = this->pm25_2;
|
||||
root["channels"]["2"]["pm10"] = this->pm10_2;
|
||||
root["channels"]["2"]["pm003Count"] = this->pm03PCount_2;
|
||||
root["channels"]["2"]["atmp"] = ag->round2(this->temp_2);
|
||||
root["channels"]["2"]["rhum"] = this->hum_2;
|
||||
if (localServer) {
|
||||
root["channels"]["2"]["atmpCompensated"] =
|
||||
ag->round2(ag->pms5003t_1.temperatureCompensated(this->temp_2));
|
||||
root["channels"]["2"]["rhumCompensated"] =
|
||||
(int)ag->pms5003t_1.humidityCompensated(this->hum_2);
|
||||
float val;
|
||||
if (utils::isValidPMS(this->pm01_2)) {
|
||||
root["channels"]["2"]["pm01"] = this->pm01_2;
|
||||
}
|
||||
if (utils::isValidPMS(this->pm25_2)) {
|
||||
root["channels"]["2"]["pm02"] = this->pm25_2;
|
||||
}
|
||||
if (utils::isValidPMS(this->pm10_2)) {
|
||||
root["channels"]["2"]["pm10"] = this->pm10_2;
|
||||
}
|
||||
if (utils::isValidPMS03Count(this->pm03PCount_2)) {
|
||||
root["channels"]["2"]["pm003Count"] = this->pm03PCount_2;
|
||||
}
|
||||
if (utils::isValidTemperature(this->temp_2)) {
|
||||
root["channels"]["2"]["atmp"] = ag->round2(this->temp_2);
|
||||
|
||||
if (localServer) {
|
||||
val = ag->pms5003t_1.temperatureCompensated(this->temp_2);
|
||||
if (utils::isValidTemperature(val)) {
|
||||
root["channels"]["2"]["atmpCompensated"] = ag->round2(val);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (utils::isValidHumidity(this->hum_2)) {
|
||||
root["channels"]["2"]["rhum"] = this->hum_2;
|
||||
|
||||
if (localServer) {
|
||||
val = ag->pms5003t_1.humidityCompensated(this->hum_2);
|
||||
if (utils::isValidHumidity(val)) {
|
||||
root["channels"]["2"]["rhumCompensated"] = (int)val;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -160,16 +303,16 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi,
|
||||
}
|
||||
|
||||
if (config->hasSensorSGP) {
|
||||
if (this->TVOC >= 0) {
|
||||
if (utils::isValidVOC(this->TVOC)) {
|
||||
root["tvocIndex"] = this->TVOC;
|
||||
}
|
||||
if (this->TVOCRaw >= 0) {
|
||||
if (utils::isValidVOC(this->TVOCRaw)) {
|
||||
root["tvocRaw"] = this->TVOCRaw;
|
||||
}
|
||||
if (this->NOx >= 0) {
|
||||
if (utils::isValidNOx(this->NOx)) {
|
||||
root["noxIndex"] = this->NOx;
|
||||
}
|
||||
if (this->NOxRaw >= 0) {
|
||||
if (utils::isValidNOx(this->NOxRaw)) {
|
||||
root["noxRaw"] = this->NOxRaw;
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "S8/S8.h"
|
||||
#include "Sgp41/Sgp41.h"
|
||||
#include "Sht/Sht.h"
|
||||
#include "Main/utils.h"
|
||||
|
||||
#ifndef GIT_VERSION
|
||||
#define GIT_VERSION "snapshot"
|
||||
|
@ -1,49 +1,85 @@
|
||||
#include "utils.h"
|
||||
|
||||
utils::utils(/* args */)
|
||||
{
|
||||
#define VALID_TEMPERATURE_MAX (125)
|
||||
#define VALID_TEMPERATURE_MIN (-40)
|
||||
#define INVALID_TEMPERATURE (-41)
|
||||
|
||||
#define VALID_HUMIDITY_MAX (100)
|
||||
#define VALID_HUMIDITY_MIN (0)
|
||||
#define INVALID_HUMIDITY (-1)
|
||||
|
||||
#define VALID_PMS_MAX (1000)
|
||||
#define VALID_PMS_MIN (0)
|
||||
#define INVALID_PMS (-1)
|
||||
|
||||
#define VALID_CO2_MAX (10000)
|
||||
#define VALID_CO2_MIN (0)
|
||||
#define INVALID_CO2 (-1)
|
||||
|
||||
#define INVALID_NOX (-1)
|
||||
#define INVALID_VOC (-1)
|
||||
|
||||
utils::utils(/* args */) {}
|
||||
|
||||
utils::~utils() {}
|
||||
|
||||
bool utils::isValidTemperature(float value) {
|
||||
if (value >= VALID_TEMPERATURE_MIN && value <= VALID_TEMPERATURE_MAX) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
utils::~utils()
|
||||
{
|
||||
bool utils::isValidHumidity(float value) {
|
||||
if (value >= VALID_HUMIDITY_MIN && value <= VALID_HUMIDITY_MAX) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
float utils::correctTemperature(float value) {
|
||||
if (value < -40) {
|
||||
return -40;
|
||||
bool utils::isValidCO2(int16_t value) {
|
||||
if (value >= VALID_CO2_MIN && value <= VALID_CO2_MAX) {
|
||||
return true;
|
||||
}
|
||||
if (value > 100) {
|
||||
return 125;
|
||||
}
|
||||
return value;
|
||||
return false;
|
||||
}
|
||||
|
||||
float utils::correctHumidity(float value) {
|
||||
if (value < 0) {
|
||||
return 0;
|
||||
bool utils::isValidPMS(int value) {
|
||||
if (value >= VALID_PMS_MIN && value <= VALID_PMS_MAX) {
|
||||
return true;
|
||||
}
|
||||
if (value > 100) {
|
||||
return 100;
|
||||
}
|
||||
return value;
|
||||
return false;
|
||||
}
|
||||
|
||||
int16_t utils::correctCO2(int16_t value) {
|
||||
if (value < 0) {
|
||||
return 0;
|
||||
bool utils::isValidPMS03Count(int value) {
|
||||
if (value >= 0) {
|
||||
return true;
|
||||
}
|
||||
if (value > 10000) {
|
||||
return 10000;
|
||||
}
|
||||
return value;
|
||||
return false;
|
||||
}
|
||||
|
||||
int utils::correctPMS(int value) {
|
||||
if (value < 10) {
|
||||
return 10;
|
||||
bool utils::isValidNOx(int value) {
|
||||
if (value > INVALID_NOX) {
|
||||
return true;
|
||||
}
|
||||
if (value > 1000) {
|
||||
return 1000;
|
||||
}
|
||||
return value;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool utils::isValidVOC(int value) {
|
||||
if (value > INVALID_VOC) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
float utils::getInvalidTemperature(void) { return INVALID_TEMPERATURE; }
|
||||
|
||||
float utils::getInvalidHumidity(void) { return INVALID_HUMIDITY; }
|
||||
|
||||
int utils::getInvalidCO2(void) { return INVALID_CO2; }
|
||||
|
||||
int utils::getInvalidPMS(void) { return INVALID_PMS; }
|
||||
|
||||
int utils::getInvalidNOx(void) { return INVALID_NOX; }
|
||||
|
||||
int utils::getInvalidVOC(void) { return INVALID_VOC; }
|
||||
|
@ -11,10 +11,19 @@ public:
|
||||
utils(/* args */);
|
||||
~utils();
|
||||
|
||||
static float correctTemperature(float value);
|
||||
static float correctHumidity(float value);
|
||||
static int16_t correctCO2(int16_t value);
|
||||
static int correctPMS(int value);
|
||||
static bool isValidTemperature(float value);
|
||||
static bool isValidHumidity(float value);
|
||||
static bool isValidCO2(int16_t value);
|
||||
static bool isValidPMS(int value);
|
||||
static bool isValidPMS03Count(int value);
|
||||
static bool isValidNOx(int value);
|
||||
static bool isValidVOC(int value);
|
||||
static float getInvalidTemperature(void);
|
||||
static float getInvalidHumidity(void);
|
||||
static int getInvalidCO2(void);
|
||||
static int getInvalidPMS(void);
|
||||
static int getInvalidNOx(void);
|
||||
static int getInvalidVOC(void);
|
||||
};
|
||||
|
||||
|
||||
|
@ -88,21 +88,21 @@ bool PMS5003::begin(void) {
|
||||
*
|
||||
* @return int PM1.0 index
|
||||
*/
|
||||
int PMS5003::getPm01Ae(void) { return utils::correctPMS(pms.getPM0_1()); }
|
||||
int PMS5003::getPm01Ae(void) { return pms.getPM0_1(); }
|
||||
|
||||
/**
|
||||
* @brief Read PM2.5 must call this function after @ref readData success
|
||||
*
|
||||
* @return int PM2.5 index
|
||||
*/
|
||||
int PMS5003::getPm25Ae(void) { return utils::correctPMS(pms.getPM2_5()); }
|
||||
int PMS5003::getPm25Ae(void) { return pms.getPM2_5(); }
|
||||
|
||||
/**
|
||||
* @brief Read PM10.0 must call this function after @ref readData success
|
||||
*
|
||||
* @return int PM10.0 index
|
||||
*/
|
||||
int PMS5003::getPm10Ae(void) { return utils::correctPMS(pms.getPM10()); }
|
||||
int PMS5003::getPm10Ae(void) { return pms.getPM10(); }
|
||||
|
||||
/**
|
||||
* @brief Read PM0.3 must call this function after @ref readData success
|
||||
@ -110,7 +110,7 @@ int PMS5003::getPm10Ae(void) { return utils::correctPMS(pms.getPM10()); }
|
||||
* @return int PM0.3 index
|
||||
*/
|
||||
int PMS5003::getPm03ParticleCount(void) {
|
||||
return utils::correctPMS(pms.getCount0_3());
|
||||
return pms.getCount0_3();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -113,21 +113,21 @@ bool PMS5003T::begin(void) {
|
||||
*
|
||||
* @return int PM1.0 index
|
||||
*/
|
||||
int PMS5003T::getPm01Ae(void) { return utils::correctPMS(pms.getPM0_1()); }
|
||||
int PMS5003T::getPm01Ae(void) { return pms.getPM0_1(); }
|
||||
|
||||
/**
|
||||
* @brief Read PM2.5 must call this function after @ref readData success
|
||||
*
|
||||
* @return int PM2.5 index
|
||||
*/
|
||||
int PMS5003T::getPm25Ae(void) { return utils::correctPMS(pms.getPM2_5()); }
|
||||
int PMS5003T::getPm25Ae(void) { return pms.getPM2_5(); }
|
||||
|
||||
/**
|
||||
* @brief Read PM10.0 must call this function after @ref readData success
|
||||
*
|
||||
* @return int PM10.0 index
|
||||
*/
|
||||
int PMS5003T::getPm10Ae(void) { return utils::correctPMS(pms.getPM10()); }
|
||||
int PMS5003T::getPm10Ae(void) { return pms.getPM10(); }
|
||||
|
||||
/**
|
||||
* @brief Read PM 0.3 Count must call this function after @ref readData success
|
||||
@ -135,7 +135,7 @@ int PMS5003T::getPm10Ae(void) { return utils::correctPMS(pms.getPM10()); }
|
||||
* @return int PM 0.3 Count index
|
||||
*/
|
||||
int PMS5003T::getPm03ParticleCount(void) {
|
||||
return utils::correctPMS(pms.getCount0_3());
|
||||
return pms.getCount0_3();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -152,7 +152,7 @@ int PMS5003T::convertPm25ToUsAqi(int pm25) { return pms.pm25ToAQI(pm25); }
|
||||
* @return float Degree Celcius
|
||||
*/
|
||||
float PMS5003T::getTemperature(void) {
|
||||
return utils::correctTemperature(pms.getTemp() / 10.0f);
|
||||
return pms.getTemp() / 10.0f;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -161,7 +161,7 @@ float PMS5003T::getTemperature(void) {
|
||||
* @return float Percent (%)
|
||||
*/
|
||||
float PMS5003T::getRelativeHumidity(void) {
|
||||
return utils::correctHumidity(pms.getHum() / 10.0f);
|
||||
return pms.getHum() / 10.0f;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -104,7 +104,7 @@ void S8::getFirmwareVersion(char firmver[]) {
|
||||
*/
|
||||
int32_t S8::getSensorTypeId(void) {
|
||||
if (this->isBegin() == false) {
|
||||
return -1;
|
||||
return utils::getInvalidCO2();
|
||||
}
|
||||
|
||||
int32_t sensorType = 0;
|
||||
@ -246,7 +246,7 @@ int16_t S8::getCo2(void) {
|
||||
AgLog("Error getting CO2 value!");
|
||||
}
|
||||
|
||||
return utils::correctCO2(co2);
|
||||
return co2;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2,6 +2,7 @@
|
||||
#include "../Libraries/SensirionSGP41/src/SensirionI2CSgp41.h"
|
||||
#include "../Libraries/Sensirion_Gas_Index_Algorithm/src/NOxGasIndexAlgorithm.h"
|
||||
#include "../Libraries/Sensirion_Gas_Index_Algorithm/src/VOCGasIndexAlgorithm.h"
|
||||
#include "../Main/utils.h"
|
||||
|
||||
#define sgpSensor() ((SensirionI2CSgp41 *)(this->_sensor))
|
||||
#define vocAlgorithm() ((VOCGasIndexAlgorithm *)(this->_vocAlgorithm))
|
||||
@ -66,6 +67,7 @@ bool Sgp41::begin(TwoWire &wire) {
|
||||
}
|
||||
|
||||
onConditioning = true;
|
||||
_handleFailCount = 0;
|
||||
#ifdef ESP32
|
||||
/** Create task */
|
||||
xTaskCreate(
|
||||
@ -108,7 +110,21 @@ void Sgp41::handle(void) {
|
||||
noxRaw = srawNox;
|
||||
nox = noxAlgorithm()->process(srawNox);
|
||||
tvoc = vocAlgorithm()->process(srawVoc);
|
||||
|
||||
_handleFailCount = 0;
|
||||
// AgLog("Polling SGP41 success: tvoc: %d, nox: %d", tvoc, nox);
|
||||
} else {
|
||||
if(_handleFailCount < 5) {
|
||||
_handleFailCount++;
|
||||
AgLog("Polling SGP41 failed: %d", _handleFailCount);
|
||||
}
|
||||
|
||||
if (_handleFailCount >= 5) {
|
||||
tvocRaw = utils::getInvalidVOC();
|
||||
tvoc = utils::getInvalidVOC();
|
||||
noxRaw = utils::getInvalidNOx();
|
||||
nox = utils::getInvalidNOx();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -141,7 +157,21 @@ void Sgp41::_handle(void) {
|
||||
noxRaw = srawNox;
|
||||
nox = noxAlgorithm()->process(srawNox);
|
||||
tvoc = vocAlgorithm()->process(srawVoc);
|
||||
|
||||
_handleFailCount = 0;
|
||||
// AgLog("Polling SGP41 success: tvoc: %d, nox: %d", tvoc, nox);
|
||||
} else {
|
||||
if(_handleFailCount < 5) {
|
||||
_handleFailCount++;
|
||||
AgLog("Polling SGP41 failed: %d", _handleFailCount);
|
||||
}
|
||||
|
||||
if (_handleFailCount >= 5) {
|
||||
tvocRaw = utils::getInvalidVOC();
|
||||
tvoc = utils::getInvalidVOC();
|
||||
noxRaw = utils::getInvalidNOx();
|
||||
nox = utils::getInvalidNOx();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -176,7 +206,7 @@ void Sgp41::end(void) {
|
||||
*/
|
||||
int Sgp41::getTvocIndex(void) {
|
||||
if (onConditioning) {
|
||||
return -1;
|
||||
return utils::getInvalidVOC();
|
||||
}
|
||||
return tvoc;
|
||||
}
|
||||
@ -188,7 +218,7 @@ int Sgp41::getTvocIndex(void) {
|
||||
*/
|
||||
int Sgp41::getNoxIndex(void) {
|
||||
if (onConditioning) {
|
||||
return -1;
|
||||
return utils::getInvalidNOx();
|
||||
}
|
||||
return nox;
|
||||
}
|
||||
|
@ -35,6 +35,7 @@ private:
|
||||
bool onConditioning = true;
|
||||
bool ready = false;
|
||||
bool _isBegin = false;
|
||||
uint8_t _handleFailCount = 0;
|
||||
void *_sensor;
|
||||
void *_vocAlgorithm;
|
||||
void *_noxAlgorithm;
|
||||
|
@ -133,7 +133,7 @@ void Sht::end(void) {
|
||||
* @return float
|
||||
*/
|
||||
float Sht::getTemperature(void) {
|
||||
return utils::correctTemperature(shtSensor()->getTemperature());
|
||||
return shtSensor()->getTemperature();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -142,7 +142,7 @@ float Sht::getTemperature(void) {
|
||||
* @return float
|
||||
*/
|
||||
float Sht::getRelativeHumidity(void) {
|
||||
return utils::correctHumidity(shtSensor()->getHumidity());
|
||||
return shtSensor()->getHumidity();
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user