Speedtest: Unterschied zwischen den Versionen
Drhirn (Diskussion | Beiträge) K (Überarbeitung (noch nicht abgeschlossen)) |
Drhirn (Diskussion | Beiträge) K (Überarbeitung abgeschlossen - Plots noch offen) |
||
Zeile 41: | Zeile 41: | ||
== Definition == | == Definition == | ||
Das Modul wird folgendermaßen definiert: | Das Modul wird folgendermaßen definiert: | ||
define <name> speedtest [ | define <name> speedtest [interval] [server] | ||
=== Optionen === | === Optionen === | ||
Zeile 68: | Zeile 67: | ||
== Beispiel == | == Beispiel == | ||
[[File:speedtest01.png|mini|right|200px|Ein speedtest-Device nach dem Geschwindigkeits-Test]] | |||
=== Definition des Moduls === | === Definition des Moduls === | ||
<source lang="perl"> | <source lang="perl"> | ||
Zeile 76: | Zeile 76: | ||
=== Logging in eine Datei === | === Logging in eine Datei === | ||
Das | Das Speichern der Ergebnisse in ein Logfile erreicht man z.B. so: | ||
< | <source lang="perl"> | ||
define | define FileLog_MySpeedtest FileLog ./log/MySpeedtest-%Y%m.log MySpeedtest:.* | ||
attr | attr FileLog_MySpeedtest logtype text | ||
</ | </source> | ||
==== Plot (FileLog)==== | |||
Ein zugehörige SVG-Plot könnte wie folgt aussehen: | |||
< | <source lang="perl"> | ||
############################ | ############################ | ||
# Display speedtest results | # Display speedtest results | ||
Zeile 110: | Zeile 112: | ||
using 1:2 ls l1 axes x1y1 title 'upload (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 | using 1:2 ls l2 axes x1y3 title 'ping (ms)' with lines | ||
</ | </source> | ||
Der Weblink wird wie folgt definiert: | Der Weblink dazu wird wie folgt definiert: | ||
< | <source lang="perl"> | ||
define wl_speedtest SVG FileLog_speedtest:speedtest3:CURRENT | define wl_speedtest SVG FileLog_speedtest:speedtest3:CURRENT | ||
</ | </source> | ||
=== Logging mit Hilfe von DbLog === | === Logging mit Hilfe von [[DbLog]] === | ||
Das | Das Loggen in eine Datenbank erfolgt, wenn ein Reading 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 | ==== Plot (DbLog) ==== | ||
< | Definition des Plots bei Verwendung von DbLog: | ||
<source lang="perl"> | |||
define wl_speedtest SVG myDbLog:speedtest:HISTORY | define wl_speedtest SVG myDbLog:speedtest:HISTORY | ||
attr wl_speedtest label "DL $data{currval1} / UL $data{currval2} / ping $data{currval3}" | attr wl_speedtest label "DL $data{currval1} / UL $data{currval2} / ping $data{currval3}" | ||
attr wl_speedtest plotfunction speedtest | attr wl_speedtest plotfunction speedtest | ||
</ | </source> | ||
Definition der Datei speedtest.gplots: | Definition der Datei speedtest.gplots: | ||
< | <source lang="perl"> | ||
############################ | ############################ | ||
# Display speedtest results | # Display speedtest results | ||
Zeile 157: | Zeile 159: | ||
using 1:2 ls l1 axes x1y1 title 'upload (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 | using 1:2 ls l2 axes x1y3 title 'ping (ms)' with lines | ||
</ | </source> | ||
== Bekannte Probleme == | == Bekannte Probleme == | ||
* Für den Betrieb ist Python notwendig. Daher läuft das Script nicht ohne Weiteres auf einer | * Für den Betrieb ist Python notwendig. Daher läuft das Script nicht ohne Weiteres auf einer FritzBox. | ||
* 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 <code>speedtest-cli</code> heißt und notfalls dementsprechend umbenannt wird. | |||
* 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 <code>speedtest-cli</code> heißt und | * Das Modul bricht ggf. mit einer Perl-Fehlermeldung im FHEM-Log ab, obwohl das Script von der Konsole aus einwandfrei läuft. Dies tritt z.B. bei Verwendung von Rasbian mit installierten Python 2.7 und Python 3 auf. Zur Behebung muss im Script <code>speedtest-cli</code> die erste Zeile auf <code>#!/usr/bin/env python'''3'''</code> geändert werden. | ||
* Das Modul bricht ggf. mit einer Perl-Fehlermeldung im FHEM-Log ab, obwohl das Script | * Auf manchen Systemen muss in aktuellen speedtest-cli Versionen die Zeile <code>'(%s; U; %s; en-us)' % (platform.system(), platform.architecture()[0]),</code> auskommentiert werden. | ||
* Auf manchen Systemen | |||
== Troubleshooting == | == Troubleshooting == | ||
Im Folgenden sind ein paar Ansatzpunkte genannt, um beim Troubleshooting zu unterstützen. | Im Folgenden sind ein paar Ansatzpunkte genannt, um beim Troubleshooting zu unterstützen. | ||
* Das Script läuft auf der Kommandzeile problemlos, das Modul bringt aber Fehler: | |||
* | ** Script ist nicht ausführbar (<code>chmod +x speedtest-cli</code>) | ||
* | ** Der FHEM-User (''fhem'') hat keine Berechtigung das Script auszuführen | ||
* | <!-- | ||
; Ist das Log frei von Fehlermeldungen? | ; Ist das Log frei von Fehlermeldungen? | ||
; Werden im Modul Readings angezeigt? | ; Werden im Modul Readings angezeigt? | ||
; Kommen die Readings im Log (Filelog oder DbLog) an? | ; Kommen die Readings im Log (Filelog oder DbLog) an? | ||
--> | |||
* SVG-Plot zeigt nichts an: | |||
** Verweis auf Filelog oder DbLog falsch | |||
** Falsches gplot-File angegeben | |||
* | ** Übergabe der Plotfunktion (bei DbLog) nicht korrekt | ||
* | ** Falsche Groß-/Kleinschreibung verwendet (case sensitive) | ||
* Übergabe der Plotfunktion (bei DbLog) | <!-- | ||
* | * Ist der Inhalt des gplot-Files korrekt | ||
* Ist die Definition der Quelle korrekt (Filelog, DbLog oder LogProxy)? | * Ist die Definition der Quelle korrekt (Filelog, DbLog oder LogProxy)? | ||
* Ist die Regexpr korrekt? | * 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 vorkommen, weil DbLog nicht weiß, wie es Wert und Einheit trennen soll. Abhilfe schafft eine entsprechende Regular Expression, die nur den Zahlenwert liefert. | |||
* 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 | |||
== Weblinks == | == Weblinks == | ||
* Beschreibung des Scripts [http://binarynature.blogspot.de/2013/03/measure-internet-connection-speed-from-linux-command-line.html binarynature.blogspot.de] | * Beschreibung des Scripts [http://binarynature.blogspot.de/2013/03/measure-internet-connection-speed-from-linux-command-line.html binarynature.blogspot.de] | ||
* | * [https://pypi.python.org/pypi/speedtest-cli speedtest-cli auf pypi.python.org] | ||
* | * [https://github.com/sivel/speedtest-cli speedtest-cli auf github.com] | ||
* Forumseintrag über die Entwicklung des Moduls [http://forum.fhem.de/index.php/topic,13419.msg83189.html#msg83189 Thema: Internetgeschwindigkeit überwachen] | * Forumseintrag über die Entwicklung des Moduls [http://forum.fhem.de/index.php/topic,13419.msg83189.html#msg83189 Thema: Internetgeschwindigkeit überwachen] | ||
* Forumseintrag darüber, dass das Binary nicht auf der Fritzbox läuft [http://forum.fhem.de/index.php/topic,27242.msg201516.html#msg201516 Thema: Internetgeschwindigkeit - speedtest] | * Forumseintrag darüber, dass das Binary nicht auf der Fritzbox läuft [http://forum.fhem.de/index.php/topic,27242.msg201516.html#msg201516 Thema: Internetgeschwindigkeit - speedtest] | ||
* Forumseintrag über aus der Idee wird ein Modul [http://forum.fhem.de/index.php/topic,13483.msg83538.html#msg83538 Thema: Internetgeschwindigkeit überwachen] | * Forumseintrag über aus der Idee wird ein Modul [http://forum.fhem.de/index.php/topic,13483.msg83538.html#msg83538 Thema: Internetgeschwindigkeit überwachen] | ||
== | == Sonstiges == | ||
Besten Dank an wkarl, Puschel74, justme1968 für Idee, Modulerstellung/Pflege und Installationsanleitung. | Besten Dank an wkarl, Puschel74, justme1968 für Idee, Modulerstellung/Pflege und Installationsanleitung. |
Version vom 26. Januar 2017, 15:50 Uhr
Todo: Fehlerkontrolle, Formatierung, Ergänzung, ggf. Detaillieren des Troubleshooting |
Speedtest ist ein Modul, mit dem in regelmäßigen Abständen die Internet-Geschwindigket (Download, Upload, Ping) gemessen werden kann. Dabei wird auf das externe Python-Script speedtest-cli zurück gegriffen.
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! |
Voraussetzungen
Für diese Anleitung ist notwendig
- Debian-Derivat (Debian, Ubuntu, Raspbian, ...)
- Linux-Grundkenntnisse
- Paket- und Quellenverwaltung apt-get
- Python 2.4 - 3.4
- wget
Alle in diesen Kapitel genannten Befehle müssen auf der Kommandozeile abgesetzt werden.
Installation von speedtest-cli
Zuerst muss das speedtest-cli - Script heruntergeladen werden. Der folgende Befehl erledigt das mit Hilfe von wget und speichert die Datei im Verzeichnis /usr/local/bin:
sudo wget -O /usr/local/bin/speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
Anschließend muss die Datei noch als "ausführbar" markiert werden:
sudo chmod +x /usr/local/bin/speedtest-cli
Ob alles funktioniert hat, kann man dann mit einem einfachen Aufruf überprüfen:
speedtest-cli --help
Weitere Installationsanleitungen sind auf der speedtest-cli - Webseite zu finden.
Definition
Das Modul wird folgendermaßen definiert:
define <name> speedtest [interval] [server]
Optionen
<interval>
: Optional. Der Wert bestimmt, in welchen Zeitabständen ein Geschwindigkeitstest durchgeführt wird. Wird kein Intervall angegeben, wird der Standard-Wert (3600s) verwendet. Minimum sind 1800 Sekunden.<server>
: Optional. Hier kann die ID eines Speedtest-Servers eingetragen werden, gegen den die Geschwindigkeits-Tests gefahren werden. Ist kein Wert angegeben, wird der "nächstgelegene" Server verwendet.
speedtest-cli --list
bzw. speedtest-cli --list | grep Germany
angezeigt werden
Readings
ping
(ms)download
(MBit/s)upload
(MBit/s)
Set
statusRequest
: Startet einen manuellen Durchlauf des definierten Tests
Attribute
Bei der Definition des Moduls können folgende Attribute gesetzt werden
path
: Hier kann das Verzeichnis des speedtest-cli-Scripts angegeben werden (z.B.: /usr/local/bin).checks-till-disable
: Über dieses Attribut lässt sich festlegen, wie häufig speedtest-cli 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 überset
ist trotzdem möglich.
Beispiel
Definition des Moduls
define MySpeedtest speedtest 1800 5255
attr MySpeedtest path /usr/local/bin
Logging in eine Datei
Das Speichern der Ergebnisse in ein Logfile erreicht man z.B. so:
define FileLog_MySpeedtest FileLog ./log/MySpeedtest-%Y%m.log MySpeedtest:.*
attr FileLog_MySpeedtest logtype text
Plot (FileLog)
Ein zugehörige SVG-Plot könnte wie folgt aussehen:
############################
# 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 dazu wird wie folgt definiert:
define wl_speedtest SVG FileLog_speedtest:speedtest3:CURRENT
Logging mit Hilfe von DbLog
Das Loggen in eine Datenbank erfolgt, wenn ein Reading 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.
Plot (DbLog)
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.
- 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 notfalls dementsprechend umbenannt wird. - Das Modul bricht ggf. mit einer Perl-Fehlermeldung im FHEM-Log ab, obwohl das Script von der Konsole aus einwandfrei läuft. Dies tritt z.B. bei Verwendung von Rasbian mit installierten Python 2.7 und Python 3 auf. Zur Behebung muss im Script
speedtest-cli
die erste Zeile auf#!/usr/bin/env python3
geändert werden. - Auf manchen Systemen muss 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.
- Das Script läuft auf der Kommandzeile problemlos, das Modul bringt aber Fehler:
- Script ist nicht ausführbar (
chmod +x speedtest-cli
) - Der FHEM-User (fhem) hat keine Berechtigung das Script auszuführen
- Script ist nicht ausführbar (
- SVG-Plot zeigt nichts an:
- Verweis auf Filelog oder DbLog falsch
- Falsches gplot-File angegeben
- Übergabe der Plotfunktion (bei DbLog) nicht korrekt
- Falsche Groß-/Kleinschreibung verwendet (case sensitive)
- 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 vorkommen, weil DbLog nicht weiß, wie es Wert und Einheit trennen soll. Abhilfe schafft eine entsprechende Regular Expression, die nur den Zahlenwert liefert.
Weblinks
- Beschreibung des Scripts binarynature.blogspot.de
- speedtest-cli auf pypi.python.org
- speedtest-cli auf 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.