Nach dem ich mit der Telekom und einem Hybrid-Vertrag Probleme hatte habe ich mir selber auf Basis eines Raspberry Pi einen Internet Geschwindigkeit Monitor gebaut. Dieser zeichnet alle 15 Minuten die Geschwindigkeit auf und speichert die gemessenen Werte für Download und Upload in eine CSV Datei ab. Das ganze ist recht einfach umgesetzt und hilft ungemein bei der Diskussion mit seinem Provider da man bei der Diskussion nicht hilflos dasteht sondern aufzeigen kann wie die Datenrate wirklich vor Ort ist. Die Daten können je nach Interesse über viele Wochen hinweg aufgezeichnet werden und stellen sehr schön die tatsächliche Geschwindigkeit der Internetverbindung da.
Materialliste
Ich stelle auf meinen Blogs immer die Materialliste anhand von Amazon zusammen. Also sind die nachfolgenden Links alle Affiliate links.
Eine sehr schöne Lösung ist dieses Starterkit. Es enthält alles was man braucht vom Raspberry Pi über die mirco SD-Karte bis hin zum Gehäuse und Ladegerät mit der Garantie das es auch funktioniert. Der Raspberry Pi 3 Model B+ hat den Vorteil das schon ein WIFI Modul verbaut ist. Somit erhält man eine schöne kompakte Lösung.
Jetzt ist es natürlich so, das man diesen Speedtest vielleicht ein paar Wochen laufen lässt und anschließend mit dem Raspberry Pi etwas anders machen möchte. Daher hier noch der Link auf das neueste Modell mit 4 GB Ram. Mit diesem kann man weitere Projekte machen und sich noch stärker mit z. B. Linux vertraut machen.
Für das neue Modell habe ich leider noch kein Kit gefunden das alles beinhaltet vom Gehäuse bis zum HDMI Kabel.
Optional und von mir immer sehr gerne verbaut ist dieses OLED Display. So kann ich ganz einfach die IP-Adresse des Raspberry Pi ablesen und erfahre etwas über die Ressourcen Auslastung von der CPU, dem RAM und der Speicherkarte.
Damit das OLED Display auch angeschlossen werden kann werden noch vier Female-Female Jumper Kabel benötigt. Praktisch ist dieses Set immer.
Software Installation
Als erstes muss ein Raspbian Image herunter geladen werden. Ich habe diese Anleitung anhand dem minimalen Image entwickelt. Das bedeutet es gibt keinen Desktop sondern nur die Kommandozeile für die Eingabe. Verwendet habe ich das Image „2019-07-10-raspbian-buster-lite.img“ und habe noch ein paar Programme zusätzlich installiert.
Das Image wird z. B. mit „Win32DiskImager“ auf die micro SD-Karte geschrieben.
Download: Win32DiskImager
Ich gehe davon aus, dass der Raspberry Pi via LAN-Kabel am Router direkt angeschlossen ist. Daher beschreibe ich hier nicht wie eine Headless Installation für WIFI abläuft. So kann es auch nicht zu Verfälschungen mit der WIFI Verbindung kommen.
Jetzt den Raspberry Pi via LAN-Kabel mit dem Router verbinden und diesen einschalten. Via SSH ist es jetzt möglich sich an dem Raspberry Pi anzumelden. Ich arbeite immer von Windows aus und verwende daher PuTTY als Programm um die SSH Verbindung aufbauen zu können.
Download: PuTTY
Ich empfehle immer den MidnightCommander zu installieren für alle die die vielen Linux Befehle nicht kennen.
Befehl: sudo apt-get install mc
Ich empfehle via MidnightCommander einen Ordner anzulegen mit dem Namen „speed-test“ und in diesem das Python Programm speedtest.py später abgelet wird.
Jetzt muss noch der Speedtest-Client also das entsprechende Paket mit dem folgenden Befehl installiert werden.
Befehl: sudo apt-get install speedtest-cli
Damit auch die richtige Zeigt im Raspberry Pi eingestellt ist empfehle ich noch den NTP Diesnt zu installieren.
Befehl: sudo apt-get install ntp
Anschließend kann man noch um die Raspberry Pi Konfiguration die Zeitzone wählen.
Befehl: sudo dpkg-reconfigure tzdata
Dann kann auch schon das Python Programm auf den Raspberry Pi kopiert werden. Dazu bitte den folgenden Befehl im frisch angelegten Ordner ausführen.
Befehl: wget https://www.blogyourearth.com/wp-content/uploads/2019/08/speedtest.zip
Jetzt z. B. mit dem MidnightCommander die ZIP-Datei im Ordner „speedtest“ entpacken. Dazu einfach die Datei öffnen und den Inhalt auf die andere Seite / Fenster in den Ordner speed-test kopieren.
Das Programm selber kann noch nach belieben konfiguriert werden. Dazu muss es editiert werden. Wer das nicht kann oder mag kann es jetzt mit dem folgenden Befehl ausführen.
Befehl: python speedtest.py
Das Programm speedtest.py legt dann im Ordner „speed-test“ eine *.csv Datei ab. In dieser CSV Datei sind alle Werte der Netzwerkgeschwindigkeit-Analyse gespeichert.
Für den einfachen Zugriff lohnt es sich dann z. B. mit WinSCP vom Windows Rechner aus auf den Raspberry Pi zuzugreifen und die *.csv Datei herunter zu laden.
Download: WinSCP
Ich habe aktuelle mit meiner Fritzbox sehr gute Erfahrungen gemacht und eine top stabile Verbindung.
Internet Geschwindigkeit – Auswerten
Die Auswertung der Geschwindigkeit habe ich dann wieder in MS-Office via Excel gemacht. Ich hänge hier meine Beispieldatei einmal an samt Pivo-Tabelle und kleiner Grafik. Im Reiter Daten müssen dann die Daten aktualisiert werden also die von mir Beispielhaft eingetragenen Daten müssen gelöscht werden.
Hier gibt es die Excel-Datei zum Download: MS Excel – Speed-Report
OLED Display – OPTIONAL
Für das OLED Display müssen ein paar Bibliotheken installiert werden und das Display muss am I²C Bus des Raspberry Pi angeschlossen werden. Mehr dazu dann in den beiden folgenden Abschnitten.
OLED Display – verkabeln
Das Oled Display wird an den GPIO Pins des RaspberryPi angeschlossen. Dazu bitte beachten, dass der Pin mit den 3,3V am Raspberry Pi gewählt wird. Das OLED Display darf nicht an einem der 5V Pins angeschlossen werden. Das kann den Raspberry Pi beschädigen da dieser mit 3,3V an seinen GPIO Pins arbeitet.
Raspberry Pi | OLED Display |
GND | GND |
3,3V | Vin |
SCL | SCL |
SDA | SDA |
OLED Display – Software installieren
Jetzt müssen die folgenden Befehle einzeln eingetippt und ausgeführt werden. Anschließend kann das Display für die Anzeige verwendet werden. Als Beispielprogramm mit den nötigen Informationen dient das Adafruit Beispielprogramm stats.py das im Ornder exmaples liegt.
Befehl: sudo apt-get install -y python-setuptools
Befehl: sudo apt-get install python-pip
Befehl: sudo apt-get install git
Befehl: sudo apt-get install libjpeg8-dev
Befehl: pip install image
Befehl: git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
Befehl: cd Adafruit_Python_SSD1306
Befehl: sudo python setup.py install
Jetzt bitte in den Ordner examples wechseln und dort das Python Progamm stats.py starten.
Befehl: python stats.py
Es sollte die IP-Adresse, die CPU Auslastung sowie die RAM und Speicherkarten Belegung angezeigt werden. Wer mag kann das kleine Programm anpassen und sich die aktuelle Internet Geschwindigkeit direkt ausgeben lassen.
Autostart Internet Geschwindigkeits Monitor
Damit die Aufzeichnung der Internet Geschwindigkeit auch automatisch nach dem Einschalten des Raspberry Pi startet empfehle ich die crontab Datei anzupassen. Diese liegt im Ordner /etc/ und kann z. B. mit dem folgenden Befehl bearbeitet werden.
Befehl: sudo nano /etc/crontab
Anschließend müssen die beiden folgenden Zeilen ergänzt werden die das Skript speed-test-autostart.sh ausführt.
# Speed-Test-Autostart
@reboot pi /home/pi/speed-test-autostart.sh &
# OLED Display
@reboot pi python /home/pi/Adafruit_Python_SSD1306/examples/stats.py >> /home/pi/oled.log 2>&1 &
Zusammenfassung
Mit dem Raspberry Pi und dem kleinen Python Programm lässt sich auf recht einfache Weise ein Internet Geschwindigkeit Monitor bauen. Durch die automatische Aufzeichnungen und dies über viele Tage hinweg ergibt sich dann auch ein umfassendes Bild. Im Programm selber können noch ein paar Parameter gesetzt werden entsprechend den individuellen Bedürfnissen.
Wer gerne die aktuelle Geschwindigkeit auf dem OLED Display sehen möchte kann hier das Programm von Adafruit direkt anpassen.
Gute Anleitung! Allerdings hat es bei mir auch nicht auf Anhieb geklappt und ich habe meine eigene Variante entwickelt, die die Ergebnisse ausgibt und zusätzlich in eine Textdatei schreibt. Vielleicht hilft das jemandem:
import subprocess
import time
counter=1
while (1):
file=open(‚data.txt‘,’a‘)
try:
results=subprocess.check_output([’speedtest‘,‘–csv‘],stderr=subprocess.STDOUT)
except:
print („No data from speedtest available“)
else:
results=results.decode(‚utf-8‘)
results=results.split(‚,‘)
ping=float(results[5])
ping=int(ping)
down=float(results[6])/1048576
down=round(down,2)
up=float(results[7])/1048576
up=round(up,2)
print (time.strftime(„%d.%m.%Y, %H:%M:%S,“),“Ping:“,str(ping),“ms, DL:“,str(down),“Mbit/s, UL:“,str(up),“Mbit/s“)
output=(str(counter)+“;“+str(ping)+“;“+str(down)+“;“+str(up)+“;“+time.strftime(„%d.%m.%Y-%H:%M:%S“)+“\n“)
file.write(output)
counter+=1
file.close()
time.sleep(1800)
Vielen Dank Frank für Dein Programm.
Ich hoffe es hilft vielen weiteren Makern gut weiter.
Hallo,
erhalte beim Ausführen des Scriptes folgenden Fehler:
python speedtest.py
Traceback (most recent call last):
File „/home/pi/speed-test/speedtest.py“, line 43, in
main()
File „/home/pi/speed-test/speedtest.py“, line 25, in main
file.writelines([out])
TypeError: write() argument must be str, not bytes
Allerdings habe ich eine sehr alte Plattform:
Revision : 000f
Model : Raspberry Pi Model B Rev 2
Raspbian GNU/Linux 11 (bullseye) lite
Das Problem hatte ich auch. Die Lösung war die Ausgabe vor dem Schreiben zu dekodieren:
out=out.decode(‚utf-8‘)
Hallo,
coole Sache hat bei mir auch alles Funktioniert.
Ich habe nur ein Problem meine Zahlen sind bis zu 17 stellen lang.
Beispiel einer meiner Download Geschwindigkeiten ist 3.529.640.158.215.090 ich habe eine 1000 Mbit/s Leitung.
Jetzt ist meine Frage ist das Ergebnis in Byte ?
Hallo Markus,
das ist eine sehr große Zahl und ich denke Du hast einen Fehler bei der Ermittlung der Zahl.
Denn 1 Byte besteht meist aus 8 Bits.
3.529.640.158.215.090 / 8 = 441.206.144.776.886,3 Byte
441.206.144.776.886,3 / 1000 = 441.206.144.776,8863 KB
441.206.144.776,8863 / 1000 = 441.206.144,7768863 MB
„Wer gerne die aktuelle Geschwindigkeit auf dem OLED Display sehen möchte kann hier das Programm von Adafruit direkt anpassen.“
Kannst Du uns verraten, wie das genau funktioniert ?
LG
Hey,
ich nutze den Pi Zero über WLAN und die Excel Dateien werden auch angelegt, jedoch ohne die Geschwindigkeit.
Zudem bekomme ich beim starten vom Display folgenden Fehler:
pi@raspberrypi:~/Adafruit_Python_SSD1306/examples $ python stats.py
Traceback (most recent call last):
File „stats.py“, line 47, in
disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST)
File „build/bdist.linux-armv6l/egg/Adafruit_SSD1306/SSD1306.py“, line 288, in __init__
File „build/bdist.linux-armv6l/egg/Adafruit_SSD1306/SSD1306.py“, line 107, in __init__
File „build/bdist.linux-armv6l/egg/Adafruit_GPIO/I2C.py“, line 66, in get_i2c_device
File „build/bdist.linux-armv6l/egg/Adafruit_GPIO/I2C.py“, line 99, in __init__
File „build/bdist.linux-armv6l/egg/Adafruit_PureIO/smbus.py“, line 125, in __init__
File „build/bdist.linux-armv6l/egg/Adafruit_PureIO/smbus.py“, line 150, in open
IOError: [Errno 2] No such file or directory: ‚/dev/i2c-1‘
pi@raspberrypi:~/Adafruit_Python_SSD1306/examples $
Kannst Du mir da weiterhelfen ?
Okay, kann nicht editieren.
Nun klappt das mit dem Display schon mal, aber wie kann ich nun die Geschwindigkeiten auf dem Display anzeigen lassen ?
Hallo!
Danke für die tolle Anleitung. Selbst mir als absoluten Linux-Anfänger ist es gelungen, alle Punkte so weit umzusetzen, daß das speedtest.py Script startet. Sie schreiben, daß man crontab dahingehend anpassen muß, daß das Script /home/pi/speed-test-autostart.sh beim Reboot ausgeführt wird.
Jedoch liegt in dem Ordner keine entsprechende Datei. Muß diese noch erstellt werden?
Hallo Sebastian,
damit das speedtest.py Programm nach jedem Neustart des Raspberry Pi startet musst Du der Anleitung im Kapitel „Autostart Internet Geschwindigkeits Monitor“ folgen. Dort ist exakt erklärt was Du zu machen hast.
Viel Erfolg,
Maker
Hallo Maker!
Vielen Dank für deine schnelle Rückmeldung.
Genau das war ja meine Frage. Im Ordner home/pi/ sehe ich kein Script, das den Namen speed-test-autostart.sh trägt und im Kapitel “Autostart Internet Geschwindigkeits Monitor” steht auch nicht, daß ich eine solche Datei anlegen soll. Aber vielleicht wird das ja durch den crontab-Eintrag erledigt. Wie gesagt, ich bin Linux-Neuling.
Ich habe noch eine zweite Frage. Und zwar hört die Geschwindigkeitsüberwachung auf zu arbeiten, sobald ich das Putty-Fenster schließe. Ist das normal? Und falls ja, wie kann ich es erreichen, daß das Monitoring trotzdem weiterläuft?
Gruß
Sebastian