Internetgeschwindigkeit auf der Linuxkonsole messen

internetspeed„Bis zu 16.000 Kbit/s“, das Versprechen liest man bei nahezu jedem Anbieter. Doch auch wenn dieses Paket gebucht ist und die versprochene Leistung im DSL-Router angezeigt wird, liegen zwischen dieser Angabe und dem tatsächlichen Durchsatz meist Welten. Um diesen Verdacht auf den Grund zu gehen oder um den Verlauf der tatsächlichen Bandbreite zu verfolgen, bietet sich eine Möglichkeit an, die Geschwindigkeit auf der Linuxkonsole zu messen und die ermittelten Messwerte im Anschluss weiterzuverarbeiten. Möglich wäre beispielsweise die Speicherung in einer Datenbank und aus diesen Daten mit Drittprogrammen grafische Diagramme ausgeben zu lassen. Eine weitere Möglichkeit wäre die Einbindung in openHAB, um diese Diagramme gleich in der eigenen Hausautomatisierungsumgebung verfügbar zu haben.

In diesem Beitrag beschreibe ich die Installation sowie den Aufruf des Programms „speedtest-cli„. Im Anschluss zeige ich beispielhaft, wie die ermittelten Messwerte an openHAB übergeben werden können.

 

Installation

Zunächst aktualisieren wir unser System und bringen es damit auf den neusten, verfügbaren Stand (beispielhaft für eine Debian basierende Distribution):

Im Anschluss installieren wir mit dem APT-Paketmanager weitere benötigte Pakete:

Nun kann das eigentliche Programm, um das es in diesem Beitrag geht, heruntergeladen werden. Wie immer speichere ich solche Scripte unter „/scripts/„.

 

Aufruf und Bedienung

Ein Aufruf des Programms in Form von

zeigt uns an, wie dieses Programm zu verwenden ist und mit welchen Optionen es gestartet werden kann:

Wie wir sehen, ist ein Bandbreitentest ohne große Konfiguration und ohne weiteren Angaben möglich. Die Ausführung von

ergibt beispielhaft folgende Ausgabe:

Für die weitere Verwendung in Scripts empfiehlt sich jedoch der Aufruf mit der Option „–simple„. Dies beschränkt die Ausgabe der Testwerte auf das Nötigste.

Die Ausgabe könnte dann in etwa so aussehen:

 

Verwendung in einem Script

Die so erfolgte Ausgabe können wir nun in ihre Einzelteile zerlegen und für die spätere Verwendung aufbereiten. Im folgenden Script werden die von „speedtest-cli“ ausgegebenen Werte an eine openHAB-Instanz gemeldet, denkbar wäre jedoch auch eine Speicherung in einer (My-)SQL-Datenbank.

Erklärung des Scripts

  1. Die sogenannte Shebang
  2. Es wird mittels Ping geprüft, ob eine Internetverbindung vorhanden ist
  3. Das Programm „speedtest-cli“ wird aufgerufen und die Ausgabe in die Datei „/tmp/speedresult.txt“ umgeleitet
  4. Die Variable „PING“ erhält den Wert der Latenz, gemessen in Millisekunden
  5. Die Variable „DOWN“ erhält den Wert des Downstreams (Geschwindigkeit des Herunterladens), gemessen in Megabit pro Sekunde
  6. Die Variable „UP“ erhält den Wert des Upstreams (Geschwindigkeit des Hochladens), ebenfalls gemessen in Megabit pro Sekunde
  7. Die Variable „IP“ enthält die öffentliche IP des Internetanschlusses
  8. Der Inhalt der Variable „PING“ wird mit dem Programm „curl“ und der Methode „POST“ an openHAB gesendet und dort in das Item „INET_PING“ geschrieben
  9. Der Inhalt der Variable „DOWN“ wird mit dem Programm „curl“ und der Methode „POST“ an openHAB gesendet und dort in das Item „INET_DOWN“ geschrieben
  10. Der Inhalt der Variable „UP“ wird mit dem Programm „curl“ und der Methode „POST“ an openHAB gesendet und dort in das Item „INET_UP“ geschrieben
  11. Der Inhalt der Variable „IP“ wird mit dem Programm „curl“ und der Methode „POST“ an openHAB gesendet und dort in das Item „INET_IP“ geschrieben
  12. Die temporär erstellte Datei wird gelöscht

Dieses Script speichern wir für die weitere Verwendung in diesem Beitrag als „/scripts/speedtest.sh“ und erlauben die Ausführung mit

 

Abschließend übertragen wir den Besitz der Datei an openhab durch

 

CRON-Job anlegen

Damit unser Script in regelmäßigen Abständen ausgeführt wird, legen wir nun einen CRON-Job an. Dazu wechseln wir in den Kontext des Nutzers „openhab“ durch

und öffnen die Cron-Tabelle mittels

Wir fügen folgende Zeile ein, wenn wir dieses Script halbstündlich durchführen lassen wollen:

Alternativ besteht die Möglichkeit, openHAB das Script in regelmäßigen Abständen ausführen zu lassen. Dies wird weiter unten in diesem Beitrag erläutert. Den Nutzerkontext von „openhab“ verlassen wir anschließend durch

 

Um in den Nutzerkontext von „openhab“ wechseln zu können, wird vorausgesetzt, dass für diesen Nutzer ein Passwort sowie eine Shell eingerichtet wurde. Dies wird in diesem Beitrag beschrieben.

 

Integration in openHAB

Die aus dem Script ermittelten Werte werden, wie bereits erwähnt, in das angegebene Item gesetzt. Dazu ist es vorab notwendig, in der Item-Beschreibungsdatei (zumeist default.items) Dummy-Schalter mit der entsprechenden Bezeichnung anzulegen:

Der Logstream von openHAB meldet nach erfolgreicher Durchführung des oben gezeigten Scripts die Aktualisierung der drei Items:

Eine Darstellung muss in der jeweiligen Konfiguration eingetragen werden (zumeist default.sitemap). Beispielhaft kann dies wie folgt umgesetzt werden:

Die angegebenen Icons „ping„, „download„, „upload“ und „ipaddr“ stammen nicht aus der Grundinstallation von openHAB sondern wurden nachträglich in das Verzeichnis „/usr/share/openhab/webapps/images/“ eingefügt. Dabei sollten die Icons 16×16 Pixel groß sein und im Format „.png“ vorliegen.

Sinnvoll wäre es zudem natürlich, die Messwerte über einen bestimmten Zeitraum zu speichern und daraus Diagramme erstellen und anzeigen zu lassen.

Dazu bedarf es seitens openHAB einer Datenbankanbindung, ich verwende hierfür RRD4J. Die Installation wird in diesem Beitrag ausführlich beschrieben.

 

Nun erstellen wir ein weiteres Dummy-Item in der Datei „default.items„:

und erweitern unsere Sitemap-Definition von oben wir folgt:

 

Erklärung:

Zunächst wird in der Hausübersicht nur die Zeile „Internetgeschwindigkeit“ dargestellt. Klickt oder drückt man auf diese, gelangt man in das definierte Untermenü. Dort werden in den ersten drei Zeilen zunächst die aktuellen Messwerte dargestellt. Im unteren Bereich werden drei Diagramme, für jeden Messwert eins, angezeigt. Zudem ist es nun möglich, über drei Buttons den angezeigten Darstellungszeitraum zu wechseln.

Dies könnte im Endeffekt so aussehen:

 

openhab-speed

 

 

Wenn für das Script, welches wir oben erstellt haben, kein CRON-Job angelegt wurde, besteht auch die Möglichkeit, das Script durch openHAB in regelmäßigen Abständen ausführen zu lassen, sofern es auf dem gleichen Rechner wie openHAB vorliegt.

Dazu erstellen wir in einer Regelbeschreibungsdatei (zumeist default.rules) eine CRON-Regel: