From 0366456b13f7c7d1523b8b5169fbf5e9996a1bcf Mon Sep 17 00:00:00 2001 From: Kai Lauterbach Date: Sun, 28 Aug 2022 13:47:10 +0200 Subject: [PATCH] Added a data validation check. The webupdater will output the result of the check and also the hbWebstat json data contain the valid flag now. Also only valid data will logged into the influxDB. --- firmware/constants.h | 1 + firmware/firmware.ino | 19 +++++++++++++++++-- firmware/webUpdater.ino | 17 +++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/firmware/constants.h b/firmware/constants.h index 6710d2e..19da869 100644 --- a/firmware/constants.h +++ b/firmware/constants.h @@ -11,6 +11,7 @@ #define SENSOR_ESAVEMODE 6 #define SENSOR_BATCHARGESTATE 7 + #define BAT_CHARGE_STATE_CHARGED 2.0 #define BAT_CHARGE_STATE_CHARGING 1.0 #define BAT_CHARGE_STATE_NOTCHARGING 0.0 diff --git a/firmware/firmware.ino b/firmware/firmware.ino index 6aec510..fbc636a 100644 --- a/firmware/firmware.ino +++ b/firmware/firmware.ino @@ -26,7 +26,7 @@ //*************************************************************************// // constant variables -const uint8_t VALUES = 8; +const uint8_t VALUES = 8; // see constants.h file - count of number of SENSOR_ defines float currentSensorData[VALUES] = {nanf("no value"), nanf("no value"), nanf("no value"), nanf("no value"), nanf("no value"), nanf("no value"), nanf("no value"), nanf("no value")}; float (*sensors[VALUES])() = {}; @@ -34,6 +34,8 @@ uint16_t update_sensor_cnt = 0; uint16_t update_webserver_cnt = 0; uint16_t update_windspeed_exceed_cnt = 0; +boolean validData = false; + WiFiManager wifiManager; //*************************************************************************// @@ -317,7 +319,20 @@ void _loop() delay(100); #ifdef INFLUXDB_FEATURE - pushToInfluxDB(DEVICE_NAME, currentSensorData); + + for (uint8_t i = 0; i < 5 and validData == false; i++) + { + if (currentSensorData[i] != 0) + { + validData = true; // at least one value is not zero, the data + } + } + + if (validData == true) + { + // send data only if valid data is available + pushToInfluxDB(DEVICE_NAME, currentSensorData); + } #endif #ifdef WEBUPDATER_FEATURE diff --git a/firmware/webUpdater.ino b/firmware/webUpdater.ino index b2a336e..932c8b3 100644 --- a/firmware/webUpdater.ino +++ b/firmware/webUpdater.ino @@ -30,8 +30,11 @@ String hb_ws_msg_light = "\"lightlevel\": "; String hb_ws_msg_windspeed = "\"windspeed\": "; String hb_ws_msg_pressure = "\"pressure\": "; String hb_ws_msg_timestamp = "\"timestamp\": "; +String hb_ws_msg_valid = "\"valid\": "; String hb_ws_msg_end = "}"; +boolean wuValidData = false; + void setupWebUpdater(String device, String ip) { debug("Starting WebUpdater... " + ip); @@ -62,6 +65,15 @@ void doWebUpdater(void) void setSensorData(float sensorValues[]) { + + for (uint8_t i = 0; i < 5 and wuValidData == false; i++) + { + if (_webUpdater_sensValues[i] != 0) + { + wuValidData = true; // at least one value is not zero, the data + } + } + for (uint8_t i = 0; i < VALUES; i++) { _webUpdater_sensValues[i] = sensorValues[i]; } @@ -69,6 +81,7 @@ void setSensorData(float sensorValues[]) void showHTMLMain(void) { + String message = "OKO Weatherstation - " + String(_webUpdater_dev) + "" "" "" @@ -81,6 +94,7 @@ void showHTMLMain(void) "pressure" + String(_webUpdater_sensValues[SENSOR_PRESSURE]) + "" "batvoltage" + String(_webUpdater_sensValues[SENSOR_BAT_VOLTAGE]) + "" "millis" + String(millis()) + "" +"valid" + String(wuValidData) + "" "" ""; @@ -107,6 +121,9 @@ void hb_webstat_send(void) ", " + hb_ws_msg_timestamp + String(millis()) + + ", " + + hb_ws_msg_valid + + String(wuValidData) + hb_ws_msg_end; httpServer.send(200, "text/html", msg);