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?
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.
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:
.
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!!!