Ubidots

Comment surveiller sa connexion Internet avec OpenWrt et Ubidots

Agustin Pelaez
· 5 min de lecture
Envoyer par courriel

Votre fournisseur d'accès Internet vous offre-t-il un service de qualité ? Si la réponse est « non », comment le mesurer ? Un bon moyen d'évaluer la qualité de votre connexion Internet consiste à effectuer un ping vers un serveur distant et à observer les temps de réponse. C'est ce que l'on appelle 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 tutoriel, vous devriez être capable de créer un graphique intégrable comme celui-ci – d'ailleurs, il s'agit des données réelles issues de notre connexion Internet :

OpenWrt est une distribution Linux pour votre routeur. En tant que système Linux, il vous permet de gérer les paquets et de configurer des services tels que les VPN, SSH, la téléphonie, etc.

Cependant, il fonctionne sur du 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 systèmes embarqués.

Étape 1 : Configuration de votre routeur

Pour suivre ce guide, vous aurez besoin d'un routeur compatible OpenWrt. Vous trouverez la liste des routeurs compatibles sur leur site web . Suivez les instructions spécifiques à votre 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 permettant de créer des requêtes HTTP.

LuCi JSON : Un ensemble d'utilitaires pour gérer les objets JSON.

Pour installer ces bibliothèques, accédez à votre routeur via son interface web, rendez-vous dans l'onglet « Système », puis cliquez sur « Logiciels ». Enfin, localisez les bibliothèques requises et installez-les

Vous pouvez également vous connecter à votre routeur via SSH et utiliser l'outil de gestion de paquets « opkg » depuis la console pour installer les paquets :

opkg install luasocket luci-lib-json

Étape 3 : Préparez votre compte Ubidots

Ouvrez votre Ubidots , puis accédez à l' onglet Sources pour créer une source de données nommée « Openwrt Router » et une variable nommée « Internet Latency ». Notez l'« ID de la variable », car nous devrons l'insérer dans notre code Lua.

Créez un jeton permanent dans l'onglet de votre profil et notez-le – nous en aurons également besoin pour notre code Lua.

Étape 4 : Programmation de votre routeur

Nous allons écrire un code pour mesurer la latence Internet, puis l'envoyer à Ubidots.

Pour écrire un programme sur votre appareil OpenWrt, vous devez vous connecter 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 jeton et votre identifiant de variable par ceux de votre compte Ubidots :

local conf = { variables = { ['52d481d9f91b284cd22af757'] = '8.8.8.8', }, -- Ajouter un identifiant de variable par site pour vérifier le ping token = '9xtbvHL8hFKxfkmlXUW3qNoUpOEZAtp0qkkwPqffbn6DiR3ElRJ4B5m1hZMs', -- Remplacer par votre propre jeton host = 'ubidots', -- Hôte pour établir la connexion port = '80', -- Port d'écoute du service } return conf

Où:

  • Variables : Vous pouvez lister des variables individuelles, chacune représentant l’identifiant de l’ Ubidots et l’hôte vers lequel le ping doit être effectué. Dans cet exemple, nous utiliserons l’identifiant de notre variable et l’hôte « Google.com ».
  • jeton : Un jeton fixe généré dans votre onglet de profil .
  • hôte : l’hôte auquel les requêtes HTTP seront adressées. Dans ce cas, l’adresse de l’API Ubidots
  • port : Port sur lequel l'hôte écoute. 80 par défaut.

principal pour mesurer et transmettre la latence. Créez un fichier nommé « ubidots » :

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" -- Chargement du module http local http = require "socket.http" -- Chargement des bibliothèques ltn12 et json du framework luci local ltn12 = require "luci.ltn12" local json = require "luci.json" local host = string.format("http://%s:%d", config.host, config.port or 80) -- Récupération du jeton récupéré pour var_id, var_ip dans pairs(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 -- Récupération du temps de réponse à partir de la sortie ping. rtime = string.match(l, "time=(%d+.%d)") end print(rtime) local dtime = string.format('{"value": %s}', rtime) print(dtime) -- Envoi de la valeur vers la variable récupérée local rsp, code, tr = http.request{ url=string.format("%s/api/v1.6/variables/%s/values/", host, var_id), method = "POST", headers = { ['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) } end

Enfin, et surtout, vérifions que le programme dispose des autorisations nécessaires :

chmod +x ubidots_ping.lua

Enfin, lançons l'application une fois pour vérifier qu'elle fonctionne :

lua ubidots_ping.lua

Si tout s'est bien passé, vous devriez voir une réponse au format JSON, puis la valeur publiée dans votre compte Ubidots :

Étape 5 : Configurer une tâche Cron pour envoyer des données toutes les minutes

Une fois que vous avez vérifié 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/; luaubidots>>ubidotsdev/null        

Enregistrez vos modifications et vérifiez que le programme envoie des données toutes les minutes.

Maintenant que vos données sont dans Ubidots , accédez à l'onglet «Dashboard » de votre compte et créez un widget de graphique linéaire comme celui en haut 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 bien d'autres types de widgets en temps réel.

Vous pouvez également configurer des alertes par SMS ou par e-mail lorsque la latence devient trop élevée :

Pour conclure

Dans cet exemple, nous avons pu mesurer la latence Internet rencontrée par un routeur OpenWrt. Nous avons appris à utiliser le langage de programmation Lua pour envoyer une valeur à Ubidots, ce qui vous permet de connecter tout type d'appareil compatible Lua à notre cloud.

Vous pouvez également utiliser Ubidots pour diffuser d'autres types de données de séries temporelles, comme les niveaux de signal, les niveaux de bruit, les données GPS, etc. Vous pouvez consulter ces autres exemples :


Vous avez d'autres idées de projets ? Créez un compte Ubidots et concrétisez-les !