Capteur CO² senseair S8 sous esphome

Bonjour,

je cherche a faire un détecteur de CO² avec ESPHome, un ESP8266MOD 12-F et un SenseAir S8
mais je rencontre un problème entre la connexion du capteur et l’esp… (remarquez, y’a que ca à relier…)

[12:17:00][E][uart:015]: Reading from UART timed out at byte 0!

[12:16:20][I][app:102]: ESPHome version 2022.6.2 compiled on Jul  6 2022, 12:15:34
[12:16:20][C][wifi:491]: WiFi:
[12:16:20][C][wifi:353]:   Local MAC: AC:0B:FB:D6:43:FC
[12:16:20][C][wifi:354]:   SSID: [redacted]
[12:16:20][C][wifi:355]:   IP Address: 192.168.92.175
[12:16:20][C][wifi:356]:   BSSID: [redacted]
[12:16:20][C][wifi:358]:   Hostname: 'esp8266mod-12f'
[12:16:20][C][wifi:360]:   Signal strength: -55 dB ▂▄▆█
[12:16:20][C][wifi:364]:   Channel: 5
[12:16:20][C][wifi:365]:   Subnet: 255.255.255.0
[12:16:20][C][wifi:366]:   Gateway: 192.168.92.20
[12:16:20][C][wifi:367]:   DNS1: 192.168.92.1
[12:16:20][C][wifi:368]:   DNS2: 0.0.0.0
[12:16:20][C][logger:275]: Logger:
[12:16:20][C][logger:276]:   Level: DEBUG
[12:16:20][C][logger:277]:   Log Baud Rate: 115200
[12:16:20][C][logger:278]:   Hardware UART: UART0
[12:16:20][C][uart.arduino_esp8266:102]: UART Bus:
[12:16:20][C][uart.arduino_esp8266:103]:   TX Pin: GPIO4
[12:16:20][C][uart.arduino_esp8266:104]:   RX Pin: GPIO5
[12:16:20][C][uart.arduino_esp8266:106]:   RX Buffer Size: 256
[12:16:20][C][uart.arduino_esp8266:108]:   Baud Rate: 9600 baud
[12:16:20][C][uart.arduino_esp8266:109]:   Data Bits: 8
[12:16:20][C][uart.arduino_esp8266:110]:   Parity: NONE
[12:16:20][C][uart.arduino_esp8266:111]:   Stop bits: 1
[12:16:20][C][uart.arduino_esp8266:115]:   Using software serial
[12:16:20][C][uptime.sensor:031]: Uptime Sensor 'Detecteur CO2 + Leds Allumé depuis (s)'
[12:16:20][C][uptime.sensor:031]:   State Class: 'total_increasing'
[12:16:20][C][uptime.sensor:031]:   Unit of Measurement: 's'
[12:16:20][C][uptime.sensor:031]:   Accuracy Decimals: 0
[12:16:20][C][uptime.sensor:031]:   Icon: 'mdi:timer-outline'
[12:16:20][C][template.text_sensor:021]: Template Sensor 'Detecteur CO2 + Leds Allumé depuis (j)'
[12:16:20][C][template.text_sensor:021]:   Icon: 'mdi:clock-start'
[12:16:20][C][template.switch:058]: Template Switch 'Calibration Detecteur CO2 + Leds'
[12:16:20][C][template.switch:059]:   Restore State: NO
[12:16:20][C][template.switch:060]:   Optimistic: YES
[12:16:20][C][switch.gpio:050]: GPIO Switch 'Voyant vert'
[12:16:20][C][switch.gpio:050]:   Icon: 'mdi:led-on'
[12:16:20][C][switch.gpio:051]:   Pin: GPIO14
[12:16:20][C][switch.gpio:073]:   Restore Mode: Restore (Defaults to OFF)
[12:16:20][C][switch.gpio:050]: GPIO Switch 'Voyant jaune'
[12:16:20][C][switch.gpio:050]:   Icon: 'mdi:led-on'
[12:16:20][C][switch.gpio:051]:   Pin: GPIO12
[12:16:20][C][switch.gpio:073]:   Restore Mode: Restore (Defaults to OFF)
[12:16:20][C][switch.gpio:050]: GPIO Switch 'Voyant rouge'
[12:16:20][C][switch.gpio:050]:   Icon: 'mdi:led-on'
[12:16:20][C][switch.gpio:051]:   Pin: GPIO13
[12:16:20][C][switch.gpio:073]:   Restore Mode: Restore (Defaults to OFF)
[12:16:20][C][homeassistant.time:010]: Home Assistant Time:
[12:16:20][C][homeassistant.time:011]:   Timezone: 'CET-1CEST,M3.5.0,M10.5.0/3'
[12:16:20][C][status:034]: Status Binary Sensor 'Statut Detecteur CO2 + Leds'
[12:16:20][C][status:034]:   Device Class: 'connectivity'
[12:16:20][C][adc:073]: ADC Sensor 'Tension alim. Detecteur CO2 + Leds'
[12:16:20][C][adc:073]:   Device Class: 'voltage'
[12:16:20][C][adc:073]:   State Class: 'measurement'
[12:16:20][C][adc:073]:   Unit of Measurement: 'V'
[12:16:20][C][adc:073]:   Accuracy Decimals: 2
[12:16:20][C][adc:076]:   Pin: VCC
[12:16:20][C][adc:105]:   Update Interval: 60.0s
[12:16:20][C][mhz19:094]: MH-Z19:
[12:16:20][C][mhz19:095]:   CO2 'test CO2'
[12:16:20][C][mhz19:095]:     Device Class: 'carbon_dioxide'
[12:16:20][C][mhz19:095]:     State Class: 'measurement'
[12:16:20][C][mhz19:095]:     Unit of Measurement: 'ppm'
[12:16:20][C][mhz19:095]:     Accuracy Decimals: 0
[12:16:20][C][mhz19:095]:     Icon: 'mdi:molecule-co2'
[12:16:20][C][mhz19:096]:   Temperature 'test Temperature from CO2 sensor'
[12:16:20][C][mhz19:096]:     Device Class: 'temperature'
[12:16:20][C][mhz19:096]:     State Class: 'measurement'
[12:16:20][C][mhz19:096]:     Unit of Measurement: '°C'
[12:16:20][C][mhz19:096]:     Accuracy Decimals: 0
[12:16:20][C][mhz19:102]:   Automatic baseline calibration disabled on boot
[12:16:20][C][version.text_sensor:021]: Version Text Sensor 'ESPHome Version Detecteur CO2 + Leds'
[12:16:20][C][version.text_sensor:021]:   Icon: 'mdi:new-box'
[12:16:20][C][restart:022]: Restart Switch 'Redémarrage Detecteur CO2 + Leds'
[12:16:20][C][restart:022]:   Icon: 'mdi:restart'
[12:16:20][C][captive_portal:088]: Captive Portal:
[12:16:20][C][web_server:125]: Web Server:
[12:16:20][C][web_server:126]:   Address: esp8266mod-12f.local:80
[12:16:20][C][mdns:084]: mDNS:
[12:16:20][C][mdns:085]:   Hostname: esp8266mod-12f
[12:16:21][C][ota:085]: Over-The-Air Updates:
[12:16:21][C][ota:086]:   Address: esp8266mod-12f.local:8266
[12:16:21][C][ota:089]:   Using Password.
[12:16:21][C][api:138]: API Server:
[12:16:21][C][api:139]:   Address: esp8266mod-12f.local:6053
[12:16:21][C][api:141]:   Using noise encryption: YES
[12:16:21][C][wifi_signal.sensor:009]: WiFi Signal 'Signal Wifi Detecteur CO2 + Leds'
[12:16:21][C][wifi_signal.sensor:009]:   Device Class: 'signal_strength'
[12:16:21][C][wifi_signal.sensor:009]:   State Class: 'measurement'
[12:16:21][C][wifi_signal.sensor:009]:   Unit of Measurement: 'dBm'
[12:16:21][C][wifi_signal.sensor:009]:   Accuracy Decimals: 0
[12:16:21][C][wifi_info:009]: WifiInfo IPAddress 'IP Detecteur CO2 + Leds'
[12:16:21][C][wifi_info:011]: WifiInfo SSID 'SSID Detecteur CO2 + Leds'
[12:16:21][C][wifi_info:012]: WifiInfo BSSID 'BSSID Detecteur CO2 + Leds'
[12:16:30][D][api:102]: Accepted 192.168.92.25
[12:16:30][D][api.connection:861]: Home Assistant 2022.6.7 (192.168.92.25): Connected successfully
[12:16:30][D][time:041]: Synchronized time: 2022-07-06 12:16:30
[12:16:39][D][sensor:124]: 'Tension alim. Detecteur CO2 + Leds': Sending state 2.88281 V with 2 decimals of accuracy
[12:17:00][E][uart:015]: Reading from UART timed out at byte 0!
[12:17:00][W][mhz19:034]: Reading data from MHZ19 failed!
[12:17:02][D][sensor:124]: 'Signal Wifi Detecteur CO2 + Leds': Sending state -62.00000 dBm with 0 decimals of accuracy
[12:17:03][D][text_sensor:067]: 'Detecteur CO2 + Leds Allumé depuis (j)': Sending state '0d 0h 0m 9s'
[12:17:04][D][sensor:124]: 'Detecteur CO2 + Leds Allumé depuis (s)': Sending state 64.42900 s with 0 decimals of accuracy
[12:17:39][D][sensor:124]: 'Tension alim. Detecteur CO2 + Leds': Sending state 2.87695 V with 2 decimals of accuracy
[12:18:00][E][uart:015]: Reading from UART timed out at byte 0!
[12:18:00][W][mhz19:034]: Reading data from MHZ19 failed!
[12:18:02][D][sensor:124]: 'Signal Wifi Detecteur CO2 + Leds': Sending state -59.00000 dBm with 0 decimals of accuracy
[12:18:03][D][text_sensor:067]: 'Detecteur CO2 + Leds Allumé depuis (j)': Sending state '0d 0h 1m 4s'
[12:18:04][D][sensor:124]: 'Detecteur CO2 + Leds Allumé depuis (s)': Sending state 124.42900 s with 0 decimals of accuracy

coté config j’ai commencé comme çà:

substitutions:
  devicename: esp8266mod-12f
  long_devicename: Detecteur CO2 + Leds
  
esphome:
  name: $devicename
  platform: ESP8266
  board: nodemcuv2
  comment: $long_devicename

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  power_save_mode: light
  ap:
    ssid: $devicename
    password: !secret ap_password

captive_portal:
  
api:
  encryption:
    key: "gO+MAvMQFep4Bz9NX4bDV5DfSEMpHnuUF44Z2JhYeCE="
  # service definition to force manual zero calibration from HA
  services:
    - service: esp99test_mhz19_calibrate_zero
      then:
        - mhz19.calibrate_zero: esp99_co2

ota:
  password: "d518a90831038ca9c6f29808b36a669a"
  
# Enable Web server.
web_server:
  port: 80

logger:
#  baud_rate: 0
#  level: VERBOSE
    
binary_sensor:
# statut
  - platform: status
    name: "Statut $long_devicename"

sensor:
# Voltage de l'alimentation
  - platform: adc
    pin: VCC
    name: "Tension alim. $long_devicename"
# Qualité du signal
  - platform: wifi_signal
    name: "Signal Wifi $long_devicename"
    update_interval: 60s
# Temps de fonctionnement
  - platform: uptime
    name: "$long_devicename Allumé depuis (s)"
    id: uptime_sec
  - platform: mhz19
    co2:
      name: "test CO2"
    temperature:
      name: "test Temperature from CO2 sensor"
    update_interval: 60s
    automatic_baseline_calibration: false
    uart_id: uart_mhz19
    id: esp99_co2  
    
switch:
  # Bouton de redémarrage
  - platform: restart
    name: "Redémarrage $long_devicename"
  # switch configuration to turn calibration on/off
  - platform: template
    name: "Calibration $long_devicename"
    optimistic: true
    on_turn_on:
      mhz19.abc_enable: esp99_co2
    on_turn_off:
      mhz19.abc_disable: esp99_co2
  # Gestion des LED
  - platform: gpio    
    pin: GPIO14        #d5
    name: "Voyant vert"
    icon: "mdi:led-on"
  - platform: gpio
    pin: GPIO12        #d6
    name: "Voyant jaune"
    icon: "mdi:led-on"
  - platform: gpio
    pin: GPIO13        #d7
    name: "Voyant rouge"
    icon: "mdi:led-on"

uart:
  - rx_pin: GPIO05     #d1
    tx_pin: GPIO04     #d2
    baud_rate: 9600
    id: uart_mhz19

Bon, les leds ne sont pas encore gérées par la quantité de CO², mais il faut pour çà que je puisse la lire…
je vois bien la led infrarouge qui clignote dans le senseur, je vois des données passer du fil TX du capteur qui va sur le port d1 mais c’est pas lisible par un port série.

le paramétrage est issu du post de Maco65 dans Best CO2 sensor - #29 by Maco65 - Hardware - Home Assistant Community

mais je suis un peu bloqué…

Pour l’UART la règle de base s’applique (croiser/décroiser !). Essaye d’intervertir TV et RX dans le cablage :wink:

J’ai déjà essayé les inversions logicielles et matérielles, mêmes effets.
en mettant le fil rx de mon com sur la sortie tx du module, y’a de la vie… pas exploitable, des caractères bizares mais des infos arrivent.
je viens de remplacer le SenseAir S8 par un MH-Z19C, des fois que la définition du sensor:
platform: mhz19 soit trop pointilleuse…

mêmes erreurs…

[14:08:03][E][uart:015]: Reading from UART timed out at byte 0!
[14:08:03][W][mhz19:034]: Reading data from MHZ19 failed!
[14:08:05][D][sensor:124]: 'Signal Wifi Detecteur CO2 + Leds': Sending state -59.00000 dBm with 0 decimals of accuracy
[14:08:50][D][text_sensor:067]: 'Detecteur CO2 + Leds Allumé depuis (j)': Sending state '0d 0h 0m 48s'
[14:08:54][D][sensor:124]: 'Detecteur CO2 + Leds Allumé depuis (s)': Sending state 108.44400 s with 0 decimals of accuracy
[14:08:58][D][sensor:124]: 'Tension alim. Detecteur CO2 + Leds': Sending state 2.87988 V with 2 decimals of accuracy

Pour vérifier que mon câblage était bon, j’ai mis des led sur les ports destinés à l’uart, soit GPIO05/d1 et GPIO04/d2
les leds sont bien allumées et correspondent bien au tx et rx qui sont croisés avec le rx et tx du MH-Z19c.

J’ai repris les définitions pour coller au plus près du template MH-Z19 CO_2 and Temperature Sensor — ESPHome

api:
  # service definition to force manual zero calibration from HA
  services:
    - service: mhz19_calibrate_zero
      then:
        - mhz19.calibrate_zero: mhz19_id

sensor:
  - platform: mhz19
    co2:
      name: "MH-Z19 CO2 Value"
    temperature:
      name: "MH-Z19 Temperature"
    update_interval: 60s
    automatic_baseline_calibration: false
    uart_id: uart_mhz19
    id: mhz19_id  

switch:
  - platform: template
    name: "MH-Z19 ABC"
    optimistic: true
    on_turn_on:
      mhz19.abc_enable: mhz19_id
    on_turn_off:
      mhz19.abc_disable: mhz19_id

uart:
  - rx_pin: GPIO05     #d1
    tx_pin: GPIO04     #d2
    baud_rate: 9600
    id: uart_mhz19

Et … ca marche :partying_face:

INFO Reading configuration /config/esphome/esp8266mod-12f.yaml...
INFO Detected timezone 'Europe/Paris'
INFO Starting log output from esp8266mod-12f.local using esphome API
INFO Successfully connected to esp8266mod-12f.local
[16:26:42][I][app:102]: ESPHome version 2022.6.2 compiled on Jul  8 2022, 12:54:51
[16:26:43][C][wifi:491]: WiFi:
[16:26:43][C][wifi:353]:   Local MAC: AC:0B:BF:6D:43:FC
[16:26:43][C][wifi:354]:   SSID: [redacted]
[16:26:43][C][wifi:355]:   IP Address: 192.168.92.175
[16:26:43][C][wifi:356]:   BSSID: [redacted]
[16:26:43][C][wifi:358]:   Hostname: 'esp8266mod-12f'
[16:26:43][C][wifi:360]:   Signal strength: -48 dB ▂▄▆█
[16:26:43][C][wifi:364]:   Channel: 5
[16:26:43][C][wifi:365]:   Subnet: 255.255.255.0
[16:26:43][C][wifi:366]:   Gateway: 192.168.92.20
[16:26:43][C][wifi:367]:   DNS1: 192.168.92.1
[16:26:43][C][wifi:368]:   DNS2: 0.0.0.0
[16:26:43][C][logger:275]: Logger:
[16:26:43][C][logger:276]:   Level: DEBUG
[16:26:43][C][logger:277]:   Log Baud Rate: 115200
[16:26:43][C][logger:278]:   Hardware UART: UART0
[16:26:43][C][uart.arduino_esp8266:102]: UART Bus:
[16:26:43][C][uart.arduino_esp8266:103]:   TX Pin: GPIO4
[16:26:43][C][uart.arduino_esp8266:104]:   RX Pin: GPIO5
[16:26:43][C][uart.arduino_esp8266:106]:   RX Buffer Size: 256
[16:26:43][C][uart.arduino_esp8266:108]:   Baud Rate: 9600 baud
[16:26:43][C][uart.arduino_esp8266:109]:   Data Bits: 8
[16:26:43][C][uart.arduino_esp8266:110]:   Parity: NONE
[16:26:43][C][uart.arduino_esp8266:111]:   Stop bits: 1
[16:26:43][C][uart.arduino_esp8266:115]:   Using software serial
[16:26:43][C][uptime.sensor:031]: Uptime Sensor 'uptime_sec'
[16:26:43][C][uptime.sensor:031]:   State Class: 'total_increasing'
[16:26:43][C][uptime.sensor:031]:   Unit of Measurement: 's'
[16:26:43][C][uptime.sensor:031]:   Accuracy Decimals: 0
[16:26:43][C][uptime.sensor:031]:   Icon: 'mdi:timer-outline'
[16:26:43][C][template.text_sensor:021]: Template Sensor 'Detecteur CO2 MH-Z19c Allumé depuis (j)'
[16:26:43][C][template.text_sensor:021]:   Icon: 'mdi:clock-start'
[16:26:43][C][template.switch:058]: Template Switch 'Calibration Detecteur CO2 MH-Z19c'
[16:26:43][C][template.switch:059]:   Restore State: NO
[16:26:43][C][template.switch:060]:   Optimistic: YES
[16:26:43][C][switch.gpio:050]: GPIO Switch 'Voyant vert'
[16:26:43][C][switch.gpio:050]:   Icon: 'mdi:led-on'
[16:26:43][C][switch.gpio:051]:   Pin: GPIO14
[16:26:43][C][switch.gpio:073]:   Restore Mode: Restore (Defaults to OFF)
[16:26:43][C][switch.gpio:050]: GPIO Switch 'Voyant jaune'
[16:26:43][C][switch.gpio:050]:   Icon: 'mdi:led-on'
[16:26:43][C][switch.gpio:051]:   Pin: GPIO12
[16:26:43][C][switch.gpio:073]:   Restore Mode: Restore (Defaults to OFF)
[16:26:43][C][switch.gpio:050]: GPIO Switch 'Voyant rouge'
[16:26:43][C][switch.gpio:050]:   Icon: 'mdi:led-on'
[16:26:43][C][switch.gpio:051]:   Pin: GPIO13
[16:26:43][C][switch.gpio:073]:   Restore Mode: Restore (Defaults to OFF)
[16:26:43][C][switch.gpio:050]: GPIO Switch 'Voyant blanc'
[16:26:43][C][switch.gpio:050]:   Icon: 'mdi:led-on'
[16:26:43][C][switch.gpio:051]:   Pin: GPIO2
[16:26:43][C][switch.gpio:073]:   Restore Mode: Restore (Defaults to OFF)
[16:26:43][C][switch.gpio:050]: GPIO Switch 'Voyant bleu'
[16:26:43][C][switch.gpio:050]:   Icon: 'mdi:led-on'
[16:26:43][C][switch.gpio:051]:   Pin: GPIO15
[16:26:43][C][switch.gpio:073]:   Restore Mode: Restore (Defaults to OFF)
[16:26:43][C][homeassistant.time:010]: Home Assistant Time:
[16:26:43][C][homeassistant.time:011]:   Timezone: 'CET-1CEST,M3.5.0,M10.5.0/3'
[16:26:43][C][status:034]: Status Binary Sensor 'Statut Detecteur CO2 MH-Z19c'
[16:26:43][C][status:034]:   Device Class: 'connectivity'
[16:26:43][C][adc:073]: ADC Sensor 'Tension alim. Detecteur CO2 MH-Z19c'
[16:26:43][C][adc:073]:   Device Class: 'voltage'
[16:26:43][C][adc:073]:   State Class: 'measurement'
[16:26:43][C][adc:073]:   Unit of Measurement: 'V'
[16:26:43][C][adc:073]:   Accuracy Decimals: 2
[16:26:43][C][adc:076]:   Pin: VCC
[16:26:43][C][adc:105]:   Update Interval: 60.0s
[16:26:43][C][mhz19:094]: MH-Z19:
[16:26:43][C][mhz19:095]:   CO2 'Valeur CO² Detecteur CO2 MH-Z19c'
[16:26:43][C][mhz19:095]:     Device Class: 'carbon_dioxide'
[16:26:43][C][mhz19:095]:     State Class: 'measurement'
[16:26:43][C][mhz19:095]:     Unit of Measurement: 'ppm'
[16:26:43][C][mhz19:095]:     Accuracy Decimals: 0
[16:26:43][C][mhz19:095]:     Icon: 'mdi:molecule-co2'
[16:26:43][C][mhz19:096]:   Temperature 'Temperature Detecteur CO2 MH-Z19c'
[16:26:43][C][mhz19:096]:     Device Class: 'temperature'
[16:26:43][C][mhz19:096]:     State Class: 'measurement'
[16:26:43][C][mhz19:096]:     Unit of Measurement: '°C'
[16:26:43][C][mhz19:096]:     Accuracy Decimals: 0
[16:26:43][C][mhz19:102]:   Automatic baseline calibration disabled on boot
[16:26:43][C][version.text_sensor:021]: Version Text Sensor 'ESPHome Version Detecteur CO2 MH-Z19c'
[16:26:43][C][version.text_sensor:021]:   Icon: 'mdi:new-box'
[16:26:43][C][restart:022]: Restart Switch 'Redémarrage Detecteur CO2 MH-Z19c'
[16:26:43][C][restart:022]:   Icon: 'mdi:restart'
[16:26:43][C][captive_portal:088]: Captive Portal:
[16:26:43][C][web_server:125]: Web Server:
[16:26:43][C][web_server:126]:   Address: esp8266mod-12f.local:80
[16:26:43][C][mdns:084]: mDNS:
[16:26:43][C][mdns:085]:   Hostname: esp8266mod-12f
[16:26:43][C][ota:085]: Over-The-Air Updates:
[16:26:43][C][ota:086]:   Address: esp8266mod-12f.local:8266
[16:26:43][C][ota:089]:   Using Password.
[16:26:43][C][api:138]: API Server:
[16:26:43][C][api:139]:   Address: esp8266mod-12f.local:6053
[16:26:43][C][api:141]:   Using noise encryption: YES
[16:26:43][C][wifi_signal.sensor:009]: WiFi Signal 'Signal Wifi Detecteur CO2 MH-Z19c'
[16:26:43][C][wifi_signal.sensor:009]:   Device Class: 'signal_strength'
[16:26:43][C][wifi_signal.sensor:009]:   State Class: 'measurement'
[16:26:43][C][wifi_signal.sensor:009]:   Unit of Measurement: 'dBm'
[16:26:43][C][wifi_signal.sensor:009]:   Accuracy Decimals: 0
[16:26:43][C][wifi_info:009]: WifiInfo IPAddress 'IP Detecteur CO2 MH-Z19c'
[16:26:43][C][wifi_info:011]: WifiInfo SSID 'SSID Detecteur CO2 MH-Z19c'
[16:26:43][C][wifi_info:012]: WifiInfo BSSID 'BSSID Detecteur CO2 MH-Z19c'
[16:27:00][D][mhz19:057]: MHZ19 Received CO₂=574ppm Temperature=33°C Status=0x00
[16:27:00][D][sensor:124]: 'Valeur CO² Detecteur CO2 MH-Z19c': Sending state 574.00000 ppm with 0 decimals of accuracy
[16:27:00][D][sensor:124]: 'Temperature Detecteur CO2 MH-Z19c': Sending state 33.00000 °C with 0 decimals of accuracy
[16:27:00][D][sensor:124]: 'uptime_sec': Sending state 12700.63086 s with 0 decimals of accuracy
[16:27:03][D][text_sensor:067]: 'Detecteur CO2 MH-Z19c Allumé depuis (j)': Sending state '0d 3h 31m 40s'
[16:27:05][D][sensor:124]: 'Tension alim. Detecteur CO2 MH-Z19c': Sending state 2.87598 V with 2 decimals of accuracy
[16:27:26][D][sensor:124]: 'Signal Wifi Detecteur CO2 MH-Z19c': Sending state -50.00000 dBm with 0 decimals of accuracy

c’est cette ligne qui change tout:
[16:27:00][D][sensor:124]: ‹ Valeur CO² Detecteur CO2 MH-Z19c ›: Sending state 574.00000 ppm with 0 decimals of accuracy

Il ne me reste plus qu’à afficher les leds vert/jaune/rouge en fonction de la valeur détectée.

si qqn a un exemple, ca m’aiderait.
il me reste un paquet de ports dispo pour ajouter d’autres capteurs…

2 « J'aime »

Bon, pour les autres capteurs, je bloque…
la première config mhz19 / uart GPIO04-GPIO05 fonctionne bien (quoique il faut quelque fois des reboots pour que la com démarre entre le mhz19 et l’esp démarre).
dès que j’active le bus i2c GPIO09-GPIO10 l’esp n’arrive pas à booter, même si il n’y a rien de connecté sur le bus I2C.
au bout de 10 tentatives, il passe en mode sans echec, pour pouvoir modifier la conf.
Voila les logs

wdt reset
load 0x4010f000, len 3460, room 16 
tail 4
chksum 0xcc
load 0x3fff20b8, len 40, room 4 
tail 4
chksum 0xc9
csum 0xc9
v000858f0
~ld
[I][logger:243]: Log initialized
[C][ota:461]: There have been 8 suspected unsuccessful boot attempts.
[I][app:029]: Running through setup()...
[I][i2c.arduino:161]: Performing I2C bus recovery

 ets Jan  8 2013,rst cause:4, boot mode:(3,4)

wdt reset
load 0x4010f000, len 3460, room 16 
tail 4
chksum 0xcc
load 0x3fff20b8, len 40, room 4 
tail 4
chksum 0xc9
csum 0xc9
v000858f0
~ld
[I][logger:243]: Log initialized
[C][ota:461]: There have been 9 suspected unsuccessful boot attempts.
[I][app:029]: Running through setup()...
[I][i2c.arduino:161]: Performing I2C bus recovery

 ets Jan  8 2013,rst cause:4, boot mode:(3,4)

wdt reset
load 0x4010f000, len 3460, room 16 
tail 4
chksum 0xcc
load 0x3fff20b8, len 40, room 4 
tail 4
chksum 0xc9
csum 0xc9
v000858f0
~ld
[I][logger:243]: Log initialized
[C][ota:461]: There have been 10 suspected unsuccessful boot attempts.
[E][ota:468]: Boot loop detected. Proceeding to safe mode.
[I][app:029]: Running through setup()...
[C][wifi:037]: Setting up WiFi...
[D][wifi:373]: Starting scan...

et voila la conf qui bloque:

sensor:
  # MH-Z19 Analyseur de CO2
  - platform: mhz19
    co2:
      name: "Valeur CO² $long_devicename"
    temperature:
      name: "Temperature $long_devicename"
    automatic_baseline_calibration: false
    uart_id: uart_mhz19
    id: mhz19_id
    update_interval: 60s
  # SHT21 Capteur de temperature et de pression I²C
  - platform: htu21d
    temperature:
      name: "Temperature SHT21 $long_devicename"
    humidity:
      name: "Humidite SHT21 $long_devicename"
    address: 0x76
    update_interval: 60s
  # BMP11 Capteur de temperature et de pression I²C
  - platform: bmp085
    temperature:
      name: "Temperature BMP11 $long_devicename"
    pressure:
      name: "Pression BMP11 $long_devicename"
    address: 0x77
    update_interval: 60s
uart:
  - rx_pin: GPIO05     #d1
    tx_pin: GPIO04     #d2
    baud_rate: 9600
    id: uart_mhz19
i2c:
  - sda: GPIO09        #sdd2
    scl: GPIO10        #sdd3
    scan: true
    id: bus_i2c

Il y a quelque chose de spécifique sur un bus I2C ???
les adresses à définir sont spécifiques aux devices à connecter ???

bref, si vous avez des pistes, elles seront les bienvenues…

C’est bon, j’ai du tout casser, l’i2c ne veux pas marcher en SDD2/SDD3 (GPIO09/GPIO10) alors qu’en D7/D8 (GPIO13/GPIO15) c’est bon, mais il y avait des leds que j’ai du déplacer…
ca plantait direct l’I²C avec un scan à true et ca ne voyait rien avec un scan à false…
peut être est-ce du au fait que j’avais un nodemcu V3 (12F) et que ESPHome ne voit que le nodemcuv2 (12E) ???
avec toutes ces manipulations, les deux BMP11 que j’avais (capteur de température et de pression) ont grillé et un des deux plantait le bus I²C
le capteur d’hygrométrie SHT21 est en plein décalage horaire en me mettant -30°C et 5% d’humidité… :face_with_spiral_eyes:
j’ai testé un on_value_range: above / below, mais ca ne va pas avec mes 3 leds vert/jaune/rouge…

J’aimerais un peu plus d’essplications concernant le on_value_range

  # MH-Z19 Analyseur de CO2
  - platform: mhz19
    co2:
      name: "Valeur CO² $long_devicename"
      on_value_range:
        - above: 400
          then:
            - switch.turn_on: vert
        - above: 900
          then:
            - switch.turn_on: jaune
        - above: 2200
          then:
            - switch.turn_on: rouge
        - below: 400 # le capteur est donné pour 400-5000, en dessous de 400, il est HS ou hors specs...
          then:
            - switch.turn_off: rouge
            - switch.turn_off: jaune
            - switch.turn_off: vert
        - below: 900
          then:
            - switch.turn_off: rouge
            - switch.turn_off: jaune
        - below: 2200
          then:
#            - switch.turn_off: vert
            - switch.turn_off: jaune

comme tout le monde, j’ai eu l’histoire du « trop de then » en oubliant le « - ».
j’aimerais comprendre à quel moment on sort de la boucle… ???
au début j’avais la diode verte qui s’allumait puis restait éteinte, d’où le #commentaire.
ce que je cherche à avoir:

  • 0—400 → rien d’allumé
  • 400—900 → vert
  • 900—2200 → jaune
  • 2200—et au-delà → rouge
    ca vous parait bon ? en tous cas, c’est pas très élégant…


reste à voir pour la calibration du capteur…

C’est pas une boucle mais un case à première vue…
Du coup à mon avis il y a mélange avec tes seuils… Puisque tu peux être above 400 et bellow 900 en même temps…
ça c’est 2 conditions indépendantes (=>2 then)

Je pense que tu dois donner des intervalles qui ne se recouvrent pas
Dans la doc le above et below sont liés (=> 1 then)

sensor:
  - platform: dallas
    # ...
    on_value_range:
      above: 5
      below: 10
      then:
        - switch.turn_on: relay_1

Autre astuce plutôt que de te faire f***à gérer les ON/OFF des 3 leds, joue avec les interlocks

alors…
pour l’interlock

  - platform: gpio    
    pin: GPIO14
    name: "Voyant vert"
    id: vert
    icon: "mdi:led-on"
    interlock: [jaune, rouge]

c’est OK

mais pour le on_value_range, c’est un peut plus tricky…

sensor:
  - platform: mhz19
    co2:
      name: "Valeur CO² $long_devicename"
      on_value_range:
        - below: 400
          then:
            - switch.turn_off: rouge
            - switch.turn_off: jaune
            - switch.turn_off: vert
        - below: 900
          then:
            - switch.turn_on: vert
        - below: 2200
          then:
            - switch.turn_on: jaune
        - above: 400
          then:
            - switch.turn_on: vert
        - above: 900
          then:
            - switch.turn_on: jaune
        - above: 2200
          then:
            - switch.turn_on: rouge

Je n’ai pas pu tester le below 400, mais dans le principe ca doit être OK.
l’essentiel est que mes voyants d’alerte fonctionnent en hardware, sans passer par HA.

Mouais… Tu te bases pas sur l’exemple ci-dessus Moi je vois plus ça

      on_value_range:
        - below: 400
          then:
            - switch.turn_off: rouge
            - switch.turn_off: jaune
            - switch.turn_off: vert
        - above: 400
          below: 900
          then:
            - switch.turn_on: vert
        - above: 900
          below: 2200
          then:
            - switch.turn_on: jaune
        - above: 2200
          then:
            - switch.turn_on: rouge

Comme ça c’est pas possible d’avoir 2 intervalles en même temps
Pour bien faire, il faut pê pas exclure les valeurs 400/900/2200 donc je ferai un

      on_value_range:
        - below: 400
          then:
            - switch.turn_off: rouge
            - switch.turn_off: jaune
            - switch.turn_off: vert
        - above: 399
          below: 900
          then:
            - switch.turn_on: vert
        - above: 899
          below: 2200
          then:
            - switch.turn_on: jaune
        - above: 2199
          then:
            - switch.turn_on: rouge

A confirmer si les - devant above sont significatifs

1 « J'aime »

effectivement j’avais mal lu la doc, je pensais qu’il y avait below qui prenait les valeurs strictement inférieures et above prenait égal ou suppérieur… lecture trop diagonale de ma part.
le seul problème qui me reste, c’est qu’une fois qu’on bascule manuellement un switch d’une led, d’une part il faut s’y reprendre 2 à 3 fois (la première fois depuis le reboot) et une fois la led modifiée, elle ne reprend plus sa valeur indiquée dans le on_value_range … ???

Pas sur de comprendre…
Comme ça, sans réflechir, je pense que la led doit revenir à sa couleur initiale seulement quand il y a une nouvelle valeur du capteur. Dons si pas de variation ou pas de relecture la led reste dans l’état que tu lui a donné

Bon,

le coup des diodes ca ne marche pas trop, ca empêche le 8266 de booter de temps en temps, surement un gpio pas utilisé à bon escient. par exemple le GPIO02 ou j’avais mis le rouge.
surtout que j’ai rajouté un écran sur l’I²C pour l’affichage, c’est top. (un SSD1306 128x64 de 0.91")
je reviens sur mes LEDS et j’ai opté sur une config plus simple au niveau câblage mais bien plus complexe au niveau programmation…

ci dessous ma config, avec une Led adressable. (en gros une LED transparente normale mais qui se comporte comme un ruban LED WS2812) mais qui a l’avantage de ne nécessiter qu’un trou et qu’un GPIO

light:
  - platform: neopixelbus
    name: "$long_devicename Light"
    pin: GPIO16
    variant: WS2812
    type: RGB
    id: light_1
    num_leds: 1
    effects:
      - automation:
          name: "Rouge"
          sequence:
            - light.addressable_set:
                id: light_1
                red: 100%
                green: 0%
                blue: 0%
      - automation:
          name: "Orange"
          sequence:
            - light.addressable_set:
                id: light_1
                red: 100%
                green: 64%
                blue: 0%
      - automation:
          name: "Vert"
          sequence:
            - light.addressable_set:
                id: light_1
                red: 0%
                green: 100%
                blue: 0%

coté serveur web, j’arrive à allumer la LED et lui donner les 3 couleurs.
coté paramétrage, je n’arrive pas à le faire fonctionner avec un template, le light.addressable_set Action a l’air d’une piste intéressante, mais je suis comme une poule qui aurait trouvé un couteau…
ca marcherait avec un on_value_range ?