"Domotizar" una lámpara de escritorio por 10€

04 febrero 2019

Hace ya unos cuantos meses había comprado este aparatillo: un interruptor wifi, con la intención de probar a “domotizar” algo en casa.

Este modelo concreto es de doble canal por lo que lleva dos interruptores en el mismo aparato, pero para este proyecto con un sólo canal es suficiente.

Como la mayoría de estos aparatos de bajo coste están basado en el chip ESP8266 usado originalmente para dotar de conectividad wifi a los Arduino, pero que ha demostrado su solvencia usado de forma independiente.

Como era mi primera prueba no quise complicarme mucho y decidí no flashearlo ni nada por el estilo usando el software “original”

Tras darle varias vueltas a que “domotizar” encontré un candidato. Mi lampara de escritorio, esa que siempre me dejaba encendida cuando me levantaba de la mesa de trabajo 😅 .

El proceso de instalación del interruptor wifi fue muy sencillo, cortar el cable de alimentación y conectarlo al nuevo.

⚠ Creo que sobra decir que cualquier manipulación de cableado: siempre con la lámpara desenchufada ⚠

Una vez vuelto a conectar todo, seguí los pasos indicados por la app eWeLink para sincronizar el dispositivo y ya de entrada podía encender y apagar la lámpara desde el móvil, lo que no es nada práctico.

Mi idea era hacer que la lampara se encendiese al desbloquear el ordenador y que se apagase cuando este entrase en modo ahorro de energía (apagado del monitor).

Investigando, encontré la forma de que dbus lance comandos cuando cambia el estado del salva pantallas de Gnome

lamp.sh

1
2
3
4
5
6
7
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" |
while read x; do
case "$x" in
*"boolean true"*) echo "SALVA PANTALLAS ACTIVADO, APAGAR LAMPARA";;
*"boolean false"*) echo "SALVA PANTALLAS DESACTIVADO, ENCENDER LAMPARA";;
esac
done

Este fichero lamp.sh debe lanzarse al iniciar nuestra sesión cada vez que arranquemos el equipo, así que lo más simple es añadirlo a la lista de Startup applications de Gnome

Ahora sólo me quedaba ser capaz de poder lanzar esos eventos al servidor de gestión del interruptor wifi, de la misma forma que lo hace la app móvil.

Lo que hace el interruptor cuando lo sincronizamos es conectarse a un servidor externo (esta parte es la que menos me gusta, pero puede cambiarse) y esperar comandos. Usando IFTTT podemos enlazar un dispositivo eWeLink (o Sonoff) con un evento, en este caso el evento es un webhook que nos permite llamar a una URL para ejecutar el evento.

Este webhook tiene esta forma: https://maker.ifttt.com/trigger/[nombre_del_evento]/with/key/[la_key_que_te_da_ifttt]

Donde el nombre del evento lo definimos al crearlo, y la_key_que_te_da_ifttt te la proporciona IFTTT al crear el primer webhook https://ifttt.com/maker_webhooks

Ya solo queda crear dos Applets en IFTTT (uno para encender y otro para apagar) enlazados a las acciones que nos proporciona respecto a eWeLink y retocar nuestro lamp.sh para que llame a estos webhooks.

lamp.sh

1
2
3
4
5
6
7
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" |
while read x; do
case "$x" in
*"boolean true"*) curl -X POST https://maker.ifttt.com/trigger/turn_off_desktop_lamp/with/key/[TU_KEY];;
*"boolean false"*) curl -X POST https://maker.ifttt.com/trigger/turn_on_desktop_lamp/with/key/[TU_KEY];;
esac
done

No es la solución perfecta, sobre todo en lo que respecta a depender de un servidor externo para algo tan simple, pero es un primer paso sobre el que evolucionar.

Olvidaba comentar que también es posible conectar el interruptor a Google Home, Alexa o HomeKit, yo lo he probado con Google Home y funciona correctamente.