From 7e7872605b6dd055fd2ae32ccea4ebb49cebb99b Mon Sep 17 00:00:00 2001
From: Ben Meadors <benmmeadors@gmail.com>
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 <DHT.h>
-
-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 <DHT.h>
-
-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 <DS18B20.h>
-#include <OneWire.h>
-
-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 <DS18B20.h>
-#include <OneWire.h>
-
-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
-- 
GitLab