From 812c2ab803556ea76f64bc034751b7a96dc8d4bb Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Sat, 20 Jul 2024 08:53:19 +0700 Subject: [PATCH 1/5] add PMS5003T get module firmware version code --- src/PMS/PMS.cpp | 7 +++++++ src/PMS/PMS.h | 1 + src/PMS/PMS5003T.cpp | 9 ++++++++- src/PMS/PMS5003T.h | 2 ++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/PMS/PMS.cpp b/src/PMS/PMS.cpp index e9a1527..8d7c957 100644 --- a/src/PMS/PMS.cpp +++ b/src/PMS/PMS.cpp @@ -245,6 +245,13 @@ uint16_t PMSBase::getTemp(void) { return toValue(&package[24]); } */ uint16_t PMSBase::getHum(void) { return toValue(&package[26]); } +/** + * @brief Get PMS500T firmware version code + * + * @return uint8_t + */ +uint8_t PMSBase::getFirmwareVersion(void) { return package[28]; } + /** * @brief Convert PMS2.5 to US AQI unit * diff --git a/src/PMS/PMS.h b/src/PMS/PMS.h index 4fa086a..6131390 100644 --- a/src/PMS/PMS.h +++ b/src/PMS/PMS.h @@ -26,6 +26,7 @@ public: /** For PMS5003T*/ uint16_t getTemp(void); uint16_t getHum(void); + uint8_t getFirmwareVersion(void); int pm25ToAQI(int pm02); diff --git a/src/PMS/PMS5003T.cpp b/src/PMS/PMS5003T.cpp index f0f9a1d..296023d 100644 --- a/src/PMS/PMS5003T.cpp +++ b/src/PMS/PMS5003T.cpp @@ -102,7 +102,7 @@ bool PMS5003T::begin(void) { return false; } #endif - + _ver = pms.getFirmwareVersion(); this->_isBegin = true; return true; } @@ -161,6 +161,13 @@ float PMS5003T::getRelativeHumidity(void) { return pms.getHum()/10.0f; } +/** + * @brief Get module(s) firmware version + * + * @return int Version code + */ +int PMS5003T::getFirmwareVersion(void) { return _ver; } + /** * @brief Check device initialized or not * diff --git a/src/PMS/PMS5003T.h b/src/PMS/PMS5003T.h index 2c99b7e..821d946 100644 --- a/src/PMS/PMS5003T.h +++ b/src/PMS/PMS5003T.h @@ -29,10 +29,12 @@ public: int convertPm25ToUsAqi(int pm25); float getTemperature(void); float getRelativeHumidity(void); + int getFirmwareVersion(void); private: bool _isBegin = false; bool _isSleep = false; + int _ver; /** Firmware version code */ BoardType _boardDef; const BoardDef *bsp; From 01943f594dbfe6db4de46323f7066574639595af Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Mon, 29 Jul 2024 13:20:07 +0700 Subject: [PATCH 2/5] Send PMS5003T firmware version to cloud --- src/AgValue.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/AgValue.cpp b/src/AgValue.cpp index b0cd3a0..02a1590 100644 --- a/src/AgValue.cpp +++ b/src/AgValue.cpp @@ -121,6 +121,9 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, } } } + if (!localServer) { + root["PMS5003T_FwVer"] = ag->pms5003t_1.getFirmwareVersion(); + } } if (config->hasSensorPMS2) { if(utils::isValidPMS(this->pm01_2)) { @@ -157,6 +160,9 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, } } } + if(!localServer) { + root["PMS5003T_FwVer"] = ag->pms5003t_1.getFirmwareVersion(); + } } } else { if (fwMode == FW_MODE_O_1P) { @@ -193,6 +199,9 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, } } } + if(!localServer) { + root["PMS5003T_FwVer"] = ag->pms5003t_1.getFirmwareVersion(); + } } else if (config->hasSensorPMS2) { if(utils::isValidPMS(this->pm01_2)) { root["pm01"] = this->pm01_2; @@ -226,6 +235,9 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, } } } + if(!localServer) { + root["PMS5003T_FwVer"] = ag->pms5003t_2.getFirmwareVersion(); + } } } else { float val; @@ -262,6 +274,11 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, } } } + + // PMS5003T version + if(!localServer) { + root["channels"]["1"]["PMS5003T_FwVer"] = ag->pms5003t_1.getFirmwareVersion(); + } } if (config->hasSensorPMS2) { float val; @@ -297,6 +314,10 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, } } } + // PMS5003T version + if(!localServer) { + root["channels"]["2"]["PMS5003T_FwVer"] = ag->pms5003t_2.getFirmwareVersion(); + } } } } From 040bd28038328cf3925b9fd7f549bb528b2141a6 Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Wed, 7 Aug 2024 08:50:43 +0700 Subject: [PATCH 3/5] Add report PMS5003 and PMS5003T firmware version --- src/AgValue.cpp | 56 +++++++++++++++++++++++++++++++++++++++----- src/AgValue.h | 3 +++ src/PMS/PMS.cpp | 9 ++++++- src/PMS/PMS.h | 1 + src/PMS/PMS5003.cpp | 16 ++++++++++++- src/PMS/PMS5003.h | 3 +++ src/PMS/PMS5003T.cpp | 7 ++++++ src/PMS/PMS5003T.h | 1 + 8 files changed, 88 insertions(+), 8 deletions(-) diff --git a/src/AgValue.cpp b/src/AgValue.cpp index 02a1590..e66c8b4 100644 --- a/src/AgValue.cpp +++ b/src/AgValue.cpp @@ -4,6 +4,39 @@ #include "Main/utils.h" #include "Libraries/Arduino_JSON/src/Arduino_JSON.h" +#define json_prop_pmsFirmware "pmsFirmware" + +/** + * @brief Get PMS5003 firmware version string + * + * @param fwCode + * @return String + */ +String Measurements::pms5003FirmwareVersion(int fwCode) { + return pms5003FirmwareVersionBase("PMS5003", fwCode); +} + +/** + * @brief Get PMS5003T firmware version string + * + * @param fwCode + * @return String + */ +String Measurements::pms5003TFirmwareVersion(int fwCode) { + return pms5003FirmwareVersionBase("PMS5003T", 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; @@ -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_pmsFirmware] = + this->pms5003FirmwareVersion(ag->pms5003.getFirmwareVersion()); + } } if (config->hasSensorSHT) { @@ -122,7 +160,8 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, } } if (!localServer) { - root["PMS5003T_FwVer"] = ag->pms5003t_1.getFirmwareVersion(); + root[json_prop_pmsFirmware] = + pms5003TFirmwareVersion(ag->pms5003t_1.getFirmwareVersion()); } } if (config->hasSensorPMS2) { @@ -161,7 +200,8 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, } } if(!localServer) { - root["PMS5003T_FwVer"] = ag->pms5003t_1.getFirmwareVersion(); + root[json_prop_pmsFirmware] = + pms5003TFirmwareVersion(ag->pms5003t_1.getFirmwareVersion()); } } } else { @@ -200,7 +240,8 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, } } if(!localServer) { - root["PMS5003T_FwVer"] = ag->pms5003t_1.getFirmwareVersion(); + root[json_prop_pmsFirmware] = + pms5003TFirmwareVersion(ag->pms5003t_1.getFirmwareVersion()); } } else if (config->hasSensorPMS2) { if(utils::isValidPMS(this->pm01_2)) { @@ -236,7 +277,8 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, } } if(!localServer) { - root["PMS5003T_FwVer"] = ag->pms5003t_2.getFirmwareVersion(); + root[json_prop_pmsFirmware] = + pms5003TFirmwareVersion(ag->pms5003t_2.getFirmwareVersion()); } } } else { @@ -277,7 +319,8 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, // PMS5003T version if(!localServer) { - root["channels"]["1"]["PMS5003T_FwVer"] = ag->pms5003t_1.getFirmwareVersion(); + root["channels"]["1"][json_prop_pmsFirmware] = + pms5003TFirmwareVersion(ag->pms5003t_1.getFirmwareVersion()); } } if (config->hasSensorPMS2) { @@ -316,7 +359,8 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, } // PMS5003T version if(!localServer) { - root["channels"]["2"]["PMS5003T_FwVer"] = ag->pms5003t_2.getFirmwareVersion(); + root["channels"]["2"][json_prop_pmsFirmware] = + pms5003TFirmwareVersion(ag->pms5003t_2.getFirmwareVersion()); } } } diff --git a/src/AgValue.h b/src/AgValue.h index 3176482..1957828 100644 --- a/src/AgValue.h +++ b/src/AgValue.h @@ -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; diff --git a/src/PMS/PMS.cpp b/src/PMS/PMS.cpp index 8d7c957..dcb516a 100644 --- a/src/PMS/PMS.cpp +++ b/src/PMS/PMS.cpp @@ -246,12 +246,19 @@ uint16_t PMSBase::getTemp(void) { return toValue(&package[24]); } uint16_t PMSBase::getHum(void) { return toValue(&package[26]); } /** - * @brief Get PMS500T firmware version code + * @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 * diff --git a/src/PMS/PMS.h b/src/PMS/PMS.h index 6131390..38bdb45 100644 --- a/src/PMS/PMS.h +++ b/src/PMS/PMS.h @@ -27,6 +27,7 @@ public: uint16_t getTemp(void); uint16_t getHum(void); uint8_t getFirmwareVersion(void); + uint8_t getErrorCode(void); int pm25ToAQI(int pm02); diff --git a/src/PMS/PMS5003.cpp b/src/PMS/PMS5003.cpp index 0c1ea83..7325240 100644 --- a/src/PMS/PMS5003.cpp +++ b/src/PMS/PMS5003.cpp @@ -78,7 +78,7 @@ bool PMS5003::begin(void) { return false; } #endif - + _ver = pms.getFirmwareVersion(); this->_isBegin = true; return true; } @@ -121,6 +121,20 @@ int PMS5003::getPm03ParticleCount(void) { */ int PMS5003::convertPm25ToUsAqi(int pm25) { return pms.pm25ToAQI(pm25); } +/** + * @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 * diff --git a/src/PMS/PMS5003.h b/src/PMS/PMS5003.h index cd66b07..3ed63aa 100644 --- a/src/PMS/PMS5003.h +++ b/src/PMS/PMS5003.h @@ -24,9 +24,12 @@ public: int getPm10Ae(void); int getPm03ParticleCount(void); int convertPm25ToUsAqi(int pm25); + int getFirmwareVersion(void); + uint8_t getErrorCode(void); private: bool _isBegin = false; + int _ver; BoardType _boardDef; PMSBase pms; const BoardDef *bsp; diff --git a/src/PMS/PMS5003T.cpp b/src/PMS/PMS5003T.cpp index 7ea6d74..1f48ebd 100644 --- a/src/PMS/PMS5003T.cpp +++ b/src/PMS/PMS5003T.cpp @@ -171,6 +171,13 @@ float PMS5003T::getRelativeHumidity(void) { */ 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 * diff --git a/src/PMS/PMS5003T.h b/src/PMS/PMS5003T.h index 821d946..0a0b1dc 100644 --- a/src/PMS/PMS5003T.h +++ b/src/PMS/PMS5003T.h @@ -30,6 +30,7 @@ public: float getTemperature(void); float getRelativeHumidity(void); int getFirmwareVersion(void); + uint8_t getErrorCode(void); private: bool _isBegin = false; From 6d0136688731d0cb18f07e2e4b64ae2e7f0b9c76 Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Thu, 15 Aug 2024 08:04:30 +0700 Subject: [PATCH 4/5] change `pmsFirmare` to `firmware` --- src/AgValue.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/AgValue.cpp b/src/AgValue.cpp index e66c8b4..090e3b7 100644 --- a/src/AgValue.cpp +++ b/src/AgValue.cpp @@ -4,7 +4,7 @@ #include "Main/utils.h" #include "Libraries/Arduino_JSON/src/Arduino_JSON.h" -#define json_prop_pmsFirmware "pmsFirmware" +#define json_prop_pmFirmware "firmware" /** * @brief Get PMS5003 firmware version string @@ -68,7 +68,7 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, } if (!localServer) { - root[json_prop_pmsFirmware] = + root[json_prop_pmFirmware] = this->pms5003FirmwareVersion(ag->pms5003.getFirmwareVersion()); } } @@ -160,7 +160,7 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, } } if (!localServer) { - root[json_prop_pmsFirmware] = + root[json_prop_pmFirmware] = pms5003TFirmwareVersion(ag->pms5003t_1.getFirmwareVersion()); } } @@ -200,7 +200,7 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, } } if(!localServer) { - root[json_prop_pmsFirmware] = + root[json_prop_pmFirmware] = pms5003TFirmwareVersion(ag->pms5003t_1.getFirmwareVersion()); } } @@ -240,7 +240,7 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, } } if(!localServer) { - root[json_prop_pmsFirmware] = + root[json_prop_pmFirmware] = pms5003TFirmwareVersion(ag->pms5003t_1.getFirmwareVersion()); } } else if (config->hasSensorPMS2) { @@ -277,7 +277,7 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, } } if(!localServer) { - root[json_prop_pmsFirmware] = + root[json_prop_pmFirmware] = pms5003TFirmwareVersion(ag->pms5003t_2.getFirmwareVersion()); } } @@ -319,7 +319,7 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, // PMS5003T version if(!localServer) { - root["channels"]["1"][json_prop_pmsFirmware] = + root["channels"]["1"][json_prop_pmFirmware] = pms5003TFirmwareVersion(ag->pms5003t_1.getFirmwareVersion()); } } @@ -359,7 +359,7 @@ String Measurements::toString(bool localServer, AgFirmwareMode fwMode, int rssi, } // PMS5003T version if(!localServer) { - root["channels"]["2"][json_prop_pmsFirmware] = + root["channels"]["2"][json_prop_pmFirmware] = pms5003TFirmwareVersion(ag->pms5003t_2.getFirmwareVersion()); } } From 81b13134d2a79dc4ff9c99a0bc3632042479f2ef Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Fri, 16 Aug 2024 06:42:43 +0700 Subject: [PATCH 5/5] update PM2.5 firmware prefix to `PMS5003x` --- src/AgValue.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/AgValue.cpp b/src/AgValue.cpp index 090e3b7..fc13dcb 100644 --- a/src/AgValue.cpp +++ b/src/AgValue.cpp @@ -13,7 +13,7 @@ * @return String */ String Measurements::pms5003FirmwareVersion(int fwCode) { - return pms5003FirmwareVersionBase("PMS5003", fwCode); + return pms5003FirmwareVersionBase("PMS5003x", fwCode); } /** @@ -23,7 +23,7 @@ String Measurements::pms5003FirmwareVersion(int fwCode) { * @return String */ String Measurements::pms5003TFirmwareVersion(int fwCode) { - return pms5003FirmwareVersionBase("PMS5003T", fwCode); + return pms5003FirmwareVersionBase("PMS5003x", fwCode); } /**