Aller au contenu principal

Intégration domotique OpenWrt, gratuite et open source

Intégration OpenWrt pour Gladys Assistant

Routeurs OpenWrt : présence des appareils, santé du routeur, débits et coupures WAN, Wi-Fi invité.

Suivez votre routeur ou point d'accès OpenWrt depuis Gladys, sur votre réseau local : qui est à la maison (les téléphones connectés au Wi-Fi), la santé du routeur, l'état et les débits de la connexion internet, le Wi-Fi invité. Pas de cloud, pas de compte.

L'intégration parle au routeur comme LuCI, l'interface web d'OpenWrt : par ubus sur HTTP (/ubus, sessions rpcd). Un routeur sans /ubus mais avec l'API LuCI RPC (luci-mod-rpc) donne quand même la présence et le temps de fonctionnement.

Développée sans le matériel : vos retours sont les bienvenus. L'intégration est construite et testée sur les réponses d'OpenWrt lues dans son code source (procd, netifd, hostapd, rpcd), pas sur un vrai routeur. Dites-nous ce qui marche et ce qui ne marche pas dans les issues.

Ce projet n'est pas affilié au projet OpenWrt. OpenWrt est une marque de son propriétaire.

Ce qu'il faut​

  • Gladys Assistant 5.1.0 ou plus récent.
  • Un routeur ou point d'accès sous OpenWrt 18.06 ou plus récent, avec rpcd et uhttpd-mod-ubus. Les deux viennent avec LuCI : toutes les images standard les ont. Vérifiez sur le routeur : ls /usr/lib/uhttpd_ubus.so doit afficher le fichier. Sinon : opkg install rpcd uhttpd-mod-ubus (apk add sous OpenWrt 25), puis /etc/init.d/uhttpd restart.
  • Un utilisateur rpcd pour Gladys (ci-dessous). root fonctionne aussi, mais un utilisateur dédié qui ne peut que lire est plus sûr.

Mise en place​

L'utilisateur rpcd et son ACL​

  1. Connectez-vous au routeur en SSH et créez le fichier /usr/share/rpcd/acl.d/gladys.json. La partie read est ce que l'intégration lit ; la partie write ne sert qu'aux commandes (Wi-Fi invité, redémarrage) :

    {
    "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. Créez le login, avec son propre mot de passe (uhttpd -m le transforme en empreinte : il n'est pas stocké en clair) :

    uci add rpcd login
    uci set rpcd.@login[-1].username='gladys'
    uci set rpcd.@login[-1].password="$(uhttpd -m 'choisissez-un-long-mot-de-passe')"
    uci add_list rpcd.@login[-1].read='gladys'
    uci commit rpcd
    /etc/init.d/rpcd restart
  3. Seulement si vous voulez les commandes : donnez aussi la partie écriture au login, avec list write 'gladys' dans sa section de /etc/config/rpcd, puis /etc/init.d/rpcd restart.

Bon à savoir : network.wireless status et uci get wireless peuvent montrer les clés Wi-Fi à cet utilisateur. L'intégration ne lit que les noms, les SSID et l'option disabled du Wi-Fi invité, ne stocke aucune clé et n'en écrit jamais dans ses logs. Les lignes uci et file sont facultatives : sans elles, le Wi-Fi invité et les baux d'un vieux routeur sans luci-rpc ne sont pas lus.

La configuration​

Dans Gladys, ouvrez l'intégration, puis Configuration :

  • Adresse du routeur : l'adresse IP du routeur (192.168.1.1 par défaut), avec :port si son serveur web utilise un autre port.
  • Utiliser HTTPS : chiffre le mot de passe sur votre réseau, quand luci-ssl est installé. Un routeur qui renvoie HTTP vers HTTPS est suivi de toute façon.
  • Accepter un certificat auto-signé : OpenWrt crée son propre certificat au premier démarrage ; cochez pour votre propre routeur.
  • Nom d'utilisateur et Mot de passe : le login rpcd créé plus haut.
  • Interface : laissez Automatique (ubus, et LuCI RPC seulement si le routeur n'a pas /ubus).
  • Intervalle de rafraîchissement : de 10 s à 1 min (30 s par défaut).
  • Interfaces WAN : vide, l'intégration prend wan et les interfaces qui portent la route par défaut. Sinon, les noms de Réseau → Interfaces (wan, wwan), quatre au plus.
  • Délai de départ (minutes) et Compter un bail DHCP comme présent : voir les capteurs de présence plus bas.
  • Réseau Wi-Fi invité : le nom de la section wifi-iface du réseau invité (guest, wifinet2…). Lister les réseaux Wi-Fi les affiche.
  • Autoriser les commandes : désactivé par défaut (voir les actions).
  • Langue des noms : langue des noms d'appareils et de fonctionnalités.

Enregistrez, puis cliquez sur Tester la connexion : le rapport dit quelle interface a répondu, les interfaces WAN et les radios trouvées, les clients vus, et ce que l'ACL ne permet pas.

Les appareils​

Ouvrez l'onglet Découverte : le routeur et les clients du réseau qu'il voit y sont listés. Ajoutez ceux que vous voulez.

Le routeur​

  • Charge système (1 min) : la charge moyenne en pourcentage d'un cœur de processeur (un routeur à 4 cœurs tous occupés affiche 400 %).
  • Mémoire utilisée, en pourcentage.
  • Temps de fonctionnement, en heures.
  • Version d'OpenWrt (23.05.5).
  • Clients Wi-Fi par radio (Clients Wi-Fi 2.4 GHz, 5 GHz…) : les stations connectées et autorisées.
  • Wi-Fi invité activé, quand un réseau invité est choisi.
  • Pour chaque interface WAN : Débit descendant et Débit montant (Mbit/s, la moyenne sur l'intervalle de rafraîchissement) et Lien WAN (1 quand il est actif).

Rien sur ces appareils n'est un interrupteur : un assistant vocal ne peut pas éteindre le Wi-Fi invité ni redémarrer le routeur par erreur.

Capteurs de présence​

Chaque client ajouté devient un capteur de Présence : présent tant qu'il est connecté (et autorisé) au Wi-Fi du routeur, absent une fois qu'il n'a pas été vu pendant le délai de départ (5 minutes par défaut) : un téléphone en veille quitte le Wi-Fi quelques minutes.

  • Un routeur illisible ne change personne : une panne n'envoie jamais toute la maison dehors.
  • Les appareils filaires ne sont pas sur le Wi-Fi : cochez Compter un bail DHCP comme présent pour eux, en sachant qu'un bail dure jusqu'à son expiration (12 h par défaut).
  • Les téléphones utilisent une adresse MAC privée (aléatoire) par réseau Wi-Fi : suivez l'adresse que le téléphone utilise sur votre réseau, et gardez-la fixe dans ses réglages Wi-Fi.

Tableau de bord​

  • Routeur OpenWrt : charge, mémoire, débits du premier WAN, clients Wi-Fi, état de chaque lien WAN, de chaque radio et du Wi-Fi invité, temps de fonctionnement et version. Avec les commandes autorisées : un bouton Wi-Fi invité (son icône montre l'état actuel) et un bouton Redémarrer, tous deux avec confirmation.
  • Appareils présents : les appareils suivis, présents d'abord, avec le temps depuis un départ ; un réglage n'affiche que les présents.

Scènes​

Déclencheurs​

  • Appareil inconnu connecté : une adresse MAC jamais vue s'est connectée au Wi-Fi ou a obtenu un bail DHCP. La première lecture apprend le réseau tel qu'il est ; les adresses vues sont gardées dans /data. Filtres : Vu par (Wi-Fi ou bail DHCP) et Réseau Wi-Fi (SSID). Variables : adresse MAC, adresse IP, nom d'hôte, SSID, interface Wi-Fi.
  • Lien WAN coupé : une interface WAN est tombée. Filtre : Interface WAN (ex. wan).
  • Lien WAN rétabli : elle est de nouveau active ; la variable Durée de la coupure (minutes) donne la durée de la coupure.

Actions​

Les actions ne font rien tant que Autoriser les commandes n'est pas coché, et le routeur les refuse si l'ACL n'a pas de partie écriture.

  • Allumer le Wi-Fi invité et Éteindre le Wi-Fi invité : changent l'option disabled de la section choisie et la valident ; OpenWrt recharge le Wi-Fi (les autres réseaux clignotent quelques secondes). La sortie dit si le Wi-Fi invité est activé.
  • Redémarrer le routeur OpenWrt : le réseau est coupé une à trois minutes.

Idées de scènes​

  • Des invités arrivent : le samedi à 18 h, Allumer le Wi-Fi invité ; à 1 h, Éteindre le Wi-Fi invité.
  • Personne à la maison : quand les capteurs de présence des téléphones sont tous absents, armez l'alarme et baissez le chauffage.
  • Appareil inconnu connecté sur votre SSID principal : envoyez un message avec l'adresse MAC et le nom d'hôte.
  • Lien WAN rétabli après plus de 10 minutes : envoyez-vous la durée de la coupure.

À quelle fréquence le routeur est lu​

À chaque intervalle de rafraîchissement, l'intégration appelle system info, network.interface dump, network.device status, network.wireless status, le get_clients de chaque point d'accès (ou iwinfo assoclist) et les baux DHCP : une dizaine de petites requêtes, en lecture seule, sur votre réseau local. Gladys n'interroge pas ces appareils : le minuteur est celui de l'intégration. Seules les valeurs qui changent sont envoyées à Gladys, avec un renvoi toutes les six heures.

Dépannage​

  • « ni ubus ni LuCI RPC ici » : installez uhttpd-mod-ubus (voir plus haut), ou vérifiez l'adresse et le port.
  • « nom d'utilisateur ou mot de passe refusé par rpcd » : vérifiez le login dans /etc/config/rpcd et redémarrez rpcd. Après un refus, l'intégration attend cinq minutes avant de réessayer : cliquez sur Tester la connexion pour réessayer tout de suite.
  • « refusé par l'ACL rpcd » : le fichier de l'ACL manque ou ne nomme pas le login (list read 'gladys') ; le rapport liste ce qui est illisible.
  • « certificat refusé » : cochez Accepter un certificat auto-signé.
  • Aucun client Wi-Fi : les points d'accès demandent hostapd.* dans l'ACL ; avec un hostapd compilé sans ubus, rpcd-mod-iwinfo doit être installé.
  • Logs : mettez LOG_LEVEL=debug sur le conteneur pour le détail de chaque lecture (jamais un mot de passe ni une clé Wi-Fi).

Limites​

  • Un routeur par intégration : les clients des autres points d'accès ne sont pas vus sur leur Wi-Fi (l'option du bail DHCP les voit quand même).
  • Le lien WAN est l'état de l'interface : une panne derrière un lien actif (côté opérateur) n'est pas vue. Les débits sont des moyennes sur l'intervalle.
  • Le Wi-Fi invité est une section wifi-iface, nommée dans la configuration ; un réseau désactivé n'est pas listé par OpenWrt (saisissez son nom).
  • Repli LuCI RPC : présence par la table des voisins (moins précise que le Wi-Fi), temps de fonctionnement et redémarrage seulement ; pas de déclencheur d'appareil inconnu.
  • Développée sans le matériel : la validation du Wi-Fi invité, le redémarrage et le repli LuCI RPC ne sont pas testés sur un vrai routeur.

Paramètres de configuration​

Voici les paramètres demandés par OpenWrt dans son écran de configuration dans Gladys.

ParamètreTypeObligatoireDescription
Votre routeur OpenWrtsectionNonOpenWrt 18.06 ou plus récent, avec rpcd et uhttpd-mod-ubus (installés avec LuCI). Créez un utilisateur rpcd dédié avec l'ACL de la documentation : la lecture seule suffit pour la présence et les mesures.
Adresse du routeurstringOuiAdresse IP ou nom du routeur, avec :port si son serveur web n'utilise pas le port par défaut.
Utiliser HTTPSbooleanNonChiffre le mot de passe sur votre réseau. OpenWrt sert HTTPS quand luci-ssl est installé. Un routeur qui redirige vers HTTPS est suivi de toute façon.
Accepter un certificat auto-signébooleanNonOpenWrt crée un certificat auto-signé au premier démarrage. Ne cochez que pour votre propre routeur.
Nom d'utilisateurstringOuiUn login de /etc/config/rpcd, idéalement un utilisateur dédié en lecture seule (voir la documentation).
Mot de passesecretNon
InterfaceselectNonAutomatique utilise ubus (/ubus) et se replie sur l'API LuCI RPC (luci-mod-rpc) seulement si le routeur n'a pas /ubus.
Intervalle de rafraîchissementselectNonFréquence de lecture du routeur. Les débits sont des moyennes sur cet intervalle.
Interfaces WANstringNonNoms de Réseau → Interfaces, séparés par des virgules, quatre au plus. Vide : wan et les interfaces qui portent la route par défaut.
PrésencesectionNonAjoutez les appareils à suivre depuis l'onglet Découverte : chacun devient un capteur de présence, présent tant qu'il est connecté au Wi-Fi du routeur.
Délai de départ (minutes)numberNonUn appareil qui n'est plus vu ne compte comme absent qu'après ce délai : un téléphone en veille quitte le Wi-Fi quelques minutes.
Compter un bail DHCP comme présentbooleanNonUn bail dure jusqu'à son expiration (12 h par défaut), bien après le départ de l'appareil : ne cochez que pour des appareils filaires que rien d'autre ne voit.
Wi-Fi invité et commandessectionNonLecture seule par défaut. Les commandes allument ou éteignent le Wi-Fi invité et redémarrent le routeur, depuis une scène ou un widget. Rien d'autre n'est jamais modifié.
Réseau Wi-Fi invitéstringNonLe nom de sa section wifi-iface dans /etc/config/wireless. « Lister les réseaux Wi-Fi » les affiche. Vide : pas de Wi-Fi invité.
Autoriser les commandesbooleanNonPermet aux scènes et aux widgets d'allumer ou d'éteindre le Wi-Fi invité et de redémarrer le routeur. L'ACL rpcd doit contenir la partie écriture de la documentation.
Langue des nomsselectNonLangue des noms d'appareils et de fonctionnalités, fixés quand un appareil est ajouté à Gladys.

Comment installer OpenWrt dans Gladys​

  1. Dans Gladys, ouvrez Intégrations : OpenWrt apparaît dans le catalogue, aux côtés des intégrations natives, avec un badge communautaire.
  2. Cliquez sur Installer. Gladys télécharge l'image Docker (ghcr.io/guim31/gladys-openwrt:1.0.1), la démarre dans un bac à sable isolé du cœur, et génère l'interface de l'intégration (appareils, découverte et configuration).
  3. Ouvrez l'écran Configuration de l'intégration, remplissez les paramètres, puis enregistrez.
  4. Vous pouvez aussi l'installer directement depuis l'URL de son dépôt : https://github.com/guim31/gladys-openwrt.

OpenWrt nécessite Gladys >=5.1.0. Le catalogue dans Gladys se rafraîchit toutes les heures : une nouvelle version est donc disponible au plus tard une heure après sa sortie.

Vous n'utilisez pas encore Gladys ? C'est gratuit et open source : suivez le guide d'installation pour démarrer.

À propos des intégrations externes​

OpenWrt est une intégration externe : une intégration communautaire empaquetée dans un conteneur Docker et publiée sur GitHub, que Gladys installe en un clic et exécute dans un bac à sable isolé de son cœur. Elle est publiée et maintenue par guim31, et non par l'équipe cœur de Gladys.

Inscrivez-vous à la newsletter Gladys Assistant

Quelques emails par mois sur les nouveautés et l'actualité du projet. Envoyés par Pierre-Gilles Leymarie, le fondateur du projet. Désinscription possible à tout moment 🙂