From 4ef8462bc6e9b9fb7c919f07b26928b2593b4fbc Mon Sep 17 00:00:00 2001 From: francois <francois@clever.amilab.irit.fr> Date: Tue, 15 Mar 2022 17:11:33 +0100 Subject: [PATCH] update --- .../neocampus_modules/airquality.cpp | 25 ++++++++----------- neosensor/neosensor.ino | 5 ++++ 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/neosensor/libraries/neocampus_modules/airquality.cpp b/neosensor/libraries/neocampus_modules/airquality.cpp index 7cbaacc4..d8904230 100644 --- a/neosensor/libraries/neocampus_modules/airquality.cpp +++ b/neosensor/libraries/neocampus_modules/airquality.cpp @@ -4,6 +4,7 @@ * AirQuality module to manage all kind of air quality sensors that does not * fit within the existing sensOCampus classes. * + * F.Thiebolt mar.22 added support for SCD4x along with its auto-detection * F.Thiebolt oct.21 added support for particle meters (e.g PMS5003) * switched to data available delivery (instead of timer based) * F.Thiebolt aug.21 in loadSensoConfig, replaced StaticJsonDocument (stack) @@ -81,27 +82,23 @@ boolean airquality::add_sensor( uint8_t adr ) { if( _sensors_count>=_MAX_SENSORS ) return false; bool _sensor_added=false; - /* - * check for XXXX - * TODO: add auto-detect for some air quality sensors ! - * - * The following was left as an example: - * - if( TSL2561::is_device( adr ) == true ) { - TSL2561 *cur_sensor = new TSL2561(); + + // check for SCD4x + if( SCD4x::is_device( adr ) == true ) { + SCD4x *cur_sensor = new SCD4x( scd4xMeasureType_t::co2 ); // because it features several sensors if( cur_sensor->begin( adr ) != true ) { - log_debug(F("\n[airquality] ###ERROR at TSL2561 startup ... removing instance ..."));log_flush(); + log_debug(F("\n[airquality] ###ERROR at SCD4x startup ... removing instance ..."));log_flush(); free(cur_sensor); cur_sensor = NULL; } else { - // TODO: set auto_gain ? - cur_sensor->powerOFF(); + cur_sensor->powerON(); // remember that device is shared across several modules + cur_sensor->powerOFF(); // remember that device is shared across several modules _sensor[_sensors_count++] = cur_sensor; - _sensor_added = true; + _sensor_added=true; } } - */ + // add check for additional device here // summary @@ -133,7 +130,7 @@ bool airquality::start( senso *sensocampus, JsonDocument &sharedRoot ) { // create module's JSON structure to hold all of our data // [aug.21] we create a dictionnary variant = sharedRoot.createNestedObject(MQTT_MODULE_NAME); - // all sensors share the same units of values + JsonObject _obj = variant.as<JsonObject>(); /* [nov.21] airquality sensors feature different value units ==> we'll afford a diff --git a/neosensor/neosensor.ino b/neosensor/neosensor.ino index 2af73abc..ca535a80 100644 --- a/neosensor/neosensor.ino +++ b/neosensor/neosensor.ino @@ -993,6 +993,11 @@ if( res!=uint8_t(0x44) ) { log_debug(F("\n\t\tadded humidity sensor at i2c addr = 0x"));log_debug(res,HEX); log_flush(); _known = true; } + // is chip an airquality sensor ? + if( airqualityModule and airqualityModule->add_sensor(res) == true ) { + log_debug(F("\n\t\tadded airquality sensor at i2c addr = 0x"));log_debug(res,HEX); log_flush(); + _known = true; + } // is chip a display ? if( displayModule and displayModule->add_display(res) == true ) { log_debug(F("\n\t\tadded display at i2c addr = 0x"));log_debug(res,HEX); log_flush(); -- GitLab