thinkretro.de

Sep 19, 2014

Congstar Guthaben via Conky anzeigen

Ich habe schon seit langer Zeit einen Umts-Stick (und zwar den Huawei Surf Stick E 3131, der problemlos unter Linux funktioniert), der mich auf Reisen mit Internet versorgt. Dazu bin ich Kunde bei Congstar, ein Tochterunternehmen der Telekom AG. Das hat den Vorteil, dass man das sehr gut ausgebaute D1-Netz nutzen kann und so auch in den entlegensten Teilen Deutschlands noch eine recht gute Netzanbindung bekommt.

Hat man den Stick am Rechner angeschlossen, kann man das aktuelle Verbrauchsguthaben relativ tagesaktuell über die Seite "http://datapass.de" abrufen.

Jetzt wollte ich das Ganze gern automatisiert von einem Script erledigen lassen, dass mir entweder "not connected" anzeigt, wenn der Stick nicht angeschlossen ist oder aber eben das aktuell verbrauchte Datenvolumen. Dazu habe ich mit meinen rudimentären Python-Kenntnissen dieses kleine Script geschrieben (einfach kopieren und als xy.py abspeichern; über Anregungen und Kommentare würde ich mich freuen :-) ).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Author:   Marcel Werner
# Mail:     kontakt(at)kaffeejunkie.eu
# Web:      http://www.kaffeejunkie.eu
# Date:     14.08.2014


# This little script gets the amount of used traffic-volume
# from the Telekom-Service-Website 'www.datapass.de'. It seems to be 
# functional in combination with a Congstar/Telekom SIM-Card only.

# Begin

import os
import sys
import lxml.etree as et
import urllib2

# run 'lsusb' in terminal to determine vendor_id
vendor_id = "12d1"
usb_device_path = "/sys/bus/usb/devices/"

def check_usb_connection():
    for subdirectory in os.listdir(usb_device_path):
        cwd = os.path.join(usb_device_path, subdirectory) 
        try:
            with open(cwd+"/idVendor", "r") as f:
                for line in f:
                    if line.replace("\n","") == vendor_id:
                        return True
        except IOError:
            break


while check_usb_connection() == True:
    try:
        opener = urllib2.build_opener()
        opener.addheaders =[('User-agent', 'Mozilla/5.0')]
        url = opener.open('http://datapass.de')
        root = et.fromstring(url.read())

        used_traffic = root.find('.//span[@class="colored"]')  
      .text.encode('utf-8')

        print used_traffic+" von 1 GB verbraucht"
        break
    except AttributeError:
        break
    except IOError:
        break
else:
    print "not connected"

Einbinden in Conky

Der Aufruf des Scripts aus Conky heraus geschieht über folgenden Parameter, den man in die Datei .conkyrc im Home-Verzeichnis einträgt:

${execi 600 python ~/pfad_zum_script.py}

Die 600 ist der Wert in Sekunden, wann dieses Script immer wieder ausgeführt wird; also alle 10 Minuten. Man sollte hier nicht einen zu niedrigen Wert wählen, da ja jeder Seitenaufruf Traffic (wenn auch nur ein paar KB) verursacht.