Sous ESPHOME modifier la valeur d'un sensor en fonction de sa disponibilité

Bonjour,

Sous ESPHOME, j’aimerai donner à un sensor importé de HOAS sa valeur numérique et lorsqu’il se déconnecte une valeur par défaut (en l’occurrence 19).

Voici ce que j’ai entré :

- platform: homeassistant
    entity_id: sensor.esphome_web_efcdb4_temp_salon
    name: "t_amb2"
    id: t_amb2
    unit_of_measurement: °C    
    filters: 
       - lambda: |-
          if (x == NAN) {return 19;} else {return x;} 

Quoi qu’il arrive, j’ai toujours la valeur 19.
Après de nombreux essais, sensor.esphome_web_efcdb4_temp_salon et toujours considéré comme NAN. Même si par exemple je remplace == par !=.
Est-ce que j’ai oublié quelque chose ?

Merci
Bonne soirée

Ma configuration


System Information

version core-2024.8.3
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.4
os_name Linux
os_version 6.6.46-haos
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.34.0
Stage running
Available Repositories 1453
Downloaded Repositories 5
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 13.1
update_channel stable
supervisor_version supervisor-2024.08.0
agent_version 1.6.0
docker_version 26.1.4
disk_total 98.7 GB
disk_used 24.6 GB
healthy true
supported true
host_connectivity true
supervisor_connectivity true
ntp_synchronized true
virtualization kvm
board generic-aarch64
supervisor_api ok
version_api ok
installed_addons ESPHome (2024.7.3), File editor (5.8.0), Mosquitto broker (6.4.1), Let’s Encrypt (5.1.1), WireGuard (0.10.2), Advanced SSH & Web Terminal (18.0.0), Zigbee2MQTT (1.40.0-1), Studio Code Server (5.15.0)
Dashboards
dashboards 4
resources 2
views 6
mode storage
Recorder
oldest_recorder_run 30 août 2024 à 11:42
current_recorder_run 1 septembre 2024 à 09:15
estimated_db_size 854.91 MiB
database_engine sqlite
database_version 3.45.3
___

Bonjour,
tu est sur de l’état NAN ?
en génaral c’est unavailable ou unknown

test ce lambda:

filters:
  - lambda: |-
      if (x == NAN) return 19;
      return x;

Bonjour WarC0zes,
Je viens de tester ton code, mais j’ai exactement la même chose, c’est à dire une recopie conforme quand il y a communication avec HAOS et indisponible quand il n’y en a plus.
Merci tout de même.

Vérifie le nom de l’état de ton sensor dans outils de devellopement et état.
en génaral c’est unavailable ou unknown, quand il est plus disponible.

Bonjour WarC0ozes,
Effectivement si je débranche mo capteur, son état devient « unkwon ».
Par contre je ne peux pas écrire cette état en lambda dans le YAML, il me sort une erreur lors de la compilation.

Avec ce lambda ?

    filters: 
       - lambda: |-
          if (id(t_amb2).state == "unknown") {
            return 19;
          } else {
            return x;
          }

Ça aurait été utile de mettre ton erreur, ça aide :wink:

Aïe :

INFO ESPHome 2024.7.3
INFO Reading configuration /config/esphome/esphome-web-c45ed4.yaml...
WARNING GPIO5 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
INFO Generating C++ source...
INFO Compiling app...
Processing esphome-web-c45ed4 (board: esp32dev; framework: arduino; platform: platformio/espressif32@5.4.0)
--------------------------------------------------------------------------------
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
 - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
Dependency Graph
|-- AsyncTCP-esphome @ 2.1.3
|-- WiFi @ 2.0.0
|-- FS @ 2.0.0
|-- Update @ 2.0.0
|-- ESPAsyncWebServer-esphome @ 3.2.2
|-- DNSServer @ 2.0.0
|-- ESPmDNS @ 2.0.0
|-- Wire @ 2.0.0
|-- ArduinoJson @ 6.18.5
|-- Improv @ 1.2.3
Compiling .pioenvs/esphome-web-c45ed4/src/main.cpp.o
/config/esphome/esphome-web-c45ed4.yaml: In lambda function:
/config/esphome/esphome-web-c45ed4.yaml:255:25: error: invalid operands of types 'float' and 'const char [8]' to binary 'operator=='
           if (id(t_amb2).state == "unknown") {
           ~~~~~~~~~~~~~~^~~~~~~~~~~~
/config/esphome/esphome-web-c45ed4.yaml:260:3: warning: control reaches end of non-void function [-Wreturn-type]
     # filters:
   ^
*** [.pioenvs/esphome-web-c45ed4/src/main.cpp.o] Error 1
========================= [FAILED] Took 15.47 seconds =========================

Je crois que je vais de voir chercher une autre solution.
Merci WarCozes

le name et id, identique pas sur .

    name: "t_amb2"
    id: temp_amb2
    filters: 
       - lambda: |-
          if (id(temp_amb2).state == unknown) {
            return 19;
          } else {
            return x;
          }

edit:

error: invalid operands of types 'float' and 'const char [8]' to binary 'operator=='

Tu as bien mis ton sensor de home assistant dans la parti sensor: de esphome. L’erreur parle de binary ???

sensor:
  - platform: homeassistant
    entity_id: sensor.esphome_web_efcdb4_temp_salon
    name: "t_amb2"
    id: temp_amb2
    unit_of_measurement: °C    

Oui, t_amb2 est bien dans la partie sensor.
En ce qui concerne les name et id, je mets toujours les mêmes pour éviter les erreurs.
Je refais des essais ce soir.
Merci WarC0zes.

J’ai pas récupéré les logs, mais esphome ne veut pas de unknow.
Merci de ton aide.

Bonsoir @Defre79
Bien lire notre ami @WarC0zes, unknown avec un n, ou c’est une erreur dans ta réponse…

Avec simple quote peut être :wink:

if (id(t_amb2).state == 'unknown') {

Bob

1 « J'aime »

Bonjour Bob,
Bien vu, j’avais pas vu.
Je test ça.

Bon ben c’est pas mieux, j’ai créer 2 nouvelles entrées :
t_amb3 avec unknown et t_amp4 avec ‹ unknown ›
Mais :

INFO ESPHome 2024.7.3
INFO Reading configuration /config/esphome/esphome-web-0bf858.yaml...
WARNING GPIO5 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
INFO Generating C++ source...
INFO Compiling app...
Processing esphome-web-0bf858 (board: esp32dev; framework: arduino; platform: platformio/espressif32@5.4.0)
--------------------------------------------------------------------------------
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
 - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
Dependency Graph
|-- AsyncTCP-esphome @ 2.1.3
|-- WiFi @ 2.0.0
|-- FS @ 2.0.0
|-- Update @ 2.0.0
|-- ESPAsyncWebServer-esphome @ 3.2.2
|-- DNSServer @ 2.0.0
|-- ESPmDNS @ 2.0.0
|-- Wire @ 2.0.0
|-- ArduinoJson @ 6.18.5
|-- Improv @ 1.2.3
Compiling .pioenvs/esphome-web-0bf858/src/main.cpp.o
/config/esphome/esphome-web-0bf858.yaml:293:27: warning: character constant too long for its type
             if (id(t_amb).state == 'unknown') {return 19;} else {return 20;}
                           ^~~~~~~~~
/config/esphome/esphome-web-0bf858.yaml: In lambda function:
/config/esphome/esphome-web-0bf858.yaml:282:27: error: 'unknown' was not declared in this scope
             if (id(t_amb).state == unknown) {return 19;} else {return 20;}
                           ^~~~~~~
/config/esphome/esphome-web-0bf858.yaml:282:27: note: suggested alternative: 'union'
             if (id(t_amb).state == unknown) {return 19;} else {return 20;}
                           ^~~~~~~
                           union
/config/esphome/esphome-web-0bf858.yaml:283:3: warning: control reaches end of non-void function [-Wreturn-type]
 
   ^
*** [.pioenvs/esphome-web-0bf858/src/main.cpp.o] Error 1
========================= [FAILED] Took 15.43 seconds =========================

Merci pour vos efforts.
Je crois que je vais raccorder une sonde de temp ambiante directement sur mon ESP.
Il faut que je vois qu’elle sonde utiliser pour une quinzaine de mètres de câble.

Bonjour,
J’ai enfin trouvé en lisant le sujet de @Scorpix sur son tracker solaire (très intéressant). Tracker solaire DIY perturbé par perte Wifi
Ca fonctionne très bien.
Merci à lui.
Bon courage pour ton tracker, mes connaissances étant assez sommaire.

  - platform: homeassistant
    entity_id: sensor.esphome_web_efcdb4_temp_salon
    name: "t_amb2"
    id: t_amb2
    unit_of_measurement: °C
  - platform: template
    name: "t_amb"
    update_interval: 5s
    id: t_amb
    unit_of_measurement: °C
  #Si perte signal t_amb2, t_amb affiche 19.
    lambda: |-
      if(isnan(id(t_amb2).state)){return 19;} else {return id(t_amb2).state;}

Bonne journée.

1 « J'aime »