CODE YAML
Plongez dans l'univers Yet Another Markup Language
Centrale Domotique DOMO22
Configuration complète pour la centrale ESP32 avec tous les périphériques et fonctionnalités.
⚙️ Configuration de base
ESPHome# Configuration de base DOMO22
# Version: 1.0
# Date: 2025-10-31
esphome:
name: domo22
friendly_name: "Centrale DOMO22"
platform: ESP32
board: esp32dev
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Point d'accès de secours
ap:
ssid: "DOMO22 Fallback"
password: !secret ap_password
# Active le serveur web pour le diagnostic
web_server:
port: 80
# API Home Assistant
api:
encryption:
key: !secret api_encryption_key
# OTA (mise à jour sans fil)
ota:
password: !secret ota_password
# Logger
logger:
level: DEBUG
# I2C pour capteurs
i2c:
sda: GPIO21
scl: GPIO22
scan: true
frequency: 400kHz
🔌 Sorties Relais (8 canaux)
Relais# Sorties relais DOMO22
# 8 relais 10A - Sorties sécurisées
switch:
# Relais 1 - Éclairage principal
- platform: gpio
pin: GPIO13
name: "Relais 1 - Éclairage Principal"
id: relay_1
icon: "mdi:lightbulb"
restore_mode: RESTORE_DEFAULT_OFF
on_turn_on:
- logger.log: "Relais 1 activé"
on_turn_off:
- logger.log: "Relais 1 désactivé"
# Relais 2 - Éclairage secondaire
- platform: gpio
pin: GPIO12
name: "Relais 2 - Éclairage Secondaire"
id: relay_2
icon: "mdi:lightbulb-outline"
restore_mode: RESTORE_DEFAULT_OFF
# Relais 3 - Prise salon
- platform: gpio
pin: GPIO14
name: "Relais 3 - Prise Salon"
id: relay_3
icon: "mdi:power-socket-eu"
restore_mode: RESTORE_DEFAULT_OFF
# Relais 4 - Ventilation
- platform: gpio
pin: GPIO27
name: "Relais 4 - Ventilation"
id: relay_4
icon: "mdi:fan"
restore_mode: RESTORE_DEFAULT_OFF
# Relais 5 - Chauffage
- platform: gpio
pin: GPIO26
name: "Relais 5 - Chauffage"
id: relay_5
icon: "mdi:radiator"
restore_mode: RESTORE_DEFAULT_OFF
# Relais 6 - Pompe
- platform: gpio
pin: GPIO25
name: "Relais 6 - Pompe"
id: relay_6
icon: "mdi:pump"
restore_mode: RESTORE_DEFAULT_OFF
# Relais 7 - Portail
- platform: gpio
pin: GPIO33
name: "Relais 7 - Portail"
id: relay_7
icon: "mdi:gate"
restore_mode: RESTORE_DEFAULT_OFF
on_turn_on:
- delay: 500ms
- switch.turn_off: relay_7
# Relais 8 - Spare
- platform: gpio
pin: GPIO32
name: "Relais 8 - Réserve"
id: relay_8
icon: "mdi:power"
restore_mode: RESTORE_DEFAULT_OFF
🎛️ Entrées Numériques (8 canaux)
GPIO# Entrées numériques DOMO22
# 8 entrées avec protection
binary_sensor:
# Entrée 1 - Bouton poussoir
- platform: gpio
pin:
number: GPIO34
mode: INPUT_PULLUP
inverted: true
name: "Entrée 1 - Bouton Poussoir"
id: input_1
device_class: button
filters:
- delayed_on: 50ms
- delayed_off: 50ms
on_press:
- switch.toggle: relay_1
# Entrée 2 - Détecteur mouvement
- platform: gpio
pin:
number: GPIO35
mode: INPUT_PULLUP
inverted: true
name: "Entrée 2 - Détecteur Mouvement"
id: input_2
device_class: motion
filters:
- delayed_on: 100ms
# Entrée 3 - Contact porte
- platform: gpio
pin:
number: GPIO36
mode: INPUT_PULLUP
inverted: true
name: "Entrée 3 - Contact Porte"
id: input_3
device_class: door
# Entrée 4 - Contact fenêtre
- platform: gpio
pin:
number: GPIO39
mode: INPUT_PULLUP
inverted: true
name: "Entrée 4 - Contact Fenêtre"
id: input_4
device_class: window
# Entrées 5-8 - Personnalisables
- platform: gpio
pin:
number: GPIO4
mode: INPUT_PULLUP
inverted: true
name: "Entrée 5"
id: input_5
filters:
- delayed_on: 50ms
- platform: gpio
pin:
number: GPIO16
mode: INPUT_PULLUP
inverted: true
name: "Entrée 6"
id: input_6
- platform: gpio
pin:
number: GPIO17
mode: INPUT_PULLUP
inverted: true
name: "Entrée 7"
id: input_7
- platform: gpio
pin:
number: GPIO5
mode: INPUT_PULLUP
inverted: true
name: "Entrée 8"
id: input_8
📊 Capteurs (Température, Humidité, Luminosité)
Sensors# Capteurs DOMO22
# BME280, BH1750, DS18B20
sensor:
# BME280 - Température, Humidité, Pression
- platform: bme280
temperature:
name: "Température Ambiante"
id: temp_ambient
oversampling: 16x
filters:
- sliding_window_moving_average:
window_size: 10
send_every: 10
humidity:
name: "Humidité Ambiante"
id: humidity_ambient
filters:
- sliding_window_moving_average:
window_size: 10
send_every: 10
pressure:
name: "Pression Atmosphérique"
id: pressure
filters:
- sliding_window_moving_average:
window_size: 10
send_every: 10
address: 0x76
update_interval: 60s
# BH1750 - Luminosité
- platform: bh1750
name: "Luminosité"
id: light_sensor
address: 0x23
update_interval: 30s
filters:
- lambda: |-
if (x < 10) return 0;
else return x;
# DS18B20 - Température précise
- platform: dallas
address: 0x1c0000031edd2a28
name: "Température Précise"
id: temp_precise
resolution: 12
filters:
- offset: -0.5 # Calibration
# Capteurs système
- platform: wifi_signal
name: "Signal WiFi"
update_interval: 60s
- platform: uptime
name: "Uptime"
update_interval: 60s
📦 Configuration Complète DOMO22
All-in-OnePackage complet incluant :
- ✓ Configuration de base (WiFi, API, OTA)
- ✓ 8 Sorties relais 10A
- ✓ 8 Entrées numériques avec anti-rebond
- ✓ Capteurs BME280, BH1750, DS18B20
- ✓ Interface web de diagnostic
- ✓ Automatisations de base
- ✓ Fichier secrets.yaml exemple
- ✓ Documentation intégrée
Besoin d'aide ?
Consultez notre documentation complète pour l'installation et la configuration.
Voir la documentationConfiguration WiFi
IP fixe, gestion de l'énergie, puissance d'émission et options avancées pour un réseau stable et fiable.
🌐 IP Fixe (Static IP)
manual_ip# Configuration WiFi avec IP fixe
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# IP fixe - évite les conflits DHCP et permet l'accès direct
manual_ip:
static_ip: 192.168.1.100 # Adresse IP réservée sur le routeur
gateway: 192.168.1.1 # Passerelle (IP du routeur)
subnet: 255.255.255.0 # Masque de sous-réseau
dns1: 192.168.1.1 # DNS primaire (routeur ou 8.8.8.8)
dns2: 8.8.4.4 # DNS secondaire Google
# Point d'accès de secours si le WiFi principal est inaccessible
ap:
ssid: "DOMO22 Fallback"
password: !secret ap_password
# Domaine DNS local pour la résolution de nom
domain: .local
⚡ Économie d'énergie (power_save_mode)
power_save_mode# Modes d'économie d'énergie WiFi ESP32
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# NONE → Performances maximales, pas d'économie
# Recommandé pour domotique (latence ~1ms)
# LIGHT → Économie légère, le module peut dormir entre les trames
# Latence légèrement augmentée (~50ms)
# MODEM → Économie maximale, réveil périodique uniquement
# Latence élevée, pour appareils sur batterie
power_save_mode: NONE
# Puissance d'émission TX en dBm (8.5 à 20.5 dBm)
# Valeur haute → meilleure portée, consommation plus élevée
# Valeur basse → portée réduite, consommation minimisée
output_power: 20dB # Puissance maximale (défaut)
# output_power: 17dBm # Bon compromis portée/conso
# output_power: 8.5dBm # Pour appareils très proches du routeur
⚙️ Options avancées (fast_connect, priority, use_address…)
Avancé# Options WiFi avancées
wifi:
# Connexion rapide : évite le scan complet des canaux WiFi
# Utile pour réduire le temps de démarrage (~2s de gain)
# Nécessite que le SSID soit broadcasté (pas caché)
fast_connect: false
# Réseau WiFi principal
networks:
- ssid: !secret wifi_ssid
password: !secret wifi_password
priority: 10 # Priorité haute → réseau préféré
# Réseau WiFi de secours (voisin, mobile, etc.)
- ssid: "MonReseau_5GHz"
password: !secret wifi_password_5g
priority: 5 # Priorité basse → secours uniquement
hidden: false # true si SSID masqué
# Adresse de l'hôte pour l'OTA et l'API (si différente de l'IP)
# Utile derrière un proxy ou avec plusieurs interfaces réseau
use_address: 192.168.1.100
# Délai de connexion avant de basculer sur l'AP de secours (ms)
reboot_timeout: 15min
# Point d'accès de secours
ap:
ssid: "DOMO22 Fallback"
password: !secret ap_password
ap_timeout: 1min # Durée de l'AP avant reboot
📦 Configuration WiFi Complète (production)
All-in-One# ===================================================
# WiFi DOMO22 - Configuration production
# ===================================================
wifi:
# Réseau principal avec priorité
networks:
- ssid: !secret wifi_ssid
password: !secret wifi_password
priority: 10
# IP fixe réservée
manual_ip:
static_ip: 192.168.1.100
gateway: 192.168.1.1
subnet: 255.255.255.0
dns1: 192.168.1.1
dns2: 8.8.4.4
# Performances maximales (domotique filaire/semi-filaire)
power_save_mode: NONE
output_power: 20dB
fast_connect: false
# AP de secours - toujours actif si WiFi principal inaccessible
ap:
ssid: "DOMO22-Setup"
password: !secret ap_password
domain: .local
# Captive Portal : page de configuration WiFi accessible via l'AP
captive_portal:
# Secrets.yaml associé :
# wifi_ssid: "NomDeVotreReseau"
# wifi_password: "MotDePasse"
# ap_password: "MotDePasseAP"
Serveur Web Embarqué
Interface web intégrée à l'ESP32 pour diagnostiquer, contrôler et mettre à jour l'appareil sans Home Assistant.
🌍 Configuration de base
web_server# Serveur web embarqué ESPHome
web_server:
port: 80 # Port HTTP (80 par défaut)
# Utiliser 8080 si conflit avec d'autres services
# Version de l'interface utilisateur
# version: 1 → Interface légère, compatible anciens appareils
# version: 2 → Interface Material Design moderne (recommandé)
version: 2
# Activer/désactiver l'interface OTA depuis le navigateur
ota: true
# Accès local uniquement (sans téléchargement JS depuis le cloud)
# true → Interface hébergée localement (fonctionne hors internet)
# false → Interface chargée depuis le CDN ESPHome
local: false
🔐 Authentification (auth)
Sécurité# Serveur web avec authentification HTTP Basic
web_server:
port: 80
version: 2
ota: true
# Protection par identifiant/mot de passe
# Recommandé si l'appareil est accessible depuis Internet
auth:
username: !secret web_username
password: !secret web_password
# Ajouter dans secrets.yaml :
# web_username: "admin"
# web_password: "MotDePasseSecurise123"
🏠 Mode local (sans accès internet)
local: true# Serveur web en mode 100% local
# Les fichiers JS/CSS sont servis depuis l'ESP32
# Fonctionne sans connexion internet (réseau isolé, installation technique)
web_server:
port: 80
version: 2
local: true # Inclut l'interface JS dans le firmware (~200 KB supplémentaires)
ota: true
auth:
username: !secret web_username
password: !secret web_password
# Notes importantes en mode local :
# - Augmente la taille du firmware (~200 KB)
# - Nécessite une partition flash suffisante (4 MB recommandé)
# - Idéal pour installations sans accès internet
🔗 API REST embarquée — Endpoints disponibles
REST API# Le web_server expose automatiquement une API REST
# Utilisation sans Home Assistant - contrôle direct depuis navigateur, curl, Node-RED…
# GET /switch/relay_1 → état du relais 1
# POST /switch/relay_1/turn_on → activer le relais 1
# POST /switch/relay_1/turn_off → désactiver le relais 1
# POST /switch/relay_1/toggle → basculer le relais 1
# GET /sensor/temperature_ambiante → valeur du capteur
# GET /sensor/signal_wifi → force du signal WiFi
# Exemple curl :
# curl -X POST http://192.168.1.100/switch/relay_1/turn_on
# curl http://192.168.1.100/sensor/temperature_ambiante
# Exemple avec authentification :
# curl -u admin:MotDePasse http://192.168.1.100/switch/relay_1
# Flux d'événements temps réel (Server-Sent Events) :
# curl http://192.168.1.100/events
Mise à Jour Sans Fil (OTA)
Over The Air : flashez votre ESP32 via le réseau WiFi, sans câble USB. Configuration de la sécurité, du mode sans échec et des paramètres avancés.
📡 Configuration OTA de base
ota# OTA ESPHome - Mise à jour sans fil
# Premier flash obligatoirement par USB, ensuite OTA disponible
ota:
- platform: esphome
password: !secret ota_password # Mot de passe protégeant le flash OTA
# Ajouter dans secrets.yaml :
# ota_password: "MotDePasseOTA"
# Pour flasher via ESPHome CLI :
# esphome run domo22.yaml
#
# Pour flasher depuis Home Assistant :
# ESPHome Add-on → sélectionner l'appareil → INSTALL → Wirelessly
🛡️ Mode sans échec (safe_mode)
safe_mode# OTA avec mode sans échec
# Si l'ESP32 redémarre trop souvent (firmware corrompu, boucle de crash),
# il passe automatiquement en safe_mode : WiFi + OTA uniquement
# → permet de reflasher un firmware correct sans accès physique
ota:
- platform: esphome
password: !secret ota_password
safe_mode:
# Nombre de démarrages rapides avant de basculer en safe mode
num_attempts: 10 # Défaut : 10 redémarrages consécutifs
# Délai de reboot en safe mode (attend un flash OTA avant de redémarrer)
reboot_timeout: 5min # 0s = pas de timeout (reste en safe mode)
# Restaure l'état des interrupteurs avant le reboot (recommandé)
boot_is_good_after: 1min # L'appareil est considéré stable après 1 min
💻 OTA Arduino / C++ (ArduinoOTA)
Arduino IDE// OTA Arduino pour ESP32 (hors ESPHome)
// Librairie : ArduinoOTA (incluse dans le core ESP32)
#include <WiFi.h>
#include <ArduinoOTA.h>
const char* ssid = "VotreSSID";
const char* password = "VotreMotDePasse";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(500);
// Nom mDNS de l'appareil (ex: domo22.local)
ArduinoOTA.setHostname("domo22");
// Mot de passe de protection du flash OTA
ArduinoOTA.setPassword("MotDePasseOTA");
// Callbacks optionnels
ArduinoOTA.onStart([]() {
Serial.println("OTA: Démarrage du flash...");
});
ArduinoOTA.onEnd([]() {
Serial.println("\nOTA: Flash terminé. Redémarrage.");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("OTA: %u%%\r", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("OTA Erreur [%u]\n", error);
});
ArduinoOTA.begin();
Serial.print("OTA prêt - IP: ");
Serial.println(WiFi.localIP());
}
void loop() {
// Appel obligatoire dans la boucle principale
ArduinoOTA.handle();
// ... reste du code
}
📦 Configuration OTA complète (ESPHome production)
All-in-One# ===================================================
# OTA DOMO22 - Configuration production complète
# ===================================================
# Mise à jour sans fil sécurisée
ota:
- platform: esphome
password: !secret ota_password
# Mode sans échec - protection contre les firmware défaillants
safe_mode:
num_attempts: 10
reboot_timeout: 5min
boot_is_good_after: 1min
# Bouton physique de reset en safe mode (optionnel)
# Maintenir GPIO0 enfoncé au démarrage pour forcer le safe mode
button:
- platform: safe_mode
name: "Redémarrage Safe Mode"
id: btn_safe_mode
# Redémarrage programmé (évite les fuites mémoire sur firmware complexe)
# Redémarre tous les jours à 3h00 si uptime > 23h
interval:
- interval: 1h
then:
- if:
condition:
- lambda: 'return id(uptime_sensor).state > 82800;' # 23h en secondes
then:
- logger.log: "Redémarrage préventif quotidien"
- delay: 5s
- lambda: 'App.reboot();'
# Secrets.yaml requis :
# ota_password: "MotDePasseOTASecurise"
📋 Récapitulatif des options OTA
Référence| Paramètre | Valeurs | Description |
|---|---|---|
password |
chaîne | Mot de passe requis pour flasher |
num_attempts |
10 (défaut) | Redémarrages avant safe mode |
reboot_timeout |
5min (défaut) | Durée en safe mode avant reboot |
boot_is_good_after |
durée | Délai pour valider le démarrage |
platform |
esphome | Protocole OTA utilisé |
Centralisateur DOMO30
Configuration pour le gestionnaire de fil pilote et E/S.
Bientôt disponible
Les fichiers YAML pour le DOMO30 seront disponibles prochainement.