Skip to content

Commit

Permalink
Merge pull request #205 from airgradienthq/feature/send-pms-sensor-fw…
Browse files Browse the repository at this point in the history
…-version-to-ag-cloud

Send PMS5003T firmware version to Ag Cloud
  • Loading branch information
nick-4711 authored Aug 30, 2024
2 parents 8bb87a7 + db21648 commit 663836e
Show file tree
Hide file tree
Showing 8 changed files with 120 additions and 2 deletions.
65 changes: 65 additions & 0 deletions src/AgValue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,39 @@
#include "Main/utils.h"
#include "Libraries/Arduino_JSON/src/Arduino_JSON.h"

#define json_prop_pmFirmware "firmware"

/**
* @brief Get PMS5003 firmware version string
*
* @param fwCode
* @return String
*/
String Measurements::pms5003FirmwareVersion(int fwCode) {
return pms5003FirmwareVersionBase("PMS5003x", fwCode);
}

/**
* @brief Get PMS5003T firmware version string
*
* @param fwCode
* @return String
*/
String Measurements::pms5003TFirmwareVersion(int fwCode) {
return pms5003FirmwareVersionBase("PMS5003x", fwCode);
}

/**
* @brief Get firmware version string
*
* @param prefix Prefix firmware string
* @param fwCode Version code
* @return string
*/
String Measurements::pms5003FirmwareVersionBase(String prefix, int fwCode) {
return prefix + String("-") + String(fwCode);
}

String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi,
void *_ag, void *_config) {
AirGradient *ag = (AirGradient *)_ag;
Expand Down Expand Up @@ -33,6 +66,11 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi,
if (utils::isValidPMS03Count(this->pm03PCount_1)) {
root["pm003Count"] = this->pm03PCount_1;
}
if (!localServer) {

root[json_prop_pmFirmware] =
this->pms5003FirmwareVersion(ag->pms5003.getFirmwareVersion());
}
}

if (config->hasSensorSHT) {
Expand Down Expand Up @@ -134,6 +172,10 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi,
}
}
root["pm02Compensated"] = ag->pms5003t_1.compensated(this->pm25_1, this->temp_1);
if (!localServer) {
root[json_prop_pmFirmware] =
pms5003TFirmwareVersion(ag->pms5003t_1.getFirmwareVersion());
}
}
if (config->hasSensorPMS2) {
if(utils::isValidPMS(this->pm01_2)) {
Expand Down Expand Up @@ -171,6 +213,10 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi,
}
}
root["pm02Compensated"] = ag->pms5003t_2.compensated(this->pm25_2, this->temp_2);
if(!localServer) {
root[json_prop_pmFirmware] =
pms5003TFirmwareVersion(ag->pms5003t_1.getFirmwareVersion());
}
}
} else {
if (fwMode == FW_MODE_O_1P) {
Expand Down Expand Up @@ -208,6 +254,10 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi,
}
}
root["pm02Compensated"] = ag->pms5003t_1.compensated(this->pm25_1, this->temp_1);
if(!localServer) {
root[json_prop_pmFirmware] =
pms5003TFirmwareVersion(ag->pms5003t_1.getFirmwareVersion());
}
} else if (config->hasSensorPMS2) {
if(utils::isValidPMS(this->pm01_2)) {
root["pm01"] = this->pm01_2;
Expand Down Expand Up @@ -242,6 +292,10 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi,
}
}
root["pm02Compensated"] = ag->pms5003t_1.compensated(this->pm25_1, this->temp_1);
if(!localServer) {
root[json_prop_pmFirmware] =
pms5003TFirmwareVersion(ag->pms5003t_2.getFirmwareVersion());
}
}
} else {
float val;
Expand Down Expand Up @@ -279,6 +333,12 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi,
}
}
root["channels"]["1"]["pm02Compensated"] = ag->pms5003t_1.compensated(this->pm25_1, this->temp_1);

// PMS5003T version
if(!localServer) {
root["channels"]["1"][json_prop_pmFirmware] =
pms5003TFirmwareVersion(ag->pms5003t_1.getFirmwareVersion());
}
}
if (config->hasSensorPMS2) {
float val;
Expand Down Expand Up @@ -315,6 +375,11 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi,
}
}
root["channels"]["2"]["pm02Compensated"] = ag->pms5003t_2.compensated(this->pm25_2, this->temp_2);
// PMS5003T version
if(!localServer) {
root["channels"]["2"][json_prop_pmFirmware] =
pms5003TFirmwareVersion(ag->pms5003t_2.getFirmwareVersion());
}
}
}
}
Expand Down
3 changes: 3 additions & 0 deletions src/AgValue.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@

class Measurements {
private:
String pms5003FirmwareVersion(int fwCode);
String pms5003TFirmwareVersion(int fwCode);
String pms5003FirmwareVersionBase(String prefix, int fwCode);
public:
Measurements() {
pm25_1 = -1;
Expand Down
14 changes: 14 additions & 0 deletions src/PMS/PMS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,20 @@ int16_t PMSBase::getTemp(void) { return toI16(&package[24]); }
*/
uint16_t PMSBase::getHum(void) { return toU16(&package[26]); }

/**
* @brief Get firmware version code
*
* @return uint8_t
*/
uint8_t PMSBase::getFirmwareVersion(void) { return package[28]; }

/**
* @brief Ge PMS5003 error code
*
* @return uint8_t
*/
uint8_t PMSBase::getErrorCode(void) { return package[29]; }

/**
* @brief Convert PMS2.5 to US AQI unit
*
Expand Down
2 changes: 2 additions & 0 deletions src/PMS/PMS.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ class PMSBase {
/** For PMS5003T*/
int16_t getTemp(void);
uint16_t getHum(void);
uint8_t getFirmwareVersion(void);
uint8_t getErrorCode(void);

int pm25ToAQI(int pm02);
int compensated(int pm25, float humidity);
Expand Down
16 changes: 15 additions & 1 deletion src/PMS/PMS5003.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ bool PMS5003::begin(void) {
return false;
}
#endif

_ver = pms.getFirmwareVersion();
this->_isBegin = true;
return true;
}
Expand Down Expand Up @@ -132,6 +132,20 @@ int PMS5003::compensated(int pm25, float humidity) {
return pms.compensated(pm25, humidity);
}

/**
* @brief Get sensor firmware version
*
* @return int
*/
int PMS5003::getFirmwareVersion(void) { return _ver; }

/**
* @brief Get sensor error code
*
* @return uint8_t
*/
uint8_t PMS5003::getErrorCode(void) { return pms.getErrorCode(); }

/**
* @brief Check device initialized or not
*
Expand Down
3 changes: 3 additions & 0 deletions src/PMS/PMS5003.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,12 @@ class PMS5003 {
int getPm03ParticleCount(void);
int convertPm25ToUsAqi(int pm25);
int compensated(int pm25, float humidity);
int getFirmwareVersion(void);
uint8_t getErrorCode(void);

private:
bool _isBegin = false;
int _ver;
BoardType _boardDef;
PMSBase pms;
const BoardDef *bsp;
Expand Down
16 changes: 15 additions & 1 deletion src/PMS/PMS5003T.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ bool PMS5003T::begin(void) {
return false;
}
#endif

_ver = pms.getFirmwareVersion();
this->_isBegin = true;
return true;
}
Expand Down Expand Up @@ -175,6 +175,20 @@ float PMS5003T::compensated(int pm25, float humidity) {
return pms.compensated(pm25, humidity);
}

/**
* @brief Get module(s) firmware version
*
* @return int Version code
*/
int PMS5003T::getFirmwareVersion(void) { return _ver; }

/**
* @brief Get sensor error code
*
* @return uint8_t
*/
uint8_t PMS5003T::getErrorCode(void) { return pms.getErrorCode(); }

/**
* @brief Check device initialized or not
*
Expand Down
3 changes: 3 additions & 0 deletions src/PMS/PMS5003T.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,13 @@ class PMS5003T: public PMS5003TBase {
float getTemperature(void);
float getRelativeHumidity(void);
float compensated(int pm25, float humidity);
int getFirmwareVersion(void);
uint8_t getErrorCode(void);

private:
bool _isBegin = false;
bool _isSleep = false;
int _ver; /** Firmware version code */

BoardType _boardDef;
const BoardDef *bsp;
Expand Down

0 comments on commit 663836e

Please sign in to comment.