Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
fr:domotique:garagebox [2025/02/10 17:22] – supprimée - modification externe (Date inconnue) 127.0.0.1 | fr:domotique:garagebox [2025/02/18 13:54] (Version actuelle) – [Ajout LD2420] kodein | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Pourquoi domotiser son garage ====== | ||
+ | Comme dirait William : //"Et pourquoi pas ?"// LOL | ||
+ | Le déclencheur de ce projet, c'est le module détecteur de mouvements / détecteur crépusculaire / timer du spot extérieur des garages qui s'est mis à débloquer plein pot. J'ai essayé de refaire le réglage des trois potards, mais il finit toujours par rester constamment allumé.\\ | ||
+ | Plutôt que remplacer tout le spot ou essayer de retrouver un module identique (qui risque de bug pareil sous peu), c'est l' | ||
+ | |||
+ | Puis en profiter aussi pour ajouter des fonctions qui n'y étaient pas et apprendre à tout ça à dialoguer avec le serveur domotique, tant qu'on y est ! | ||
+ | ====== Buts à atteindre ====== | ||
+ | Il y a un strict minimum de fonctionnalités à obtenir : | ||
+ | * détecter la présence humaine à proximité des garages | ||
+ | * évaluer la luminosité ambiante | ||
+ | * commander le (ou les) éclairage(s) extérieur(s) | ||
+ | * remonter les infos à mon serveur Home Assistant | ||
+ | Et ensuite deux fonctions supplémentaires relativement simples à ajouter : | ||
+ | * thermomètre et hygromètre extérieur | ||
+ | |||
+ | Éventuellement, | ||
+ | * thermomètre intérieur | ||
+ | * détection présence intérieure | ||
+ | * commande des éclairages intérieurs | ||
+ | * commande des portes de garage | ||
+ | |||
+ | Mais dans ce cas, il sera nécessaire de trouver des solutions techniques pour pouvoir mettre des capteurs et actionneurs dans et hors des box. | ||
+ | ===== Choix technologiques ===== | ||
+ | A l' | ||
+ | Donc je me suis penché sur d' | ||
+ | Ça tourne sur pcb de dev ESP32/ | ||
+ | La communication avec le serveur se fait en wifi (faudra check si le wifi de la maison arrive jusque là).\\ | ||
+ | Mais le système permet de faire des automatismes en local, ce qui le rend auto-suffisant. Dans mon cas, Home Assistant ne serait là que pour collecter des données, changer des paramètres, | ||
+ | |||
+ | Une autre option serait d' | ||
+ | De plus ces deux modèles sont aussi compatibles Matter. Si jamais je migre vers ce système, il serait toujours possible de reflasher un nouveau firmware pour exploiter ce nouveau système. | ||
+ | ===== Choix matériel électronique ===== | ||
+ | Je me suis basé sur le listing du site ESPHome et effectué mon choix d' | ||
+ | === Core === | ||
+ | <gallery left& | ||
+ | |||
+ | C'est le système central de la mini installation, | ||
+ | |||
+ | Ces cartes semblent souvent capables de supporter un large panel de tensions en alimentation. Je pense donc l' | ||
+ | |||
+ | Certains modèles possèdent un connecteur ipex permettant d' | ||
+ | === Capteur lumière et UV === | ||
+ | <gallery left& | ||
+ | C'est grace à lui que le core va pouvoir vérifier si la luminosité ambiante justifie l' | ||
+ | |||
+ | Connecté sur le BUS I²C. | ||
+ | === Capteur de présence === | ||
+ | <gallery left& | ||
+ | Comme c'est un détecteur de présence, le timer est moins utile : tant que quelqu' | ||
+ | |||
+ | Connecté en UART et/ou GPIO qui remonte uniquement si une présence est détectée ou non (mais ne permet pas de toucher aux paramètres, | ||
+ | === Capteur température, | ||
+ | <gallery left& | ||
+ | |||
+ | Connecté en I²C. | ||
+ | === Actionneur lumière === | ||
+ | <gallery left& | ||
+ | |||
+ | Connecté sur un GPIO. | ||
+ | ====== Essais ====== | ||
+ | J'ai acheté "un peu" de matériel pour réaliser plusieurs montages en parallèle et pouvoir les tester sans devoir démonter un pour faire l' | ||
+ | * 5 ESP32 " | ||
+ | * 1 ESP32-C6 (zigbee) | ||
+ | * 1 ESP32-H2 (zigbee) | ||
+ | * 2 LD2420 (radar) | ||
+ | * 1 LTR390 (lumière) | ||
+ | * 2 BME280 (t°) | ||
+ | * 5 relais avec optocoupleurs | ||
+ | * 2 kits solaires avec un porte li-ion 18650 | ||
+ | * 1 DC-DC converter qui accepte 1 à 6V en entrée et sort 3.3V (j' | ||
+ | Ça devrait me permettre de réaliser quelques essais sans trop me prendre le choux. | ||
+ | ===== Test001 ESPHome ===== | ||
+ | Autant débuter par un truc simple sans faire non plus dans le simpliste (j'ai pas envie de juste lire/ | ||
+ | Si j' | ||
+ | Le tout sera alimenté directement par un chargeur USB, histoire de pas trop se casser les bonbons. | ||
+ | |||
+ | ==== Firmware ==== | ||
+ | Le plus complexe pour moi, c'est faire le programme. N' | ||
+ | === Initialiser le core === | ||
+ | |||
+ | Dans un premier temps, je suis passé par l' | ||
+ | Ce qui a permis d' | ||
+ | |||
+ | Mais dès que le code s'est étoffé, le raspi s'est retrouvé à bout de souffle pendant la compilation. | ||
+ | |||
+ | Pour soulager ce pauvre raspi il a fallu installer les outils CLI ESPHome sur un " | ||
+ | |||
+ | === Voyons ce code === | ||
+ | <code yaml> | ||
+ | name: test001 | ||
+ | friendly_name: | ||
+ | |||
+ | esp32: | ||
+ | board: esp32dev | ||
+ | framework: | ||
+ | type: arduino | ||
+ | |||
+ | # Enable logging | ||
+ | logger: | ||
+ | |||
+ | # Enable Home Assistant API | ||
+ | api: | ||
+ | encryption: | ||
+ | key: !secret ota_key | ||
+ | |||
+ | ota: | ||
+ | - platform: esphome | ||
+ | password: !secret ota_password | ||
+ | |||
+ | wifi: | ||
+ | ssid: !secret wifi_ssid | ||
+ | password: !secret wifi_password | ||
+ | |||
+ | # Enable fallback hotspot (captive portal) in case wifi connection fails | ||
+ | ap: | ||
+ | ssid: " | ||
+ | password: !secret fallback_wifi_password | ||
+ | |||
+ | captive_portal: | ||
+ | | ||
+ | time: | ||
+ | - platform: homeassistant | ||
+ | id: homeassistant_time</ | ||
+ | Ici on a tout le setup de base du module ESPHome, j'y ai ajouté une sync avec l' | ||
+ | <code yaml> | ||
+ | sda: GPIO21 | ||
+ | scl: GPIO22 | ||
+ | scan: true | ||
+ | id: bus_a | ||
+ | </ | ||
+ | On initialise le bus I²C sur les pins 21 pour SDL et 22 pour SDA et on le désigne par l' | ||
+ | <code yaml> | ||
+ | sensor: | ||
+ | - platform: bme280_i2c | ||
+ | address: 0x76 | ||
+ | temperature: | ||
+ | name: " | ||
+ | pressure: | ||
+ | name: " | ||
+ | humidity: | ||
+ | name: " | ||
+ | On définit d' | ||
+ | Ensuite, petite subtilité, mon capteur n' | ||
+ | Puis les différentes valeurs à remonter au serveur et le nom sous lequel les afficher. J'ai laissé les noms par défauts donnés sur le site ESPHome parce que c'est avant tout un proto, il n'est pas destiné à être utilisé tel quel. | ||
+ | |||
+ | ==== Hardware ==== | ||
+ | C'est très simple de câbler un capteur I²C sur le core, seuls 4 fils suffisent : | ||
+ | * GND sur GND | ||
+ | * 3.3V sur 3.3V | ||
+ | * SDA sur gpio 21 | ||
+ | * SCL sur gpio 22 | ||
+ | <gallery center& | ||
+ | |||
+ | ==== Résultats ==== | ||
+ | Dans un premier temps je n' | ||
+ | <gallery center& | ||
+ | Après avoir corrigé l' | ||
+ | <gallery center& | ||
+ | C'est officiellement un grand succès! | ||
+ | |||
+ | |||
+ | ==== Ajout LTR390 ==== | ||
+ | Ajouter le capteur lumière et UV est vraiment trivial. Le bus I²C est déjà initialisé, | ||
+ | <code yaml> | ||
+ | uv_index: | ||
+ | name: "UV Index" | ||
+ | uv: | ||
+ | name: "UV Sensor Counts" | ||
+ | light: | ||
+ | name: " | ||
+ | ambient_light: | ||
+ | name: "Light Sensor Counts" | ||
+ | </ | ||
+ | <gallery center& | ||
+ | Et ça fonctionne directement. | ||
+ | <gallery center& | ||
+ | |||
+ | ==== Ajout LD2420 ==== | ||
+ | Le radar à ondes millimétriques est assez simple à raccorder physiquement, | ||
+ | * 3.3V sur 3.3V | ||
+ | * GND sur GND | ||
+ | * RX sur TX0 coté ESP | ||
+ | * OT1 sur RX0 coté ESP (mais en fonction de la version du firmware du LD2420, ça peut aussi être OT2) | ||
+ | Si on rajoute un cinquième fil, on peut avoir le retour sur GPIO de la présence détectée ou non et éventuellement pouvoir utiliser des modes plus économes en énergie sur l'ESP avec le GPIO qui vient le réveiller. Dans mon cas, pas très utile, le montage ne tournant pas sur batterie et la consommation étant déjà très faible. | ||
+ | |||
+ | Il faut d' | ||
+ | <code yaml> | ||
+ | logger: | ||
+ | id: logz | ||
+ | […] | ||
+ | uart: | ||
+ | tx_pin: GPIO17 | ||
+ | rx_pin: GPIO16 | ||
+ | baud_rate: 115200 | ||
+ | id: radar | ||
+ | </ | ||
+ | Comme ça, on ne risque pas d' | ||
+ | La vitesse de l'UART est aussi spécifiée pour assurer la compatibilité avec le LD2420 et pareil, si vous avez le firmware avec le TX sur OT2, il sera nécessaire de passer ce paramètre à 256000. | ||
+ | |||
+ | Ensuite, le code pour le module n'est pas complexe mais très long parce qu'il comporte de très nombreuses variables pour configurer le capteur. Et à partir de maintenant je ne mettrai plus le code issu directement de copier/ | ||
+ | |||
+ | Et donc, avec cette config, le radar fonctionne étonnamment bien. Il retourne des valeurs un peu " | ||
+ | J' | ||
+ | |||
+ | ==== Automatisation ==== | ||
+ | |||
+ | |||
+ | ===== On garde globalement les mêmes, mais en zigbee ===== | ||
+ | Ouais, pour tester et comparer le rapport emmerdement/ | ||
+ | J' |