Horario de ledes de puntos de acceso UniFi

Los puntos de acceso UniFi tienen esa característica forma de platillo volador con un círculo interior donde se ve una luz led que puede ser de un color diferente dependiendo de la generación del punto de acceso o dependiendo también del estado en que se encuentre sobre todo si está adoptado o no.

En principio uno puede activarlos o desactivarlos desde el tablero de UniFi, pero es una opción que es un poco engorrosa de encontrar. Tengo entonces el caso de que uno de los puntos de acceso está instalado en el cielo raso suspendido de mi recámara, por lo que si lo dejo encendido, por la noche tendré iluminada en tono azul tenue toda la habitación.

Puedo dejarlo desactivado, pero en cierto modo, prefiero tenerlo a la vista para que me anuncie cualquier problema que surja, sobre todo si se actualiza el firmware. Así que buscando y buscando como automatizar este proceso, pensé primero en la API REST de UniFi, pero desafortunadamente no es pública y lo poco que existe lo ha hecho un grupo de personas por ingeniería reversa. De todas maneras, entre las llamadas y endpoints que han encontrado no hay ninguno que me oriente a lo que busco.

En los foros hay varios scripts, pero la mayoría de ellos han dejado de funcionar con el tiempo. Sin embargo, el usuario slooffmaster de los foros de la comunidad UniFi ha hecho público una API PHP de UniFi. Revisando la documentación, hay una función llamada site_leds que al parecer es justo lo que necesito. En contraparte, entonces está el hecho que necesito ejecutarlo sobre PHP para que funcione.

Así que manos a la obra, me he dispuesto a crear un contenedor docker con todo lo necesario, ya listo para usar. De este modo, no será necesario «instalar» PHP junto con todo lo asociado para que funcione. Algo que he tenido en cuenta, es que posiblemente podría funcionar a través de internet el script haciendo su correspondiente redirección de puertos, pero considerando a mi proveedor actual de internet, puede darse el caso que deje de funcionar en un momento dado, así que mejor mantenerlo en local, clonamos el repositorio.

$ git clone git@github.com:linkmoises/unifi-ap-led-control.git

Editamos el archivo config.php con los datos de nuestra conexión. Es preferible crear un usuario nuevo dedicado exclusivamente a esta tarea en el dashboard de UniFi. Ahora construimos la imagen de Docker.

$ docker build -t unifi-ap-led-control .

Y creamos el contenedor

$ docker run -d --restart unless-stopped -p10080:8080 unifi-ap-led-control:latest

El script lo he puesto en el bastión hobbiton, llamarlo solo es cuestión de hacer la petición a la URI.

$ curl localhost:10080/led_on.php
$ curl localhost:10080/led_off.php

Una vez hecho esto, obtendremos una respuesta true indicando que el comando se ejecutó con éxito y podremos verificar físicamente que funcionó. Si obtenemos un error, se volcará una respuesta con la salida en formato json asociada.

Ahora, podremos ejecutar una tarea cron de manera que a una hora específica se apaguen o enciendan los ledes. Incluso podemos añadir el bot de Slack para que nos notifique algún evento. Cómo no hay una manera específica a través de la API PHP de UniFi de acceder específicamente a uno de los puntos de acceso, o se apagan todos o se encienden todos.

0 6 * * * curl localhost:10080/led_on.php >/dev/null 2>&1
0 22 * * * curl localhost:10080/led_off.php >/dev/null 2>&1

Y así, tenemos configurado un horario de encendido (6AM) y apagado (10PM) de los ledes de los puntos de acceso UniFi. Si en algún momento slooffmaster decide extender la API PHP que creó, también actualizaré el repositorio para reflejar los cambios. Aunque como siempre existe la opción de hacerlo uno mismo, así que ¿quién sabe? a lo mejor termino haciendo un pull request contribuyendo este detalle.


avatar
Moisés Serrano Samudio Médico de atención primaria, fotógrafo aficionado, apasionado de las tecnologías relacionadas con el EdTech y el eHealth y diseñador/desarrollador de sitios web de salud. Médico, apasionado del EdTech/eHealth y diseñador/desarrollador de sitios web de salud.
  1. Aún no hay comentarios...

Deja una respuesta

Su email no será publicado. Required fields are marked *