So überwachen Sie Ihre Internetverbindung mit OpenWrt und Ubidots

Bietet Ihr Internetprovider einen qualitativ hochwertigen Service? Wenn die Antwort „Nein“ lautet, wie kann dies dann gemessen werden? Eine gute Möglichkeit, sich ein Bild von der Qualität Ihres Internets zu machen, besteht darin, einen Remote-Host anzupingen und die Antwortzeiten zu beobachten. Das nennen wir „Latenz“.

In dieser Anleitung wird erläutert, wie Sie mithilfe eines OpenWrt -Routers die vom PING-Programm zurückgegebenen Antwortzeiten protokollieren und diese Zeiten an die Ubidots Cloud senden.

Am Ende dieses Tutorials sollten Sie in der Lage sein, ein einbettbares Diagramm wie dieses zu erstellen – das sind übrigens die tatsächlichen Daten unserer Internetverbindung:

OpenWrt ist eine Linux-Distribution für Ihren Router. Als Linux-Box können Sie Pakete verwalten und Dienste wie VPNs, SSH, Telefonie usw. einrichten.

Allerdings läuft es auf begrenzter Hardware und jeder Dienst sollte so leicht wie möglich sein. Aus diesem Grund verwenden wir Lua, eine leistungsstarke, schnelle und leichte Sprache , die hauptsächlich für eingebettete Geräte verwendet wird.

Schritt 1: Einrichten Ihres Routers

Zum Ausfüllen dieser Anleitung benötigen Sie einen OpenWrt-fähigen Router. Eine Liste der unterstützten Router finden Sie auf deren Website . 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 Reihe von Dienstprogrammen zur Verarbeitung von JSON-Objekten.

Um diese Bibliotheken zu installieren, können Sie über die Weboberfläche auf Ihren Router zugreifen, zur Registerkarte „System“ navigieren und dann auf die Option „Software“ klicken. Suchen Sie abschließend die erforderlichen Bibliotheken und installieren Sie sie:

Alternativ können Sie sich über SSH bei Ihrem Router anmelden und das Paketverwaltungstool „opkg“ von der Konsole aus verwenden, um die Pakete zu installieren:

opkg installiert luasocket luci-lib-json

Schritt 3: Bereiten Sie Ihr Ubidots -Konto vor

Öffnen Sie Ihr Ubidots -Konto, navigieren Sie dann zur Registerkarte „Quellen“, um eine Datenquelle namens „Openwrt Router“ und dann eine Variable namens „Internet Latency“ zu erstellen. Notieren Sie sich die „Variablen-ID“, die wir in unseren Lua-Code einfügen müssen:

Profil-Tab ein permanentes TOKEN und notieren Sie es – wir benötigen es auch für unseren Lua-Code.

Schritt 4: Codieren Sie Ihren Router

Wir schreiben Code zur Messung der Internetlatenz und senden ihn dann an Ubidots .

Um ein Programm auf Ihrem OpenWrt-Gerät zu schreiben, müssen Sie über SSH angemeldet sein. Beginnen wir mit der Erstellung 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 Ihres Ubidots Kontos:

local conf = { variables = { ['52d481d9f91b284cd22af757'] = '8.8.8.8', }, -- Fügen Sie eine Variablen-ID pro Site hinzu, um das Ping-Token zu überprüfen = '9xtbvHL8hFKxfkmlXUW3qNoUpOEZAtp0qkkwPqffbn6DiR3ElRJ4B5m1hZMs', --Replace mit Ihrem eigenen Token host = ' industriell. ubidots .com', -- Host zum Herstellen der Verbindung Port = '80', -- Port, an dem der Dienst lauscht } return conf

Wo:

  • Variablen : Sie können einzelne Variablen auflisten, wobei jede die Ubidots -ID und den Host darstellt, an den der PING gesendet werden soll. Für dieses Beispiel verwenden wir die ID unserer Variablen und den Host „Google.com“.
  • Token : Ein fester Token, der 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.

Jetzt können wir das Haupt-LUA-Programm erstellen, um die Latenz zu messen und zu senden. Erstellen Sie eine Datei mit dem Namen „ ubidots _ping.lua “:

nano ubidots _ping.lua

Fügen Sie den folgenden Code in die erstellte Datei ein:

!usr/bin/env lua – Laden der Hauptkonfiguration local config = require „config“ – Bibliothek zum Lesen der Befehlsausgabe local io = require „io“ – Laden des http-Moduls local http = require „socket.http“ – Laden von LTN12- und JSON-Bibliotheken aus dem Luci-Framework. Local ltn12 = require „luci.ltn12“ local json = require „luci.json“ local host = string.format("http://%s:%d", config.host, config .port oder 80) – Abrufen des abgerufenen Tokens für var_id, var_ip paarweise (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 aus der Ping-Ausgabe abrufen. rtime = string.match(l, "time=(%d+.%d)") end print(rtime) local dtime = string.format('{"value": %s}', rtime) print(dtime) - – Wert in die abgerufene Variable local rsp, code, tr = http.request{ url=string.format("%s/api/v1.6/variables/%s/values/", host, var_id), method = " posten POST", headers = { ['X-Auth-Token'] = config.token, ['Content-Type'] = "application/json", ['Content-Length'] = string.len(dtime) }, weitergeleitet = wahr, Quelle = ltn12.source.string(dtime), sink = ltn12.sink.file(io.stdout) } Ende

Zu guter Letzt stellen wir sicher, dass das Programm über die richtigen Berechtigungen verfügt:

chmod +x ubidots _ping.lua

Lassen Sie uns abschließend die Anwendung einmal ausführen, um sicherzustellen, dass sie funktioniert:

lua ubidots _ping.lua

Wenn alles gut gelaufen ist, sollten Sie eine Antwort im JSON-Format und dann den geposteten Wert in Ihrem Ubidots -Konto sehen können:

Schritt 5: Richten Sie einen Cron-Job ein, um jede Minute Daten zu senden

Sobald Sie sichergestellt haben, dass das Skript funktioniert, erstellen Sie einen Cron-Job, um die Messung und Veröffentlichung von Latenzwerten zu automatisieren.

Sie können die Cron-Tabelle von OpenWrt über die SSH-Konsole bearbeiten:

crontab -e

Erstellen Sie einen Eintrag, der Ihr Programm jede Minute aufruft:

cd /root/ ubidots /; lua /root/ ubidots / ubidots _ping.lua >> /dev/null        

Speichern Sie Ihre Änderungen und überprüfen Sie, ob das Programm jede Minute Daten sendet.

Nachdem Sie diese Daten nun in Ubidots , navigieren Sie in Ihrem Konto zur Registerkarte „ Dashboard “ und erstellen Sie ein Liniendiagramm-Widget wie das am Anfang dieser Seite. Sie können auch Gagues, Streudiagramme zum Vergleich der Latenz mit einer anderen Variablen (z. B. Geschwindigkeit?) und viele andere Arten von Echtzeit-Widgets erstellen.

Sie können auch SMS- oder E-Mail-Benachrichtigungen erstellen, wenn die Latenz zu hoch wird:

Einpacken

In diesem Beispiel konnten wir die von einem OpenWrt-Router getestete Internetlatenz messen. Wir haben gelernt, wie man mit der Programmiersprache Lua einen Wert an Ubidots sendet, sodass Sie jede Art von Lua-betriebenem Gerät mit unserer Cloud verbinden können.

Sie können Ubidots auch zum Streamen anderer Arten von Zeitreihendaten verwenden, z. B. Signalpegel, Geräuschpegel, GPS usw. Vielleicht möchten Sie sich diese anderen Beispiele ansehen:


Haben Sie weitere Projektideen? Erstellen Sie ein Ubidots -Konto und verwirklichen Sie es!