Telekom Speedport Status Widget

Posted at July 15, 2015.

Manche von uns haben das große VergnĂŒgen, mit einem Speedport Router der Telekom gesegnet zu sein. So steht auch bei uns ein Speedport W723V Typ B.

Zur Zeit habe ich kein großes VergnĂŒgen mit meiner Internetanbindung, daher wĂ€re es angehenm, die Ausgaben der Statusseite des Routers per GeekTool auf dem Desktop anzuzeigen.

Leider ist die besagte Statusseite nicht nur einfaches HTML, sondern wird mittels Clientseitigem Javascript erzeugt. Groteskerweise setzt der Router je nach Status andere Werte fĂŒr Variablen im Javascript Code.

GlĂŒcklicherweise gibt es einen einfachen Weg diese Seite in einem Headless-Browser auszufĂŒhren um die Seite zu rendern, nĂ€mlich PhantomJS. Es genĂŒgt ein einfaches sudo port install phantomjs zur Installation mittels MacPorts.

Nun brauchen wir ein kleines Javascript um die Seite zu laden und auszufĂŒhren (Quelle):

vim ~/bin/save_page.js

var system = require('system');
var page = require('webpage').create();
page.open(system.args[1], function() {
    console.log(page.content);
    phantom.exit();
});

:wq

Zu guter letzt noch ein Shellscript, um das Javascript auszufĂŒhren und die Ausgabe zu formatieren. Hierzu werden zuerst die unwichtigen Stellen herausgeschnitten, alle HTML-Tags entfernt, leere Zeilen gelöscht und HTML Escape Sequenzen entfernt. Des weiteren werden Leerzeichen hinter Doppelpunkten eingefĂŒgt, die erste und zwei Zeilen in der Mitte gelöscht, aufeinanderfolgende Zeilen in Zweierblöcken aneinandergehĂ€ngt und doppelte Leerzeichen sowie ĂŒberflĂŒssiger statischer Text entfernt.

Zu guter letzt eine kleine Bash Funktion um die Ausgabe rechtsbĂŒndig auszurichten, da das Widget am rechten Rand meines Monitors platziert ist. Das ist natĂŒrlich optional.

vim ~/bin/status.sh

#!/bin/bash
right() {
    l="$(cat -)";
    s=$(echo -e "$l"| awk ' { if ( length > L ) { L=length} }END{ print L}');
    echo "$l" | while read l;do j=$(((s-${#l})));echo "$(while ((j-->0)); do printf " ";done;)$l";
    done;
};
/opt/local/bin/phantomjs /Users/thomas/bin/save_page.js http://speedport.ip/top_status.stm | sed -n '/Internetzugang/,$p' | head -n 34 | sed -E 's/<[^>]*>//g' | sed '/^$/d' | sed -E 's/&[^;]*;//g' | sed 's/:/& /' | tail -n +2 | sed -E '7,8d' | paste -d " " - - | tr -s " " | sed -E 's/Öffentliche WAN-//g' | right

:wq
chmod a+x ~/bin/status.sh

Die Ausgabe sieht dann so aus:

      DSL-Link: Synchron
Downstream: 51391 kBit/s
  Upstream: 10048 kBit/s
    IPv4: 87.162.241.165
Screenshot 1 Screenshot 2

Aktualisierung vom April 2017:

Die Telekom hat es mittlerweile tatsÀchlich geschafft auch unseren Anschluss mit IPv6 zu versorgen. Daher muss noch das folgende Kommando an die lange phantomjs Kommandozeile angehÀngt werden:

 | sed -E 's/Zugewies. PrÀfix IPv6:/\'$'\nIPv6: /g'

Damit wird der IPv6 PrÀfix direkt unter der IPv4 Adresse angezeigt.

Blog
Analytics