Speedtest

Aus FHEMWiki
Version vom 26. Januar 2017, 15:50 Uhr von Drhirn (Diskussion | Beiträge) (Überarbeitung (noch nicht abgeschlossen))
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.


Info blue.png
Sollte Python und/oder wget nicht installiert sein, kann das mit folgenden zwei Befehlen erledigt werden:
sudo apt-get update
sudo apt-get install python wget


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.


Info blue.png
Eine Liste aller verfügbaren Speedtest-Server kann mittels 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 über set ist trotzdem möglich.

Beispiel

Definition des Moduls

define MySpeedtest speedtest 1800 5255
attr MySpeedtest 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 Script speedtest-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

sonstiges

Besten Dank an wkarl, Puschel74, justme1968 für Idee, Modulerstellung/Pflege und Installationsanleitung.