mirror of
https://github.com/esphome/esphome.git
synced 2026-06-01 01:19:45 +08:00
[sensor] Clamp filter handles non-finite values better (#13457)
This commit is contained in:
@@ -445,22 +445,18 @@ optional<float> CalibratePolynomialFilter::new_value(float value) {
|
|||||||
ClampFilter::ClampFilter(float min, float max, bool ignore_out_of_range)
|
ClampFilter::ClampFilter(float min, float max, bool ignore_out_of_range)
|
||||||
: min_(min), max_(max), ignore_out_of_range_(ignore_out_of_range) {}
|
: min_(min), max_(max), ignore_out_of_range_(ignore_out_of_range) {}
|
||||||
optional<float> ClampFilter::new_value(float value) {
|
optional<float> ClampFilter::new_value(float value) {
|
||||||
if (std::isfinite(value)) {
|
if (std::isfinite(this->min_) && !(value >= this->min_)) {
|
||||||
if (std::isfinite(this->min_) && value < this->min_) {
|
if (this->ignore_out_of_range_) {
|
||||||
if (this->ignore_out_of_range_) {
|
return {};
|
||||||
return {};
|
|
||||||
} else {
|
|
||||||
return this->min_;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return this->min_;
|
||||||
|
}
|
||||||
|
|
||||||
if (std::isfinite(this->max_) && value > this->max_) {
|
if (std::isfinite(this->max_) && !(value <= this->max_)) {
|
||||||
if (this->ignore_out_of_range_) {
|
if (this->ignore_out_of_range_) {
|
||||||
return {};
|
return {};
|
||||||
} else {
|
|
||||||
return this->max_;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return this->max_;
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,6 +117,7 @@ sensor:
|
|||||||
- 10.0 -> 12.1
|
- 10.0 -> 12.1
|
||||||
- 13.0 -> 14.0
|
- 13.0 -> 14.0
|
||||||
- clamp:
|
- clamp:
|
||||||
|
# Infinity and NaN will be clamped (NaN -> min_value, +Infinity -> max_value, -Infinity -> min_value)
|
||||||
max_value: 10.0
|
max_value: 10.0
|
||||||
min_value: -10.0
|
min_value: -10.0
|
||||||
- debounce: 0.1s
|
- debounce: 0.1s
|
||||||
|
|||||||
Reference in New Issue
Block a user