8 const String& config_path)
10 sample_size_{sample_size},
11 multiplier_{multiplier},
14 buf_.resize(sample_size_, 0);
23 buf_.assign(sample_size_, input);
24 sum_ =
static_cast<float>(sample_size_) * input;
28 sum_ += input - buf_[ptr_];
30 ptr_ = (ptr_ + 1) % sample_size_;
32 output_ = multiplier_ * sum_ / sample_size_;
37 root[
"multiplier"] = multiplier_;
38 root[
"sample_size"] = sample_size_;
43 String
const expected[] = {
"multiplier",
"sample_size"};
44 for (
auto str : expected) {
45 if (!config[str].is<JsonVariant>()) {
49 multiplier_ = config[
"multiplier"];
50 int const n_new = config[
"sample_size"];
52 if (sample_size_ != n_new) {
54 buf_.assign(sample_size_, 0);
61 return R
"({"type":"object","properties":{"sample_size":{"title":"Number of samples in average","type":"integer"},"multiplier":{"title":"Multiplier","type":"number"}}})";
virtual bool load() override
Load and populate the object from a persistent storage.
Outputs the moving average of the last sample_size inputs.
virtual void set(const float &input) override
virtual bool to_json(JsonObject &root) override
virtual bool from_json(const JsonObject &config) override
MovingAverage(int sample_size, float multiplier=1.0, const String &config_path="")
const String ConfigSchema(const SmartSwitchController &obj)