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
Blog
comments powered by Disqus
Analytics