Trucos para ESPHome (segunda entrega)

Esta semana continuamos con más trucos para ESPHome, y aclaramos alguna duda que quedó del vídeo anterior.

Los trucos son:

  • Paquetes
  • Más funciones de diagnóstico
  • Secretos
  • Funciones de debug
  • Sensor Hall

Aquí puedes ver el vídeo:

A continuación te dejo el código del programa que hemos usado en el ejemplo:

substitutions:
  hostname: "esp-lab" 
  friendlyname: "ESP Lab"

esphome:
  name: "$hostname" 
  friendly_name: "$friendlyname"

packages:
  text-sensor: !include diag/diag-text-sensor.yaml 
  switch: !include diag/diag-switch.yaml
  sensor: !include diag/diag-sensor.yaml

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:
  level: debug
  
# Enable Home Assistant API
api:
  encryption:
    key: "s0fe4ReqZt5KVcc5bW/WWVqPM0AbmAF7vpclUK0YVMY="

ota:
  password: "74ee42a00445c6145903f549975c0380"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password


  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp-Lab Fallback Hotspot"
    password: "WwiL6KP8EAw5"

captive_portal:
    
switch:
  - platform: gpio
    id: led
    name: led
    pin: GPIO33

# Pulsador ejemplo
binary_sensor:
  platform: gpio
  id: pulsador
  name: pulsador
  pin: GPIO25

debug:
  update_interval: 5s

Y también los códigos de los tres paquetes a los que llama el código principal. Recuerda cambiar en el programa principal la ruta de los tres ficheros para que los encuentre donde los has copiado.

diag-text-sensor.yaml

text_sensor:
  # Versión de ESPHome
  - platform: version
    name: "$hostname ESPHome Version"

  # Información de conectividad Wifi.
  - platform: wifi_info
    ip_address:
      name: "$hostname IP"
    ssid:
      name: "$hostname SSID"
    bssid:
      name: "$hostname BSSID"
    mac_address:
      name: "$hostname MAC"

  - platform: template
    name: "$hostname Friendly Name"
    icon: "mdi:information-outline"
    lambda: |-
      return {"$friendlyname"};
    entity_category: "diagnostic"

  - platform: template
  #  name: $hostname Uptime HR
    id: uptime_hass
    icon: mdi:clock-start
    entity_category: "diagnostic"
    
  - platform: debug
    device:
      name: "Device Info"
    reset_reason:
      name: "Reset Reason"

diag-switch.yaml

switch: 
  - platform: restart
    name: "Restart"
    entity_category: "diagnostic"

  - platform: shutdown
    name: "Shutdown"
    entity_category: "diagnostic"

  - platform: safe_mode
    name: Safe Mode Boot
    entity_category: "diagnostic"

diag-sensor.yaml

sensor:
  # WiFi Signal sensor.
  - platform: wifi_signal
    name: '$hostname WiFi Signal'
    update_interval: 120s

  # Sensor tiempo encendido
  - platform: uptime
    name: "$hostname Tiempo Encendido"
    id: "tiempo_encendido"
    on_raw_value:
      then:
        - text_sensor.template.publish:
            id: uptime_hass
            state: !lambda |-
              int segundos = round(id(tiempo_encendido).raw_state);
              int dias = segundos / (24 * 3600);
              segundos = segundos % (24 * 3600);
              int horas = segundos / 3600;
              segundos = segundos % 3600;
              int minutos = segundos /  60;
              segundos = segundos % 60;
              return (
                (dias ? String(dias) + "d " : "") +
                (horas ? String(horas) + "h " : "") +
                (minutos ? String(minutos) + "m " : "") +
                (String(segundos) + "s")
              ).c_str();

  - platform: internal_temperature
    name: "Temperatura interna"
    entity_category: "diagnostic"
    
  - platform: debug
    free:
      name: "Heap Free"
    block:
      name: "Heap Max Block"
    loop_time:
      name: "Loop Time"

  - platform: esp32_hall
    name: "ESP32 Sensor Hall"
    update_interval: 1s
Scroll al inicio