[ESPHome] configuration commune

Mon problème

Je cherche à activer ou pas un service de ESPHome par une variable.

Ma configuration

System Health

version core-2022.5.4
installation_type Home Assistant Supervised
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.9.9
os_name Linux
os_version 5.10.1-v8+
arch aarch64
timezone Europe/Paris
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.24.5
Stage running
Available Repositories 1051
Downloaded Repositories 13
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Debian GNU/Linux 10 (buster)
update_channel stable
supervisor_version supervisor-2022.05.1
docker_version 20.10.1
disk_total 109.8 GB
disk_used 15.1 GB
healthy true
supported failed to load: Unsupported
supervisor_api ok
version_api ok
installed_addons File editor (5.3.3), MariaDB (2.4.0), Nginx Proxy Manager (0.11.0), Mosquitto broker (6.1.2), InfluxDB (4.4.1), SSH & Web Terminal (10.1.3), Samba share (9.6.1), SQLite Web (3.3.0), Zigbee2mqtt (1.18.1-1), Network UPS Tools (0.10.0)
Dashboards
dashboards 3
resources 17
views 14
mode storage

J’ai suivi l’excellent article de @OmiTech sur Simplifier la configuration des appareils sous ESPHome pour mettre en commun les différents service utilisés dans tout mes modules wifi, ota, ap, etc…
C’est super pratique pour définir à un seul endroit un service et être sûr de ne pas se tromper en recopiant.

Pour pousser plus loin, je cherche comment activer un service défini dans le fichier commun via une variable dans le fichier d’un module.
Par exemple, dans mon fichier commun, je voudrais tester via une variable l’inclusion de la configuration du web serveur :

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 wifi_ssid
  password: !secret wifi_pass
  manual_ip:
    static_ip: $static_ip
    gateway: !secret ip_gateway
    subnet: !secret ip_subnet

# Web Server Component:
#  https://esphome.io/components/web_server.html
if $activate_web_server then
<<: !include config_web_server.yaml

mon fichier config_web_server :

config_web_server.yaml
web_server:
 port: !secret web_port

et je voudrais pouvoir activer ce service dans un module test1 via la variable booléenne activate_web_server :

test1.yaml
substitutions:
  esphome_name: test1
  logger_level: DEBUG
  logger_baud_rate: '0'
  static_ip: !secret ip_test1
  activate_web_server: true

<<: !include common.yaml

esp32:
  board: esp32dev

Si la variable activate_web_server est à true, je charge la configuration du web serveur dans mon fichier du module sinon je ne le charge pas.

Est-ce que l’inclusion conditionnelle est possible sous ESPHome ?
Quelle syntaxe dois-je avoir pour que cela fonctionne ?

Merci d’avance pour votre aide.

Salut,

Je te remercie pour le compliment sur mon article :blush: !

Malheureusement je ne pense pas que ce soit possible. Par contre, une solution est d’utiliser les packages. Il sera ainsi possible de réunir la configuration de serveur WEB dans un fichier commun et de le réutiliser au cas par cas avec par exemple :

packages:
  web_server: !include common/web_server.yaml
1 « J'aime »

Je ne connaissais pas les packages et ça m’a l’air pas mal. C’est effectivement une solution que je pourrais adopter pour mes fichiers de configuration. :+1:

Quand tu découvres les Packages tu n’utilises plus que ça :wink: