Skip to content

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.

Índice de contenido

    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
    Ajustes