ESPHome Lambda isnan

Hallo,

ich dachte ich versuche es mal hier.
Ich habe einen Sensor der derzeit nicht immer möchte, da ich derzeit aber weder Zeit noch Lust habe das löttechnisch zu beheben, und so oder so die Sensordaten gern abfangen möchte.

Das läuft derzeit allerdings scheinbar so noch gar nicht wirklich.

Kann mir jemand verraten was da angepasst werden müsste? Ich möchte gern, wenn der Sensor “NAN”-Werte liefert einen Ersatzwert ausgeben / bzw. setzen.

- platform: bh1750
    i2c_id: bus1
    address: 0x23
    name: "Helligkeit"
    filters:
      - multiply: 2.0
    id: Helligkeit
    update_interval: 5s
    on_raw_value:
      - if:
          condition:
            - lambda: 'return (std::isnan(id(Helligkeit).state));'
          then:
            - lambda: 'id(Helligkeit).publish_state(6.66);'
            - lambda: 'ESP_LOGI("main", "Testausgabe", id(Helligkeit).state);'
1 „Gefällt mir“

Mit nem Ersatzwert … gute Frage Ich filter einfach die NAN Werte aus, sprich dann bleibt der Sensor auf dem zuletzt gültigen Wert.

filters:
  - filter_out:nan

Hallo justone,

das möchte ich eben nicht. Was passiert bei einem Neustart des ESP?

Musst du ja nicht, war ne einfache Lösung, die Frage ist halt immer was mehr stört, das ausbleiben eines Wertes den du alle 5s erwartest. Jeden Wert den du da als Ersatzwert nimmst ist auch nicht viel besser als keiner.
Neustart? Machen die meisten meiner ESPs gezielt 1x am Tag und bisher starten die immer durch und die Sensoren liefern wie gewollt wieder Werte.

Und nach dem Neustart würde “nan” weiter ausgefiltert und der letzte Wert würde weiter gesendet?
Meiner Meinung nach nicht.
Die Filterfunktion hatte ich mir dafür schon angeschaut und genau aus diesem Grund verworfen.
Und da derzeit eben entweder der ESP und / oder mein Sensormodul Probleme machen, ist das ein super Zeitpunkt um solche Fehler zukünftig abzufangen.

Also, ich habe den Code nun ausgiebig getestet und auch die entsprechende Platine gefixt um dort den Betrieb zu testen und es läuft.
Damit alle etwas haben hier meine Lösung für den Sensorausfall:

###########################
##### Timer festlegen #####
interval:
##### Sensorausfall Helligkeit abfangen #####
  - interval: 5s
    then:
      if:
        condition:
          - lambda: 'return (std::isnan(id(Helligkeit).state));'
        then:
          - lambda: 'id(Helligkeit).publish_state(3.3);'

Zukünftig könnte ich noch den Sensorausfall melden oder ähnliches.
Für meinen einfachen Fall, dass die Grundfunktion noch gegeben ist reicht mir das vorerst aber.
Normal sollten die Sensoren ja auch gehen, nur ist das löten eines BH1750 eben auch nicht ganz einfach. :wink: