Tout le monde commence par la même automatisation : un détecteur de mouvement, une lampe, une temporisation de deux minutes. Et tout le monde finit par la même scène — assis dans le noir, à agiter les bras.

Le problème n’est pas la temporisation. C’est le capteur.

Mouvement n’est pas présence

Un détecteur infrarouge passif (PIR) ne détecte pas les gens : il détecte des variations de chaleur dans son champ de vision. Une personne immobile devient invisible pour lui en quelques dizaines de secondes.

Un capteur mmWave (radar millimétrique, comme le Hi-Link LD2410 qu’on retrouve dans la plupart des capteurs du commerce type Aqara FP2 ou Everything Presence), lui, émet une onde radio et mesure ce qui revient. Il perçoit des mouvements de l’ordre du millimètre — respiration comprise. Une personne assise reste détectée.

PIR mmWave
Personne immobile non détectée détectée
Latence de détection ~1 s 1 à 3 s
Consommation pile, plusieurs mois alimentation permanente requise
Faux positifs rares ventilateurs, rideaux, animaux

Le mmWave n’est pas gratuit : il demande une alimentation continue et un réglage fin. Mais il résout le problème de fond.

La combinaison qui fonctionne : PIR + mmWave

La bonne architecture n’oppose pas les deux technologies, elle les combine :

  • le PIR déclenche l’allumage, parce qu’il est instantané et sans faux positif ;
  • le mmWave maintient l’éclairage, parce qu’il voit les gens immobiles.

Cela se traduit par deux automatisations distinctes, pas une seule.

Automatisation 1 — allumer

alias: "Salon — allumage sur mouvement"
description: >
  Allume l'éclairage du salon quand un mouvement est détecté,
  uniquement si la luminosité ambiante est insuffisante.
mode: single

triggers:
  - trigger: state
    entity_id: binary_sensor.salon_pir
    to: "on"

conditions:
  # Inutile d'allumer en plein après-midi.
  - condition: numeric_state
    entity_id: sensor.salon_luminosite
    below: 40
  # On respecte un éventuel mode "cinéma" activé manuellement.
  - condition: state
    entity_id: input_boolean.mode_cinema
    state: "off"

actions:
  - action: light.turn_on
    target:
      entity_id: light.salon_plafond
    data:
      brightness_pct: >
        {{ 25 if now().hour >= 22 or now().hour < 7 else 80 }}
      transition: 2

Le point important est le brightness_pct calculé : la même automatisation donne un éclairage doux la nuit et un éclairage franc en journée, sans dupliquer la règle.

Automatisation 2 — éteindre

alias: "Salon — extinction sur absence"
description: >
  Éteint l'éclairage après une absence confirmée par le capteur de présence.
mode: restart

triggers:
  - trigger: state
    entity_id: binary_sensor.salon_presence
    to: "off"
    for:
      minutes: 4

conditions:
  - condition: state
    entity_id: light.salon_plafond
    state: "on"

actions:
  - action: light.turn_off
    target:
      entity_id: light.salon_plafond
    data:
      transition: 5

Deux détails comptent ici :

  • mode: restart — si quelqu’un revient pendant le décompte, le minuteur repart de zéro au lieu d’empiler des exécutions ;
  • transition: 5 — une extinction progressive sur cinq secondes laisse le temps d’agiter la main si le capteur s’est trompé. C’est le meilleur rapport confort/effort de toute l’installation.

Régler le capteur mmWave

Les capteurs mmWave arrivent réglés au maximum de sensibilité, ce qui détecte le voisin à travers la cloison. La configuration ESPHome ci-dessous, pour un module LD2410 branché sur un ESP32, expose les réglages directement dans l’interface, pour les ajuster sans reflasher :

esphome:
  name: capteur-salon

# Le capteur communique en série avec le microcontrôleur.
uart:
  id: uart_ld2410
  tx_pin: GPIO17
  rx_pin: GPIO16
  baud_rate: 256000
  parity: NONE
  stop_bits: 1

ld2410:
  uart_id: uart_ld2410

binary_sensor:
  - platform: ld2410
    has_target:
      name: "Présence salon"
    has_moving_target:
      name: "Mouvement salon"
    has_still_target:
      name: "Présence immobile salon"

number:
  # Exposés dans Home Assistant : réglage sans reflashage.
  - platform: ld2410
    timeout:
      name: "Délai de disparition"
    max_move_distance_gate:
      name: "Portée mouvement"
    max_still_distance_gate:
      name: "Portée présence immobile"

sensor:
  - platform: ld2410
    detection_distance:
      name: "Distance détectée"

La méthode de réglage tient en trois étapes :

  1. Quitter la pièce, fermer la porte, et observer Distance détectée pendant dix minutes. Tout ce qui est encore signalé est un faux positif.
  2. Réduire la portée jusqu’à ce que la pièce vide reste silencieuse.
  3. Revenir s’asseoir et vérifier que la présence immobile tient.

Compter deux à trois soirées d’ajustement. C’est le prix d’un capteur qui ne se trompe plus jamais.

Les pièges rencontrés

  • Le ventilateur de plafond. Il génère une présence permanente. Il faut soit orienter le capteur autrement, soit exclure la zone concernée.
  • Le chat. Un mmWave réglé finement détecte un chat de 4 kg. Selon les cas, c’est une fonctionnalité ou une nuisance.
  • Le capteur derrière une plaque métallique. L’onde ne traverse pas. Le boîtier doit être en plastique, et rien ne doit se trouver devant.

Ce que ça change au quotidien

Une fois réglé, on cesse de penser aux interrupteurs. C’est exactement l’objectif : une automatisation réussie est une automatisation qu’on oublie.

L’étape suivante consiste à généraliser le principe pièce par pièce — et, inévitablement, à écrire un blueprint pour ne pas recopier la même automatisation sept fois. Côté matériel, le choix du coordinateur Zigbee conditionne la fiabilité de toute la chaîne.