Die Fritz!Box bietet von Haus aus eine UPnP Schnittstelle, dierüber können Status-Informationen und einige technische Werte abgefragt werden.
Prinzipiell funktioniert das ganze als Webservice per SOAP.
Welche Werte abfragbar sind, findet man in den WDSL-Files. Diese XML-Dateien beschreiben, welche Werte und Methoden der Webservice zur Verfügung stellt. Für die Fritz!Box gibt es einige dieser Dateien, diese sind:
Um nun diese Werte abfragen zu können, gibt es diverse Möglichkeiten:
Wir wollen uns nun hier die Möglichkeit, die Werte per eigenem Request zuzugreifen genauer anschauen.
Das Prinzip, Werte von der Fritz!Box per UPnP abzufragen, beruht auf einem Script von http://www.anetzb.de/upnp2mrtg/ hier wird per Shell-Script und dem Programm netcat auf den Web-Service der Fritz!Box zugegriffen.
Die Anpassung ist, das die Werte nicht an MRTG übergeben, sondern in ein File gespeichert werden. Dabei könnte das File-Fomat z.B. CSV sein.
Beispiel Shell-Script (1:1 aus upnp2mrtg, bis auf die letzten Zeilen)
#!/bin/sh
. . .
# get data in/out
b1=„TotalBytesReceived:`ws_operation GetAddonInfos NewTotalBytesReceived`“
b2=„TotalBytesSent:`ws_operation GetAddonInfos NewTotalBytesSent`“
b3=„DownstreamMaxBitRate:`ws_operation GetCommonLinkProperties NewLayer1DownstreamMaxBitRate`“
b4=„UpstreamMaxBitRate:`ws_operation GetCommonLinkProperties NewLayer1UpstreamMaxBitRate`“
b5=„ByteSendRate:`ws_operation GetAddonInfos NewByteSendRate`“
b6=„ByteReceiveRate:`ws_operation GetAddonInfos NewByteReceiveRate`“
# output
printf “%s\n%s\n%s\n%s\n%s\n%s\nUpTime:%.2d Tagen %.2d Stunden %.2d Minuten %.2d Sekunden\n“ \
„${b1:-UNKNOWN}“ „${b2:-UNKNOWN}“ „${b3:-UNKNOWN}“ „${b4:-UNKNOWN}“ „${b5:-UNKNOWN}“ „${b6:-UNKNOWN}“ „${h% *}“ „${h#* }“ „${m#* }“ „${s#* }“
;;
Dieses Script kann dann z.B. alle 10 Minuten durch einen Cron-Job aufgerufen werden.
Beispiel Cron-Job:
*/10 * * * root /pfad/zum/script.sh > /pfad/zu/fritzbox.csv
Das erzeugte File kann z.B. mit PHP, Perl oder ASP ausgelesen und die Werte in Variablen gespeichert werden. Die Ausgabe der Variablen kann dann in einer beliebigen Web-Seite erfolgen.
Beispiel PHP-Fuktion:
function getFritzBoxValue($id) {
$value = NULL;
$handle = fopen(“/pfad/zum/fritzbox.cvs“, „r“) or die(„Datei fritzbox.cvs konnte nicht gefunden werden!“);
while ( ($data = fgetcsv ($handle, 1000, “,“)) !== FALSE ) {
$num = count ($data);
$row++;
if ($data[0] == $id) {
$value = $data[1];
}
}
fclose($handle);
return $value;
}
Die erstellte Date mit den Werten, kann z.B. über ein Script geparst werden und in eine Datenbank (z.B. mySQL) mit Time-Stamp gespeichert werden. Dadurch hätte man dann die Möglichkeit, die Werte im zeitlichen Verlauf z.B. in einem Diagramm darzustellen.
Hierzu eignet sich z.B. JpGrapheine PHP Biliothek, die sehr schöne Diagramme generieren kann.
Ein Beispiel, wie so etwas aussehen kann, gibt es z.B. beim Forum-User cni auf seiner Homepage
Eine andere Möglichkeit wäre auch RRDTool. Diese Möglichkeit verwendet z.B. auch MRTG, siehe hier: http://www.wehavemorefun.de/fritzbox/MRTG