SensESP 3.3.0
Universal Signal K sensor toolkit ESP32
Loading...
Searching...
No Matches
change_filter.cpp
Go to the documentation of this file.
1#include "change_filter.h"
2
3#include <cmath>
4
5namespace sensesp {
6
7ChangeFilter::ChangeFilter(float min_delta, float max_delta, int max_skips,
8 const String& config_path)
9 : FloatTransform(config_path),
10 min_delta_{min_delta},
11 max_delta_{max_delta},
12 max_skips_{max_skips},
13 skips_(max_skips_ + 1) {
14 load();
15}
16
17void ChangeFilter::set(const float& new_value) {
18 float delta = fabsf(new_value - output_);
19 if ((delta >= min_delta_ && delta <= max_delta_) || skips_ > max_skips_) {
20 skips_ = 0;
21 this->emit(new_value);
22 } else {
23 skips_++;
24 }
25}
26
27bool ChangeFilter::to_json(JsonObject& root) {
28 root["min_delta"] = min_delta_;
29 root["max_delta"] = max_delta_;
30 root["max_skips"] = max_skips_;
31 return true;
32}
33
34bool ChangeFilter::from_json(const JsonObject& config) {
35 String const expected[] = {"min_delta", "max_delta", "max_skips"};
36 for (auto str : expected) {
37 if (!config[str].is<JsonVariant>()) {
38 return false;
39 }
40 }
41 min_delta_ = config["min_delta"];
42 max_delta_ = config["max_delta"];
43 max_skips_ = config["max_skips"];
44 skips_ = max_skips_ + 1;
45 return true;
46}
47
48const String ConfigSchema(ChangeFilter& obj) {
49 return R"###({"type":"object","properties":{"min_delta":{"title":"Minimum delta","description":"Minimum difference in change of value before forwarding","type":"number"},"max_delta":{"title":"Maximum delta","description":"Maximum difference in change of value to allow forwarding","type":"number"},"max_skips":{"title":"Max skip count","description":"Maximum number of consecutive filtered values before one is allowed through","type":"number"}}})###";
50}
51
52} // namespace sensesp
A float passthrough transform that will only pass that value through if it is "sufficiently different...
virtual bool from_json(const JsonObject &config) override
virtual void set(const float &new_value) override
ChangeFilter(float min_delta=0.0, float max_delta=9999.0, int max_skips=99, const String &config_path="")
virtual bool to_json(JsonObject &root) override
virtual bool load() override
Load and populate the object from a persistent storage.
Definition saveable.cpp:8
void emit(const float &new_value)
const String ConfigSchema(const SmartSwitchController &obj)
SymmetricTransform< float > FloatTransform
Definition transform.h:99