Comment surveiller votre connexion Internet à l'aide d'OpenWrt et Ubidots
Votre fournisseur Internet offre-t-il un service de bonne qualité ? Si la réponse est « non », comment peut-on la mesurer ? Un bon moyen d'avoir une idée de la qualité de votre Internet consiste à envoyer une requête ping à un hôte distant et à observer les temps de réponse. C'est ce que nous appelons la « latence ».
Ce guide explique comment utiliser un OpenWrt pour enregistrer les temps de réponse renvoyés par le programme PING et envoyer ces temps au Ubidots .
À la fin de ce didacticiel, vous devriez être capable de créer un graphique intégrable comme celui-ci – d'ailleurs, il s'agit des données réelles de notre connexion Internet :
OpenWrt est une distribution Linux pour votre routeur. En tant que machine Linux, il vous permet de gérer des packages et des services de configuration comme les VPN, SSH, la téléphonie, etc.
Cependant, il fonctionne sur un matériel limité et chaque service doit être aussi léger que possible. C'est pourquoi nous utiliserons Lua, un langage puissant, rapide et léger, principalement utilisé pour les appareils embarqués.
Étape 1 : Configuration de votre routeur
Pour compléter ce guide, vous aurez besoin d'un routeur compatible OpenWrt. Vous pouvez trouver une liste des routeurs pris en charge sur leur site Web . Suivez les instructions spécifiques au routeur pour flasher votre appareil.
Remarque : Ce tutoriel a été réalisé et testé avec OpenWrt version 10.03.1 (Backfire).
Étape 2 : Installez les bibliothèques requises
Notre programme utilisera deux bibliothèques Lua :
LuaSocket : Contient les méthodes pour créer des requêtes HTTP.
LuCi JSON : Un ensemble d'utilitaires pour gérer les objets JSON.
Pour installer ces bibliothèques, vous pouvez accéder à votre routeur via l'interface Web, accéder à l'onglet « Système », puis cliquer sur l'option « Logiciel ». Enfin, localisez les bibliothèques requises et installez-les :
Alternativement, vous pouvez vous connecter à votre routeur via SSH et utiliser l'outil de gestion de packages « opkg » depuis la console pour installer les packages :
opkg installer luasocket luci-lib-json
Étape 3 : Préparez votre compte Ubidots
Ouvrez votre Ubidots , accédez ensuite à l' onglet Sources pour créer une source de données appelée « Openwrt Router » puis une variable appelée « Internet Latency ». Notez le « Variable ID », que nous devrons mettre dans notre code Lua :
Créez un JETON permanent sous l'onglet de votre profil et prenez-en note – nous en aurons également besoin pour notre code Lua.
Étape 4 : Codage de votre routeur
Nous allons écrire du code pour mesurer la latence Internet, puis l'envoyer à Ubidots .
Pour écrire un programme sur votre appareil OpenWrt, vous devez être connecté via SSH. Commençons par créer un fichier de configuration appelé « config.lua » pour stocker certains paramètres :
mkdir /root/ ubidots
cd /root/ ubidots
nano config.lua
Insérez le code suivant, en remplaçant votre Token et votre ID de variable par ceux de votre compte Ubidots :
local conf = { variables = { ['52d481d9f91b284cd22af757'] = '8.8.8.8', }, -- Ajoutez un identifiant de variable pour chaque site pour vérifier le jeton ping = '9xtbvHL8hFKxfkmlXUW3qNoUpOEZAtp0qkkwPqffbn6DiR3ElRJ4B5m1hZMs', --Replace avec votre propre hôte de jeton = ' industriel. ubidots .com', -- Hôte pour établir la connexion port = '80', -- Port sur lequel le service écoute } return conf
Où:
- variables : Vous pouvez lister des variables individuelles, chacune représentant l' Ubidots et l'hôte vers lequel le PING doit être effectué. Pour cet exemple, nous utiliserons l'ID de notre variable et l'hôte « Google.com ».
- token : Un jeton fixe généré dans l’onglet de votre profil .
- host : L'hôte auquel les requêtes HTTP seront adressées. Ubidots dans ce cas.
- port : Port où l'hôte écoute. 80 par défaut.
Nous sommes maintenant prêts à créer le programme LUA principal pour mesurer et envoyer la latence. Créez un fichier appelé « ubidots _ping.lua » :
nano ubidots _ping.lua
Insérez le code suivant dans le fichier créé :
!usr/bin/env lua -- Chargement de la configuration principale local config = require "config" -- Bibliothèque pour lire la sortie de la commande local io = require "io" -- Charger le module http local http = require "socket.http" -- chargement des bibliothèques ltn12 et json à partir du framework luci local ltn12 = nécessite "luci.ltn12" local json = nécessite "luci.json" local host = string.format("http://%s:%d", config.host, config .port ou 80) -- Obtention du jeton récupéré pour var_id, var_ip par paires (config.variables) do print(var_id, var_ip) local f = io.popen(string.format('ping -c 1 -W 4 %s | grep ttl', var_ip)) local l = f:read("a") f:close() local rtime = '-1' if l ~= '' then -- Obtention du temps de réponse de la sortie ping. rtime = string.match(l, "time=(%d+.%d)") end print(rtime) local dtime = string.format('{"value": %s}', rtime) print(dtime) - - Publier la valeur dans la variable récupérée rsp locale, code, tr = http.request{ url=string.format("%s/api/v1.6/variables/%s/values/", host, var_id), method = " POST", en-têtes = { ['X-Auth-Token'] = config.token, ['Content-Type'] = "application/json", ['Content-Length'] = string.len(dtime) }, redirect = true, source = ltn12.source.string(dtime), Sink = ltn12.sink.file(io.stdout) } fin
Enfin et surtout, assurons-nous que le programme dispose des autorisations appropriées :
chmod +x ubidots _ping.lua
Enfin, exécutons l'application une fois pour nous assurer qu'elle fonctionne :
lua ubidots
Si tout s'est bien passé, vous devriez pouvoir voir une réponse au format JSON puis voir la valeur publiée dans votre compte Ubidots :
Étape 5 : Configurez une tâche Cron pour envoyer des données toutes les minutes
Une fois que vous vous êtes assuré que le script fonctionne, créez une tâche cron pour automatiser la mesure et la publication des valeurs de latence.
Vous pouvez modifier la table cron d'OpenWrt via la console SSH :
crontab -e
Créez une entrée qui appelle votre programme toutes les minutes :
cd /root/ ubidots /; lua /root/ ubidots / ubidots _ping.lua >> /dev/null
Enregistrez vos modifications et vérifiez que le programme envoie des données toutes les minutes.
Maintenant que vous disposez de ces données dans Ubidots , accédez à l'onglet « Dashboard » de votre compte et créez un widget de graphique linéaire comme celui au début de cette page. Vous pouvez également créer des jauges, des nuages de points pour comparer la latence à une autre variable (par exemple, la vitesse ?) et de nombreux autres types de widgets en temps réel.
Vous pouvez également créer des alertes SMS ou Email lorsque la latence devient trop élevée :
Conclusion
Dans cet exemple, nous avons pu mesurer la latence Internet expérimentée par un routeur OpenWrt. Nous avons appris à utiliser le langage de programmation Lua pour envoyer une valeur à Ubidots , vous permettant ainsi de connecter tout type d'appareil alimenté par Lua à notre cloud.
Vous pouvez également utiliser Ubidots pour diffuser d'autres types de données de séries chronologiques, telles que les niveaux de signal, les niveaux de bruit, le GPS, etc. Vous voudrez peut-être consulter ces autres exemples :
- Construire un compteur de personnes avec Raspberry Pi et Ubidots
- Créer une carte en temps réel sans écrire de code Web
Avez-vous d'autres idées de projets ? Créez un compte Ubidots et réalisez-les !