Capteur CO² + affichage led adressable

Bonjour,

Je cherche toujours à améliorer mon capteur CO² + température + hygrométrie + pression.
la partie précision est atteinte avec l’intégration d’un écran I2C de 0.96" 128 x 64 qui permet un affichage rapide et complet des 4 variables.
Mais à plus d’un mètre, c’est pas lisible.
J’ai donc rajouté une LED PL9823. C’est une led unique, transparente mais c’est une LED adressable qui se comporte comme un ruban LED WS2812, avec une alim en 5V et data in et data out.

sensor:
  - platform: mhz19
    co2:
      name: "Valeur CO² $long_devicename"
      id: mhz19_co2
      on_value_range:

#        - above: 400
        - below: 899
          then:
          - light.addressable_set:
              id: status_light # Green
              red: 0%
              green: 100%
              blue: 0%

        - above: 900
          below: 1499
          then:
          - light.addressable_set:
              id: status_light # Yellow
              red: 100%
              green: 100%
              blue: 0%

        - above: 1500
          below: 2199
          then:
          - light.addressable_set:
              id: status_light # Orange
              red: 100%
              green: 50%
              blue: 0%

        - above: 2200
          then:
          - light.addressable_set:
              id: status_light # Red
              red: 100%
              green: 0%
              blue: 0% 

light:
  - platform: neopixelbus
    name: "Status Light $long_devicename"
    pin: GPIO12   # pin d6
    variant: WS2812
    id: status_light
    num_leds: 1
    type: rgb

Mais la led ne fonctionne pas bien.
au boot elle reste éteinte, je dois aller l’allumer par l’intermédiaire du serveur web intégré ou depuis HA.
ensuite, une fois allumée, elle changera de couleur en fonction de l’état de la valeur du CO².

en attendant, j’ai créé une automatisation, mais ce que je souhaite c’est que ca marche même offline.

alias: Gestion de la LED d'affichage du niveau de Dioxyde de Carbone.
description: ""
trigger:
  - platform: time_pattern
    seconds: "15"
condition: []
action:
  - choose:
      - conditions:
          - type: is_carbon_dioxide
            condition: device
            device_id: 2e2cfeecc66e62b05054472e9e8c1a38
            entity_id: sensor.valeur_co2_capteur
            domain: sensor
            below: 900
        sequence:
          - service: light.turn_on
            data:
              brightness: 127
              rgb_color:
                - 0
                - 249
                - 0
            target:
              device_id: 2e2cfeecc66e62b05054472e9e8c1a38
              entity_id: light.status_light_capteur
      - conditions:
          - type: is_carbon_dioxide
            condition: device
            device_id: 2e2cfeecc66e62b05054472e9e8c1a38
            entity_id: sensor.valeur_co2_capteur
            domain: sensor
            above: 900
            below: 1500
        sequence:
          - service: light.turn_on
            data:
              rgb_color:
                - 255
                - 255
                - 65
              brightness: 126
            target:
              device_id: 2e2cfeecc66e62b05054472e9e8c1a38
              entity_id: light.status_light_capteur
      - conditions:
          - type: is_carbon_dioxide
            condition: device
            device_id: 2e2cfeecc66e62b05054472e9e8c1a38
            entity_id: sensor.valeur_co2_capteur
            domain: sensor
            above: 1500
            below: 2200
        sequence:
          - service: light.turn_on
            data:
              rgb_color:
                - 255
                - 149
                - 0
              brightness: 126
            target:
              device_id: 2e2cfeecc66e62b05054472e9e8c1a38
              entity_id: light.status_light_capteur
      - conditions:
          - type: is_carbon_dioxide
            condition: device
            device_id: 2e2cfeecc66e62b05054472e9e8c1a38
            entity_id: sensor.valeur_co2_capteur
            domain: sensor
            above: 2200
            below: 8000
        sequence:
          - service: light.turn_on
            data:
              rgb_color:
                - 255
                - 0
                - 0
              brightness: 126
            target:
              device_id: 2e2cfeecc66e62b05054472e9e8c1a38
              entity_id: light.status_light_capteur
    default: []
mode: single

Depuis que j’ai mis le restore_mode: ALWAYS_ON la Led s’allume toujours au boot, mais elle reste en blanc.
il faut que le taux de CO² passe au dessus de 900 pour qu’elle passe au jaune, ensuite elle repasse au vert et continue à fonctionner normalement.
comment allumer correctement cette led ??? mystère…

Si vous avez des idées, je sèche depuis un bon mois là-dessus. :hot_face:

Je voulais mettre un bleu clair pendant le boot ou si la valeur du CO² était trop basse, mais le plancher de mesure de ce capteur est de 400 ppm, et en ce moment dans Paname, le taux est inférieur à 400 ppm, ce qui fait que le capteur reste scotché à 400 et il faut que je lui crache ma respiration en pleine face pour qu’il trouve quelque chose.

Voici une petite photo du breadboard, en attendant la finalisation complète de l’engin.

Salut,

Je dirais, enlève l’automatisation.
Et allume la led dans espHome.
Là on dirait que tu ne fais que changer la couleur suivant la valeur de ton capteur, mais nulle part tu l’allumes. Dans les YAML du de espHome, au niveau du « light » tu devrais pouvoir ajouter quelque chose pour qu’elle soit allumée par défaut, non.?
ou alors ajouter un « light.turn_on » dans tes « on_value_range »

J’ai essayé pour mettre le light.turn_on, mais au niveau des on_value_range, je vois pas trop ou le mettre pour qu’il soit pris sans mettre la grouille…

alors, j’ai rusé:

time:
  - platform: homeassistant
    id: homeassistant_time
    #essai allumage led
    on_time_sync:
      then:
        - light.turn_off:
            id: status_light # Eteint
        - light.turn_on:
            id: status_light # Blue
            red: 0%
            green: 0%
            blue: 100%
            color_brightness: 20%

comme la synchro de l’heure doit se faire assez vite au boot, ca marche comme ca.
comme c’est allumé en bleu, ca me dit bien dans quelle boucle je suis.
je crois que je vais carrément remplacer mes light.addressable_set par des light.turn_on

@bentou
j’ai plusieurs capteurs sous esphome qui doivent donner une indication locale avec une led comme tu le fait. Pour que la led s’allume au démarrage je la parametre comme ça :

esphome:
  # ...
  on_boot:
    # ...
    then:
    on_turn_on:
        - light.addressable_set:
           id: status_light
           red: 50%
           green 0%
           blue: 50%
        - light.turn_on:
            id: status_light

light:
  - platform: neopixelbus
    name: "Status  $devicename"
    pin: GPIO0  # D3
    variant: WS2812
    id: status_light
    num_leds: 1
    type: rgb

ensuite le capteur commute la couleur qui vas bien lors de sa mise a jour

Merci, j’ai essayé tes modifs, mais:

le on_turn_on me fais des misères:

INFO Reading configuration /config/esphome/esp8266mod-12f.yaml...
INFO Detected timezone 'Europe/Paris'
Failed config

esphome: None
  name: esp8266mod-12f
  comment: Detecteur CO² Salon
  on_boot: 
    then: 
    
    [on_turn_on] is an invalid option for [on_boot]. Please check the indentation.

alors je l’ai commenté:

esphome:
  name: $devicename
  platform: ESP8266
  board: nodemcuv2
  comment: $long_devicename
  on_boot:
    # Allumage de la led
    then:
#    on_turn_on:
      - light.addressable_set:
          id: status_light
          red: 50%
          green: 0%
          blue: 50%
          color_brightness: 40%
      - light.turn_on:
          id: status_light
            
wifi:
  ssid: !secret wifi_ssid

ca s’allume bien au boot, mais la couleur met pas mal de temps pour passer au vert… certaines fois, plus d’une heure…
je ne vois plus qu’un souci de capteur…

et pour cause ! une erreur de copier coller manifestement :confused:
il faut bien l’enlever.

bizarre quand même cette histoire de capteur qui met du temps a répondre, je ne sais plus si on peu forcer l’actualisation des capteurs avec esp_home.
j’attends un mhz19 pour bientôt, je verrai si il me fait la même chose que toi.

Je suis en train de monter un second module avec les mêmes capteurs (ath10 bme280 mh-z19) mais sur une plaque perforée.
celui sur le breadboard me permettra de tester avec un autre ESP (ESP32 ?) ou avec un capteur différent…
pour l’instant, j’ai un AZ-Delivery ESP8266MOD 12-F

J’ai testé un second montage.
Le fichier de configuration est le même (sauf pour le nom et les mots de passe api et oth).
Les composants sont les mêmes.
L’erreur est exactement la même.
Il est impératif que le on_value_range change de range pour afficher correctement la couleur.

Alors, j’ai rajouté un changement de range, avec la même couleur, histoire de provoquer plus de changements, donc plus de réactualisation.
ca a l’air de mieux marcher, même si ce n’est pas parfait dans toutes les situations. pour l’instant, l’air extérieur est près de la limite basse de 400ppm, donc on change facilement de range. durant l’année, le taux de base doit changer surtout à Paname… :melting_face:
en plus, lors de reboot, il arrive que le capteur se mette à 500ppm, je pense qu’il s’agit d’une auto-calibration qui peur arriver toute les 24h d’après ce que j’ai compris.

sensor:
  - platform: uptime
    id: uptime_sec
  - platform: mhz19
    co2:
      name: "Valeur CO² $long_devicename"
      id: mhz19_co2
      on_value_range:

        - below: 401
          then:
          - light.addressable_set:
              id: voyant_led
              red: 0%
              green: 100%
              blue: 0%

        - above: 401
          below: 899
          then:
          - light.addressable_set:
              id: voyant_led
              red: 0%
              green: 100%
              blue: 0%

        - above: 900
          below: 1499
          then:
          - light.addressable_set:
              id: voyant_led # Yellow
              red: 100%
              green: 100%
              blue: 0%

        - above: 1500
          below: 2199
          then:
          - light.addressable_set:
              id: voyant_led # Orange
              red: 100%
              green: 50%
              blue: 0%

        - above: 2200
          then:
          - light.addressable_set:
              id: voyant_led # Red
              red: 100%
              green: 0%
              blue: 0% 

    temperature:
      name: "Temperature MH-Z19 $long_devicename"
    automatic_baseline_calibration: false
    uart_id: uart_mhz19
    id: mhz19_calibration
    update_interval: 60s
    

Il n’empêche que je ne suis pas loin de penser que c’est un bug…

C’est possible que les valuers ne changent âs si rapidement que ça.
Mais si c’est le cas, tu peux rajouter toujours dans le on_boot, simplement une logique qui va explicitement lire la valeur et appliquer la bonne couleur.

Ben, pour moi, le ninja2 c’est du chinois…

je recopie des exemples et si ca passe à la compilation, ca doit marcher…

dans la config yaml, je ne vois que des modules, il n’y a pas l’air d’y avoir réellement d’ordre d’exécution. alors je suis un peu paumé…
il faut que je déplace tout la selection on_value_range dans le on_boot ?

Ca tombe ben dans ESPhome y’a pas de jinja2 :wink:
Les lambda c’est du C.

Le Yaml ce n’est effectivement pas un script procédural, mais une définition de capteurs et de modules. Et c’est justement avec les trigger « on_… » que tu ajoutes la logique.

Un moyen de faire ça, c’est de définir un « script » (voir doc) qui s’occupe de lire la valeur du capter et met à jour la couleur. Et du coup tu appelles ce script à chaque fois que tu veux.
Ca change pas mal ton Yaml mais c’est pas mal.

Bon ensuite là ton souci c’est au démarrage de l’esp que tu dois attendre en peu. Je suppose que ton tu comptes le laisser tourner H24… donc ça ne devrait pas être un gros souci d’avoir une couleur de led par défaut pendant quelques minutes, si ensuite tu ne l’éteints pas pendant des jours ou semaines.

Bonjour,

Je déterre ce post car j’ai le même problème.

Il semble que le " on_value_range:" ne s’actualise que quand le capteur passe d’une « range » à une autre. donc si on allume le montage et que la valeur ne sort jamais de sa range de départ, rien ne s’allume et ça peut durer longtemps. la position semble sauvegarder ensuite pour les démarrages suivants mais pour les premières connections ce n’est pas top.

D’autant que j’essaie d’utiliser une bandes de 10 leds adressables pour faire une jauge qui change de couleur (du vert au rouge) au fur et à mesure qu’elle monte.

Là elle est tout bonnement éteinte …

En plus j’ai 5 capteurs sur mon montage et certains sont carrément pas facile à tromper (TVOC et formaldéhyde par exemple) donc pas facile de voir s’allumer les leds pour la première fois. Du coup je ne sais pas si ça fonctionne ou pas …

Donc ma question c’est comment initialiser ce programme pour qu’à l’allumage il y se passe quelque chose…

Merci par avance.

Philippe

A+