From 5958942d9f2937ae7aa60b55d1e4ed289a45ba8e Mon Sep 17 00:00:00 2001 From: Fisch Date: Sun, 12 May 2024 09:37:24 +0200 Subject: [PATCH] add reboot via mqtt --- .gitignore | 1 + include/wifi_functions.h | 5 ++++ src/main.cpp | 53 ++++++++++++++++++++++++++-------------- 3 files changed, 40 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index 0f417b9..b1eafe0 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ .piolibdeps .clang_complete .gcc-flags.json +messung/* diff --git a/include/wifi_functions.h b/include/wifi_functions.h index 842a89a..d688c82 100644 --- a/include/wifi_functions.h +++ b/include/wifi_functions.h @@ -80,6 +80,11 @@ void messageReceived(String &topic, String &payload) { valueError=false; Serial.println("Reset value error flag"); } + if (topic==((String)client_id+"/reboot") && payload=="true") { //error acknowledge + Serial.println("Reboot by mqtt"); + delay(100); + ESP.restart(); + } } bool mqtt_loop(unsigned long loopmillis) { diff --git a/src/main.cpp b/src/main.cpp index 0b56683..8fa7138 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,11 +3,14 @@ /*TODO mqtt function_: valueerror quittieren -mqtt function: device reboot -check if sendallnext_flag does anything -Do not send first flow value (when filter aray is not full) + */ + +bool valueError=false; + +unsigned long last_check=0; + #include "wifi_functions.h" bool debug=false; //print Serial information @@ -18,6 +21,8 @@ sudo stty -F /dev/ttyUSB0 115200 cat /dev/ttyUSB0 | tee received.txt */ +bool valuesStabilized=false; //gets set true when values are stable (avaeraging arrays filled) + @@ -51,9 +56,6 @@ ADS1115 ADS(0x48); -bool valueError=false; - -unsigned long last_check=0; @@ -199,9 +201,13 @@ void loop() { if (loopmillis>last_check+2000) { //check values last_check=loopmillis; + + + bool _noErrorsDuringLoop=true; if (tempCmean_reservoir_a==DEVICE_DISCONNECTED_C || tempCmean_reservoir_b==DEVICE_DISCONNECTED_C || tempCmean_case==DEVICE_DISCONNECTED_C) { valueError=true; + _noErrorsDuringLoop=false; } /* @@ -210,6 +216,7 @@ void loop() { }*/ if (ec_A==EC_UNAVAILABLE || ec_B==EC_UNAVAILABLE){ valueError=true; + _noErrorsDuringLoop=false; } @@ -219,9 +226,11 @@ void loop() { if (distanceA_unsuccessful_count>20) { valueError=true; + _noErrorsDuringLoop=false; } if (distanceB_unsuccessful_count>20) { valueError=true; + _noErrorsDuringLoop=false; } @@ -298,8 +307,11 @@ void loop() { Serial.println(); - - + if (_noErrorsDuringLoop && !valuesStabilized) { + valuesStabilized=true; //gets only set to true once + valueError=false; //clear error flag once after boot + Serial.println("Values Stable, clear error flag"); + } } @@ -334,21 +346,24 @@ void loop() { static float last_flow_a=0; - if (flow_a==0.0 && last_flow_a!=flow_a) { - publishValueTimedOverride("nft/flow",flow_a,2,timing_flow_a,loopmillis); //publish without waiting if flow is 0 - }else{ - publishValueTimed("nft/flow",flow_a,2,timing_flow_a,loopmillis); + if (valuesStabilized){ + if (flow_a==0.0 && last_flow_a!=flow_a) { + publishValueTimedOverride("nft/flow",flow_a,2,timing_flow_a,loopmillis); //publish without waiting if flow is 0 + }else{ + publishValueTimed("nft/flow",flow_a,2,timing_flow_a,loopmillis); + } + last_flow_a=flow_a; } - last_flow_a=flow_a; - static float last_flow_b=0; - if (flow_b==0.0 && last_flow_b!=flow_b) { - publishValueTimedOverride("db/flow",flow_b,2,timing_flow_b,loopmillis); //publish without waiting if flow is 0 - }else{ - publishValueTimed("db/flow",flow_b,2,timing_flow_b,loopmillis); + if (valuesStabilized){ + if (flow_b==0.0 && last_flow_b!=flow_b) { + publishValueTimedOverride("db/flow",flow_b,2,timing_flow_b,loopmillis); //publish without waiting if flow is 0 + }else{ + publishValueTimed("db/flow",flow_b,2,timing_flow_b,loopmillis); + } + last_flow_b=flow_b; } - last_flow_b=flow_b;