From f37cc2a9c37b64a9844711546470c53d348951bf Mon Sep 17 00:00:00 2001
From: Jochen Vothknecht <jochen3120@gmail.com>
Date: Tue, 3 Jul 2018 23:42:56 +0200
Subject: [PATCH] basic functionality working

---
 main/peripherals/sensors/bme280.cpp | 50 +++++++++++++++++++++++------
 main/peripherals/sensors/bme280.h   |  3 ++
 main/qthing.h                       |  2 +-
 3 files changed, 45 insertions(+), 10 deletions(-)

diff --git a/main/peripherals/sensors/bme280.cpp b/main/peripherals/sensors/bme280.cpp
index d27e4a4..b372222 100644
--- a/main/peripherals/sensors/bme280.cpp
+++ b/main/peripherals/sensors/bme280.cpp
@@ -8,21 +8,47 @@ typedef struct {
     qthing::bme280_measure_callback_t callback;
 } bme280_config_t;
 
-static bme280_config_t cfg;
+static std::vector<bme280_config_t> cfgs;
 
 #include "esp_log.h"
 static void measured(void *ignored) {
+    std::string topic;
+
     while (true) {
+        vTaskDelay(1000 / portTICK_PERIOD_MS);
 
-        bme280_reading_data data = cfg.bme280.readSensorData();
+        for (std::vector<bme280_config_t>::iterator it = cfgs.begin(); it != cfgs.end(); ++it) {
+            bme280_config_t cfg = *it;
 
-        ESP_LOGE("BME280", "Temperature: %.2f°C, Humidity: %.2f%%, Pressure: %.2fPa\n",
-                (double) data.temperature,
-                (double) data.humidity,
-                (double) data.pressure
-        );
+            bme280_reading_data _data = cfg.bme280.readSensorData();
+            qthing::bme280_data_t data = {_data.temperature, _data.humidity, _data.pressure};
 
-        vTaskDelay(1000 / portTICK_PERIOD_MS);
+            if (is_mqtt_connected()) {
+                char tmp[16];
+
+                sprintf(tmp, "%0.2f", data.temperature);
+                topic = std::string(DEVICE_NAMESPACE) + cfg.topic + std::string("/temperature");
+                publish_message(topic, tmp);
+
+                sprintf(tmp, "%0.2f", data.humidity);
+                topic = std::string(DEVICE_NAMESPACE) + cfg.topic + std::string("/humidity");
+                publish_message(topic, tmp);
+
+                sprintf(tmp, "%0.2f", data.pressure);
+                topic = std::string(DEVICE_NAMESPACE) + cfg.topic + std::string("/pressure");
+                publish_message(topic, tmp);
+            }
+
+            if (cfg.callback != NULL) {
+                cfg.callback(data);
+            }
+
+            ESP_LOGI((std::string("BME280[") + cfg.topic + std::string("]")).c_str(), "T: %.2f°C  RH: %.2f%%  P: %.2fPa",
+                data.temperature,
+                data.humidity,
+                data.pressure
+            );
+        }
     }
 }
 
@@ -33,15 +59,21 @@ namespace qthing {
         bme280.setDebug(false);
         bme280.init(sda, scl);
 
-        cfg = {
+        bme280_config_t cfg = {
             topic,
             bme280,
             callback
         };
 
+        cfgs.push_back(cfg);
+
         if (!measured_started) {
             measured_started = true;
             xTaskCreate(measured, "bme280_measured", 10000, NULL, 1, NULL);
         }
     }
+    
+    void add_bme280(gpio_num_t sda, gpio_num_t scl, std::string topic, uint8_t address) {
+        add_bme280(sda, scl, topic, NULL, address);
+    }
 }
diff --git a/main/peripherals/sensors/bme280.h b/main/peripherals/sensors/bme280.h
index 6f2e0a9..6d9265f 100644
--- a/main/peripherals/sensors/bme280.h
+++ b/main/peripherals/sensors/bme280.h
@@ -1,6 +1,9 @@
 # pragma once
 
 #include <qthing.h>
+#include "mqtt_common.h"
+
+#include <vector>
 #include <string>
 
 #include "freertos/FreeRTOS.h"
diff --git a/main/qthing.h b/main/qthing.h
index a4e3b86..ed07bc8 100644
--- a/main/qthing.h
+++ b/main/qthing.h
@@ -105,7 +105,7 @@ namespace qthing {
 
     typedef std::function<void(bme280_data_t)> bme280_measure_callback_t;
 
-    void add_bme280(gpio_num_t sda, gpio_num_t scl, std::string topic, qthing::bme280_measure_callback_t callback, uint8_t address = 0x76);
+    void add_bme280(gpio_num_t sda, gpio_num_t scl, std::string topic, qthing::bme280_measure_callback_t callback = NULL, uint8_t address = 0x76);
 }
 
 // utility
-- 
GitLab