Saltar al contenido principal

Integración domótica OpenWrt, gratuita y de código abierto

Integración OpenWrt para Gladys Assistant

Routers OpenWrt: presencia de dispositivos, estado del router, caudal y cortes WAN, Wi-Fi invitados.

Siga su router o punto de acceso OpenWrt desde Gladys, por su red local: quién está en casa (los teléfonos conectados al Wi-Fi), el estado del router, el estado y el caudal de la conexión a internet, el Wi-Fi de invitados. Sin nube, sin cuenta.

La integración habla con el router como LuCI, la interfaz web de OpenWrt: mediante ubus por HTTP (/ubus, sesiones rpcd). Un router sin /ubus pero con la API LuCI RPC (luci-mod-rpc) sigue dando la presencia y el tiempo de funcionamiento.

Desarrollada sin el hardware: sus comentarios son bienvenidos. La integración está construida y probada con las respuestas de OpenWrt leídas en su código fuente (procd, netifd, hostapd, rpcd), no con un router real. Díganos qué funciona y qué no en las issues.

Este proyecto no está afiliado al proyecto OpenWrt. OpenWrt es una marca de su propietario.

Lo que necesita​

  • Gladys Assistant 5.1.0 o posterior.
  • Un router o punto de acceso con OpenWrt 18.06 o posterior, con rpcd y uhttpd-mod-ubus. Ambos vienen con LuCI: todas las imágenes estándar los tienen. Compruebe en el router: ls /usr/lib/uhttpd_ubus.so debe mostrar el archivo. Si no: opkg install rpcd uhttpd-mod-ubus (apk add en OpenWrt 25), y luego /etc/init.d/uhttpd restart.
  • Un usuario rpcd para Gladys (abajo). root también funciona, pero un usuario dedicado que solo puede leer es más seguro.

Puesta en marcha​

El usuario rpcd y su ACL​

  1. Conéctese al router por SSH y cree el archivo /usr/share/rpcd/acl.d/gladys.json. La parte read es lo que la integración lee; la parte write solo sirve para las órdenes (Wi-Fi de invitados, reinicio):

    {
    "gladys": {
    "description": "Gladys Assistant",
    "read": {
    "ubus": {
    "system": ["board", "info"],
    "network.interface": ["dump"],
    "network.device": ["status"],
    "network.wireless": ["status"],
    "hostapd.*": ["get_clients"],
    "iwinfo": ["assoclist"],
    "luci-rpc": ["getDHCPLeases"],
    "file": ["read"],
    "uci": ["get"]
    },
    "file": { "/tmp/dhcp.leases": ["read"] },
    "uci": ["wireless"]
    },
    "write": {
    "ubus": { "system": ["reboot"], "uci": ["set", "commit"] },
    "uci": ["wireless"]
    }
    }
    }
  2. Cree el login, con su propia contraseña (uhttpd -m la convierte en un hash: no se guarda en claro):

    uci add rpcd login
    uci set rpcd.@login[-1].username='gladys'
    uci set rpcd.@login[-1].password="$(uhttpd -m 'elija-una-contrasena-larga')"
    uci add_list rpcd.@login[-1].read='gladys'
    uci commit rpcd
    /etc/init.d/rpcd restart
  3. Solo si quiere las órdenes: dé también la parte de escritura al login, con list write 'gladys' en su sección de /etc/config/rpcd, y luego /etc/init.d/rpcd restart.

Conviene saber: network.wireless status y uci get wireless pueden mostrar las claves Wi-Fi a este usuario. La integración solo lee los nombres, los SSID y la opción disabled del Wi-Fi de invitados, no guarda ninguna clave y nunca escribe una en sus registros. Las líneas uci y file son opcionales: sin ellas, no se leen el Wi-Fi de invitados ni las concesiones de un router antiguo sin luci-rpc.

La configuración​

En Gladys, abra la integración y luego Configuración:

  • Dirección del router: la dirección IP del router (192.168.1.1 por defecto), con :puerto si su servidor web usa otro puerto.
  • Usar HTTPS: cifra la contraseña en su red, cuando luci-ssl está instalado. Un router que redirige HTTP a HTTPS se sigue de todos modos.
  • Aceptar un certificado autofirmado: OpenWrt crea su propio certificado en el primer arranque; márquelo para su propio router.
  • Nombre de usuario y Contraseña: el login rpcd creado arriba.
  • Interfaz: deje Automático (ubus, y LuCI RPC solo si el router no tiene /ubus).
  • Intervalo de actualización: de 10 s a 1 min (30 s por defecto).
  • Interfaces WAN: vacío, la integración toma wan y las interfaces con la ruta predeterminada. Si no, los nombres de Red → Interfaces (wan, wwan), cuatro como máximo.
  • Retardo de salida (minutos) y Contar una concesión DHCP como presente: vea los sensores de presencia más abajo.
  • Red Wi-Fi de invitados: el nombre de la sección wifi-iface de la red de invitados (guest, wifinet2…). Listar las redes Wi-Fi las muestra.
  • Permitir órdenes: desactivado por defecto (vea las acciones).
  • Idioma de los nombres: idioma de los nombres de dispositivos y funciones.

Guarde y haga clic en Probar la conexión: el informe dice qué interfaz ha respondido, las interfaces WAN y las radios encontradas, los clientes vistos y lo que la ACL no permite.

Los dispositivos​

Abra la pestaña Descubrir: allí aparecen el router y los clientes de la red que ve. Añada los que quiera.

El router​

  • Carga del sistema (1 min): la carga media en porcentaje de un núcleo del procesador (un router con 4 núcleos ocupados muestra 400 %).
  • Memoria usada, en porcentaje.
  • Tiempo de funcionamiento, en horas.
  • Versión de OpenWrt (23.05.5).
  • Clientes Wi-Fi por radio (Clientes Wi-Fi 2.4 GHz, 5 GHz…): las estaciones conectadas y autorizadas.
  • Wi-Fi de invitados activado, cuando se elige una red de invitados.
  • Para cada interfaz WAN: caudal de Descarga y de Subida (Mbit/s, el promedio sobre el intervalo de actualización) y Enlace WAN (1 cuando está activo).

Nada en estos dispositivos es un interruptor: un asistente de voz no puede apagar el Wi-Fi de invitados ni reiniciar el router por error.

Sensores de presencia​

Cada cliente añadido se convierte en un sensor de Presencia: presente mientras está conectado (y autorizado) al Wi-Fi del router, ausente cuando no se ha visto durante el retardo de salida (5 minutos por defecto): un teléfono en reposo deja el Wi-Fi unos minutos.

  • Un router que no se puede leer no cambia a nadie: una avería nunca deja a toda la casa ausente.
  • Los dispositivos con cable no están en el Wi-Fi: marque Contar una concesión DHCP como presente para ellos, sabiendo que una concesión dura hasta que caduca (12 h por defecto).
  • Los teléfonos usan una dirección MAC privada (aleatoria) por red Wi-Fi: siga la dirección que el teléfono usa en su red y manténgala fija en sus ajustes Wi-Fi.

Panel de control​

  • Router OpenWrt: carga, memoria, caudal del primer WAN, clientes Wi-Fi, estado de cada enlace WAN, de cada radio y del Wi-Fi de invitados, tiempo de funcionamiento y versión. Con las órdenes permitidas: un botón Wi-Fi de invitados (su icono muestra el estado actual) y un botón Reiniciar, ambos con confirmación.
  • Dispositivos en casa: los dispositivos seguidos, presentes primero, con el tiempo desde una salida; un ajuste muestra solo los presentes.

Escenas​

Disparadores​

  • Dispositivo desconocido conectado: una dirección MAC nunca vista se ha unido al Wi-Fi o ha obtenido una concesión DHCP. La primera lectura aprende la red tal como está; las direcciones vistas se guardan en /data. Filtros: Visto por (Wi-Fi o concesión DHCP) y Red Wi-Fi (SSID). Variables: dirección MAC, dirección IP, nombre de host, SSID, interfaz Wi-Fi.
  • Enlace WAN cortado: una interfaz WAN ha caído. Filtro: Interfaz WAN (p. ej. wan).
  • Enlace WAN restablecido: vuelve a estar activa; la variable Duración del corte (minutos) da la duración del corte.

Acciones​

Las acciones no hacen nada mientras Permitir órdenes no esté marcado, y el router las rechaza si la ACL no tiene parte de escritura.

  • Encender el Wi-Fi de invitados y Apagar el Wi-Fi de invitados: cambian la opción disabled de la sección elegida y la confirman; OpenWrt recarga el Wi-Fi (las demás redes parpadean unos segundos). La salida indica si el Wi-Fi de invitados está activado.
  • Reiniciar el router OpenWrt: la red se corta de uno a tres minutos.

Ideas de escenas​

  • Llegan invitados: el sábado a las 18 h, Encender el Wi-Fi de invitados; a la 1 h, Apagar el Wi-Fi de invitados.
  • Nadie en casa: cuando los sensores de presencia de los teléfonos están todos ausentes, active la alarma y baje la calefacción.
  • Dispositivo desconocido conectado en su SSID principal: envíe un mensaje con la dirección MAC y el nombre de host.
  • Enlace WAN restablecido tras más de 10 minutos: envíese la duración del corte.

Con qué frecuencia se lee el router​

En cada intervalo de actualización, la integración llama a system info, network.interface dump, network.device status, network.wireless status, al get_clients de cada punto de acceso (o iwinfo assoclist) y a las concesiones DHCP: una decena de pequeñas peticiones, solo de lectura, en su red local. Gladys no consulta estos dispositivos: el temporizador es el de la integración. Solo se envían a Gladys los valores que cambian, con un reenvío cada seis horas.

Solución de problemas​

  • «ni ubus ni LuCI RPC aquí»: instale uhttpd-mod-ubus (vea arriba), o compruebe la dirección y el puerto.
  • «nombre de usuario o contraseña rechazados por rpcd»: compruebe el login en /etc/config/rpcd y reinicie rpcd. Tras un rechazo, la integración espera cinco minutos antes de reintentar: haga clic en Probar la conexión para reintentar ya.
  • «rechazado por la ACL rpcd»: el archivo de la ACL falta o no nombra el login (list read 'gladys'); el informe enumera lo que no se puede leer.
  • «certificado rechazado»: marque Aceptar un certificado autofirmado.
  • Ningún cliente Wi-Fi: los puntos de acceso necesitan hostapd.* en la ACL; con un hostapd compilado sin ubus, rpcd-mod-iwinfo debe estar instalado.
  • Registros: ponga LOG_LEVEL=debug en el contenedor para el detalle de cada lectura (nunca una contraseña ni una clave Wi-Fi).

Límites​

  • Un router por integración: los clientes de otros puntos de acceso no se ven en su Wi-Fi (la opción de concesión DHCP los ve de todos modos).
  • El enlace WAN es el estado de la interfaz: un corte detrás de un enlace activo (del lado del operador) no se ve. Los caudales son promedios sobre el intervalo.
  • El Wi-Fi de invitados es una sección wifi-iface, nombrada en la configuración; OpenWrt no lista una red desactivada (escriba su nombre).
  • Alternativa LuCI RPC: presencia por la tabla de vecinos (menos precisa que el Wi-Fi), tiempo de funcionamiento y reinicio solamente; sin disparador de dispositivo desconocido.
  • Desarrollada sin el hardware: la confirmación del Wi-Fi de invitados, el reinicio y la alternativa LuCI RPC no están probados en un router real.

Parámetros de configuración​

Estos son los parámetros que OpenWrt te pide en su pantalla de configuración en Gladys.

ParámetroTipoObligatorioDescripción
Su router OpenWrtsectionNoOpenWrt 18.06 o posterior, con rpcd y uhttpd-mod-ubus (instalados con LuCI). Cree un usuario rpcd dedicado con la ACL de la documentación: la solo lectura basta para la presencia y las medidas.
Dirección del routerstringSíDirección IP o nombre del router, con :puerto si su servidor web no usa el puerto predeterminado.
Usar HTTPSbooleanNoCifra la contraseña en su red. OpenWrt sirve HTTPS cuando luci-ssl está instalado. Un router que redirige a HTTPS se sigue de todos modos.
Aceptar un certificado autofirmadobooleanNoOpenWrt crea un certificado autofirmado en el primer arranque. Márquelo solo para su propio router.
Nombre de usuariostringSíUn login de /etc/config/rpcd, idealmente un usuario dedicado de solo lectura (vea la documentación).
ContraseñasecretNo
InterfazselectNoAutomático usa ubus (/ubus) y recurre a la API LuCI RPC (luci-mod-rpc) solo si el router no tiene /ubus.
Intervalo de actualizaciónselectNoFrecuencia de lectura del router. Los caudales son promedios sobre este intervalo.
Interfaces WANstringNoNombres de Red → Interfaces, separados por comas, cuatro como máximo. Vacío: wan y las interfaces con la ruta predeterminada.
PresenciasectionNoAñada los dispositivos que quiera seguir desde la pestaña Descubrir: cada uno se convierte en un sensor de presencia, presente mientras está conectado al Wi-Fi del router.
Retardo de salida (minutos)numberNoUn dispositivo que ya no se ve solo cuenta como ausente tras este retardo: un teléfono en reposo deja el Wi-Fi unos minutos.
Contar una concesión DHCP como presentebooleanNoUna concesión dura hasta que caduca (12 h por defecto), mucho después de que el dispositivo se fue: márquelo solo para dispositivos con cable que nada más ve.
Wi-Fi de invitados y órdenessectionNoSolo lectura por defecto. Las órdenes encienden o apagan el Wi-Fi de invitados y reinician el router, desde una escena o un widget. Nunca se cambia nada más.
Red Wi-Fi de invitadosstringNoEl nombre de su sección wifi-iface en /etc/config/wireless. «Listar las redes Wi-Fi» las muestra. Vacío: sin Wi-Fi de invitados.
Permitir órdenesbooleanNoPermite a escenas y widgets encender o apagar el Wi-Fi de invitados y reiniciar el router. La ACL rpcd necesita la parte de escritura de la documentación.
Idioma de los nombresselectNoIdioma de los nombres de dispositivos y funciones, fijados cuando se añade un dispositivo a Gladys.

Cómo instalar OpenWrt en Gladys​

  1. En Gladys, abre Integraciones: OpenWrt aparece en el catálogo junto a las integraciones nativas, con una insignia de comunidad.
  2. Haz clic en Instalar. Gladys descarga la imagen Docker (ghcr.io/guim31/gladys-openwrt:1.0.1), la ejecuta en un entorno aislado del núcleo y genera la interfaz de la integración (dispositivos, descubrimiento y configuración).
  3. Abre la pantalla de Configuración de la integración, rellena los parámetros y guarda.
  4. También puedes instalarla directamente desde la URL de su repositorio: https://github.com/guim31/gladys-openwrt.

OpenWrt requiere Gladys >=5.1.0. El catálogo de Gladys se actualiza cada hora, así que una nueva versión está disponible como máximo una hora después de publicarse.

¿Todavía no usas Gladys? Es gratuito y de código abierto: sigue la guía de instalación para empezar.

Sobre las integraciones externas​

OpenWrt es una integración externa: una integración comunitaria empaquetada como contenedor Docker y publicada en GitHub. Gladys la instala con un clic y la ejecuta en un entorno aislado del núcleo. La publica y mantiene guim31, no el equipo principal de Gladys.

Suscríbete a la newsletter de Gladys Assistant

Unos pocos correos al mes sobre nuevas versiones y novedades del proyecto. Enviados por Pierre-Gilles Leymarie, fundador del proyecto. Puedes darte de baja cuando quieras 🙂