Presentation & Installation - Mnicolas35

Bonjour tout le monde, aujourd’hui on va utiliser l’ESP32 S2 mini de chez wemos avec des capteur LD2410C.

Le but c’est qu’avec un capteur du genre, capteur millimétrique, on va pouvoir indiquer a home assistant au mètre prêt ou sont les gens dans la pièce pour créer des automatisations, et ceci a travers les murs.

Mon but :
Dans le coin de la cuisine, caché dans le mur derrière un miroir connecté :

  • Couvrir le couloir dans une sens
  • voir qui est dans la cuisine

En fonction de ca :

  • allumer ou éteindre les lumières si plus personne n’est présent
  • allumer le miroir connecté ou non

Je me suis inspiré de ceci :

Voici mon câblage une fois terminé.

Pr le tout cela a été relativement compliqué de trouvé une doc me permettant de transférer mon Yaml vers un wemos.
Home assistant (ou alors c’est que le mien), n’aime pas cette puce.
Mon process :

  • installation de python sur Windows
  • création du device sur home assistant
  • récupération des infos yaml (copier coller sous Windows)
  • branchement du wemos sur Windows en mode boot
  • et envoie vers le wemos, un fois ok, tout le reste des modification peuvent se faire sous home assistant sans trop de difficultés. (Redites moi si besoin je pourrais détailler)

il faut créer le yaml, une fois ok sous un PowerShell voici la commande a lancer (vérifier le port COM utilisé chez vous, dans le gestionnaire de peripheriques)

image
on le laisse travailler et rebooter

A la fin de la compilation et du transfère, cela se termine avec cette erreur :
image

C’est tout a fait normale, windows et python n’aime pas la déconnexion du module pendant son reboot, mais cela a fonctionné.

Mon yaml pour les deux modules
Yaml de mon bureau de la même composition que celui que je met dans la cuisine

esphome:
  name: s2mini-bureaunico
  friendly_name: S2Mini_BureauNico

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

# Enable logging
logger:

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

ota:
  - platform: esphome
    password: "b2490xxxxxxxxxxxxxxxxxxxxxxxxxxxxxce43f2"

wifi:
  ssid: Stark
  password: Ixxxxxxxxxxxxxxxxxxxxxxxx
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "S2Mini-Bureaunico"
    password: "12xxxxxxxxxxxxxxxxx90"

captive_portal:

web_server:
  port: 80
  version: 2
  local: true

uart:
  - id: uart_1
    tx_pin: GPIO18
    rx_pin: GPIO33
    baud_rate: 256000
    parity: NONE
    stop_bits: 1

  - id: uart_2
    tx_pin: GPIO17
    rx_pin: GPIO21
    baud_rate: 256000
    parity: NONE
    stop_bits: 1


ld2410:
  - id: ld2410_Bureau
    uart_id: uart_1

  - id: ld2410_Salon
    uart_id: uart_2

binary_sensor:
  - platform: ld2410
    ld2410_id: ld2410_Bureau
    has_target:
      name: "Presence Bureau"
    has_moving_target:
      name: "Distance cible en mouvement Bureau"
    has_still_target:
      name: "Distance cible Fixe Bureau"


  - platform: ld2410
    ld2410_id: ld2410_Salon
    has_target:
      name: "Presence Salon"
    has_moving_target:
      name: "Distance cible en mouvement Salon"
    has_still_target:
      name: "Distance cible Fixe Salon"

sensor:
  # --- Bureau ---
  - platform: ld2410
    ld2410_id: ld2410_Bureau
    light:
      name: "Luminosité Bureau"
    moving_distance:
      name: "Distance cible en mouvement Bureau"
    still_distance:
      name: "Distance cible fixe Bureau"
    detection_distance:
      name: "Distance de détection Bureau"

  # --- Salon ---
  - platform: ld2410
    ld2410_id: ld2410_Salon
    light:
      name: "Luminosité Salon"
    moving_distance:
      name: "Distance cible en mouvement Salon"
    still_distance:
      name: "Distance cible fixe Salon"
    detection_distance:
      name: "Distance de détection Salon"

  - platform: uptime
    name: "Uptime Radar Bureau"

switch:
  - platform: ld2410
    ld2410_id: ld2410_Bureau
    bluetooth:
      name: "Bluetooth Bureau"

  - platform: ld2410
    ld2410_id: ld2410_Salon
    bluetooth:
      name: "Bluetooth Salon"

button:
  - platform: restart
    name: "Redémarrer Radar Bureau"


Par la suite il va rester a peaufiner les zones de détections pour en rendre inactives en fonction du besoin.

Coté Home assisatant, j’utilise nodeRED :
Voici ce que cela donne :
La fonction verifie l’etat de chaque valeur d’entrée :

// ===== Capteur déclencheur =====
const entity_id = msg.data.entity_id;
const state = msg.data.new_state.state;

// ===== Stockage des états =====
if (entity_id === "binary_sensor.s2mini_bureaunico_presence_salon") {
    flow.set("presence_salon", state);
}

if (entity_id === "binary_sensor.s2mini_bureaunico_presence_bureau") {
    flow.set("presence_bureau", state);
}

if (entity_id === "binary_sensor.s2mini_cuisinemiroire_presence_cuisine") {
    flow.set("presence_cuisine", state);
}

// ===== Lecture des états =====
const salon = flow.get("presence_salon");
const bureau = flow.get("presence_bureau");
const cuisine = flow.get("presence_cuisine");

// ===== Debug visuel =====
node.status({
    fill: "blue",
    shape: "dot",
    text: `Salon:${salon ?? "?"} | Bureau:${bureau ?? "?"} | Cuisine:${cuisine ?? "?"}`
});

// ===== Si un seul est encore ON → on ne fait rien =====
if (salon === "on" || bureau === "on" || cuisine === "on") {
    return null;
}

// ===== Si tous sont OFF → extinction =====
if (salon === "off" && bureau === "off" && cuisine === "off") {
    return msg;
}

return null;