Simplifier la configuration de ses appareils sous ESPHome
Deux astuces pour alléger vos fichiers ESPHome : mutualiser le secrets.yaml de Home Assistant et regrouper la configuration commune de vos appareils.
Au fil des appareils qui s'ajoutent, les fichiers de configuration ESPHome deviennent vite répétitifs : mêmes identifiants Wi-Fi, mêmes mots de passe, mêmes composants recopiés partout. Voici deux astuces que j'utilise pour alléger tout ça.
⚠️ Cet article a été publié initialement en 2022. ESPHome a beaucoup évolué depuis et les exemples de configuration ci-dessous ne sont plus fonctionnels en l'état. Le composant ota réclame désormais une clé platform (depuis la version 2024.6) et l'authentification par mot de passe de l'API a été supprimée au profit du chiffrement (depuis la version 2026.1). Le principe général reste valable, mais il vous faudra adapter les exemples à votre version.
Mutualiser les fichiers secrets.yaml de Home Assistant et d'ESPHome
Petite astuce disponible dans la FAQ d'ESPHome, qui permet à ESPHome d'aller chercher ses secrets dans le fichier secrets.yaml de Home Assistant plutôt que dans le sien.
Pour mutualiser les 2 fichiers, il suffit de remplacer le contenu du secrets.yaml d'ESPHome par :
---
<<: !include ../secrets.yaml
Dorénavant, ESPHome ira chercher les secrets dont il a besoin dans le fichier secrets.yaml de Home Assistant 🎉
Regrouper la configuration commune des équipements dans un fichier
Il faut créer, dans un premier temps, un fichier à la racine du répertoire d'ESPHome (astuce : si le nom du fichier commence par un point, il sera masqué dans l'interface web d'ESPHome).
Voici mon fichier .common.yaml :
---
# Core Configuration: https://esphome.io/components/esphome.html
esphome:
name: ${esphome_name}
# WiFi Component: https://esphome.io/components/wifi.html
wifi:
ssid: !secret esphome_wifi_ssid
password: !secret esphome_wifi_password
ap:
ssid: "FH - ${devicename}"
password: !secret esphome_wifi_ap_password
# OTA Update Component: https://esphome.io/components/ota.html
ota:
password: !secret esphome_ota_password
# Logger Component: https://esphome.io/components/logger.html
logger:
level: $logger_level
# Native API Component: https://esphome.io/components/api.html
api:
encryption:
key: $api_encryption_key
password: $api_password
# Captive Portal: https://esphome.io/components/captive_portal.html
captive_portal:
# Web Server: https://esphome.io/components/web_server.html
web_server:
auth:
username: !secret esphome_web_server_username
password: !secret esphome_web_server_password
local: true
port: 80
# Time: https://esphome.io/components/time.html
time:
- platform: homeassistant
id: homeassistant_time
# Status Binary Sensor: https://esphome.io/components/binary_sensor/status.html
binary_sensor:
- platform: status
name: "${devicename} - Status"
# Restart Button: https://esphome.io/components/button/restart.html
button:
- platform: restart
name: "${devicename} - Restart"
Il ne me reste plus qu'à l'inclure dans la configuration de chacun de mes appareils :
---
substitutions:
esphome_name: nom-de-l-appareil
devicename: Nom de l'appareil
logger_level: INFO
api_encryption_key: !secret nom_de_l_appareil_api_encryption_key
api_password: !secret nom_de_l_appareil_api_password
<<: !include .common.yaml
Je vous invite à lire la documentation d'ESPHome sur les substitutions ou sur les packages pour une configuration encore plus modulaire !