ESPHome filter_out: nan in version 1.12.0 causing compile errors

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.

It is a bug.
I found this:

So its probably on its way.

Ah… Thanks @birchman - I’m an idiot as I didn’t think to check github!

I can confirm the 1.12.1 update has fixed this problem. Many thanks @OttoWinter for the very quick fix!