Sustituciones ESPHome

Sustituciones ESPHome

A partir de la versión 1.10.0, ESPHome tiene una nueva y poderosa forma de reducir la repetición en los archivos de configuración: Sustituciones. Con las sustituciones, puede tener un único archivo fuente genérico para todos los nodos de un tipo y sustituir expresiones en él.

substitutions:
  devicename: livingroom
  upper_devicename: Livingroom

esphome:
  name: $devicename
  # ...

sensor:
- platform: dht
  # ...
  temperature:
    name: ${upper_devicename} Temperature
  humidity:
    name: ${upper_devicename} Humidity

En la sección de nivel superior substitutions, puede colocar tantos pares clave-valor como desee. Antes de validar su configuración, ESPHome reemplazará automáticamente todas las ocurrencias de sustituciones por su valor. La sintaxis de una sustitución se basa en bash y distingue entre mayúsculas y minúsculas: $substitution_key${substitution_key}(igual).

Además, puede usar la sintaxis YAML << para crear un único archivo YAML del que heredan varios nodos:

# In common.yaml
esphome:
  name: $devicename
  # ...

sensor:
- platform: dht
  # ...
  temperature:
    name: ${upper_devicename} Temperature
  humidity:
    name: ${upper_devicename} Humidity
# In nodemcu1.yaml
substitutions:
  devicename: nodemcu1
  upper_devicename: NodeMCU 1

<<: !include common.yaml

Consejo:

Para ocultar estos archivos base del tablero, puede

  • Colóquelos en un subdirectorio (el tablero solo muestra archivos en el directorio de nivel superior)
  • Anteponga un punto al nombre del archivo, como.base.yaml

Sustituciones de línea de comando 

Puede definir o anular sustituciones desde la línea de comando agregando, por ejemplo, que anula la CLAVE de sustitución y le da valor VALOR. Esto se puede emitir varias veces, por ejemplo, con el siguiente archivo:-s KEY VALUE example.yaml

substitutions:
  name: default
  platform: ESP8266

esphome:
  name: $name
  platform: $platform
  board: $board

y el siguiente comando:

esphome -s name device01 -s board esp01_1m example.yaml config

Obtendrá algo como el siguiente resultado (tenga en cuenta las sustituciones sin cambios platform, agregadas board y anuladas ):name

substitutions:
  name: device01
  platform: ESP8266
  board: esp01_1m
esphome:
  name: device01
  platform: ESP8266
  board: esp01_1m
  includes: []
  libraries: []
  esp8266_restore_from_flash: false
  build_path: device01
  platformio_options: {}
  arduino_version: espressif8266@2.2.3

Podemos observar aquí que las sustituciones de la línea de comandos tienen prioridad sobre las de su archivo de configuración. Esto se puede usar para crear archivos de configuración de ‘plantilla’ genéricos (como el example.yaml anterior) que se pueden usar para múltiples dispositivos, usando sustituciones que se proporcionan en la línea de comando.

CAPÍTULOS DEL VÍDEO

Sustituciones en paquetes 

Otra forma de modularizar y reutilizar su configuración es usar paquetes. Esta característica le permite poner piezas comunes de configuración en archivos separados y mantener solo piezas únicas de su configuración en el archivo yaml principal. Todas las definiciones de los paquetes se fusionarán con su configuración principal de forma no destructiva para que siempre pueda anular algunas partes de la configuración del paquete.

Paquetes locales 

Considere el siguiente ejemplo donde el autor colocó piezas comunes de configuración como WiFi e I²C en archivos base y las amplía con algunas configuraciones específicas del dispositivo en la configuración principal.

Observe cómo la pieza de configuración que describe el componente api device_base.yaml se fusiona con las definiciones de servicios del archivo de configuración principal.

# en config.yaml
substitutions:
  node_name: mydevice
  device_verbose_name: "My Device"

packages:
  wifi: !include common/wifi.yaml
  device_base: !include common/device_base.yaml

api:
  services:
    - service: start_laundry
      then:
        - switch.turn_on: relay
        - delay: 3h
        - switch.turn_off: relay

sensor:
  - platform: mhz19
    co2:
      name: "CO2"
    temperature:
      name: "Temperature"
    update_interval: 60s
    automatic_baseline_calibration: false
# en wifi.yaml
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  domain: .yourdomain.lan
  fast_connect: true
# en device_base.yaml
esphome:
  name: ${node_name}
  platform: ESP32
  board: wemos_d1_mini32
  build_path: ./build/${node_name}

# I²C Bus
i2c:
  sda: GPIO21
  scl: GPIO22
  scan: true
  frequency: 100kHz

# Enable logging
logger:
  level: ${log_level}

api:
  encryption:
    key: !secret api_encryption_key
  reboot_timeout: 1h

sensor:
  - <<: !include common/sensor/uptime.config.yaml
  - <<: !include common/sensor/wifi_signal.config.yaml
binary_sensor:
  - <<: !include common/binary_sensor/connection_status.config.yaml

switch:
  - <<: !include common/switch/restart_switch.config.yaml

Paquetes remotos/git 

Los paquetes también se pueden cargar desde un repositorio git utilizando la sintaxis de configuración correcta. Las sustituciones se pueden usar dentro de los paquetes remotos, lo que permite a los usuarios anularlos localmente con su propio valor de sustitución.

Nota:

Los paquetes remotos no pueden tener búsquedas secret en ellos. En su lugar, deberían hacer uso de sustituciones con un valor predeterminado opcional en el paquete YAML, que el dispositivo local YAML puede configurar usando valores de los secretos locales.

packages:
  # Git repo examples
  remote_package:
    url: https://github.com/esphome/non-existant-repo
    ref: main # optional
    files: [file1.yml, file2.yml]
    refresh: 1d # optional

  # A single file can be expressed using `file` or `files` as a string
  remote_package_two:
    url: https://github.com/esphome/non-existant-repo
    file: file1.yml # cannot be combined with `files`
    # files: file1.yml

  # shorthand form github://username/repository/[folder/]file-path.yml[@branch-or-tag]
  remote_package_three: github://esphome/non-existant-repo/file1.yml@main

¿Cómo uso mi Home Assistant secrets.yaml? 

Si desea mantener todos sus secretos en un solo lugar, cree un archivo secrets.yaml en el directorio esphome con este contenido (para que extraiga el contenido de su archivo secrets.yaml principal de Home Assistant desde un directorio superior):

<<: !include ../secrets.yaml

Sígueme a Youtube

Sígueme en Youtube - Sustituciones

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio