Anzeige für LTE Volumen und Datenrate

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    ich möchte hier kurz zeigen, was ich nebenbei mal gebastelt habe. Beim Programmieren profitiert man ja heute extrem vom Web, daher möchte ich auch etwas zurückgeben...
    Evtl. findet jemand Hinweise für eigene Projekte oder sonstige Anregungen.

    Projektidee:

    Wir haben das Glück auf dem Lande zu wohnen, fernab von Schmutz und Seuchen der Großstadt. Zu den Seuchen gehören nun aber auch die Computerviren, es gab nämlich lange kein vernünftig schnelles Internet.
    Als dann LTE (Internet per Funk) angeboten wurde waren wir natürlich mit die ersten Abonnenten. Was sich schnell zeigte: LTE ist nur solange schnell, solange die "Flatrate" nicht verbraucht ist, denn LTE wird grundsätzlich nur volumenbegrenzt angeboten. Damit die Bremse nicht beim Streaming des spannendsten Blockbusters Samstag Abends zuschlägt, sollte man also im Bilde sein, wie viel Volumen zum Ende des Monats noch übrig ist.
    Lästigerweise muss man dazu eine Webseite aufrufen.

    Ich habe dies mittels Raspberry automatisiert und lasse die Datenmenge als Prozentwert auf einem Zeigerinstrument anzeigen. (Warum ein Zeigerinstrument? Warum nicht?)

    Zusätzlich, weil's so schön ist und ich eh was über Webrequests lernen wollte, habe ich auch gleich noch den Telekom Speedport Router ausgelesen und kann damit die aktuelle Downloadrate anzeigen.

    Beschreibung Hardware:

    Raspberry Pi mit einem MCP4812 DA Wandler per SPI Anbindung. Der Analogwert wird zur Spannungsanpassung auf einen LM358 gelegt. Dort kann man dann das Ausschlagmaximum auf das verwendete Zeigerinstrument einstellen, bei mir 10V. Dazu dient ein Spindelpoti oder Trimmer. Grundsätzlich sind die Anforderungen hier sehr gering, da das Zeigerinstrument schon sehr nichtlinear ist. Bei 2V zeigt es z.b. 0.2V zu wenig an, bei 8V 0,2V zu viel. Hier kann man sich also noch mit einer Linearisierung austoben, wenn man es genauer möchte.

    Beschreibung Software:

    Ich verwende ein Standard Raspian Image mit ein paar Python Paketen. Es gibt da Bibliotheken wie Beautiful Soup oder Requests, die das Auslesen von Webseiten sehr vereinfachen. Auch Cookies werden behandelt. Etwas kniffelig war das "simulierte" einloggen in den Router, da dies normalerweise von Javascript Code erledigt wird den der Browser des PCs beim Aufruf der Loginseite vom router läd. Da eine Javascript Umgebung aber sehr mächtig und aufwendig zu sein scheint (und es ja auch ums Basteln ging) habe ich die Username/Passworteingaben wie gesagt in Python erledigt. Allerdings halten sich die Huawei Programmierer des Speedport Modems an der einen oder anderen Stelle nicht an Konventionen, so dass man nicht immer die Standardmethoden der Python-Bibliotheken verwenden kann. Z.B. müssen Header Parameter normalerweise encodiert werden, damit sie keine ungültigen Zeichen enthalten. Dies machen sie einfach nicht, sondern verschicken ein codiertes Passwort "as is".
    Das Scrapen der Telekom Infoseite mit dem Restvolumen ist dagegen regelrecht langweilig. Unter "http://pass.telekom.de" kann jeder LTE Kunde sein Volumen abfragen, ganz ohne Login. Hier kam es eher auf die Nutzung eines DOM Parsers an, um komfortabel an die richtigen Zahlen zu kommen.

    Beide Teile, Volumenabfrage und Datenratenabfrage liegen als einzelnes Script vor. Man kann aber auch beides aufeinander abstimmen und gleichzeitig mit zwei Zeigerinstrumenten laufen lassen, da der DA-Wandler über mehrere Kanäle verfügt. Dies muss dann lediglich beim Schreiben des Wertes beachtet werden.

    Für potentielle praktische Nutzer: Das Script benötig das Passwort zum Einloggen in den Router. Da ich mir den Aufwand gespart habe, die Javascript Verschlüsselungsroutine in Python zu übersetzen, habe ich das fertig verschlüsselte Passwort aus dem Post-Request, dass der Browser zum Router sendet herauskopiert.

    Im Screenshot "after login.png" sieht man, wo man den String im Firebug findet. Netzwerk-Tab, HTML-Inhalt, replace-Abschnitt aufklappen, Post login.cgi aufklappen. Dann den String so wie er ist selektieren und in das Script kopieren, wo derzeit mein Passwortstring steht.

    Die Scripte und alle anderen Dateien findet ihr hier: https://github.com/transistorgit/raspberry-lte-volume.git


    Viel Spaß damit
    Bernd

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!