Home automation (Parte 3) – ESPHome

Qué es lo que deseo hacer en este capítulo? Básicamente un sonoff, quiero encender/apagar las luces de mi casa, pero manteniendo la funcionalidad del interruptor físico también.

Con qué cuento para lograr lo que deseo?

Cargador de celular que sea capaz de entregar más de 1A/h
Switch eléctrico, el mismo que actualmente utilizo
ESP8266-01 (a.k.a. ESP-01) de 1MB de memoria
Conversor Serial-TTL con el pin-out del ESP-01, no trae el chip FTDI, sino el archi-conocido CH-341.
Módulo de relay para el ESP-01

Un ESP8266-01 es un chip de sistema en un chip (SoC) de bajo costo y alto rendimiento que integra un procesador de 32 bits, memoria flash y Wi-Fi en un solo paquete compacto. Es ampliamente utilizado en el campo del Internet de las cosas (IoT) debido a su bajo costo, bajo consumo de energía y capacidad para conectarse a una red Wi-Fi. El ESP8266-01 es programable y se puede utilizar para controlar dispositivos electrónicos, recopilar datos y enviarlos a través de la red, o para recibir comandos remotos y responder en consecuencia.

ESP01 partes más importantes

Lo he usado con anterioridad en otros proyectos utilizando el IDE de Arduino para programarlo, pero en este caso vamos a dejar que un add-on de nuestro HomeAssistant lo programe por nosotros.

El ESP-01 tiene el siguiente pin-out:

.

Para programar este módulo necesitaremos un conversor de señales serial a TTL (USB), se puede utilizar un Arduino configurado como “router”, o sea convirtiendo la señales serial que enviará/recibirá al/del ESP-01 a nuestro puerto USB. En mi caso utilizo el siguiente dispositivo, ya incorpora un chip que hace la conversión Serial-TTL y me permitirá ahorrarme los trabajos de tener que estar poniendo los pines de programación del ESP-01 a tierra, además viene con un socket para conectar cómodamente el pin-out del ESP-01:

Para hacer de actuador, o sea, encender/apagar mis luces usaré un módulo relay. Este módulo, como el dispositivo conversor serial-TTL, viene con un socket para colocar cómodamente el ESP-01:

...

.Hace años no hago nada de electrónica, así que para hacer los esquemáticos he utilizado el software Fritzing, el cual no domino mucho. Mi intención es completar este circuito:

.

 La toma de 110V irá un transformador que convertirá los 110V de alterna a 5V de directa. Esto será el cargador de celular, la especificidad de +1A/h es porque en sus máximos picos el ESP-01 consumirá unos 300mA/h.
 El transformador hará de fuente para el ESP-01 el cual usará 2 GPIO:
 una salida para el módulo relay
 una entrada para un switch ya que quiero continuar teniendo el control de la luz usando el switch de la casa de toda la vida.
 El ESP-01 estará conectado a la RPi usando el router Wi-Fi.
 La lámpara, en este caso representada por un bombillo, una de sus entradas estará seccionada y así será el relay el que controle el on/off de la misma. La lámpara estará conectada a los pines NO (Normally Open) del relay, así si el ESP-01 falla, la luz se mantendrá encendida.

Existen más formas de posicionar el interruptor (switch), como por ejemplo a la entrada del transformador, pero la presentada es la que encontré más conveniente para mí.

A continuación un esquema que intenta reflejar lo que se quiere.

.


ESPHome primeros pasos

ESPHome es una plataforma que me permite instalar, configurar, re-configurar, gestionar y compilar todo lo relacionado con los dispositivos ESP que voy estar utilizando. Se puede utilizar sólo, pero como mejor funciona es como add-on para nuestro HomeAssistant. Una de las enormes ventajas que nos brinda ESPHome es la de poder programar nuestros ESPs usando el lenguaje declarativo YAML.

El proceso de instalación es fácil, y es el mismo utilizado para instalar los add-ons previamente instalado, una vez logueados en nuestro HomeAssistant basta con ir a Settings -> Add-ons -> Add-on Store -> ESPHome:

NOTA: Para la instalación de este add-on no se necesita VPN ya que la imagen del contenedor existe en GHCR. La misma tiene un peso aproximado de unos 250MB

 

NOTA: Para el uso de este add-on se recomienda utilizar HomeAssistant usando https, para su completa funcionalidad.

 

NOTA: Para el uso de este add-on, cuando vamos a crear un nuevo dispositivo en el cual utilizaremos configuraciones que no hemos utilizado antes necesitaremos una conexión a internet, pues él se conectará y descargará las librerías que necesite introducir a los dispositivos ESP a los que vayamos a instalar el firmware nuestro.

 

Una vez terminada la instalación y abramos la webUI del add-on, nos llevará por un corto tutorial. Terminado el tutorial añadiré un nuevo dispositivo:

Nos pedirá el nombre del dispositivo, en mi caso utilizaré SOnOff-1:

Una vez demos en Next nos dirá lo siguiente:

En este punto debemos de conectar el ESP-01 (recuerde conectar el ESP en modo programación!!!) al puerto USB de nuestra PC. Para este paso debe de utilizar Chrome, pues permite la conexión directa del browser con los puertos serial de tu PC/latop:

.

Una imagen del proceso sería la siguiente:

Si en este proceso nos fijamos en la utilización del CPU de nuestra RPi veremos que está haciendo un uso desmedido de los mismos:

Esto se debe a que está compilando la programación del ESP para luego enviársela:

NOTA: Cuando el proceso termine debe de desconectar la alimentación de corriente del ESP-01 y cuando se vuelva a iniciar no hacerlo en modo programación.

 

El proceso de instalación lo que hace es instalarle un “sistema operativo” (nótese las comillas) a nuestro ESP. La idea de esta instalación es configurarlo de tal forma que se conecte directamente a nuestra red, sea reconocido por nuestro HomeAssistant y de paso permita la instalación de nuevo código vía OTA (Over the Air).

Cuando el proceso de instalación del ESP termine, tendremos en nuestro dispositivo SOnOff en nuestro dashboard del add-on ESPHome:

Si hacemos click en el botón Edit de nuestro SOnOff-1 veremos el firmware que tiene nuestro dispositivo instalado, en YAML:

Si apagamos nuestro router veremos como rápidamente el ESP levanta un AP al cual podremos acceder con la contraseña seteada:

Ahora llega la parte de instalarle el firmware que nosotros deseamos. Si googleamos o buscamos directamente en la página de ESPHome nos encontraremos con este link. Partiendo de ese como base, agregaremos la parte para poder encender/apagar nuestra luz utilizando el interruptor físico también:

# Esta es la configuración con que se verá el dispositivo en nuestro ESPHome
esphome:
  name: sonoff-sala
  friendly_name: SOnOff-1

# Aquí se especifica el tipo de ESP que usamos, yo tengo el ESP-01 con la versión de 1MB de almacenamiento
esp8266:
  board: esp01_1m

# Habilitar el logueo
logger:

# Habilitar el acceso de este ESP-01 a nuestro HomeAssistant

api:
  encryption:
    key: "qtxcy0skIpY8PEtdI0xeQx3AngSNmKvIITdpBnb/j9w="

ota:
  password: "9659a89b5c47a1a48ca447bc7ae54004"

# Las credenciales de la Wi-Fi, las cuales están guardadas en el archivo secret.yaml
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

# Si nuestro dispositivo no encuentra el AP configurado creará entrará en modo hotspot
# para poder ser gestionado vía Wi-Fi

  ap:
    ssid: "Sonoff-Sala Fallback Hotspot"
    password: "aaaaaaaa"

captive_portal:
# El switch que hará de accionador, está conectado al GPIO0 de nuestro ESP-01
switch:
- platform: gpio
    name: "SOnOff-1 app"
    pin: GPIO0
    id: relay_1

# El interruptor, el cual leerá el estado del GPIO2 y cambiará el valor que muestra
# en pantalla el switch anteriormente declarado

binary_sensor:
- platform: gpio
    pin:
      number: GPIO2
      mode:
        input: true
        pullup: true
      inverted: true
    name: "SOnOff-1 interruptor"
    on_press:
      switch.toggle: relay_1
    on_release:
      switch.toggle: relay_1

status_led:
  pin:
    number: GPIO13
    inverted: yes

# Lo siguiente puede ser totalmente omitido
sensor:
- platform: wifi_signal
    name: ${devicename} wifi signal
    update_interval: 600s

- platform: uptime
    name: ${devicename} Uptime in Days
    id: uptime_sensor_days
    update_interval: 60s
    on_raw_value:
      then:

- text_sensor.template.publish:
            id: uptime_human
            state: !lambda |-
              int seconds = round(id(uptime_sensor_days).raw_state);
              int days = seconds / (24 * 3600);
              seconds = seconds % (24 * 3600);
              int hours = seconds / 3600;
              seconds = seconds % 3600;
              int minutes = seconds / 60;
              seconds = seconds % 60;
              return (
(days ? String(days) + "d " : "") +
(hours ? String(hours) + "h " : "") +
(minutes ? String(minutes) + "m " : "") +
(String(seconds) + "s")
).c_str();

time:
- platform: homeassistant
    id: homeassistant_time

text_sensor:
- platform: version
    name: $devicename Version

- platform: wifi_info
    ip_address:
      name: $devicename IP
    bssid:
      name: $devicename BSSID

- platform: template
    name: Uptime Human Readable
    id: uptime_human
    icon: mdi:clock-start

 

Una vez instalado correctamente nuestro firmware, y pasados unos minutos en la web de nuestro HomeAssistant tendremos una nueva notificación:

Si hacemos click en Check it out, nos llevará a la página de Settings -> Devices & Services y encontraremos nuestro dispositivo aquí:

Cuando hacemos click en Configure, nos saldrá algo como:

Nos pedirá en qué habitación agregar nuestro dispositivo, específicamente este SOnOff pretendo ponerlo en la sala:

Y listo. Si nos dirigimos a la configuración siguiendo el camino de Settings -> Devices & Services -> Devices encontraremos a nuestro SOnOff-1:

Si hacemos click en él veremos:

Desde donde podremos cambiar el estado de nuestro switch, encendiendo o apagando así nuestra luz. Si optamos por activar/desactivar nuestro interruptor esta acción también será reflejada:

Desde aquí mismo podemos agregar este control y sensor al Dashboard con simplemente hacer click en Add to dashboard. El resultado será algo como:

Ahora desde el Dashboard podremos encender y apagar nuestra luz!!!

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 4.7 / 5. Recuento de votos: 6

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.