So überwachen Sie Ihre Internetverbindung mit OpenWrt und Ubidots
Bietet Ihr Internetanbieter eine gute Servicequalität? Falls nicht, wie lässt sich die Qualität messen? Eine einfache Methode, um die Qualität Ihrer Internetverbindung zu überprüfen, ist, einen entfernten Rechner anzupingen und die Antwortzeiten zu beobachten. Dies bezeichnen wir als „Latenz“.
Dieser Leitfaden erklärt, wie man einen OpenWrt- Router verwendet, um die vom PING-Programm zurückgegebenen Antwortzeiten zu protokollieren und diese Zeiten an die Ubidots -Cloud zu senden.
Am Ende dieses Tutorials sollten Sie in der Lage sein, einen einbettbaren Graphen wie diesen zu erstellen – übrigens handelt es sich hierbei um die tatsächlichen Daten unserer Internetverbindung:
OpenWrt ist eine Linux-Distribution für Ihren Router. Als Linux-System ermöglicht sie Ihnen die Verwaltung von Paketen und die Einrichtung von Diensten wie VPNs, SSH, Telefonie usw.
Es läuft jedoch auf leistungsschwacher Hardware, und jeder Dienst sollte so ressourcenschonend wie möglich sein. Deshalb verwenden wir Lua, eine leistungsstarke, schnelle und schlanke Programmiersprache , die hauptsächlich für eingebettete Systeme eingesetzt wird.
Schritt 1: Router einrichten
Um diese Anleitung durchzuführen, benötigen Sie einen OpenWrt-fähigen Router. Eine Liste der unterstützten Router finden Sie auf der Website von OpenWrt . Befolgen Sie die routerspezifischen Anweisungen, um Ihr Gerät zu flashen.
Hinweis: Dieses Tutorial wurde mit OpenWrt Version 10.03.1 (Backfire) erstellt und getestet.
Schritt 2: Installieren Sie die erforderlichen Bibliotheken
Unser Programm wird zwei Lua-Bibliotheken verwenden:
LuaSocket : Enthält die Methoden zum Erstellen von HTTP-Anfragen.
LuCi JSON : Eine Sammlung von Hilfsprogrammen zur Bearbeitung von JSON-Objekten.
Um diese Bibliotheken zu installieren, greifen Sie über die Weboberfläche auf Ihren Router zu, navigieren Sie zum Tab „System“ und klicken Sie dann auf die Option „Software“. Suchen Sie anschließend die benötigten Bibliotheken und installieren Sie diese
Alternativ können Sie sich per SSH in Ihren Router einloggen und das Paketverwaltungstool „opkg“ über die Konsole verwenden, um die Pakete zu installieren:
opkg install luasocket luci-lib-json
Schritt 3: Bereiten Sie Ihr Ubidots Konto vor
Öffnen Sie Ihr Ubidots Konto, navigieren Sie zum Tab „Quellen“ und erstellen Sie eine Datenquelle namens „Openwrt Router“ sowie eine Variable namens „Internet Latency“. Notieren Sie sich die „Variablen-ID“, die wir in unserem Lua-Code benötigen.
Profil-Tab ein permanentes Token und notieren Sie es sich – wir benötigen es auch für unseren Lua-Code.
Schritt 4: Router codieren
Wir werden einen Code schreiben, um die Internetlatenz zu messen und ihn dann an Ubidotssenden.
Um ein Programm auf Ihrem OpenWrt-Gerät zu schreiben, müssen Sie per SSH angemeldet sein. Beginnen wir mit dem Erstellen einer Konfigurationsdatei namens „config.lua“, um einige Parameter zu speichern:
mkdir /root/ubidots
cd /root/ubidots
nano config.lua
Fügen Sie den folgenden Code ein und ersetzen Sie dabei Ihr Token und Ihre Variablen-ID durch die entsprechenden Werte aus Ihrem Ubidots -Konto:
local conf = { variables = { ['52d481d9f91b284cd22af757'] = '8.8.8.8', }, -- Füge pro Standort eine Variable hinzu, um den Ping zu überprüfen token = '9xtbvHL8hFKxfkmlXUW3qNoUpOEZAtp0qkkwPqffbn6DiR3ElRJ4B5m1hZMs', -- Ersetze dies durch dein eigenes Token host = 'ubidots', -- Host, um die Verbindung herzustellen port = '80', -- Port, an dem der Dienst lauscht } return conf
Wo:
- Variablen : Sie können einzelne Variablen auflisten, die jeweils die Ubidots -Knotens und den Host repräsentieren, an den der Ping gesendet werden soll. In diesem Beispiel verwenden wir die ID unserer Variablen und den Host „Google.com“.
- Token : Ein festes Token, das in Ihrem Profil-Tab .
- Host : Der Host, an den die HTTP-Anfragen gesendet werden. In diesem Fall die API-Adresse von Ubidots
- Port : Port, an dem der Host lauscht. Standardmäßig 80.
, das Haupt-LUA-Programm zum Messen und Senden der Latenz zu erstellen. Erstellen Sie eine Datei namens „ ubidots “:
nano ubidots_ping.lua
Fügen Sie folgenden Code in die erstellte Datei ein:
!usr/bin/env lua -- Hauptkonfiguration laden local config = require "config" -- Bibliothek zum Lesen der Befehlsausgabe local io = require "io" -- HTTP-Modul laden local http = require "socket.http" -- ltn12- und json-Bibliotheken aus dem LuCI-Framework laden local ltn12 = require "luci.ltn12" local json = require "luci.json" local host = string.format("http://%s:%d", config.host, config.port or 80) -- Abrufen des Tokens for var_id, var_ip in 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 -- Antwortzeit abrufen von Ping-Ausgabe. rtime = string.match(l, "time=(%d+.%d)") end print(rtime) local dtime = string.format('{"value": %s}', rtime) print(dtime) -- Wert an abgerufene Variable senden 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
Zu guter Letzt sollten wir sicherstellen, dass das Programm über die richtigen Berechtigungen verfügt:
chmod +x ubidots_ping.lua
Zum Schluss führen wir die Anwendung einmal aus, um sicherzustellen, dass sie funktioniert:
lua ubidots_ping.lua
Wenn alles gut gegangen ist, sollten Sie eine Antwort im JSON-Format sehen und anschließend den gesendeten Wert in Ihrem Ubidots Konto einsehen können:
Schritt 5: Richten Sie einen Cron-Job ein, der jede Minute Daten sendet
Sobald Sie sichergestellt haben, dass das Skript funktioniert, erstellen Sie einen Cronjob, um das Messen und Veröffentlichen der Latenzwerte zu automatisieren.
Sie können die Cron-Tabelle von OpenWrt über die SSH-Konsole bearbeiten:
crontab -e
Erstelle einen Eintrag, der dein Programm jede Minute aufruft:
cd /root/ubidots/; luaubidots>>ubidotsdev/null
Speichern Sie Ihre Änderungen und überprüfen Sie, ob das Programm jede Minute Daten sendet.
Nachdem Sie diese Daten in Ubidots , navigieren Sie in Ihrem Konto zum Tab „ Dashboard “ und erstellen Sie ein Liniendiagramm-Widget wie das am Anfang dieser Seite. Sie können außerdem Messinstrumente, Streudiagramme zum Vergleich der Latenz mit einer anderen Variable (z. B. der Geschwindigkeit) und viele weitere Echtzeit-Widgets erstellen.
Sie können auch SMS- oder E-Mail-Benachrichtigungen einrichten, wenn die Latenz zu hoch wird:
Zusammenfassung
In diesem Beispiel konnten wir die Internetlatenz eines OpenWrt-Routers messen. Wir haben gelernt, wie man mit der Programmiersprache Lua Werte an Ubidotssendet, wodurch sich beliebige Lua-fähige Geräte mit unserer Cloud verbinden lassen.
Mit Ubidots lassen sich auch andere Arten von Zeitreihendaten streamen, z. B. Signalpegel, Rauschpegel, GPS-Daten usw. Hier einige weitere Beispiele:
- Bau eines Personenzählers mit Raspberry Pi und Ubidots
- Erstellung einer Echtzeitkarte ohne Webprogrammierung
Haben Sie weitere Projektideen? Erstellen Sie ein Ubidots -Konto und setzen Sie sie in die Tat um!