Site Tools


en:domotique:garagebox

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
en:domotique:garagebox [2025/02/10 19:43] – created kodeinen:domotique:garagebox [2025/02/18 14:21] (current) – [Résultats] kodein
Line 1: Line 1:
-FIXME **This page is not fully translated, yet. Please help completing the translation.**\\ //(remove this paragraph once the translation is finished)// 
- 
 ====== Why I want home automation for my separate garages too ====== ====== Why I want home automation for my separate garages too ======
 As William would say : //"Why not ?"// LOL As William would say : //"Why not ?"// LOL
Line 24: Line 22:
 But I'll have to think on how to have the sensors and actuators far away from the core of the system. But I'll have to think on how to have the sensors and actuators far away from the core of the system.
  
-===== Choix technologiques ===== +===== Tech choices ===== 
-A l'origine, je penchais pour une option à base de modules tout fait zigbee. **Mais** une grande majorité de ces capteurs sont alimentés par piles et ça me gonfle un peu de les remplacer tous les X temps pour que ça continue à fonctionnerUne solution serait de les modifier pour les alimenter par batterie et panneau photovoltaïque, mais ça complexifie beaucoup le système et pour les éléments à l'extérieur, il faut s'assurer que ça reste étanche.\\ +At first I wanted to buy ready to use zigbee modules. **But** most of them are running on batteries and I'll probably forget to change them in timeI could make some changes on the devices to add photovoltaic panels but it'hard to keep everything weatherproof.\\ 
-Donc je me suis penché sur d'autres options et ce qui me semble le plus simple serait une solution à base de [[https://esphome.io/|ESPHome]].\\ +So I searched other solutions. The simplest one I've found would be a [[https://esphome.io/|ESPHome]] based system.\\ 
-Ça tourne sur pcb de dev ESP32/ESP8266 (voir RP2040 mais avec de grosses contraintes niveau modèle) auquel on connecte des modules capteurs et actionneurs "prêts à l’emploi". Et un très large panel de périphériques compatibles est disponible.\\ +It runs on ESP32, ESP8366 and even RP2040 (with some restrictions on the modeland I can use available breakout boards for compatible sensors and actuators.
-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, modifier les automatismes stockés en local dans l'ESP ou servir de télécommande. (genre pour forcer la lampe allumée sans devoir rajouter de bouton physique dans le garage)+
  
-Une autre option serait d'abandonner ESPHomede continuer avec des ESP32mais de la gamme C6 (haute performances) et H2 (très basse consommation électriquequi sont compatibles ZigbeeÇa demande un peu plus de travail, mais ça l'avantage de s'intégrer au réseau mesh zigbee déjà existant de la maisonEt si c'est bien faitde se comporter comme des modules "classiques", donc être intégrable avec n'importe quel central domotique zigbee.\\ +Connection to the server would be done over wifi (I'll have to check if house wifi also cover the garage). 
-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 ===== +What's cool is that the microcontroller can do standalone automation. The connection to home assistant would only serve to get sensor readingschange settingsmodify automation or be used as remote for lights. 
-Je me suis basé sur le listing du site ESPHome et effectué mon choix d'après les fonctionnalités décrites et la disponibilité à bas coût de modules sur les internets+ 
 +Another solution would be to use zigbee ready ESP32 like ESP32-C6 (high performances) or ESP32-H2 (low power consumption). It would be bit more complex but it has the benefit of using the meshed network already deployed in our houseAnd if done rightit would be able to be used the same as any standard module
 + 
 +Moreover those ESP32 are also Matter compatibleSo it would be possible to flash a new firmware matter compatible
 +===== Parts selection ===== 
 +I used ESPHome's listing to choose the modules. It's mainly based on capabilities described and prices of the modules.
 === Core === === Core ===
-<gallery left&nocrop&200x200&lightbox>:domotique:esphome:esp32.png Photo d'un devboard d'ESP32</gallery>Une carte de développement ESP32 Wifi/BLE (normalement, il y a moyen de toutes les exploiter avec ESPHome).+<gallery left&nocrop&200x200&lightbox>:domotique:esphome:esp32.png ESP32 devboard photo</gallery>This is a ESP32 Wifi/BLE devboard (it should be compatible with ESPHome).
  
-C'est le système central de la mini installation, les capteurs et actionneurs s'y connectent via les différents bus. Que ça soit SPI, UART, I²C ou simplement GPIO.+This is the core of the small home automation installation. Sensors and actuators will be connected with various data bus (I²C, UART, SPI) or on GPIO.
  
-Ces cartes semblent souvent capables de supporter un large panel de tensions en alimentationJe pense donc l'alimenter via un transfo 230V AC - 12V DC.+Those boards can often be powered with a large array of voltagesI'll probably use a 12V DC power brick.
  
-Certains modèles possèdent un connecteur ipex permettant d'utiliser une antenne plus imposante que celle intégrée au pcb et surtout permettant de la déporter pour améliorer la réception du signal. Ce genre de modèle me semble plus adapté pour mon usage+Some version of those ESP32 come with an ipex connector instead of the PCB antenna. Allowing us to move the antenna away from the ESP and to use a more efficient external antenna to get better radio signal. I'd rather use that one for the garage since they're quite far away from main house and moreover there are a few walls in the way
-=== Capteur lumière et UV === +=== Light and UV sensor === 
-<gallery left&nocrop&200x200&lightbox>:domotique:esphome:ltr390.png Photo d'un module LTR390</gallery>Un capteur LTR390 pour mesurer la luminosité ambiante, ce capteur permet aussi de mesurer le rayonnement UV. +<gallery left&nocrop&200x200&lightbox>:domotique:esphome:ltr390.png LTR390 breakout board photo</gallery>These LTR390 can not only measure light intensity but also measure UV intensityUV aren't useful for my project, but it's a nice addon for weather informations. 
-C'est grace à lui que le core va pouvoir vérifier si la luminosité ambiante justifie l'allumage du spot extérieur.+This sensor will allow to check if ambient light is low enough for the spot to be turned on or not.
  
-Connecté sur le BUS I²C. +It talk to the MCU using I²C bus
-=== Capteur de présence === +=== Presence sensor === 
-<gallery left&nocrop&200x200&lightbox>:domotique:esphome:ld2420.png Photo d'un module LD2420 avec ses antennes intégrées au PCB</gallery>Le LD2420 permet non de détecter les mouvements, mais de détecter la présence de trucs qui sont pas là habituellement en utilisant des ondes radios. Il est possible de régler la puissance (donc la distance de détection), la sensibilité ainsi que de calibrer le radar via ESPHome. +<gallery left&nocrop&200x200&lightbox>:domotique:esphome:ld2420.png LD2420's photo with pcb antennas</gallery>The LD2420 doesn't detect movements (like FIRbut it uses millimeter wave radar to detect presence of things that aren't usually there. It allows to fine tune various parameters to detect only what you really want to detectThose parameters are accessible with ESPHome so I'm going to have loads of fun playing with them.
-Comme c'est un détecteur de présence, le timer est moins utile : tant que quelqu'un est détecté dans la zone, la lampe peut rester alluméeJe vais quand même mettre un délais à l'extinction, histoire de ne pas faire guirlande de noël quand on bosse à la bordure de la zone de détection.+
  
-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, ni la remontée d'infos supplémentaires). +As it's not a movement detector even if people stay still their presence is detectedSo timer is less useful than with movement detectorIt integrates some off delay to prevent tuning off then back on if people are on the outer fringe of the area covered by the detector.
-=== Capteur température, pression et humidité === +
-<gallery left&nocrop&200x200&lightbox>:domotique:esphome:bme280.png Photo d'un breakout board BME280</gallery>Un capteur BME280 permet de collecter des informations météorologiques. Pas du tout essentiel pour le bon fonctionnement de cette installation, mais le module est assez peu cher. Il me semble donc sympathique d'ajouter ces fonctions pour remonter plus d'infos au serveur Home Assistant.+
  
-Connecté en I²C+It's connected using UART
-=== Actionneur lumière === +=== Temperature, pressure and humidity sensor === 
-<gallery left&nocrop&200x200&lightbox>:domotique:esphome:relay3_3-230.png Photo d'un module relais</gallery>Au moins un relais dont la commande puisse se faire en 3.3v et dont les contacts permettent de piloter du 230VBien des modules de ce genre sont disponibles sur les différentes plateformes de vente. La plupart sont isolés par des optocoupleurs, ce qui permet de protéger le MCU de tout mauvais fonctionnement de la partie basse tension (230V).+<gallery left&nocrop&200x200&lightbox>:domotique:esphome:bme280.png BME280 pcb's photo</gallery>A BME280 will allow to collect weather informationsIt's not useful for my projectBut the sensor is cheap and it's fun to add more informations to use on my Home Assistant server.
  
-Connecté sur un GPIO. +It speaks I²C. 
-====== Essais ====== +=== Light actuator === 
-J'ai acheté "un peude matériel pour réaliser plusieurs montages en parallèle et pouvoir les tester sans devoir démonter un pour faire l'autre+<gallery left&nocrop&200x200&lightbox>:domotique:esphome:relay3_3-230.png Relay module</gallery>I need at least a relay that can be actuated by 3.3V and can pilot the 230V needed to power my light(s). There are loads of those available on the various webshop. Most of them isolate the 3.3V from the 230V using optocoupler. That way electronic is protected if 230V circuit malfunction in a way or another. 
-  * 5 ESP32 "classiques" avec connecteur antenne ipex+ 
 +GPIO is the only language it talks
 +====== Attempts ====== 
 +I bought "somepartsEnough to be able to make multiple prototypes in parallels without having to take apart the previous ones. Here is the "short" list : 
 +  * 5 ESP32
   * 1 ESP32-C6 (zigbee)   * 1 ESP32-C6 (zigbee)
   * 1 ESP32-H2 (zigbee)   * 1 ESP32-H2 (zigbee)
   * 2 LD2420 (radar)   * 2 LD2420 (radar)
-  * 1 LTR390 (lumière)+  * 1 LTR390 (light)
   * 2 BME280 (t°)   * 2 BME280 (t°)
-  * 5 relais avec optocoupleurs +  * 5 relays 
-  * 2 kits solaires avec un porte li-ion 18650 +  * 2 solar kits with 18650 socket 
-  * 1 DC-DC converter qui accepte à 6V en entrée et sort 3.3V (j'aurais du en prendre 3, mais…) +  * 1 DC-DC converter that takes to 6V on input and spits a stable 3.3V on the output. 
-Ça devrait me permettre de réaliser quelques essais sans trop me prendre le choux.+
 ===== Test001 ESPHome ===== ===== Test001 ESPHome =====
-Autant débuter par un truc simple sans faire non plus dans le simpliste (j'ai pas envie de juste lire/écrire des GPIO), donc récupérer les données d'un capteur de t° et les remonter au central domotique. +I'll start directly trying to use I²C bus. I don't want to loose time trying to read/write GPIO since it's too easySo I'll try to plug a BME280 on the ESP32
-Si j'arrive déjà à faire ça, ça veut dire que le esp32 parle via I²C au capteur et transmet les valeurs via wifi au serveur domotique+ 
-Le tout sera alimenté directement par un chargeur USB, histoire de pas trop se casser les bonbons.+If I get that to work most of the hardest work will be done. 
 + 
 +I'll directly power the whole thing using ESP32'USB.
  
 ==== Firmware ==== ==== Firmware ====
-Le plus complexe pour moi, c'est faire le programme. N'ayant jamais utilisé ESPHome, faut le temps d'apprendre quoi mettre dans le code pour obtenir le fonctionnement désiré et comment pousser ce code dans l'ESP32. +I never used ESPHome so I need some time to get used on how things are coded and how to get that code into the ESP32.
-=== Initialiser le core ===+
  
-Dans un premier temps, je suis passé par l'interface graphique du plugin ESPHome Device Builder de Home Assistant et un pc avec chromium. +=== Initialise the ESP === 
-Ce qui permis d'assez facilement pousser un premier programme plus ou moins vide dans un ESP32-WROOM-32U surnommé "test001"+At first I used ESPHome Device Builder's GUI from my Home Assistant using chromium. It allowed me to easily upload mostly void program into one ESP32-WROOM-32U now named "test001".
  
-Mais dès que le code s'est étofféle raspi s'est retrouvé à bout de souffle pendant la compilation+But as soon as I added some bus and sensor definitionsthe rapberry pi running Home Assistant gave up on life while trying to compile codexD
  
-Pour soulager ce pauvre raspi il a fallu installer les outils CLI ESPHome sur un "vrai" ordiÇa prends tout de suite vraiment beaucoup moins de temps pour compiler et je peux pousser le firmware directement par usb dans le core sans passer par un navigateur web+To fix this, I installed ESPHome's CLI tools on one of my beefier computersIt's far faster and I can still upload the new program either using USB or over the air.
  
-=== Voyons ce code ===+=== Let's take a peek at the code ===
 <code yaml>esphome: <code yaml>esphome:
   name: test001   name: test001
Line 125: Line 128:
   - platform: homeassistant   - platform: homeassistant
     id: homeassistant_time</code>     id: homeassistant_time</code>
-Ici on a tout le setup de base du module ESPHome, j'y ai ajouté une sync avec l'horloge du serveurÇa coute rien et ça peut m'éviter des surprises si je prévois des automatismes interne à l'esp basés sur l'heure+We have here the basic setup of the ESP32. I added time sync because I may add some (local) automation using time of the dayAnd it's easy to add syncing with HA server
 <code yaml>i2c: <code yaml>i2c:
   sda: GPIO21   sda: GPIO21
Line 132: Line 135:
   id: bus_a   id: bus_a
 </code> </code>
-On initialise le bus I²C sur les pins 21 pour SDL et 22 pour SDA et on le désigne par l'identifiant bus_a. Rien de bien folichon.+Initialising the I²C bus, getting it all sweet and ready to talk with some peripherals.
 <code yaml> <code yaml>
 sensor: sensor:
Line 143: Line 146:
     humidity:     humidity:
       name: "BME280 Humidity"</code>       name: "BME280 Humidity"</code>
-On définit d'abord le type de capteurici un BME280.\\ +We first define the kind of sensorhere a BME280 using I²C.\\ 
-Ensuite, petite subtilité, mon capteur n'était pas détecté par l'ESPJ'ai poussé un sketch sniffeur d'adresse I²C sur un arduino. Il m'a signalé qu'un truc répondait à l'adresse 0x76 après avoir câblé le capteur dessus. Évidemment, l'adresse par défaut pour ces capteurs dans ESPHome est 0x77, ça ne risquait pas de fonctionner. Après avoir spécifié l'adresse, on obtient bien les remontées de valeurs du capteurs.\\ +Then I had to define the 0x76 address because the default one is 0x77 so the ESP couldn't establish the connection to the BMEI had to use an address sniffer sketch on a arduino to get the right address from the BME.\\ 
-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.+Finally we define the names that will be shown in Home Assistant for the various readings made by the sensor.\\
  
 ==== Hardware ==== ==== Hardware ====
-C'est très simple de câbler un capteur I²C sur le core, seuls fils suffisent +Wiring I²C devices is really simple. You only need wires 
-  * GND sur GND +  * GND on GND 
-  * 3.3V sur 3.3V +  * 3.3V on 3.3V 
-  * SDA sur gpio 21 +  * SDA on gpio 21 
-  * SCL sur gpio 22 +  * SCL on gpio 22 
-<gallery center&nocrop&400x400&lightbox>:domotique:esphome:test001_wiring_001.png Simulation de câblage | Illustration du câblage d'un BME280 à un ESP32</gallery>+<gallery center&nocrop&400x400&lightbox>:domotique:esphome:test001_wiring_001.png Wiring schematics of a BME280 to an ESP32</gallery>
  
 ==== Résultats ==== ==== Résultats ====
-Dans un premier temps je n'avais que ça +As I said earlier the default I²C address wasn't the one used by my BME so at first I had that result 
-<gallery center&nocrop&400x400&lightbox>:domotique:esphome:prinscreen_test001_0001.png Infos du module test001 dans Home Assistant | Le module est bien visible, mais ne remonte pas de données de t° etc.</gallery> +<gallery center&nocrop&400x400&lightbox>:domotique:esphome:prinscreen_test001_0001.png Module is shown in Home Assistant but no values are displayed.</gallery> 
-Après avoir corrigé l'adresse dans le firmware +After using the right address 
-<gallery center&nocrop&400x400&lightbox>:domotique:esphome:prinscreen_test001_0002.png Infos du module test001 dans Home Assistant après correction | Le module est présent et remonte des données de t° etc.</gallery> +<gallery center&nocrop&400x400&lightbox>:domotique:esphome:prinscreen_test001_0002.png Module is shown in Home Assistant, this time values are displayed.</gallery> 
-C'est officiellement un grand succès!+Huge success(I'm making a note here)
  
-==== Améliorations ==== 
-Il va être nécessaire d'étalonner les capteurs lorsque le module complet sera installé à sa place définitive. Parce que si la pression semble correcte (par rapport à mes autres capteurs et météo France), la température et l'humidité paraissent douteuses. Le capteur zigbee du commerce et un petit thermomètre hygromètre de table dans la même pièce donnent des relevés très similaires entre-eux, mais ces relevés sont différents de ceux de test001 (genre 10% d'humidité en plus et 1 ou 2 degrés en moins). 
  
-==== Ajout LTR390 ==== + 
-Ajouter le capteur lumière et UV est vraiment trivial. Le bus I²C est déjà initialisé, il y a juste à brancher les quatre pins du capteurs sur les mêmes pins du core que le BME280Et niveau code, c'est pas plus compliqué que pour le BME on rajoute ça dans la section "sensor" :+==== Adding a LTR390 ==== 
 +It's quite trivial since it also use I²C busOnce again 4 wires connected on the same 4 pins on the ESP32 side and a bit of code are needed :
 <code yaml>  - platform: ltr390 <code yaml>  - platform: ltr390
     uv_index:     uv_index:
Line 177: Line 179:
       name: "Light Sensor Counts"       name: "Light Sensor Counts"
 </code> </code>
-<gallery center&nocrop&400x400&lightbox>:domotique:esphome:test001_wiring_002.png Simulation de câblage | Illustration du câblage d'un BME280 et LTR390 à un ESP32</gallery> +<gallery center&nocrop&400x400&lightbox>:domotique:esphome:test001_wiring_002.png Schematics of the wiring of the LTR390 on the previous wiring</gallery> 
-Et ça fonctionne directement.+And it just works. 
 +<gallery center&nocrop&400x400&lightbox>:domotique:esphome:photo001.jpg Prototype wired and running | Wiring is messy : wrong wire colors, some of them far too long and ESP straddling two breadboards >.> </gallery> 
 +==== Addind a LD2420 ==== 
 +This radar isn't harder to wire than the previous two devices : 
 +  * 3.3V on 3.3V 
 +  * GND on GND 
 +  * RX on TX0 ESP 
 +  * OT1 on RX0 ESP (on older LD2420 firmware TX may be on OT2)
  
- +Then you need to initialize the UARTSince we already use an UART for logsyou have to keep them from mixing up
-==== Ajout LD2420 ==== +<code yaml>logger: 
-Le radar à ondes millimétriques est assez simple à raccorder physiquement, encore une fois 4 fils suffisent : +  id: logz 
-  * 3.3V sur 3.3V +[…] 
-  * GND sur GND +uart: 
-  * RX sur TX0 coté ESP +  tx_pin: GPIO17 
-  * OT2 ou OT1 (en fonction de la version de firmware) sur RX0 coté ESP +  rx_pin: GPIO16
-Si on rajoute un cinquième filon 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. +
- +
-Il faut d'abord configurer le bus UART qu'on va exploiter.  +
-<code yaml>uart: +
-  tx_pin: GPIO01 +
-  rx_pin: GPIO03+
   baud_rate: 115200   baud_rate: 115200
 +  id: radar
 </code> </code>
-Ensuite, le code pour le module n'est pas extrêmement complexe (c'est principalement attribuer à des variables d'entrés ou de sorties des noms)mais il expose plus d'interfaces que nos autres capteurs, principalement pour configurer le radar et récupérer les données du radar. +That prevents from getting logs on the sensor channel and inversely.\\ 
-<code yaml>ld2420:+I'rather define UART speed myself than hope the default is the good setting. As for the OT2 pinif your LD2420 is on older firmware you may need to set it to 256000.
  
-text_sensor: +The rest of the code isn't complex but there are a lot of parameters so it's quite lengthier than the previous devices. Moreover it's the default code I found on ESPHome website I did no change on it. So as of now, I'll only put what I change in the code to prevent having boring large slabs of code everywhere.
-  - platform: ld2420 +
-    fw_version: +
-      name: LD2420 Firmware+
  
-sensor: +So, with all this the sensor works surprisingly well. Let me be clear, distance readings are all over the place. But even if the PCB is facing the ceiling it detects me everywhere in the room. I had to go out of the room and move away from the door opening to be undetected.\\ 
-  - platform: ld2420 +I guess in an open space like in front of the garage and with a well calibrated sensor it should return more accurate readings.
-    moving_distance: +
-      name : Moving Distance+
  
-binary_sensor: +==== Automation ====
-  - platform: ld2420 +
-    has_target: +
-      name: Presence+
  
-select: +===== Now the same using zigbee ===== 
-  - platform: ld2420 +I want to evaluate how harder it would be to make the same device using "classic" code and zigbee communication
-    operating_mode: +Because most of my current devices are using that radio communicationsso it would be great to keep going with it.
-      name: Operating Mode +
-number: +
-  - platform: ld2420 +
-    presence_timeout: +
-      name: Detection Presence Timeout +
-    min_gate_distance: +
-      name: Detection Gate Minimum +
-    max_gate_distance: +
-      name: Detection Gate Maximum +
- +
-    gate_select: +
-      name: Select Gate to Set +
-    still_threshold: +
-      name: Set Still Threshold Value +
-    move_threshold: +
-      name: Set Move Threshold Value +
- +
-    gate_move_sensitivity: +
-      name: Move Calibration Sensitivity Factor +
-    gate_still_sensitivity: +
-      name: Still Calibration Sensitivity Factor +
-</code> +
-===== On garde globalement les mêmes, mais en zigbee ===== +
-Ouais, pour tester et comparer le rapport emmerdement/bénéfices+
-J'aimerais aussi beaucoup pouvoir comparer la couverture réseau entre les deux. Surtout que sous peuquelques modules zigbee supplémentaires devraient être installés dans la maison.+
en/domotique/garagebox.1739216637.txt.gz · Last modified: by kodein