Implement plausibility check for values before publishing
This commit is contained in:
parent
f8d57832cd
commit
7208a6d324
@ -22,7 +22,7 @@
|
|||||||
#define DIFF_TEMP 0.3 // sensor has only 0.5°C accuracy, triggering on less is ludicrous
|
#define DIFF_TEMP 0.3 // sensor has only 0.5°C accuracy, triggering on less is ludicrous
|
||||||
#define DIFF_HMID 2.5 // humidity doesn't change that much anyways
|
#define DIFF_HMID 2.5 // humidity doesn't change that much anyways
|
||||||
#define DIFF_HEAT 0.2 // this one's actually quite active
|
#define DIFF_HEAT 0.2 // this one's actually quite active
|
||||||
#define DIFF_AIRQ 5
|
#define DIFF_AIRQ 3 // this one hardly changes
|
||||||
|
|
||||||
float hmid = 0; // humidity
|
float hmid = 0; // humidity
|
||||||
float hmid_r = 0; // humidity
|
float hmid_r = 0; // humidity
|
||||||
@ -95,27 +95,35 @@ void reconnect() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool checkBound(float newValue, float prevValue, float maxDiff) {
|
bool checkVariation(float newValue, float prevValue, float maxDiff) {
|
||||||
return !isnan(newValue) &&
|
return !isnan(newValue) &&
|
||||||
(newValue < prevValue - maxDiff || newValue > prevValue + maxDiff);
|
(newValue < prevValue - maxDiff || newValue > prevValue + maxDiff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool checkPlausibility(float newValue, float prevValue, float maxDiff) {
|
||||||
|
return (newValue < prevValue + (maxDiff * 10) || newValue > prevValue - (maxDiff * 10));
|
||||||
|
}
|
||||||
|
|
||||||
long lastMsg = 0;
|
long lastMsg = 0;
|
||||||
long lastSent = 0;
|
long lastSent = 0;
|
||||||
bool published = false;
|
bool published = false;
|
||||||
bool forcePublish = false;
|
bool forcePublish = false;
|
||||||
|
|
||||||
bool publish (String desc, char *topic, float val, float &val_r, int diff, bool force){
|
bool publish (String desc, char *topic, float val, float &val_r, int diff, bool force){
|
||||||
if (checkBound(val, val_r, 0.3) or force) {
|
bool retval = false;
|
||||||
|
if (checkVariation(val, val_r, diff) or force) {
|
||||||
val_r = val;
|
val_r = val;
|
||||||
Serial.print("New " + desc + ": ");
|
Serial.print("New " + desc + ": ");
|
||||||
Serial.println(String(val).c_str());
|
Serial.println(String(val).c_str());
|
||||||
|
if (checkPlausibility(val, val_r, diff) or force) {
|
||||||
client.publish(topic, String(val).c_str(), true);
|
client.publish(topic, String(val).c_str(), true);
|
||||||
return true;
|
retval = true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
Serial.println("** ERROR: Value out of bounds, not published **");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
if (!client.connected()) {
|
if (!client.connected()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user