Problème remonté d'infos Qualité d'air IKEA Vindriktning

Bonjour,

En suivant différents tuto et en lisant beaucoup de sujet sur Home Assistant, j’ai décidé de me lancer dans le hack du boitier Vindriktning de chez IKEA. Non sans peine je suis parvenu à le faire reconnaître par ESPHome (problème de détection du wifi). Maintenant j’ai compris comment faire. Malheureusement je n’ai pas de remonté d’infos, cela me marque indisponible. Je sais que mon capteur fonctionne, je l’ai testé. Pensant que cela pouvait venir du modèle de mon ESP32 j’ai essayé avec deux modèle différent: un D1Mini et un S2Mini. Le résultat est identique.
Je ne comprends pas pourquoi et je ne vois pas où j’ai pu faire une erreur.

Voici les logs

J’espère que l’un d’entre vous sera me dire l’erreur que j’ai commis.
Merci d’avance

NFO ESPHome 2026.1.5
INFO Reading configuration /config/esphome/qualite-air-bureau.yaml...
INFO Starting log output from 192.168.1.116 using esphome API
INFO Successfully resolved qualite-air-bureau @ 192.168.1.116 in 0.000s
INFO Successfully connected to qualite-air-bureau @ 192.168.1.116 in 0.145s
INFO Successful handshake with qualite-air-bureau @ 192.168.1.116 in 0.323s
[15:00:34.710][I][app:210]: ESPHome version 2026.1.5 compiled on 2026-02-17 14:31:04 +0100
[15:00:34.716][I][app:217]: ESP32 Chip: ESP32-S2 r1.0, 1 core(s)
[15:00:34.716][C][logger:316]: Logger:
[15:00:34.716][C][logger:316]:   Max Level: DEBUG
[15:00:34.716][C][logger:316]:   Initial Level: DEBUG
[15:00:34.726][C][logger:322]:   Log Baud Rate: 115200
[15:00:34.726][C][logger:322]:   Hardware UART: USB_CDC
[15:00:34.746][C][logger:332]:   Task Log Buffer Size: 768 bytes
[15:00:34.746][C][uart.idf:238]: UART Bus 0:
[15:00:34.750][C][uart.idf:152]:   RX Pin: GPIO6
[15:00:34.750][C][uart.idf:243]:   RX Buffer Size: 256
[15:00:34.750][C][uart.idf:243]:   RX Full Threshold: 8
[15:00:34.750][C][uart.idf:243]:   RX Timeout: 2
[15:00:34.756][C][uart.idf:249]:   Baud Rate: 9600 baud
[15:00:34.756][C][uart.idf:249]:   Data Bits: 8
[15:00:34.756][C][uart.idf:249]:   Parity: NONE
[15:00:34.756][C][uart.idf:249]:   Stop bits: 1
[15:00:34.761][C][pm1006:017]: PM1006:
[15:00:34.767][C][pm1006:016]:   PM2.5 'Particulate Matter 2.5µm Concentration'
[15:00:34.767][C][pm1006:016]:     State Class: 'measurement'
[15:00:34.767][C][pm1006:016]:     Unit of Measurement: 'µg/m³'
[15:00:34.767][C][pm1006:016]:     Accuracy Decimals: 2
[15:00:34.768][C][pm1006:026]:     Device Class: 'pm25'
[15:00:34.773][C][pm1006:030]:     Icon: 'mdi:blur'
[15:00:34.797][C][pm1006:452]:   Update Interval: never
[15:00:34.797][C][captive_portal:128]: Captive Portal:
[15:00:34.803][C][wifi:1304]: WiFi:
[15:00:34.803][C][wifi:1304]:   Local MAC: 80:65:99:49:35:80
[15:00:34.803][C][wifi:1304]:   Connected: YES
[15:00:34.810][C][wifi:1037]:   IP Address: 192.168.1.116
[15:00:34.810][C][wifi:1048]:   SSID: 'Freebox-C07003'[redacted]
[15:00:34.810][C][wifi:1048]:   BSSID: 3A:07:16:C0:0E:00[redacted]
[15:00:34.810][C][wifi:1048]:   Hostname: 'qualite-air-bureau'
[15:00:34.810][C][wifi:1048]:   Signal strength: -41 dB ▂▄▆█
[15:00:34.810][C][wifi:1048]:   Channel: 5
[15:00:34.810][C][wifi:1048]:   Subnet: 255.255.255.0
[15:00:34.810][C][wifi:1048]:   Gateway: 192.168.1.254
[15:00:34.810][C][wifi:1048]:   DNS1: 1.1.1.1
[15:00:34.810][C][wifi:1048]:   DNS2: 1.0.0.1
[15:00:34.816][C][esphome.ota:075]: Over-The-Air updates:
[15:00:34.816][C][esphome.ota:075]:   Address: qualite-air-bureau.local:3232
[15:00:34.816][C][esphome.ota:075]:   Version: 2
[15:00:34.831][C][esphome.ota:082]:   Password configured
[15:00:34.831][C][safe_mode:021]: Safe Mode:
[15:00:34.831][C][safe_mode:021]:   Successful after: 60s
[15:00:34.831][C][safe_mode:021]:   Invoke after: 10 attempts
[15:00:34.831][C][safe_mode:021]:   Duration: 300s
[15:00:34.841][C][safe_mode:038]:   Bootloader rollback: support unknown
[15:00:34.859][C][web_server.ota:231]: Web Server OTA
[15:00:34.859][C][api:221]: Server:
[15:00:34.859][C][api:221]:   Address: qualite-air-bureau.local:6053
[15:00:34.859][C][api:221]:   Listen backlog: 4
[15:00:34.859][C][api:221]:   Max connections: 8
[15:00:34.863][C][api:228]:   Noise encryption: YES
[15:00:34.910][C][mdns:177]: mDNS:
[15:00:34.910][C][mdns:177]:   Hostname: qualite-air-bureau`

System Information

version core-2026.2.2
installation_type Home Assistant OS
dev false
hassio true
docker true
container_arch amd64
user root
virtualenv false
python_version 3.13.11
os_name Linux
os_version 6.12.67-haos
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
HACS Data ok
GitHub API Calls Remaining 5000
Installed Version 2.0.5
Stage running
Available Repositories 2740
Downloaded Repositories 1
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 17.1
update_channel stable
supervisor_version supervisor-2026.02.2
agent_version 1.8.1
docker_version 29.1.3
disk_total 116.7 GB
disk_used 10.4 GB
nameservers 1.0.0.1, fd0f:ee:b0::1, 1.1.1.1
healthy true
supported true
host_connectivity true
supervisor_connectivity true
ntp_synchronized true
virtualization
board generic-x86-64
supervisor_api ok
version_api ok
installed_addons Mosquitto broker (6.5.2), Zigbee2MQTT (2.8.0-1), Terminal & SSH (10.0.1), Get HACS (1.3.1), ESPHome Device Builder (2026.1.5)
Dashboards
dashboards 2
resources 0
views 0
mode storage
Network Configuration
adapters lo (disabled), enp1s0 (enabled, default, auto), hassio (disabled), docker0 (disabled), vethd9f8b7d (disabled), vethc6d1e71 (disabled), veth8be6eb4 (disabled), veth438769e (disabled), veth6c8c9b1 (disabled), veth213e96e (disabled), veth055de8d (disabled), vethbd3c759 (disabled)
ipv4_addresses lo (127.0.0.1/8), enp1s0 (192.168.1.88/24), hassio (172.30.32.1/23), docker0 (172.30.232.1/23), vethd9f8b7d (), vethc6d1e71 (), veth8be6eb4 (), veth438769e (), veth6c8c9b1 (), veth213e96e (), veth055de8d (), vethbd3c759 ()
ipv6_addresses lo (::1/128), enp1s0 (2a01:e0a:dbd:7fb0:89bd:9c97:ab9a:703/64, fe80::ac18:5400:f67:9d08/64), hassio (fd0c:ac1e:2100::1/48, fe80::4c10:9bff:fe3d:c269/64), docker0 (fe80::8405:dff:fe5a:770e/64), vethd9f8b7d (fe80::2092:d9ff:fe1e:e22a/64), vethc6d1e71 (fe80::6ced:b0ff:fe01:5019/64), veth8be6eb4 (fe80::2839:7ff:fe2c:d6bd/64), veth438769e (fe80::10e7:3bff:fe54:2502/64), veth6c8c9b1 (fe80::cc50:37ff:fe87:55da/64), veth213e96e (fe80::d876:6fff:fea6:f4e9/64), veth055de8d (fe80::3454:adff:fe6d:3ade/64), vethbd3c759 (fe80::5899:55ff:fe45:93d3/64)
announce_addresses 192.168.1.88, 2a01:e0a:dbd:7fb0:89bd:9c97:ab9a:703, fe80::ac18:5400:f67:9d08
Recorder
oldest_recorder_run 6 février 2026 à 16:24
current_recorder_run 14 février 2026 à 16:55
estimated_db_size 16.73 MiB
database_engine sqlite
database_version 3.49.2
___

Bonjour,
il faudrais mettre ton code YAML du esp que tu as flash, pour voir d’éventuelle erreur.

ce qui me choque, c’est le update_interval: never. Comment le sensor s’actualise, si c’est sur jamais :thinking:

dans la doc, l’exemple le met sur 20s

sensor:
  - platform: pm1006
    pm_2_5:
      name: "Particulate Matter 2.5µm Concentration"
    update_interval: 20s

Merci WarC0zes

Voici mon fichier yaml

esphome:
  name: qualite-air-bureau
  friendly_name: Qualité Air Bureau

esp32:
  board: esp32-s2-saola-1
  framework:
    type: esp-idf

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "UoeLRcwQuapiB6LEOafO5KY8dMUHoIUgo5pG1dgGexA="

ota:
  - platform: esphome
    password: "1bf933bcd2c7f022c5f9b04a1254f6d0"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Qualite-Air-Bureau"
    password: "KWIWLVY5RH85"

captive_portal:
    # Ikea Vindriktning
uart:
  rx_pin: 6
  baud_rate: 9600

sensor:
  # Ikea Vindriktning
  - platform: pm1006
    pm_2_5:
      name: "Particulate Matter 2.5µm Concentration"
      accuracy_decimals: 2
      filters:
        - sliding_window_moving_average:
            window_size: 50
            send_every: 10
            send_first_at: 10

J’avais vue ca mais j’avais cru comprendre que ce n’était pas nécessaire.
C’est écrit :
Dans l’usage courant, avec le VINDRIKTNING d’IKEA contrôlant toujours le capteur pm1006, il n’y a pas d’intervalle de mise à jour, et cette implémentation captera passivement tout ce que le MCU VINDRIKTNING a demandé au capteur.

De toute façon je vais essayer avec la ligne de code à mettre en plus et je dirai ce que cela donne.

Merci

Après avoir voulu changer le code et mettre update_interval: 20s cela me demande d’indiquer le tx_pin. tx_pin sur lequel je n’ai pas de fil soudé.
J’ai donc essayé en supprimant la dernière partie du code soit cette partie là.

accuracy_decimals: 2
filters:
- sliding_window_moving_average:
window_size: 50
send_every: 10
send_first_at: 10

Et une fois de plus j’ai indisponible.

J’ai donc vérifié si mon fichier yaml était correct voici ce que ca m’indique.

INFO ESPHome 2026.2.0
INFO Reading configuration /config/esphome/qualite-air-bureau.yaml...
esphome:
  name: qualite-air-bureau
  friendly_name: Qualité Air Bureau
  min_version: 2026.2.0
  build_path: build/qualite-air-bureau
  platformio_options: {}
  environment_variables: {}
  includes: []
  includes_c: []
  libraries: []
  name_add_mac_suffix: false
  debug_scheduler: false
  areas: []
  devices: []
esp32:
  board: esp32-s2-saola-1
  framework:
    type: esp-idf
    version: 5.5.2
    sdkconfig_options: {}
    log_level: ERROR
    advanced:
      compiler_optimization: SIZE
      enable_idf_experimental_features: false
      enable_lwip_assert: true
      ignore_efuse_custom_mac: false
      ignore_efuse_mac_crc: false
      enable_lwip_mdns_queries: true
      enable_lwip_bridge_interface: false
      enable_lwip_tcpip_core_locking: true
      enable_lwip_check_thread_safety: true
      disable_libc_locks_in_iram: true
      disable_vfs_support_termios: true
      disable_vfs_support_select: true
      disable_vfs_support_dir: true
      freertos_in_iram: false
      ringbuf_in_iram: false
      heap_in_iram: false
      execute_from_psram: false
      loop_task_stack_size: 8192
      enable_ota_rollback: true
      use_full_certificate_bundle: false
      include_builtin_idf_components: []
      disable_debug_stubs: true
      disable_ocd_aware: true
      disable_usb_serial_jtag_secondary: true
      disable_dev_null_vfs: true
      disable_mbedtls_peer_cert: true
      disable_mbedtls_pkcs7: true
      disable_regi2c_in_iram: true
      disable_fatfs: true
    components: []
    platform_version: https://github.com/pioarduino/platform-espressif32/releases/download/55.03.37/platform-espressif32.zip
    source: pioarduino/framework-espidf@https://github.com/pioarduino/esp-idf/releases/download/v5.5.2/esp-idf-v5.5.2.tar.xz
  flash_size: 4MB
  variant: ESP32S2
  cpu_frequency: 160MHZ
logger:
  baud_rate: 115200
  tx_buffer_size: 512
  deassert_rts_dtr: false
  task_log_buffer_size: 768
  hardware_uart: USB_CDC
  level: DEBUG
  logs: {}
  runtime_tag_levels: false
api:
  encryption:
    key: UoeLRcwQuapiB6LEOafO5KY8dMUHoIUgo5pG1dgGexA=
  port: 6053
  reboot_timeout: 15min
  batch_delay: 100ms
  custom_services: false
  homeassistant_services: false
  homeassistant_states: false
  listen_backlog: 4
  max_connections: 8
  max_send_queue: 8
ota:
  - platform: web_server
  - platform: esphome
    password: 1bf933bcd2c7f022c5f9b04a1254f6d0
    version: 2
    port: 3232
wifi:
  ap:
    ssid: Qualite-Air-Bureau
    password: KWIWLVY5RH85
    ap_timeout: 90s
  domain: .local
  reboot_timeout: 15min
  power_save_mode: LIGHT
  fast_connect: false
  enable_btm: false
  enable_rrm: false
  passive_scan: false
  enable_on_boot: true
  post_connect_roaming: true
  min_auth_mode: WPA2
  networks:
    - ssid: Freebox-C07003
      password: 
      priority: 0
  use_address: qualite-air-bureau.local
captive_portal:
  compression: gzip
uart:
  - rx_pin:
      number: 6
      mode:
        input: true
        output: false
        open_drain: false
        pullup: false
        pulldown: false
      inverted: false
      ignore_pin_validation_error: false
      ignore_strapping_warning: false
      drive_strength: 20.0
    baud_rate: 9600
    rx_buffer_size: 256
    rx_timeout: 2
    stop_bits: 1
    data_bits: 8
    parity: NONE
sensor:
  - platform: pm1006
    pm_2_5:
      name: Particulate Matter 2.5µm Concentration
      disabled_by_default: false
      force_update: false
      unit_of_measurement: µg/m³
      icon: mdi:blur
      accuracy_decimals: 0
      device_class: pm25
      state_class: measurement
    update_interval: 4294967295ms

INFO Configuration is valid!

j’ai bien entendu supprimer mon mon de passe wifi pour qu’il n’apparaisse pas sur le forum.

je comprends pas ce qui bloque

J’ai enfin trouvé ce qui ne fonctionnait pas. C’est le capteur qui dysfonctionne. Je l’ai testé seul en le branchant sur une alimentation stabilisée et le ventilateur ne tourne pas.
Problème résolu

Ce sujet a été automatiquement fermé après 2 jours. Aucune réponse n’est permise dorénavant.