Simplifier la configuration de ses appareils sous ESPHome

Domotique 1 min de lecture

Deux astuces pour alléger vos fichiers ESPHome : mutualiser le secrets.yaml de Home Assistant et regrouper la configuration commune de vos appareils.

Ordinateur : codage
Image de Pexels

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 !