Hace ya unos cuantos años que vengo trasteando con dispositivos basados en el chip ESP8266 para utilizarlos en el sistema de domótica que tengo implementado en casa. Siempre me ha gustado trastear a nivel de código directamente con estos dispositivos, más que comprarlos ya configurados, y el ESP8266, programable como un Arduino y con conectividad WiFi, han sido la base de mis desarrollos. Y dentro de esta variedad de dispositivos tuve la oportunidad de hacerme, hace ya algunos años también, con una variante muy particular: los ESP01.
Estos dispositivos son una modalidad muy compacta de los ESP8266, con un número limitado de puertos de E/S, que se alimentan sólo a 3.3v, pero que por su tamaño permiten realizar sistemas extremadamente compactos. Anduve trasteando con ellos para realizar un pulsador WiFi que, en combinación con Node Red, pudiera realizar acciones programadas. Y si bien el concepto funcionó bastante bien, no acabé por sacarle partido, ya que esas mismas acciones acabé por realizarlas con un sistema de etiquetas NFC, que tenían la ventaja de que no necesitaban ningún tipo de alimentación. Así que acabé con un grupo de ESP-01 sin uso, rondando por la casa.
No me había acordado mucho de ellos, hasta que hace poco me encontré con un empaquetado del ESP-01 conjunto con un relé, así como las borneras necesarias para realizar las conexiones con la alimentación y con el cableado que quieras controlar con el relé. Y eso despertó mi interés por aprovecharlo para algunas cosas más. Sobre todo, porque esa placa venía equipada con un regulador eléctrico que permite alimentar al dispositivo con un rango de voltajes algo más amplio, de 5 a 12 voltios en continua, lo que facilita el uso de la placa.
Pero lo que verdaderamente me hizo tener todo el interés por esta placa fue el hecho de que es completamente compatible con el firmware Tasmota. He venido haciendo uso de este firmware desde hace tiempo como base del sistema de iluminación de mi casa, específicamente para los dispositivos Sonoff, pero admite su uso en una gran variedad de dispositivos basados en Arduino, lo cual es una ventaja para realizar un prototipado rápido. De hecho, es tan rápido que ni siquiera es necesario programarlos con el IDE de Arduino, basta con bajar un firmware ya compilado y utilizar Tasmotizer para grabarlo. Tremendamente práctico.
Sin embargo, en mi caso he decido dar un paso más allá. Hago uso de la v4 de la placa de relé para el ESP-01. Esta placa dispone de un botón externo para resetear el dispositivo. En versiones anteriores de esta placa este botón podía ser programado para actuar como un pulsador externo, pero no en el caso de la v4. Pensando en hacer uso de esta placa como control de encendido de luces en la domótica, esta limitación es bastante importante. Sin embargo, es posible hacer algo al respecto: dado que hay puertos libres en el ESP-01, es posible programar alguno de estos puertos como un interruptor externo, añadiendo un interruptor al mismo, y conectando el otro puerto a GND. Además, el firmware Tasmota permite activar las resistencias internas de pull-up en los pines GPIO del ESP-01, con lo que ni siquiera es necesario hacer uso de resistencias pull-up externas, lo que complicaría el cableado de manera innecesaria.
También es posible configurar el modo de funcionamiento de este interruptor, tanto como un interruptor clásico, como de tipo pulsador. En el primer caso es cuestión de configurar el GPIO como “Switch”, y en el segundo como “Button”. Esto se hace accediendo al menú de configuración de Tasmota (Configuration → Configure Module), y asigna el GPIO correspondiente como Switch
Sin embargo, hay que modificar ligeramente el hardware para poder utilizar de manera sencilla este interruptor, ya que la placa no viene configurada para poder hacer uso de estos GPIO. En mi caso, opté simplemente por soldar una bornera al GPIO 3 y a GND, que son las conexiones que estoy usando:
Y con esto, lo tenemos listo. En las imágenes he utilizado una batería de 9V para alimentar al conjunto, con un resultado perfecto, pero lo ideal es usar un transformador externo, de cualquier voltaje entre 5 y 12v.
Volvemos a la carga con los Sonoff Mini. En este caso, con los modelos R2. Hace ya cosa de 6 años escribí por primera vez sobre estos dispositivos, y un año después actualicé el manual de programación de los mismos. Estamos en 2025, y toca una nueva actualización. Y es que estoy realizando una mejora en la domótica de la casa en Forcarey, y he tenido necesidad de hacer un despliegue de un par de Minis. En este caso, de los R2. Y al ir a desplegar en los mismos el firmware Tasmota me he encontrado con que la guía que utilicé en su momento ya no es completamente funcional.
Desde un punto de vista del dispositivo, las dos principales diferencias del R2 con respecto al modelo original son que los R2 no tienen antena externa, y que los conectores para el pulsador externo vienen marcados en gris, frente al negro del resto de los terminales.
A la hora de cargarles el firmware Tasmota, hay que tener en cuenta que los dispositivos han pasado a traer de casa el firmware eWelink, y en sus últimas versiones (3.7.6, a fecha en que escribo esto) no muestra el identificador del dispositivo de manera tan sencilla como antes, lo que dificulta el activar el modo OTA. Sin embargo, ejecutando los siguientes pasos he conseguido realizar el cambio de firmware a Tasmota:
A continuación, desbloqueamos la actualización OTA: curl http://[IP_DISPOSITIVO]:8081/zeroconf/ota_unlock -XPOST –data ‘{“deviceid”:”[deviceID]“,”data”:{} }’. Tras ello, volvermos a ejecutar la petición de info, y el parámetro otaUnlock debe mostrar el valor true.
Por último, ejecutamos el comando para actualizar el firmware. A diferencia de los manuales de 2019 y 2020, no es necesario desplegar un servidor local para ello, podemos tomarlo directamente de Internet:
curl http://[IP_dispositivo]:8081/zeroconf/ota_flash-XPOST –data ‘
{
“deviceid”: “[deviceID]“,
“data”: {
“downloadUrl”: “http://sonoff-ota.aelius.com/tasmota-latest-lite.bin”,
“sha256sum”: “5c1aecd2a19a49ae1bec0c863f69b83ef40812145c8392eebe5fd2677a6250cc”
}
}’
Tras esto, el dispositivo se actualizará a la versión 9.5.0 de Tasmota.
Etiquetas: sonoff mini, tasmota
En fechas recientes he implementado un elemento adicional de interacción con la domótica. No es algo especialmente nuevo (de hecho, ya en Irlanda empecé a trastear con ellos), pero sí es algo que he recuperado recientemente: el uso de tags NFC para interactuar con la domótica, usando teléfonos inteligentes. La idea es bastante sencilla: desplegar una serie de tags desplegados por la casa, allí donde quiera que se dispare una acción concreta, para escanearlo con el teléfono, y ejecutar la acción. Y el elemento más obvio para ello es el control de luces inteligentes.
En mi caso, tengo desplegadas dos tecnologías diferentes para el control de luces inteligentes: interruptores WiFi (básicamente, diversas variedades de Sonoff) y luces Zigbee, que controlo mediante sendas plataformas zigbee2MQTT que tengo tanto en Santiponce como en Forcarey. Todo ello integrado en mi servidor MQTT, que se utiliza también con la plataforma HomeAssistant. La gracia del asunto es que toda la interacción con ellas se realiza desde el propio HomeAssistant, independientemente de la tecnología subyacente. Y siempre usando MQTT como elemento de mensajería.
Para poner en marcha el sistema de interacción basado con NFC he optado por lo siguiente: codificar en los NFC el envío de un datagrama UDP. La razón de hacerlo así es que es que de esta manera se evita, como es el caso de conexiones HTTP o similar, el tener que hacer uso de un programa específico en el teléfono, ya que mediante el envío del datagrama se evita que el usuario tenga que interactuar con ninguna aplicación, haciéndose el envío siempre en segundo plano. Esto implica que es preciso tener abierto en algún lugar un puerto UDP al que enviar los mensajes. Y la opción obvia en mi caso es hacer uso de Node-Red.
Así pues, he hecho un flujo bastante simple, que lo que hace es exponer un puerto UDP, a donde el teléfono envía la mensaje del datagrama. Este mensaje, en líneas generales, es un alfanumérico que me permite identificar qué luz quiero encender (por ejemplo, santiponceSalon1, para identificar la luz principal del salón de Santiponce). Una vez recibido el mensaje, se procesa en un switch, con tantas entradas como luces a controlar (en mi caso, de momento, 4), y se incluye en el payload el mensaje de encendido/apagado. Aquí hay dos opciones:
Una vez publicado el flujo, el servidor donde tengamos desplegado Node-Red abrirá un puerto UDP para escuchar conexiones (aconsejo hacer uso de un puerto alto, para evitar tener que asignar permisos de root). En mi caso, dado que publico Node-Red mediante un contenedor docker, es por lo que tenía que realizar una publicación de puertos del contenedor, de lo que hablaba en el artículo anterior. Y con esto, estaremos listos para controlar las luces con un móvil NFC.
Un par de comentarios adicionales:
Etiquetas: android, domótica, homeassistant, mqtt, nfc, node-red, sonoff, tasmota, udp, wifi, zigbee, zigbee2mqtt
Hace cosa de un año escribí un artículo sobre cómo actualizar de manera manual el firmware de los Sonoff Mini, cambiándolo al firmware Tasmota. Recientemente he adquirido una nueva remesa de Sonoffs Mini, y he comprobado que el manual ya no es válido, debido a un cambio en el firmware de casa que traen los dispositivos. En la práctica, se ha simplificado el proceso, que paso a describir:
…y como siempre, mucho ojo con no cargar la versión tasmota-minimal, ya que esta versión no carga la interfaz web de administración, y puede dejar el dispositivo inservible.
Etiquetas: domótica, ota, sonoff, sonoff mini, tasmota
Editado: Esta versión del artículo se ha quedado obsoleta. En los comentarios se encuentra un enlace a la nueva versión del mismo.
Gran parte de la domótica que tengo instalada en casa está basada en dispositivos Sonoff. Empezando por el Sonoff Basic, y siguiendo con interruptores de pared y sistemas duales, estos aparatos me han proporcionado una gran versatilidad para controlar de manera remota diversos elementos que tengo por casa. Al principio realizaba estos despliegues con montajes basados en NodeMCU y relés convencionales, pero la falta de un buen empaquetamiento de estas soluciones ad-hoc generaba algunos problemas de seguridad en casa. Así que cuando tuve conocimiento de los Sonoff, y vi que desde el punto de vista económico no había mucha diferencia con lo que gastaba en mis sistemas hechos a medida, decidí pasar a emplearlos en mis nuevos montajes.
El principal problema con los Sonoff, sin embargo, es que no me hace mucha gracia utilizar una plataforma de terceros sobre la que no tengo el control. Por otro lado, con el firmware de casa enfocado al uso de esta plataforma propietaria, no tenía capacidad para integrarlos de manera adecuada en mi propia plataforma. Para solucionar este problema tuve la enorme suerte de conocer el firmware libre Tasmota, que permite independizarse de manera completa de la plataforma propietaria del fabricante, e integrar el sistema con soluciones abiertas (como por ejemplo basadas en protocolo MQTT, que es la base de mi sistema domótico).
Hasta ahora había estado enormemente contento con esta solución, pero desde el principio esta solución tenía un lunar: si bien los dispositivos Sonoff funcionaban excepcionalmente bien por sí solos, o controlados mediante el sistema de domótica, no había una solución adecuada para integrarlos con interruptores de pared convencionales: dado que los Sonoff sólo disponen de entrada y salida de fase (y si acaso de neutro), no presentan la tercera conexión que permite integrarlos en un sistema de llaves conmutadas. Y si bien es cierto que existe la serie TX de interruptores de pared, éstos tampoco pueden usarse de manera conmutada, lo cual es un fastidio bastante importante para usarlos en habitaciones grandes, o en dormitorios.
Pues bien, la nueva serie Sonoff Mini ha venido a solucionar este gran inconveniente. Este dispositivo dispone de dos entradas de control, de tal manera que se puede colocar cualquier interruptor convencional para interactuar con el dispositivo, incluyendo interruptores conmutados. Lo único que hay que tener en cuenta (y desde mi punto de vista es una ventaja) es que estos interruptores pasan a formar un circuito separado, por los que no pasan ni fase ni neutro, y que lo único que hacen es cerrar el circuito de control en el Sonoff. Mejor desde el punto de vista de la seguridad.
La segunda característica interesante es que los Sonoff Mini tienen un tamaño bastante reducido, que en teoría permitiría colocarlos dentro del mismo hueco donde tengamos nuestro interruptor. Y digo en teoría porque, si bien es cierto que por ancho y alto entrarían perfectamente (miden 42.6×46.6mm), el problema viene por la profundidad de 20mm, que me temo que en la mayoría de los casos basta para imposibilitar colocarlos detrás del enchufe. En cualquier caso, no es un gran problema: siempre se pueden colocar dentro de la caja de registro de la habitación, y a correr.
Dicho todo esto, no podía menos que hacerme con algunos de ellos para probarlos. Y en efecto, son una pequeña maravilla. El problema, en mi caso, vino a la hora de cambiarles el firmware de fábrica por el Tasmota. Por lo general con los Sonoff no es demasiado complicado: soldar los pines para conectar un conversor serie-TTL en los conectores que los dispositivos traen de fábrica, y cargar el firmware desde el IDE Arduino. La dificultad con el Mini es que todo es mucho más reducido, por lo que la ubicación de estos conectores en muy poco conveniente, encima el fabricante ha dejado soldados estos conectores, lo que fastidia bastante a la hora de querer usarlos (y encima luego tienes que desoldar lo que sea que conectes, porque si no, la caja del dispositivo no cierra):
En teoría, esto no tendría que ser necesario, ya que el fabricante proporciona unas instrucciones y una aplicación específica para cargar firmware personalizado mediante una actualización OTA (y que el mismo fabricante publicita, indicando que estos dispositivos son DIY): supuestamente es cuestión de descargar dicho software, conectar un jumper (que viene con el mismo Sonoff) para entrar en modo DIY, levantar la WiFi de programación que el dispositivo espera encontrar, y cargar el firmware que queramos. Pero en la práctica no he parado de encontrarme inconvenientes: el software del fabricante sólo funciona en Windows (que, para colmo, lo marca como posible software malicioso), la mitad de las veces el software es incapaz de detectar de manera correcta el Sonoff Mini, y para colmo, a la hora de realizar el cambio de firmware, el software trata de hacer una conexión a un servidor del fabricante para notificar que estás cambiando el firmware, y paraliza la actualización si no es capaz de conectar con dicho servidor (ver punto 17 del este enlace).
Así que tras una mañana enormemente improductiva tratando de reemplazar el firmware, volví al buen y viejo sistema manual, si bien aún On The Air. Este modo manual es el que desde Tasmota se recomienda para dispositivos Mac, pero he podido comprobar que funciona perfectamente para sistemas Linux. El recetario es el siguiente:
$ shasum -a 256 tasmota-wifiman.bin
En este ejemplo, el <deviceID> es 1000988699
$ avahi-browse -t _ewelink._tcp --resolve
+ wlp3s0 IPv4 eWeLink_1000988699 _ewelink._tcp local
= wlp3s0 IPv4 eWeLink_1000988699 _ewelink._tcp local hostname = [eWeLink_1000988699.local] address = [192.168.1.109] port = [8081] txt = ["data1={"switch":"off","startup":"off","pulse":"off","pulseWidth":500,"rssi":-47}" "seq=1" "apivers=1" "type=diy_plug" "id=1000988699" "txtvers=1"]
$ curl http://<deviceIP>:8081/zeroconf/info -XPOST --data '{"deviceid":"<deviceID>","data":{} }'
{"seq":2,"error":0,"data":"{"switch":"off","startup":"off","pulse":"off","pulseWidth":500,"ssid":"sonoffDiy","otaUnlock":false}"}
$ curl http://<deviceIP>:8081/zeroconf/ota_unlock -XPOST --data '{"deviceid":"<deviceID>","data":{} }'
{"seq":2,"error":0}
$ curl http://<deviceIP>:8081/zeroconf/ota_flash -XPOST --data '{"deviceid":"<deviceID>","data":{"downloadUrl": "http://<webServer>/tasmota-wifiman.bin", "sha256sum": "<SHAsum>"} }'
{"seq":2,"error":0}
192.168.4x.xx - - [21/Dec/2019:12:52:33 +0100] "GET /tasmota-wifiman.bin?deviceid=xxxxxxxxxxx&ts=1481765933&sign=95300ceae2fb9cd19f09283e54169cfa7f998d38bf33463ad613e24e76098b20 HTTP/1.1" 206 4394 "-" "itead-device"
192.168.4x.xx - - [21/Dec/2019:12:52:33 +0100] "GET /tasmota-wifiman.bin?deviceid=xxxxxxxxxxx&ts=1085377743&sign=c96e52cf3e9b7680003df7f3d17a5d266de35d486bf25a62b03d6737a1cc6083 HTTP/1.1" 206 4397 "-" "itead-device"
GPIO Tasmota Component Device Function
0 Button1 (17) Button
4 Switch1 (9) S1/S2
12 Relay1 (21) L Out
13 LED1 (56) Link/Power Indicator
¡Y listos! Con esto el Sonoff Mini pasa a estar configurado como un nuevo dispositivo con firmware Tasmota. A continuación he dejado un vídeo en el que se ve cómo se puede interactuar con el Sonoff Mini, una vez ya configurado con el software Tasmota, y un interruptor físico:
Editado:
Estas Navidades he estado haciendo algunas pruebas de campo con Sonoff Mini, ya con el firmware Tasmota, y han sido sumamente interesantes. El principal aspecto que he notado es que con el firmware tasmota-wifiman, en el caso de realizar múltiples encendidos y apagados consecutivos pueden perderse algunos de los encendidos y apagados. Para evitar este inconveniente, es recomendable hacer una actualización del firmware a una versión convencional. Para ello, se habrán de realizar los siguientes pasos:
Etiquetas: apache2, domótica, ncat, sonoff, sonoff mini, tasmota