From 7e7872605b6dd055fd2ae32ccea4ebb49cebb99b Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Fri, 29 Jul 2022 12:39:46 -0500 Subject: [PATCH] Lots of environmental telemetry sensor cleanup (#1574) --- platformio.ini | 1 - protobufs | 2 +- src/main.cpp | 2 +- src/main.h | 2 +- src/mesh/generated/localonly.pb.h | 2 +- src/mesh/generated/module_config.pb.h | 20 ++---- src/mesh/generated/telemetry.pb.h | 22 ++---- .../Telemetry/EnvironmentTelemetry.cpp | 67 +------------------ src/modules/Telemetry/Sensor/DHTSensor.cpp | 39 ----------- src/modules/Telemetry/Sensor/DHTSensor.h | 16 ----- src/modules/Telemetry/Sensor/DallasSensor.cpp | 35 ---------- src/modules/Telemetry/Sensor/DallasSensor.h | 18 ----- 12 files changed, 16 insertions(+), 210 deletions(-) delete mode 100644 src/modules/Telemetry/Sensor/DHTSensor.cpp delete mode 100644 src/modules/Telemetry/Sensor/DHTSensor.h delete mode 100644 src/modules/Telemetry/Sensor/DallasSensor.cpp delete mode 100644 src/modules/Telemetry/Sensor/DallasSensor.h diff --git a/platformio.ini b/platformio.ini index 5a69e24ab..5dd065503 100644 --- a/platformio.ini +++ b/platformio.ini @@ -78,7 +78,6 @@ lib_deps = [environmental_base] lib_deps = adafruit/Adafruit BusIO@^1.11.4 - adafruit/DHT sensor library@^1.4.1 adafruit/Adafruit Unified Sensor@^1.1.4 paulstoffregen/OneWire@^2.3.5 robtillaart/DS18B20@^0.1.11 diff --git a/protobufs b/protobufs index c63a16c32..8c6ada3df 160000 --- a/protobufs +++ b/protobufs @@ -1 +1 @@ -Subproject commit c63a16c32f0a7b41fc348a8f42c9c13a024d2700 +Subproject commit 8c6ada3df4a9ea17a89d31b4f814d83a3c503b53 diff --git a/src/main.cpp b/src/main.cpp index ffa2c6470..88742aef3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -91,7 +91,7 @@ uint32_t serialSinceMsec; bool axp192_found; // Array map of sensor types (as array index) and i2c address as value we'll find in the i2c scan -uint8_t nodeTelemetrySensorsMap[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +uint8_t nodeTelemetrySensorsMap[6] = { 0, 0, 0, 0, 0, 0 }; Router *router = NULL; // Users of router don't care what sort of subclass implements that API diff --git a/src/main.h b/src/main.h index cc17adb09..b9ae581ac 100644 --- a/src/main.h +++ b/src/main.h @@ -19,7 +19,7 @@ extern bool axp192_found; extern bool isCharging; extern bool isUSBPowered; -extern uint8_t nodeTelemetrySensorsMap[12]; +extern uint8_t nodeTelemetrySensorsMap[6]; // Global Screen singleton. extern graphics::Screen *screen; diff --git a/src/mesh/generated/localonly.pb.h b/src/mesh/generated/localonly.pb.h index 031983fc0..7e6d18d23 100644 --- a/src/mesh/generated/localonly.pb.h +++ b/src/mesh/generated/localonly.pb.h @@ -139,7 +139,7 @@ extern const pb_msgdesc_t LocalModuleConfig_msg; /* Maximum encoded size of messages (where known) */ #define LocalConfig_size 319 -#define LocalModuleConfig_size 288 +#define LocalModuleConfig_size 268 #ifdef __cplusplus } /* extern "C" */ diff --git a/src/mesh/generated/module_config.pb.h b/src/mesh/generated/module_config.pb.h index 5f060067d..866acf5c2 100644 --- a/src/mesh/generated/module_config.pb.h +++ b/src/mesh/generated/module_config.pb.h @@ -108,11 +108,7 @@ typedef struct _ModuleConfig_TelemetryConfig { uint32_t environment_update_interval; bool environment_measurement_enabled; bool environment_screen_enabled; - uint32_t environment_read_error_count_threshold; - uint32_t environment_recovery_interval; bool environment_display_fahrenheit; - TelemetrySensorType environment_sensor_type; - uint32_t environment_sensor_pin; } ModuleConfig_TelemetryConfig; /* Module Config */ @@ -162,7 +158,7 @@ extern "C" { #define ModuleConfig_ExternalNotificationConfig_init_default {0, 0, 0, 0, 0, 0} #define ModuleConfig_StoreForwardConfig_init_default {0, 0, 0, 0, 0} #define ModuleConfig_RangeTestConfig_init_default {0, 0, 0} -#define ModuleConfig_TelemetryConfig_init_default {0, 0, 0, 0, 0, 0, 0, _TelemetrySensorType_MIN, 0} +#define ModuleConfig_TelemetryConfig_init_default {0, 0, 0, 0, 0} #define ModuleConfig_CannedMessageConfig_init_default {0, 0, 0, 0, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, 0, 0, "", 0} #define ModuleConfig_init_zero {0, {ModuleConfig_MQTTConfig_init_zero}} #define ModuleConfig_MQTTConfig_init_zero {0, "", "", "", 0} @@ -170,7 +166,7 @@ extern "C" { #define ModuleConfig_ExternalNotificationConfig_init_zero {0, 0, 0, 0, 0, 0} #define ModuleConfig_StoreForwardConfig_init_zero {0, 0, 0, 0, 0} #define ModuleConfig_RangeTestConfig_init_zero {0, 0, 0} -#define ModuleConfig_TelemetryConfig_init_zero {0, 0, 0, 0, 0, 0, 0, _TelemetrySensorType_MIN, 0} +#define ModuleConfig_TelemetryConfig_init_zero {0, 0, 0, 0, 0} #define ModuleConfig_CannedMessageConfig_init_zero {0, 0, 0, 0, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, 0, 0, "", 0} /* Field tags (for use in manual encoding/decoding) */ @@ -215,11 +211,7 @@ extern "C" { #define ModuleConfig_TelemetryConfig_environment_update_interval_tag 2 #define ModuleConfig_TelemetryConfig_environment_measurement_enabled_tag 3 #define ModuleConfig_TelemetryConfig_environment_screen_enabled_tag 4 -#define ModuleConfig_TelemetryConfig_environment_read_error_count_threshold_tag 5 -#define ModuleConfig_TelemetryConfig_environment_recovery_interval_tag 6 #define ModuleConfig_TelemetryConfig_environment_display_fahrenheit_tag 7 -#define ModuleConfig_TelemetryConfig_environment_sensor_type_tag 8 -#define ModuleConfig_TelemetryConfig_environment_sensor_pin_tag 9 #define ModuleConfig_mqtt_tag 1 #define ModuleConfig_serial_tag 2 #define ModuleConfig_external_notification_tag 3 @@ -298,11 +290,7 @@ X(a, STATIC, SINGULAR, UINT32, device_update_interval, 1) \ X(a, STATIC, SINGULAR, UINT32, environment_update_interval, 2) \ X(a, STATIC, SINGULAR, BOOL, environment_measurement_enabled, 3) \ X(a, STATIC, SINGULAR, BOOL, environment_screen_enabled, 4) \ -X(a, STATIC, SINGULAR, UINT32, environment_read_error_count_threshold, 5) \ -X(a, STATIC, SINGULAR, UINT32, environment_recovery_interval, 6) \ -X(a, STATIC, SINGULAR, BOOL, environment_display_fahrenheit, 7) \ -X(a, STATIC, SINGULAR, UENUM, environment_sensor_type, 8) \ -X(a, STATIC, SINGULAR, UINT32, environment_sensor_pin, 9) +X(a, STATIC, SINGULAR, BOOL, environment_display_fahrenheit, 7) #define ModuleConfig_TelemetryConfig_CALLBACK NULL #define ModuleConfig_TelemetryConfig_DEFAULT NULL @@ -347,7 +335,7 @@ extern const pb_msgdesc_t ModuleConfig_CannedMessageConfig_msg; #define ModuleConfig_RangeTestConfig_size 10 #define ModuleConfig_SerialConfig_size 26 #define ModuleConfig_StoreForwardConfig_size 22 -#define ModuleConfig_TelemetryConfig_size 38 +#define ModuleConfig_TelemetryConfig_size 18 #define ModuleConfig_size 105 #ifdef __cplusplus diff --git a/src/mesh/generated/telemetry.pb.h b/src/mesh/generated/telemetry.pb.h index 4f6e1f905..d77c9ae49 100644 --- a/src/mesh/generated/telemetry.pb.h +++ b/src/mesh/generated/telemetry.pb.h @@ -14,28 +14,16 @@ typedef enum _TelemetrySensorType { /* No external telemetry sensor explicitly set */ TelemetrySensorType_NotSet = 0, - /* Moderate accuracy temperature */ - TelemetrySensorType_DHT11 = 1, - /* High accuracy temperature */ - TelemetrySensorType_DS18B20 = 2, - /* Moderate accuracy temperature and humidity */ - TelemetrySensorType_DHT12 = 3, - /* Moderate accuracy temperature and humidity */ - TelemetrySensorType_DHT21 = 4, - /* Moderate accuracy temperature and humidity */ - TelemetrySensorType_DHT22 = 5, /* High accuracy temperature, pressure, humidity */ - TelemetrySensorType_BME280 = 6, + TelemetrySensorType_BME280 = 1, /* High accuracy temperature, pressure, humidity, and air resistance */ - TelemetrySensorType_BME680 = 7, + TelemetrySensorType_BME680 = 2, /* Very high accuracy temperature */ - TelemetrySensorType_MCP9808 = 8, - /* Moderate accuracy temperature and humidity */ - TelemetrySensorType_SHTC3 = 9, + TelemetrySensorType_MCP9808 = 3, /* Moderate accuracy current and voltage */ - TelemetrySensorType_INA260 = 10, + TelemetrySensorType_INA260 = 4, /* Moderate accuracy current and voltage */ - TelemetrySensorType_INA219 = 11 + TelemetrySensorType_INA219 = 5 } TelemetrySensorType; /* Struct definitions */ diff --git a/src/modules/Telemetry/EnvironmentTelemetry.cpp b/src/modules/Telemetry/EnvironmentTelemetry.cpp index da18ee4e5..1fcc94723 100644 --- a/src/modules/Telemetry/EnvironmentTelemetry.cpp +++ b/src/modules/Telemetry/EnvironmentTelemetry.cpp @@ -13,17 +13,12 @@ // Sensors #include "Sensor/BME280Sensor.h" #include "Sensor/BME680Sensor.h" -#include "Sensor/DHTSensor.h" -#include "Sensor/DallasSensor.h" #include "Sensor/MCP9808Sensor.h" #include "Sensor/INA260Sensor.h" #include "Sensor/INA219Sensor.h" - BME280Sensor bme280Sensor; BME680Sensor bme680Sensor; -DHTSensor dhtSensor; -DallasSensor dallasSensor; MCP9808Sensor mcp9808Sensor; INA260Sensor ina260Sensor; INA219Sensor ina219Sensor; @@ -56,15 +51,9 @@ int32_t EnvironmentTelemetryModule::runOnce() without having to configure it from the PythonAPI or WebUI. */ - /* - moduleConfig.telemetry.environment_measurement_enabled = 1; - moduleConfig.telemetry.environment_screen_enabled = 1; - moduleConfig.telemetry.environment_read_error_count_threshold = 5; - moduleConfig.telemetry.environment_update_interval = 600; - moduleConfig.telemetry.environment_recovery_interval = 60; - moduleConfig.telemetry.environment_sensor_pin = 13; // If one-wire - moduleConfig.telemetry.environment_sensor_type = TelemetrySensorType::TelemetrySensorType_BME280; - */ + // moduleConfig.telemetry.environment_measurement_enabled = 1; + // moduleConfig.telemetry.environment_screen_enabled = 1; + // moduleConfig.telemetry.environment_update_interval = 45; if (!(moduleConfig.telemetry.environment_measurement_enabled || moduleConfig.telemetry.environment_screen_enabled)) { @@ -80,21 +69,6 @@ int32_t EnvironmentTelemetryModule::runOnce() DEBUG_MSG("Environment Telemetry: Initializing\n"); // it's possible to have this module enabled, only for displaying values on the screen. // therefore, we should only enable the sensor loop if measurement is also enabled - - switch (moduleConfig.telemetry.environment_sensor_type) { - case TelemetrySensorType_DHT11: - case TelemetrySensorType_DHT12: - case TelemetrySensorType_DHT21: - case TelemetrySensorType_DHT22: - result = dhtSensor.runOnce(); - break; - case TelemetrySensorType_DS18B20: - result = dallasSensor.runOnce(); - break; - default: - DEBUG_MSG("Environment Telemetry: No sensor type specified; Checking for detected i2c sensors\n"); - break; - } if (bme680Sensor.hasSensor()) result = bme680Sensor.runOnce(); if (bme280Sensor.hasSensor()) @@ -113,26 +87,6 @@ int32_t EnvironmentTelemetryModule::runOnce() return result; // this is not the first time OSThread library has called this function // so just do what we intend to do on the interval - if (sensor_read_error_count > moduleConfig.telemetry.environment_read_error_count_threshold) { - if (moduleConfig.telemetry.environment_recovery_interval > 0) { - DEBUG_MSG("Environment Telemetry: TEMPORARILY DISABLED; The " - "telemetry_module_environment_read_error_count_threshold has been exceed: %d. Will retry reads in " - "%d seconds\n", - moduleConfig.telemetry.environment_read_error_count_threshold, - moduleConfig.telemetry.environment_recovery_interval); - sensor_read_error_count = 0; - return (moduleConfig.telemetry.environment_recovery_interval * 1000); - } - DEBUG_MSG("Environment Telemetry: DISABLED; The telemetry_module_environment_read_error_count_threshold has " - "been exceed: %d. Reads will not be retried until after device reset\n", - moduleConfig.telemetry.environment_read_error_count_threshold); - return result; - - } else if (sensor_read_error_count > 0) { - DEBUG_MSG("Environment Telemetry: There have been %d sensor read failures. Will retry %d more times\n", - sensor_read_error_count, sensor_read_error_count, sensor_read_error_count, - moduleConfig.telemetry.environment_read_error_count_threshold - sensor_read_error_count); - } if (!sendOurTelemetry()) { // if we failed to read the sensor, then try again // as soon as we can according to the maximum polling frequency @@ -242,21 +196,6 @@ bool EnvironmentTelemetryModule::sendOurTelemetry(NodeNum dest, bool wantReplies DEBUG_MSG("-----------------------------------------\n"); DEBUG_MSG("Environment Telemetry: Read data\n"); - switch (moduleConfig.telemetry.environment_sensor_type) { - case TelemetrySensorType_DS18B20: - if (!dallasSensor.getMetrics(&m)) - sensor_read_error_count++; - break; - case TelemetrySensorType_DHT11: - case TelemetrySensorType_DHT12: - case TelemetrySensorType_DHT21: - case TelemetrySensorType_DHT22: - if (!dhtSensor.getMetrics(&m)) - sensor_read_error_count++; - break; - default: - DEBUG_MSG("Environment Telemetry: No specified sensor type; Trying any detected i2c sensors\n"); - } if (bme280Sensor.hasSensor()) bme280Sensor.getMetrics(&m); if (bme680Sensor.hasSensor()) diff --git a/src/modules/Telemetry/Sensor/DHTSensor.cpp b/src/modules/Telemetry/Sensor/DHTSensor.cpp deleted file mode 100644 index 999db7761..000000000 --- a/src/modules/Telemetry/Sensor/DHTSensor.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "DHTSensor.h" -#include "./mesh/generated/telemetry.pb.h" -#include "MeshService.h" -#include "TelemetrySensor.h" -#include "configuration.h" -#include - -DHTSensor::DHTSensor() : - TelemetrySensor(TelemetrySensorType_NotSet, "DHT") -{ -} - -int32_t DHTSensor::runOnce() { - if (moduleConfig.telemetry.environment_sensor_type == TelemetrySensorType_DHT11 || - moduleConfig.telemetry.environment_sensor_type == TelemetrySensorType_DHT12) { - dht = new DHT(moduleConfig.telemetry.environment_sensor_pin, DHT11); - } else { - dht = new DHT(moduleConfig.telemetry.environment_sensor_pin, DHT22); - } - - dht->begin(); - dht->read(); - DEBUG_MSG("Opened DHT11/DHT12 on pin: %d\n", moduleConfig.telemetry.environment_sensor_pin); - - return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS; -} - -void DHTSensor::setup() { } - -bool DHTSensor::getMetrics(Telemetry *measurement) { - DEBUG_MSG("DHTSensor::getMetrics\n"); - if (!dht->read(true)) { - DEBUG_MSG("Telemetry: FAILED TO READ DATA\n"); - return false; - } - measurement->variant.environment_metrics.relative_humidity = dht->readHumidity(); - measurement->variant.environment_metrics.temperature = dht->readTemperature(); - return true; -} \ No newline at end of file diff --git a/src/modules/Telemetry/Sensor/DHTSensor.h b/src/modules/Telemetry/Sensor/DHTSensor.h deleted file mode 100644 index cb26e66e7..000000000 --- a/src/modules/Telemetry/Sensor/DHTSensor.h +++ /dev/null @@ -1,16 +0,0 @@ -#include "../mesh/generated/telemetry.pb.h" -#include "TelemetrySensor.h" -#include - -class DHTSensor : virtual public TelemetrySensor { -private: - DHT *dht = NULL; - -protected: - virtual void setup() override; - -public: - DHTSensor(); - virtual int32_t runOnce() override; - virtual bool getMetrics(Telemetry *measurement) override; -}; \ No newline at end of file diff --git a/src/modules/Telemetry/Sensor/DallasSensor.cpp b/src/modules/Telemetry/Sensor/DallasSensor.cpp deleted file mode 100644 index 61852de4d..000000000 --- a/src/modules/Telemetry/Sensor/DallasSensor.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include "DallasSensor.h" -#include "../mesh/generated/telemetry.pb.h" -#include "MeshService.h" -#include "TelemetrySensor.h" -#include "configuration.h" -#include -#include - -DallasSensor::DallasSensor() : - TelemetrySensor(TelemetrySensorType_DS18B20, "DS18B20") -{ -} - -int32_t DallasSensor::runOnce() { - oneWire = new OneWire(moduleConfig.telemetry.environment_sensor_pin); - ds18b20 = new DS18B20(oneWire); - ds18b20->begin(); - ds18b20->setResolution(12); - ds18b20->requestTemperatures(); - DEBUG_MSG("Opened DS18B20 on pin: %d\n", moduleConfig.telemetry.environment_sensor_pin); - return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS; -} - -void DallasSensor::setup() {} - -bool DallasSensor::getMetrics(Telemetry *measurement){ - DEBUG_MSG("DallasSensor::getMetrics\n"); - if (ds18b20->isConversionComplete()) { - measurement->variant.environment_metrics.temperature = ds18b20->getTempC(); - measurement->variant.environment_metrics.relative_humidity = 0; - ds18b20->requestTemperatures(); - return true; - } - return false; -} \ No newline at end of file diff --git a/src/modules/Telemetry/Sensor/DallasSensor.h b/src/modules/Telemetry/Sensor/DallasSensor.h deleted file mode 100644 index c33da3c1c..000000000 --- a/src/modules/Telemetry/Sensor/DallasSensor.h +++ /dev/null @@ -1,18 +0,0 @@ -#include "../mesh/generated/telemetry.pb.h" -#include "TelemetrySensor.h" -#include -#include - -class DallasSensor : virtual public TelemetrySensor { -private: - OneWire *oneWire = NULL; - DS18B20 *ds18b20 = NULL; - -protected: - virtual void setup() override; - -public: - DallasSensor(); - virtual int32_t runOnce() override; - virtual bool getMetrics(Telemetry *measurement) override; -}; \ No newline at end of file