Speedtest via Kommandozeile (speedtest.net)

Wie schnell ist mein Internet denn im Moment wirklich ? Diese Frage stell ich mir so des öfteren und in Sachen Speedtest gibt es mittlerweile ja auch einige Tools die einen entweder befriedigen, oder zur Weißglut bringen 🙂
Eins davon ist Speedtest.net, die Seite gibt es schon etwas länger und ist weit verbreitet. Durch die große Anzahl an Servern in allen Ländern, lassen sich auch reale Werte ermitteln.
speedtest
Die Seite funktioniert mit einem Browser und Flash wunderbar, doch wie sieht es aus, wenn ich z.B. nur einen Raspberry Pi habe oder von einem Server ohne grafische Oberfläche die Geschwindigkeit per Bash checken will ?
Dafür habe ich ein cooles Tool gefunden – ist in Python geschrieben und lässt sich überall einsetzen. Der Code ist Open-Source und kann natürlich eingesehen werden.

wget -O speedtest-cli https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py
chmod +x speedtest-cli
./speedtest-cli
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from 1&1 Internet AG (87.106.33.84)...
Selecting best server based on latency...
Hosted by Base-Mail (Frankfurt) [100.73 km]: 10.639 ms
Testing download speed........................................
Download: 93.33 Mbits/s
Testing upload speed..................................................
Upload: 90.83 Mbits/s

Das Skript ermittel standardmäßig einen Test-Server der von der Entfernung her am nächsten ist. Das macht generell Sinn, wenn man jetzt aber den Speed auch mal Interkontinental testen möchte, gibt es dafür auch die passenden Parameter:

$ speedtest-cli -h
usage: speedtest-cli [-h] [--bytes] [--share] [--simple] [--list]
[--server SERVER] [--mini MINI] [--source SOURCE]
[--version]
Command line interface for testing internet bandwidth using speedtest.net.
--------------------------------------------------------------------------
https://github.com/sivel/speedtest-cli
optional arguments:
-h, --help show this help message and exit
--bytes Display values in bytes instead of bits. Does not affect
the image generated by --share
--share Generate and provide a URL to the speedtest.net share
results image
--simple Suppress verbose output, only show basic information
--list Display a list of speedtest.net servers sorted by distance
--server SERVER Specify a server ID to test against
--mini MINI URL of the Speedtest Mini server
--source SOURCE Source IP address to bind to
--version Show the version number and exit

So kann man sich z.B. via –list eine Liste der (bei mir im Test über 3000!) verschiedenen Server im Speedtest.net Pool anzeigen lassen:

./speedtest-cli --list
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
....
5085) Google Fiber (Salt Lake City, UT, United States) [3122.60 km]
4178) Syringa Networks (Salt Lake City, UT, United States) [3122.60 km]
244) XMission (Salt Lake City, UT, United States) [3122.60 km]
2206) UTOPIA (Salt Lake City, UT, United States) [3122.60 km]
....

So kann man sich jetzt einen Server in der Liste anhand der ID heraussuchen und über diesen Testen, dann sieht man auch gleich – wie in meinem Fall, dass ich von Deutschland aus keine 100mbit mehr nach Montreal hinbekomme.
Was alleine schon durch die große Entfernung dazwischen eine Leistung ist 🙂

./speedtest-cli --server 1993
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from 1&1 Internet AG (87.106.33.84)...
Hosted by ElectronicBox (Montreal, QC) [5815.52 km]: 149.306 ms
Testing download speed........................................
Download: 29.63 Mbits/s
Testing upload speed..................................................
Upload: 21.57 Mbits/s

 
Viel Spaß beim Testen.

Solarlog (200) Momentanwerte per Kommandozeile auslesen

Solar-Log LogoBesitzer einer Solaranlage haben in der Regel ja auch einen Datenlogger im Einsatz. Ich habe einen Solarlog 200 bei mir zuhause. Die Abfrage der Livewerte sollte aber auch bei allen anderen Modellen von Solar-Log funktionieren.
Das Solarlog besitzt ja eine sehr schöne grafische Webseite, über diese kann man sich auch alle Werte als JSON Objekte ausgeben lassen.
Jede ID steht für einen bestimmten Wert, hier ist eine Übersicht – diese findet ihr auch im Solarlog Handbuch.

<!-- Solar-Log Json Objekte ----
100 - LastUpdateTime
101 - W Pac (Gesamtleistung) aller Zähler & WR
102 - W Pdc (Gestamtleistung aller WR)
103 - V Uac Durchschnittliche Spannung UAC der Wechselrichter
104 - V Durchschnittliche Spannung UDC der Wechselrichter
105 - Wh Durchschnittliche Spannung UDC der Wechselrichter
106 - Wh Summierter gestriger Tagesertrag aller Wechselrichter
107 - Wh Summiertes Monatsertrag aller WR
108 - Wh Summiertes Jahresertrag aller WR
109 - Wh Gesamtertrag aller Wechselrichter
110 - W momentaner Gesamtverbrauch PAC aller Verbauchszähler
111 - Wh Summierter Verbrauch aller Verbauchs-zähler
112 - Wh Summierter Verbrauch des gestrigen Tages; alle Verbauchszähler
113 - Wh Summierter Verbrauch des Monats; alle Verbauchszähler
114 - Wh Summierter Verbrauch des Jahres, alle Verbauchszähler
115 - Wh Summierter Gesamtverbrauch, alle Ver-bauchszähler
116 - Wp Installierte Generatorleistung
-->

Unter Linux kann man sich dann z.B. via Curl alle Werte ausgeben lassen:

curl -X POST -H "Content-Type: application/json" -d '{"801":{"170":null}}' 192.168.0.69/getjp

Der Befehl gibt bei mir folgende Rückgabe:

{"801":{"170":{"100":"21.09.14 16:32:15","101":257,"102":262,"103":0,"104":407,"105":19466,"106":30730,"107":822005,"108":12972119,"109":23174482,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":16800}}}

Wenn man das jetzt etwas anders formatiert sieht es schon besser aus:

{"801":
{"170":
{"100":"21.09.14 16:32:15",
"101":257,"102":262,
"103":0,"104":407,
"105":19466,
"106":30730,
"107":822005,
"108":12972119,
"109":23174482,
"110":0,
"111":0,
"112":0,
"113":0,
"114":0,
"115":0,
"116":16800}
}
}