I had been using the filter “filter_nan” with no problems in the previous version of ESPHome, but having problems in the new 1.12.0 release.
Validation now gives the error: " The filter_nan filter has been removed. Please use ‘filter_out: nan’ instead."
So I put that in instead:
sensor:
- platform: tsl2561
name: "D1 Mini Test Bed Light Level"
accuracy_decimals: 0
unit_of_measurement: lux
icon: "mdi:brightness-6"
address: 0x39
update_interval: 15s
filters:
- filter_out: nan
This validates correctly, but when uploaded results in compile errors:
src/main.cpp: In function 'void setup()': src/main.cpp:37:75: error: no matching function for call to 'esphome::sensor::FilterOutValueFilter::FilterOutValueFilter(float (&)(const char*))' sensor_tsl2561sensor->set_filters({new sensor::FilterOutValueFilter(nanf)}); ^ src/main.cpp:37:75: note: candidates are: In file included from /data/d1mini_test_bed/.piolibdeps/esphome-core/src/esphome/sensor/sensor.h:14:0, from /data/d1mini_test_bed/.piolibdeps/esphome-core/src/esphome/controller.h:7, from /data/d1mini_test_bed/.piolibdeps/esphome-core/src/esphome/api/api_server.h:9, from /data/d1mini_test_bed/.piolibdeps/esphome-core/src/esphome/application.h:6, from /data/d1mini_test_bed/.piolibdeps/esphome-core/src/esphome.h:1, from src/main.cpp:3: /data/d1mini_test_bed/.piolibdeps/esphome-core/src/esphome/sensor/filter.h:162:12: note: esphome::sensor::FilterOutValueFilter::FilterOutValueFilter(float) explicit FilterOutValueFilter(float value_to_filter_out); ^ /data/d1mini_test_bed/.piolibdeps/esphome-core/src/esphome/sensor/filter.h:162:12: note: no known conversion for argument 1 from 'float(const char*)' to 'float' /data/d1mini_test_bed/.piolibdeps/esphome-core/src/esphome/sensor/filter.h:160:7: note: constexpr esphome::sensor::FilterOutValueFilter::FilterOutValueFilter(const esphome::sensor::FilterOutValueFilter&) class FilterOutValueFilter : public Filter { ^ /data/d1mini_test_bed/.piolibdeps/esphome-core/src/esphome/sensor/filter.h:160:7: note: no known conversion for argument 1 from 'float(const char*)' to 'const esphome::sensor::FilterOutValueFilter&' /data/d1mini_test_bed/.piolibdeps/esphome-core/src/esphome/sensor/filter.h:160:7: note: constexpr esphome::sensor::FilterOutValueFilter::FilterOutValueFilter(esphome::sensor::FilterOutValueFilter&&) /data/d1mini_test_bed/.piolibdeps/esphome-core/src/esphome/sensor/filter.h:160:7: note: no known conversion for argument 1 from 'float(const char*)' to 'esphome::sensor::FilterOutValueFilter&&' src/main.cpp:37:77: error: no matching function for call to 'esphome::sensor::TSL2561Sensor::set_filters(<brace-enclosed initializer list>)' sensor_tsl2561sensor->set_filters({new sensor::FilterOutValueFilter(nanf)}); ^ src/main.cpp:37:77: note: candidate is: In file included from /data/d1mini_test_bed/.piolibdeps/esphome-core/src/esphome/controller.h:7:0, from /data/d1mini_test_bed/.piolibdeps/esphome-core/src/esphome/api/api_server.h:9, from /data/d1mini_test_bed/.piolibdeps/esphome-core/src/esphome/application.h:6, from /data/d1mini_test_bed/.piolibdeps/esphome-core/src/esphome.h:1, from src/main.cpp:3: /data/d1mini_test_bed/.piolibdeps/esphome-core/src/esphome/sensor/sensor.h:90:8: note: void esphome::sensor::Sensor::set_filters(const std::vector<esphome::sensor::Filter*>&) void set_filters(const std::vector<Filter *> &filters); ^ /data/d1mini_test_bed/.piolibdeps/esphome-core/src/esphome/sensor/sensor.h:90:8: note: no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const std::vector<esphome::sensor::Filter*>&' Compiling /data/d1mini_test_bed/.pioenvs/d1mini_test_bed/lib0d3/ESP8266mDNS/ESP8266mDNS.cpp.o *** [/data/d1mini_test_bed/.pioenvs/d1mini_test_bed/src/main.cpp.o] Error 1 ========================== [ERROR] Took 16.46 seconds ==========================
Any suggestions what I might be doing wrong? The documentation only makes a passing comment about filtering ‘nan’ and still refers to the old filter ‘filter_nan:’
I’m using the filter because if the light level exceeds the max the TSL2562 sensor can deal with, ESPHome reports the value as ‘nan’ resulting in ugly errors on the HA interface. As I said, it has been working fine the old way.