Skip to content

Commit

Permalink
Merge pull request #156 from airgradienthq/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
pnt325 authored May 29, 2024
2 parents 4b94926 + 7569b11 commit 2e62abe
Show file tree
Hide file tree
Showing 11 changed files with 110 additions and 41 deletions.
8 changes: 4 additions & 4 deletions examples/BASIC/BASIC.ino
Original file line number Diff line number Diff line change
Expand Up @@ -224,24 +224,24 @@ static void failedHandler(String msg) {
static void executeCo2Calibration(void) {
/** Count down for co2CalibCountdown secs */
for (int i = 0; i < SENSOR_CO2_CALIB_COUNTDOWN_MAX; i++) {
displayShowText("CO2 calib", "after",
displayShowText("CO2 calib.", "after",
String(SENSOR_CO2_CALIB_COUNTDOWN_MAX - i) + " sec");
delay(1000);
}

if (ag.s8.setBaselineCalibration()) {
displayShowText("Calib", "success", "");
delay(1000);
displayShowText("Wait for", "finish", "...");
displayShowText("Wait to", "complete", "...");
int count = 0;
while (ag.s8.isBaseLineCalibrationDone() == false) {
delay(1000);
count++;
}
displayShowText("Finish", "after", String(count) + " sec");
displayShowText("Finished", "after", String(count) + " sec");
delay(DISPLAY_DELAY_SHOW_CONTENT_MS);
} else {
displayShowText("Calib", "failure!!!", "");
displayShowText("Calibration", "failure", "");
delay(DISPLAY_DELAY_SHOW_CONTENT_MS);
}
}
Expand Down
95 changes: 62 additions & 33 deletions examples/OneOpenAir/OneOpenAir.ino
Original file line number Diff line number Diff line change
Expand Up @@ -152,8 +152,6 @@ void setup() {
}
Serial.println("Detected " + ag->getBoardName());

/** Init sensor */
boardInit();
configuration.setAirGradient(ag);
oledDisplay.setAirGradient(ag);
stateMachine.setAirGradient(ag);
Expand All @@ -162,11 +160,13 @@ void setup() {
openMetrics.setAirGradient(ag);
localServer.setAirGraident(ag);

/** Init sensor */
boardInit();

/** Connecting wifi */
bool connectToWifi = false;
if (ag->isOne()) {
if (ledBarButtonTest) {
stateMachine.executeLedBarPowerUpTest();
if (ag->button.getState() == PushButton::BUTTON_PRESSED) {
WiFi.begin("airgradient", "cleanair");
Serial.println("WiFi Credential reset to factory defaults");
Expand Down Expand Up @@ -219,22 +219,30 @@ void setup() {
#ifdef ESP8266
// ota not supported
#else
// otaHandler.updateFirmwareIfOutdated(ag->deviceId());
otaHandler.updateFirmwareIfOutdated(ag->deviceId());

/** Update first OTA */
measurements.otaBootCount = 0;
#endif

apiClient.fetchServerConfiguration();
configSchedule.update();
if (apiClient.isFetchConfigureFailed()) {
if (ag->isOne()) {
stateMachine.displayHandle(
AgStateMachineWiFiOkServerOkSensorConfigFailed);
if (apiClient.isNotAvailableOnDashboard()) {
stateMachine.displayHandle(
AgStateMachineWiFiOkServerOkSensorConfigFailed);
}
}
stateMachine.handleLeds(
AgStateMachineWiFiOkServerOkSensorConfigFailed);
delay(DISPLAY_DELAY_SHOW_CONTENT_MS);
} else {
ledBarEnabledUpdate();
}
} else {
oledDisplay.showRebooting();
delay(2500);
}
}
}
Expand Down Expand Up @@ -459,9 +467,10 @@ static void ledBarEnabledUpdate(void) {
if ((brightness == 0) || (configuration.getLedBarMode() == LedBarModeOff)) {
ag->ledBar.setEnable(false);
} else {
ag->ledBar.setBrighness(brightness);
ag->ledBar.setBrightness(brightness);
ag->ledBar.setEnable(configuration.getLedBarMode() != LedBarModeOff);
}
ag->ledBar.show();
}
}

Expand Down Expand Up @@ -615,6 +624,23 @@ static void oneIndoorInit(void) {
ag->button.begin();
ag->watchdog.begin();

/** Run LED test on start up if button pressed */
oledDisplay.setText("Press now for", "LED test", "");
ledBarButtonTest = false;
uint32_t stime = millis();
while (true) {
if (ag->button.getState() == ag->button.BUTTON_PRESSED) {
ledBarButtonTest = true;
stateMachine.executeLedBarPowerUpTest();
break;
}
delay(1);
uint32_t ms = (uint32_t)(millis() - stime);
if (ms >= 3000) {
break;
}
}

/** Init sensor SGP41 */
if (sgp41Init() == false) {
dispSensorNotFound("SGP41");
Expand All @@ -641,22 +667,6 @@ static void oneIndoorInit(void) {

dispSensorNotFound("PMS");
}

/** Run LED test on start up */
oledDisplay.setText("Press now for", "LED test", "");
ledBarButtonTest = false;
uint32_t stime = millis();
while (true) {
if (ag->button.getState() == ag->button.BUTTON_PRESSED) {
ledBarButtonTest = true;
break;
}
delay(1);
uint32_t ms = (uint32_t)(millis() - stime);
if (ms >= 3000) {
break;
}
}
}
static void openAirInit(void) {
configuration.hasSensorSHT = false;
Expand Down Expand Up @@ -804,10 +814,6 @@ static void configUpdateHandle() {
return;
}

if (ag->isOne()) {
ledBarEnabledUpdate();
stateMachine.executeLedBarTest();
}
stateMachine.executeCo2Calibration();

String mqttUri = configuration.getMqttBrokerUri();
Expand Down Expand Up @@ -843,15 +849,36 @@ static void configUpdateHandle() {

if (ag->isOne()) {
if (configuration.isLedBarBrightnessChanged()) {
ag->ledBar.setBrighness(configuration.getLedBarBrightness());
Serial.println("Set 'LedBarBrightness' brightness: " +
String(configuration.getLedBarBrightness()));
if (configuration.getLedBarBrightness() == 0) {
ag->ledBar.setEnable(false);
} else {
if (configuration.getLedBarMode() != LedBarMode::LedBarModeOff) {
ag->ledBar.setEnable(true);
}
ag->ledBar.setBrightness(configuration.getLedBarBrightness());
}
ag->ledBar.show();
}

if (configuration.isLedBarModeChanged()) {
if (configuration.getLedBarBrightness() == 0) {
ag->ledBar.setEnable(false);
} else {
if(configuration.getLedBarMode() == LedBarMode::LedBarModeOff) {
ag->ledBar.setEnable(false);
} else {
ag->ledBar.setEnable(true);
ag->ledBar.setBrightness(configuration.getLedBarBrightness());
}
}
ag->ledBar.show();
}

if (configuration.isDisplayBrightnessChanged()) {
oledDisplay.setBrightness(configuration.getDisplayBrightness());
Serial.println("Set 'DisplayBrightness' brightness: " +
String(configuration.getDisplayBrightness()));
}

stateMachine.executeLedBarTest();
}

fwNewVersion = configuration.newFirmwareVersion();
Expand All @@ -861,7 +888,9 @@ static void configUpdateHandle() {
doOta = true;
Serial.println("First OTA");
} else {
if ((measurements.bootCount - measurements.otaBootCount) >= 30) {
/** Only check for update each 1h*/
const float otaBootCount = 60.0f / (SERVER_SYNC_INTERVAL / 60000.0f);
if ((measurements.bootCount - measurements.otaBootCount) >= (int)otaBootCount) {
doOta = true;
} else {
Serial.println(
Expand Down
17 changes: 17 additions & 0 deletions src/AgApiClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,17 @@ bool AgApiClient::fetchServerConfiguration(void) {
if (retCode != 200) {
client.end();
getConfigFailed = true;

/** Return code 400 mean device not setup on cloud. */
if (retCode == 400) {
notAvailableOnDashboard = true;
}
return false;
}

/** clear failed */
getConfigFailed = false;
notAvailableOnDashboard = false;

/** Get response string */
String respContent = client.getString();
Expand Down Expand Up @@ -144,6 +150,17 @@ bool AgApiClient::isFetchConfigureFailed(void) { return getConfigFailed; }
*/
bool AgApiClient::isPostToServerFailed(void) { return postToServerFailed; }

/**
* @brief Get status device has available on dashboard or not. should get after
* fetch configuration return failed
*
* @return true
* @return false
*/
bool AgApiClient::isNotAvailableOnDashboard(void) {
return notAvailableOnDashboard;
}

void AgApiClient::setAirGradient(AirGradient *ag) { this->ag = ag; }

/**
Expand Down
2 changes: 2 additions & 0 deletions src/AgApiClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class AgApiClient : public PrintLog {

bool getConfigFailed;
bool postToServerFailed;
bool notAvailableOnDashboard = false; // Device not setup on Airgradient cloud dashboard.

public:
AgApiClient(Stream &stream, Configuration &config);
Expand All @@ -33,6 +34,7 @@ class AgApiClient : public PrintLog {
bool postToServer(String data);
bool isFetchConfigureFailed(void);
bool isPostToServerFailed(void);
bool isNotAvailableOnDashboard(void);
void setAirGradient(AirGradient *ag);
bool sendPing(int rssi, int bootCount);
};
Expand Down
10 changes: 9 additions & 1 deletion src/AgConfigure.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,7 @@ bool Configuration::parse(String data, bool isLocal) {
}
}

_ledBarModeChanged = false;
if (JSON.typeof_(root[jprop_ledBarMode]) == "string") {
String mode = root[jprop_ledBarMode];
if (mode == getLedBarModeName(LedBarMode::LedBarModeCO2) ||
Expand All @@ -380,6 +381,7 @@ bool Configuration::parse(String data, bool isLocal) {
String oldMode = jconfig[jprop_ledBarMode];
if (mode != oldMode) {
jconfig[jprop_ledBarMode] = mode;
_ledBarModeChanged = true;
changed = true;
}
} else {
Expand Down Expand Up @@ -559,6 +561,7 @@ bool Configuration::parse(String data, bool isLocal) {
}
}

ledBarBrightnessChanged = false;
if (JSON.typeof_(root[jprop_ledBarBrightness]) == "number") {
int value = root[jprop_ledBarBrightness];
int oldValue = jconfig[jprop_ledBarBrightness];
Expand Down Expand Up @@ -628,7 +631,6 @@ bool Configuration::parse(String data, bool isLocal) {
saveConfig();
printConfig();
} else {
logInfo("Update ignored due to local unofficial changes");
if (ledBarTestRequested || co2CalibrationRequested) {
udpated = true;
}
Expand Down Expand Up @@ -1148,6 +1150,12 @@ void Configuration::setOfflineModeWithoutSave(bool offline) {
_offlineMode = offline;
}

bool Configuration::isLedBarModeChanged(void) {
bool changed = _ledBarModeChanged;
_ledBarModeChanged = false;
return changed;
}

bool Configuration::isDisplayBrightnessChanged(void) {
bool changed = displayBrightnessChanged;
displayBrightnessChanged = false;
Expand Down
2 changes: 2 additions & 0 deletions src/AgConfigure.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class Configuration : public PrintLog {
bool displayBrightnessChanged = false;
String otaNewFirmwareVersion;
bool _offlineMode = false;
bool _ledBarModeChanged = false;

AirGradient* ag;

Expand Down Expand Up @@ -80,6 +81,7 @@ class Configuration : public PrintLog {
bool isOfflineMode(void);
void setOfflineMode(bool offline);
void setOfflineModeWithoutSave(bool offline);
bool isLedBarModeChanged(void);
};

#endif /** _AG_CONFIG_H_ */
10 changes: 10 additions & 0 deletions src/AgOledDisplay.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -384,3 +384,13 @@ void OledDisplay::showNewFirmwareFailed(void) {
setCentralText(60, String("Retry after 24h"));
} while (DISP()->nextPage());
}

void OledDisplay::showRebooting(void) {
DISP()->firstPage();
do {
DISP()->setFont(u8g2_font_t0_16_tf);
// setCentralText(20, "Firmware Update");
setCentralText(40, "Rebooting...");
// setCentralText(60, String("Retry after 24h"));
} while (DISP()->nextPage());
}
1 change: 1 addition & 0 deletions src/AgOledDisplay.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ class OledDisplay : public PrintLog {
void showNewFirmwareUpdating(String percent);
void showNewFirmwareSuccess(String count);
void showNewFirmwareFailed(void);
void showRebooting(void);
};

#endif /** _AG_OLED_DISPLAY_H_ */
2 changes: 1 addition & 1 deletion src/AgValue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi,
root["noxRaw"] = this->NOxRaw;
}
}
root["bootCount"] = bootCount;
root["boot"] = bootCount;

if (localServer) {
root["ledMode"] = config->getLedBarModeName();
Expand Down
2 changes: 1 addition & 1 deletion src/Main/LedBar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ void LedBar::setColor(uint8_t red, uint8_t green, uint8_t blue, int ledNum) {
*
* @param brightness Brightness (0 - 100)%
*/
void LedBar::setBrighness(uint8_t brightness) {
void LedBar::setBrightness(uint8_t brightness) {
if (this->isBegin() == false) {
return;
}
Expand Down
2 changes: 1 addition & 1 deletion src/Main/LedBar.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class LedBar {
void begin(void);
void setColor(uint8_t red, uint8_t green, uint8_t blue, int ledNum);
void setColor(uint8_t red, uint8_t green, uint8_t blue);
void setBrighness(uint8_t brightness);
void setBrightness(uint8_t brightness);
int getNumberOfLeds(void);
void show(void);
void clear(void);
Expand Down

0 comments on commit 2e62abe

Please sign in to comment.