speedtest
speedtest | |
---|---|
Zweck / Funktion | |
Testet die Internetgeschwindigkeit | |
Allgemein | |
Typ | Gerätemodul |
Details | |
Dokumentation | EN / DE |
Support (Forum) | Sonstiges |
Modulname | 32_speedtest.pm |
Ersteller | Andre / justme1968 (Forum / Wiki) |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
Todo: Fehlerkontrolle, Formatierung, Ergänzung, ggf. Detaillieren des Troubleshooting |
Speedtest ist ein Modul um mit Hilfe des externen Python-Scripts speedtest-cli die Internetgeschwindigkeit zu testen.
Features / Funktionen
Mit Hilfe des Moduls kann in regelmäßigen Abständen die Internetgeschwindigkeit (download, upload, ping) bestimmt werden. Dabei wird auf das Pythonscript speedtest-cli (siehe Weblinks) zurückgegriffen. Es lässt sich das Intervall, der genaue Server, gegen den getestet werden soll, sowie eine bestimmte Anzahl an Testläufen festlegen.
Definition
Das Modul wird folgendermaßen definiert:
define <name> speedtest [<interval> [<server>]]
Optionen
Die Angabe des Intervals ist optional. Der Defaultwert ohne Angabe des Intervalls ist 3600 Sekunden. Die Daten werden alle <interval> Sekunden aktualisiert. Das Minimum ist 1800 Sekunden.
Die Angabe des Servers ist ebenfalls optional. Der Defaultwert ohne Angabe ist der per ping "nächstgelegene" Server. Über die Option <server> kann ein dedizierter speedtest Server festgelegt werden, gegen den die Geschwindigkeit ermittelt wird.
Eine Liste lässt sich auf der Kommandozeile über den folgenden Aufruf auslesen:
speedtest-cli --list
- Readings
Als readings werden Werte für ping in ms, download-/upload-Geschwindigkeiten in Mbit/s zur Verfügung gestellt.
- Manuelle Abfrage
Ein Test lässt sich über ein set speedtest statusRequest
manuell anstoßen.
Attribute
Bei der Definition des Moduls können folgende Attribute gesetzt werden
- path
Hier kann der Pfad zum Script angegeben werden. Im unten gegebenen Fall wäre das /usr/local/bin.
- checks-till-disable
Über dieses Attribut lässt sich festlegen, wie häufig speedtest ausgeführt werden soll, bevor der automatische Aufruf deaktiviert wird. Nach Ablauf des Zählers wird das Modul automatisch auf disable gesetzt. Bei jedem Durchlauf wird der Zähler um 1 reduziert.
- disable
Ist dieses Attribut auf 1 gesetzt, ist die automatische Ausführung deaktiviert. Das manuelle Ausführen über set ist trotzdem möglich.
Voraussetzungen
Für diese Anleitung ist notwendig
- Wissen, wie man mit der Kommandozeile umgeht und Linuxgrundkenntnisse
- Paket- und Quellenverwaltung apt-get
Alle in diesen Kapitel genannten Befehle müssen auf der Kommandozeile abgesetzt werden.
Python
Entsprechend Quelle des Scripts ist eine Python-Version zwischen 2.4 - 3.4 erforderlich. Um herauszufinden, welche Python-Version installiert ist, reicht ein Aufruf auf der Kommandozeile von
python -V
Ist eine Version kleiner als 2.4 installiert, sollte ein Update über z.B. folgende Befehle Abhilfe schaffen (liest die aktuelle Paketliste ein):
sudo apt-get update
Der folgende Aufruf aktualisiert alle installierten Pakete auf die derzeit aktuellste Version:
sudo apt-get upgrade
Bekommt man eine Fehlermeldung mit dem Hinweis, dass Python nicht installiert sei, muss dieses entsprechend Platform installiert werden, z.B. über folgenden Befehl:
sudo apt-get install python
speedtest-cli
Der Download lässt sich über wget ODER github oder diverse andere Möglichkeiten bewerkstelligen. Entsprechende Pakete müssen auf dem System installiert sein. Falls nicht, muss man diese über einen der beiden Befehle installieren:
sudo apt-get install wget
sudo apt-get install git
Damit man den Download nicht irgendwo auf seinem System herunterlädt, ist empfehlenswert, zunächst in sein eigenes Homeverzeichnis zu wechseln:
cd ~
Um keine Dateileichen zu hinterlassen, empfiehlt es sich darüber hinaus, NACH erfolgreicher Installation aufzuräumen und alles was man hierher heruntergeladen hat, gleich zu löschen.
Wget
Im eigenen Homeverzeichnis führt man den folgenden Befehl aus, um speedtest-cli herunterzuladen. Dieser läd das Script herunter und speichert es am Ort des Ausführens unter speedtest-cli:
wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest_cli.py
Damit das Script ausführbar ist, müssen die Berechtigungen entsprechend gesetzt werden:
chmod +x speedtest-cli
Anschließend wird es an eine passende Stelle im System verschoben, z.B. in den Ordner /usr/local/bin:
sudo mv speedtest-cli /usr/local/bin
Github
Mit folgendem Aufruf lässt sich das Paket herunterladen. Dabei wird ein passendes neues Unterverzeichnis angelegt und das Heruntergeladene darin entpackt.
git clone https://github.com/sivel/speedtest-cli.git
Das Script liegt hier bereits ausführbar als speedtest_cli.py im Unterordner und muss an einen passenden Ort kopiert werden. Dabei ist wichtig, dass das Modul den Namen speedtest-cli
erwartet.
sudo cp ./speedtest-cli/speedtest_cli.py /usr/local/bin/speedtest-cli
Test des Scripts
Ob das Script funktioniert, lässt sich über folgenden Aufruf testen:
/usr/local/bin/speedtest-cli
Detaillierte Informationen zu den Optionen beim Aufruf sind auf der Quell-Seite dokumentiert Weblinks.
Beispiel
(Bearbeitung über die Weboberfläche von FHEM und "edit files" oder direkte Eingabe in die FHEM-Befehlszeile)
Definition des Moduls
define speedtest speedtest 1800 5255 attr speedtest path /usr/local/bin
Logging in eine Datei
Das loggen der Daten in eine Datei sähe z.B. so aus.
define FileLog_speedtest FileLog ./log/speedtest-%Y.log speedtest:.* attr FileLog_speedtest logtype text
Definition der Datei speedtest3.gplots:
############################ # Display speedtest results set terminal png transparent size <SIZE> crop set output '<OUT>.png' set xdata time set timefmt "%Y-%m-%d_%H:%M:%S" set xlabel " " set title '<L1>' set yrange [0:1] set y2range [0:12] set y3range [0:120] set ylabel "Mbit/s" set y2label "Mbit/s" set y3label "ms" #FileLog 4:speedtest.download\x3a:: #FileLog 4:speedtest.upload\x3a:: #FileLog 4:speedtest.ping\x3a:: plot using 1:2 ls l0 axes x1y2 title 'download (Mbit/s)' with lines, using 1:2 ls l1 axes x1y1 title 'upload (Mbit/s)' with lines, using 1:2 ls l2 axes x1y3 title 'ping (ms)' with lines
Der Weblink wird wie folgt definiert:
define wl_speedtest SVG FileLog_speedtest:speedtest3:CURRENT
Logging mit Hilfe von DbLog
Das loggen in die Datenbank erfolgt, wenn die Readings explizit oder generell alle Readings bei der Definition von DbLog angegeben worden sind und bei der Definition des Moduls speedtest die Readings nicht über DbLogExclude ausgeschlossen wurden.
Definition des Plots bei Verwendung von DbLog
define wl_speedtest SVG myDbLog:speedtest:HISTORY attr wl_speedtest label "DL $data{currval1} / UL $data{currval2} / ping $data{currval3}" attr wl_speedtest plotfunction speedtest
Definition der Datei speedtest.gplots:
############################ # Display speedtest results set terminal png transparent size <SIZE> crop set output '<OUT>.png' set xdata time set timefmt "%Y-%m-%d_%H:%M:%S" set xlabel " " set title '<L1>' set yrange [0:1] set y2range [0:12] set y3range [0:120] set ylabel "Mbit/s" set y2label "Mbit/s" set y3label "ms" #myDbLog <SPEC1>:download:::$val=~s/([\d.]*).*/$1/eg #myDbLog <SPEC1>:upload:::$val=~s/([\d.]*).*/$1/eg #myDbLog <SPEC1>:ping:::$val=~s/([\d.]*).*/$1/eg plot using 1:2 ls l0 axes x1y2 title 'download (Mbit/s)' with lines, using 1:2 ls l1 axes x1y1 title 'upload (Mbit/s)' with lines, using 1:2 ls l2 axes x1y3 title 'ping (ms)' with lines
Bekannte Probleme
- Für den Betrieb ist Python notwendig. Daher läuft das Script nicht ohne Weiteres auf einer Fritzbox.
- Vor ein paar Tagen (28.02.2015) gab es ein paar Fehlermeldungen, die sich nach der Aktualisierung des Scripts aber bislang wieder erübrigt haben.
- Zwischenzeitlich wurde das Script umbenannt. Das Modul erwartet nach wie vor den ursprünglichen Namen. Daher ist wie oben beschrieben darauf zu achten, dass das abgelegte Script
speedtest-cli
heißt und zur Not dahingehend umbenannt wird. - Das Modul bricht ggf. mit einer Perl-Fehlermeldung im Fhem-Log ab, obwohl das Script
speedtest-cli
von der Konsole aus einwandfrei läuft. Dies tritt z.B. bei Verwendung von Rasbian mit installierten Python2.7 und Python3 auf. Zur Behebung muss im Scriptspeedtest-cli
die erste Zeile auf#!/usr/bin/env python3
geändert werden. - Auf manchen Systemen muß in aktuellen speedtest-cli Versionen die Zeile
'(%s; U; %s; en-us)' % (platform.system(), platform.architecture()[0]),
- auskommentiert werden.
Troubleshooting
Im Folgenden sind ein paar Ansatzpunkte genannt, um beim Troubleshooting zu unterstützen.
- Läuft das Script beim Aufruf auf der Kommandozeile?
- Es könnte am fehlenden oder einer falschen Version von Python liegen.
- Ist das Script ausführbar?
- Hat man selbst bzw. die FHEM-Instanz ausreichend Berechtigungen, das Script auszuführen?
- Ist das Log frei von Fehlermeldungen?
- Werden im Modul Readings angezeigt?
- Kommen die Readings im Log (Filelog oder DbLog) an?
- Ist die Definition von SVG korrekt?
- Richtiger Verweis auf Filelog oder DbLog
- Angabe des richtigen gplot-Files
- Übergabe der Plotfunktion (bei DbLog)
- Die der Syntax korrekt (case sensitive)
- Ist der Inhalt des gplot-Files korrekt
- Ist die Definition der Quelle korrekt (Filelog, DbLog oder LogProxy)?
- Ist die Regexpr korrekt?
- Fehlermeldung "isn't numeric in sprintf at ./FHEM/98_SVG.pm"
- Dieses kommt grundsätzlich immer dann vor, wenn SVG versucht einen Wert einzulesen, der neben der Zahl auch die Einheit enthält. Dieses kann bei der Verwendung von DbLog (DbLog ist nicht bekannt, wo es bei dem geloggten Modul die Einheit abtrennen soll) oder addlog vorkommen. Abhilfe liefert eine entsprechende Regexpr, die nur den Zahlenwert verwendet.
Weblinks
- Beschreibung des Scripts binarynature.blogspot.de
- Quelle des Scripts pypi.python.org
- Quelle des Scripts github.com
- Forumseintrag über die Entwicklung des Moduls Thema: Internetgeschwindigkeit überwachen
- Forumseintrag darüber, dass das Binary nicht auf der Fritzbox läuft Thema: Internetgeschwindigkeit - speedtest
- Forumseintrag über aus der Idee wird ein Modul Thema: Internetgeschwindigkeit überwachen
sonstiges
Besten Dank an wkarl, Puschel74, justme1968 für Idee, Modulerstellung/Pflege und Installationsanleitung.