Merge branch 'master' into develop

This commit is contained in:
Phat Nguyen
2024-03-03 21:35:25 +07:00
6 changed files with 50 additions and 26 deletions

View File

@ -5,8 +5,8 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
example: example:
- "BASIC_v4" - "BASIC"
- "ONE_I-9PSL" - "ONE"
- "Open_Air" - "Open_Air"
- "TestCO2" - "TestCO2"
- "TestPM" - "TestPM"

View File

@ -90,14 +90,14 @@ enum {
#define WIFI_CONNECT_RETRY_MS 10000 /** ms */ #define WIFI_CONNECT_RETRY_MS 10000 /** ms */
#define LED_BAR_COUNT_INIT_VALUE (-1) /** */ #define LED_BAR_COUNT_INIT_VALUE (-1) /** */
#define LED_BAR_ANIMATION_PERIOD 100 /** ms */ #define LED_BAR_ANIMATION_PERIOD 100 /** ms */
#define DISP_UPDATE_INTERVAL 5000 /** ms */ #define DISP_UPDATE_INTERVAL 2500 /** ms */
#define SERVER_CONFIG_UPDATE_INTERVAL 30000 /** ms */ #define SERVER_CONFIG_UPDATE_INTERVAL 15000 /** ms */
#define SERVER_SYNC_INTERVAL 60000 /** ms */ #define SERVER_SYNC_INTERVAL 60000 /** ms */
#define MQTT_SYNC_INTERVAL 60000 /** ms */ #define MQTT_SYNC_INTERVAL 60000 /** ms */
#define SENSOR_CO2_CALIB_COUNTDOWN_MAX 5 /** sec */ #define SENSOR_CO2_CALIB_COUNTDOWN_MAX 5 /** sec */
#define SENSOR_TVOC_UPDATE_INTERVAL 1000 /** ms */ #define SENSOR_TVOC_UPDATE_INTERVAL 1000 /** ms */
#define SENSOR_CO2_UPDATE_INTERVAL 5000 /** ms */ #define SENSOR_CO2_UPDATE_INTERVAL 4000 /** ms */
#define SENSOR_PM_UPDATE_INTERVAL 5000 /** ms */ #define SENSOR_PM_UPDATE_INTERVAL 2000 /** ms */
#define SENSOR_TEMP_HUM_UPDATE_INTERVAL 2000 /** ms */ #define SENSOR_TEMP_HUM_UPDATE_INTERVAL 2000 /** ms */
#define DISPLAY_DELAY_SHOW_CONTENT_MS 2000 /** ms */ #define DISPLAY_DELAY_SHOW_CONTENT_MS 2000 /** ms */
#define WIFI_HOTSPOT_PASSWORD_DEFAULT \ #define WIFI_HOTSPOT_PASSWORD_DEFAULT \
@ -710,8 +710,10 @@ bool hasSensorSGP = true;
bool hasSensorSHT = true; bool hasSensorSHT = true;
int pmFailCount = 0; int pmFailCount = 0;
uint32_t factoryBtnPressTime = 0; uint32_t factoryBtnPressTime = 0;
String mdnsModelName = "";
AgSchedule dispLedSchedule(DISP_UPDATE_INTERVAL, displayAndLedBarUpdate); AgSchedule dispLedSchedule(DISP_UPDATE_INTERVAL, displayAndLedBarUpdate);
AgSchedule configSchedule(SERVER_CONFIG_UPDATE_INTERVAL, updateServerConfiguration); AgSchedule configSchedule(SERVER_CONFIG_UPDATE_INTERVAL,
updateServerConfiguration);
AgSchedule serverSchedule(SERVER_SYNC_INTERVAL, sendDataToServer); AgSchedule serverSchedule(SERVER_SYNC_INTERVAL, sendDataToServer);
AgSchedule co2Schedule(SENSOR_CO2_UPDATE_INTERVAL, co2Update); AgSchedule co2Schedule(SENSOR_CO2_UPDATE_INTERVAL, co2Update);
AgSchedule pmsSchedule(SENSOR_PM_UPDATE_INTERVAL, pmUpdate); AgSchedule pmsSchedule(SENSOR_PM_UPDATE_INTERVAL, pmUpdate);
@ -734,7 +736,8 @@ void setup() {
u8g2.begin(); u8g2.begin();
/** Show boot display */ /** Show boot display */
displayShowText("One V9", "Lib Ver: " + ag.getVersion(), ""); Serial.println("Firmware Version: "+ag.getVersion());
displayShowText("One V9", "FW Ver: " + ag.getVersion(), "");
delay(DISPLAY_DELAY_SHOW_CONTENT_MS); delay(DISPLAY_DELAY_SHOW_CONTENT_MS);
/** Init sensor */ /** Init sensor */
@ -744,7 +747,7 @@ void setup() {
agServer.begin(); agServer.begin();
/** Run LED test on start up */ /** Run LED test on start up */
displayShowText("Press now for", "LED test", ""); displayShowText("Press now for", "LED test &", "offline mode");
bool test = false; bool test = false;
uint32_t stime = millis(); uint32_t stime = millis();
while (1) { while (1) {
@ -760,9 +763,9 @@ void setup() {
} }
if (test) { if (test) {
ledTest(); ledTest();
} else {
connectToWifi();
} }
/** WIFI connect */
connectToWifi();
/** /**
* Send first data to ping server and get server configuration * Send first data to ping server and get server configuration
@ -817,6 +820,7 @@ void loop() {
} }
if (hasSensorSHT) { if (hasSensorSHT) {
delay(100);
tempHumSchedule.run(); tempHumSchedule.run();
} }
@ -1068,7 +1072,10 @@ static void webServerInit(void) {
webServer.on("/metrics", HTTP_GET, webServerMetricsGet); webServer.on("/metrics", HTTP_GET, webServerMetricsGet);
webServer.begin(); webServer.begin();
MDNS.addService("http", "tcp", 80); MDNS.addService("http", "tcp", 80);
MDNS.addServiceTxt("http", "_tcp", "board", ag.getBoardName()); if (agServer.getModelName().isEmpty() != true) {
MDNS.addServiceTxt("http", "_tcp", "model", agServer.getModelName());
mdnsModelName = agServer.getModelName();
}
MDNS.addServiceTxt("http", "_tcp", "serialno", getDevId()); MDNS.addServiceTxt("http", "_tcp", "serialno", getDevId());
MDNS.addServiceTxt("http", "_tcp", "fw_ver", ag.getVersion()); MDNS.addServiceTxt("http", "_tcp", "fw_ver", ag.getVersion());
@ -1168,12 +1175,12 @@ static void factoryConfigReset(void) {
if (ms >= 2000) { if (ms >= 2000) {
// Show display message: For factory keep for x seconds // Show display message: For factory keep for x seconds
// Count display. // Count display.
displayShowText("For factory reset", "keep pressed", "for 8 sec"); displayShowText("Factory reset", "keep pressed", "for 8 sec");
int count = 7; int count = 7;
while (ag.button.getState() == ag.button.BUTTON_PRESSED) { while (ag.button.getState() == ag.button.BUTTON_PRESSED) {
delay(1000); delay(1000);
displayShowText("For factory reset", "keep pressed", displayShowText("Factory reset", "keep pressed",
"for " + String(count) + " sec"); "for " + String(count) + " sec");
count--; count--;
// ms = (uint32_t)(millis() - factoryBtnPressTime); // ms = (uint32_t)(millis() - factoryBtnPressTime);
@ -1776,6 +1783,11 @@ static void updateServerConfiguration(void) {
Serial.println("Connect to new mqtt broker failed"); Serial.println("Connect to new mqtt broker failed");
} }
} }
if (mdnsModelName != agServer.getModelName()) {
MDNS.addServiceTxt("http", "_tcp", "model", agServer.getModelName());
mdnsModelName = agServer.getModelName();
}
} }
} }

View File

@ -77,7 +77,7 @@ enum {
APP_SM_SERVER_LOST, /** Connected to WiFi network but the server cannot be APP_SM_SERVER_LOST, /** Connected to WiFi network but the server cannot be
reached through the internet, e.g. blocked by firewall reached through the internet, e.g. blocked by firewall
*/ */
APP_SM_SENSOR_CONFIG_FAILED, /** Server is reachable but there is some APP_SM_SENSOR_CONFIG_FAILED, /** Server is reachabFirmware nodele but there is some
configuration issue to be fixed on the server configuration issue to be fixed on the server
side */ side */
APP_SM_NORMAL, APP_SM_NORMAL,
@ -92,14 +92,14 @@ enum {
#define LED_BAR_COUNT_INIT_VALUE (-1) /** */ #define LED_BAR_COUNT_INIT_VALUE (-1) /** */
#define LED_BAR_ANIMATION_PERIOD 100 /** ms */ #define LED_BAR_ANIMATION_PERIOD 100 /** ms */
#define DISP_UPDATE_INTERVAL 5000 /** ms */ #define DISP_UPDATE_INTERVAL 5000 /** ms */
#define SERVER_CONFIG_UPDATE_INTERVAL 30000 /** ms */ #define SERVER_CONFIG_UPDATE_INTERVAL 15000 /** ms */
#define SERVER_SYNC_INTERVAL 60000 /** ms */ #define SERVER_SYNC_INTERVAL 60000 /** ms */
#define MQTT_SYNC_INTERVAL 60000 /** ms */ #define MQTT_SYNC_INTERVAL 60000 /** ms */
#define SENSOR_CO2_CALIB_COUNTDOWN_MAX 5 /** sec */ #define SENSOR_CO2_CALIB_COUNTDOWN_MAX 5 /** sec */
#define SENSOR_TVOC_UPDATE_INTERVAL 1000 /** ms */ #define SENSOR_TVOC_UPDATE_INTERVAL 1000 /** ms */
#define SENSOR_CO2_UPDATE_INTERVAL 5000 /** ms */ #define SENSOR_CO2_UPDATE_INTERVAL 4000 /** ms */
#define SENSOR_PM_UPDATE_INTERVAL 5000 /** ms */ #define SENSOR_PM_UPDATE_INTERVAL 2000 /** ms */
#define SENSOR_TEMP_HUM_UPDATE_INTERVAL 2000 /** ms */ #define SENSOR_TEMP_HUM_UPDATE_INTERVAL 5000 /** ms */
#define DISPLAY_DELAY_SHOW_CONTENT_MS 2000 /** ms */ #define DISPLAY_DELAY_SHOW_CONTENT_MS 2000 /** ms */
#define WIFI_HOTSPOT_PASSWORD_DEFAULT \ #define WIFI_HOTSPOT_PASSWORD_DEFAULT \
"cleanair" /** default WiFi AP password \ "cleanair" /** default WiFi AP password \
@ -726,7 +726,9 @@ bool hasSensorPMS1 = true;
bool hasSensorPMS2 = true; bool hasSensorPMS2 = true;
bool hasSensorSGP = true; bool hasSensorSGP = true;
uint32_t factoryBtnPressTime = 0; uint32_t factoryBtnPressTime = 0;
AgSchedule configSchedule(SERVER_CONFIG_UPDATE_INTERVAL, updateServerConfiguration); String mdnsModelName = "";
AgSchedule configSchedule(SERVER_CONFIG_UPDATE_INTERVAL,
updateServerConfiguration);
AgSchedule serverSchedule(SERVER_SYNC_INTERVAL, sendDataToServer); AgSchedule serverSchedule(SERVER_SYNC_INTERVAL, sendDataToServer);
AgSchedule co2Schedule(SENSOR_CO2_UPDATE_INTERVAL, co2Update); AgSchedule co2Schedule(SENSOR_CO2_UPDATE_INTERVAL, co2Update);
AgSchedule pmsSchedule(SENSOR_PM_UPDATE_INTERVAL, pmUpdate); AgSchedule pmsSchedule(SENSOR_PM_UPDATE_INTERVAL, pmUpdate);
@ -904,6 +906,8 @@ void boardInit(void) {
failedHandler("Init I2C failed"); failedHandler("Init I2C failed");
} }
Serial.println("Firmware Version: "+ag.getVersion());
ag.watchdog.begin(); ag.watchdog.begin();
ag.button.begin(); ag.button.begin();
ag.statusLed.begin(); ag.statusLed.begin();
@ -951,7 +955,7 @@ void boardInit(void) {
} }
} }
Serial.printf("Firmware node: %s\r\n", getFwMode(fw_mode)); Serial.printf("Firmware Mode: %s\r\n", getFwMode(fw_mode));
} }
void failedHandler(String msg) { void failedHandler(String msg) {
@ -1188,6 +1192,11 @@ static void updateServerConfiguration(void) {
Serial.println("Connect to new mqtt broker failed"); Serial.println("Connect to new mqtt broker failed");
} }
} }
if (mdnsModelName != agServer.getModelName()) {
MDNS.addServiceTxt("http", "_tcp", "model", agServer.getModelName());
mdnsModelName = agServer.getModelName();
}
} }
} }
@ -1330,7 +1339,10 @@ static void webServerInit(void) {
webServer.on("/measures/current", HTTP_GET, webServerMeasureCurrentGet); webServer.on("/measures/current", HTTP_GET, webServerMeasureCurrentGet);
webServer.begin(); webServer.begin();
MDNS.addService("http", "tcp", 80); MDNS.addService("http", "tcp", 80);
MDNS.addServiceTxt("http", "_tcp", "board", ag.getBoardName()); if (mdnsModelName != agServer.getModelName()) {
MDNS.addServiceTxt("http", "_tcp", "model", agServer.getModelName());
mdnsModelName = agServer.getModelName();
}
MDNS.addServiceTxt("http", "_tcp", "serialno", getDevId()); MDNS.addServiceTxt("http", "_tcp", "serialno", getDevId());
MDNS.addServiceTxt("http", "_tcp", "fw_ver", ag.getVersion()); MDNS.addServiceTxt("http", "_tcp", "fw_ver", ag.getVersion());
@ -1399,13 +1411,13 @@ static String getServerSyncData(bool localServer) {
if ((fw_mode == FW_MODE_PPT) || (fw_mode == FW_MODE_PST)) { if ((fw_mode == FW_MODE_PPT) || (fw_mode == FW_MODE_PST)) {
if (hasSensorSGP) { if (hasSensorSGP) {
if (tvocIndex > 0) { if (tvocIndex >= 0) {
root["tvoc_index"] = tvocIndex; root["tvoc_index"] = tvocIndex;
} }
if (tvocRawIndex >= 0) { if (tvocRawIndex >= 0) {
root["tvoc_raw"] = tvocRawIndex; root["tvoc_raw"] = tvocRawIndex;
} }
if (noxIndex > 0) { if (noxIndex >= 0) {
root["nox_index"] = noxIndex; root["nox_index"] = noxIndex;
} }
} }

View File

@ -1,5 +1,5 @@
name=AirGradient Air Quality Sensor name=AirGradient Air Quality Sensor
version=3.0.4 version=3.0.6
author=AirGradient <support@airgradient.com> author=AirGradient <support@airgradient.com>
maintainer=AirGradient <support@airgradient.com> maintainer=AirGradient <support@airgradient.com>
sentence=ESP32-C3 / ESP8266 library for air quality monitor measuring PM, CO2, Temperature, TVOC and Humidity with OLED display. sentence=ESP32-C3 / ESP8266 library for air quality monitor measuring PM, CO2, Temperature, TVOC and Humidity with OLED display.

View File

@ -1,6 +1,6 @@
#include "AirGradient.h" #include "AirGradient.h"
#define AG_LIB_VER "3.0.4" #define AG_LIB_VER "3.0.6"
AirGradient::AirGradient(BoardType type) AirGradient::AirGradient(BoardType type)
: pms5003(type), pms5003t_1(type), pms5003t_2(type), s8(type), sgp41(type), : pms5003(type), pms5003t_1(type), pms5003t_2(type), s8(type), sgp41(type),