.titleBar { margin-bottom: 5px!important; }

getfbcalls.pl, Perl-Skript zur automat. Anrufabfrage

Dieses Thema im Forum "andere Software" wurde erstellt von prodigy7, 28 Mai 2005.

  1. prodigy7

    prodigy7 Mitglied

    Registriert seit:
    28 Mai 2005
    Beiträge:
    732
    Zustimmungen:
    1
    Punkte für Erfolge:
    16
    #1 prodigy7, 28 Mai 2005
    Zuletzt bearbeitet: 18 Feb. 2010
    [Update: 18.02.2010] getfbcalls.pl, Perl-Skript zur automat. Anrufabfrage

    Hallo,

    ich bin seit recht kurzer Zeit Besitzer einer Fritz!Box WLAN 7050 und bin recht zufrieden mit dem Teil. Das einzige, was mich im gegensatz zu meiner vorherigen Konfiguration gestört hat war, das ich keine Möglichkeit mehr hatte, mir automatisiert eine Mail zusenden zu lassen wenn ein Anruf eingegangen ist. Aus diesem Grund habe ich mir ein kleines Skript namens getfbcalls.pl geschrieben welches sich zu genau diesem Zweck einsetzen lässt und sich bestens zur Automatisierung in der Crontab einsetzen lässt.

    Nach dem herunterladen am besten die Versionsnummer im Namen entfernen und dann mit chmod 755 <dateiname> ausführbar machen.

    Kann gut sein, dass das Skript auch unter Windows funktioniert sofern die entsprechenden Module dafür verfügbar sind, ich hab es nicht getestet.

    Hier ein paar Beispiele, wie das Skript eingesetzt werden kann:

    Alle Anrufe anzeigen, die ausgehend waren:
    ./getfbcalls.pl --phonedirection=2

    Alle Anrufe anzeigen, die ankommend und innerhalb eines Tages waren:
    ./getfbcalls.pl --phonedirection=1 --period=1d

    Alle Anrufe anzeigen, die länger als eine Minute und kürzer als 3 Minuten waren:
    ./getfbcalls.pl --minduration=60 --maxduration=180

    Alle Anrufe anzeigen, die über das Interface SIP0 gegangen sind:
    ./getfbcalls.pl --interface=SIP0

    Wenn die Ausgabe so formatiert werden soll, dass die in eine Datei umgeleitet werden kann um später (z.B. mit Excel) bearbeitet zu werden, kann man den Switch --showcsv angeben. Dann wird die Ausgabe im CSV-Format ausgegeben. Möchte man dann noch zusätzlich einen Header mit dabei haben, einfach --showheader mit angeben.

    Möchte man sich z.B. "Live" über die aktuellen Anrufe, die raus und rein gegangen sind informieren, kann man folgendes machen:
    ./getfbcalls.pl --period=5m --mailto=adresse@provider.de --mailserver=mailserver.provider.de
    Damit bekommt man dann für einen Zeitraum von 5 Minuten alle Anrufe als einzelne Mails an die angegebene Adresse über den angegebenen Mailserver zugesendet. Möchte man die Anrufe in einer Sammelmail haben, gibt man den Switch --collect mit an.

    Ansonsten einfach mal das Skript mit --help aufrufen und gucken, was es euch noch so an Optionen anbietet. Das Skript läuft natürlich mit der unmodifizierten Firmware der 7050 und die Version mit der ich getestet habe war 14.03.62.

    Ich hoffe, der eine oder andere kann damit was anfangen. Wenn jemand Fehler findet oder Verbesserungsvorschläge hat, einfach hier posten!

    Gruss, prodigy7

    Edit 18.02.2010:
    0.1.6 funktioniert auch mit aktuellen Firmware-Versionen (getestet auf 7270 54.04.80)
     

    Anhänge:

  2. clueless

    clueless Mitglied

    Registriert seit:
    7 Mai 2005
    Beiträge:
    243
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    "URL bzw. Datei wurde nicht gefunden"
     
  3. prodigy7

    prodigy7 Mitglied

    Registriert seit:
    28 Mai 2005
    Beiträge:
    732
    Zustimmungen:
    1
    Punkte für Erfolge:
    16
    Fehler gefunden... (bzw link gefixt)
     
  4. clueless

    clueless Mitglied

    Registriert seit:
    7 Mai 2005
    Beiträge:
    243
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Sieht soweit gut aus :)

    Ein paar kleine Tipps:

    Du machst Dir das auseinanderschnippeln der Parameter unnoetig schwer.

    Code:
        if($ARGV[$argnum] =~ "--phonedirection=([\w|\d|\W|\D]*)")
        {
    ($Unneeded, $phonedirection) = split(/\=/, $ARGV[$argnum]);
    if($phonedirection !~ "(0|1|2|3)")
    {
        print "$0: Wrong option '".$ARGV[$argnum]."'\n";
        print "Try '$0 --help' for more information\n";
        exit(1);
    }
        }
    
    Nach diesem Matching steht in $1 schon der Teil hinter dem = drin, das splitten danach kannst Du Dir sparen. Da Du ja mit [...] eine Zeichenmenge angibst, brauchst Du die einzelnen Zeichenklassen (\w, \W, etc.) nicht mit ner Pipe zu trennen; damit laesst Du die Pipe als erlaubtes Zeichen zu.

    Beim parsen der Zeitdauer gehts auch etwas einfacher:

    Code:
    if($period =~ /[0-9]s/g)
    {
        $period =~ s/s//g;
        $period = $period;
    } elsif($period =~ /[0-9]m/g)
    {
        $period =~ s/m//g;
        $period = $period * 60;
    } elsif($period =~ /[0-9]h/g)
    {
        $period =~ s/h//g;
        $period = $period * 60 * 60;
    } elsif($period =~ /[0-9]d/g)
    {
        $period =~ s/d//g;
        $period = $period * 60 * 60 * 24;
    }
    
    wird zu

    Code:
    if($period =~ /([0-9])([smhd])/)
    {
        $period = $1;
        $period *= 60 if $2 eq 'm';
        $period *= 3600 if $2 eq 'h';
        $period *= 86400 if $2 eq 'd';
    }
    
    Schau Dir vl. mal Getopt::Long an, ist auch ganz praktisch ;)
     
  5. prodigy7

    prodigy7 Mitglied

    Registriert seit:
    28 Mai 2005
    Beiträge:
    732
    Zustimmungen:
    1
    Punkte für Erfolge:
    16
    Danke ! Für Tipps bin ich immer sehr dankbar ;-) Ich hab halt PERL in dem Sinne nie "professionell" erlernt sondern mir durch Learning-by-doing beigebracht so dass vielleicht das eine oder andere Sprachfeature an mir vorbeigegangen ist.

    Ich werde deine Tipps in der nächsten Version umsetzen wenn irgendwelche Bugs gefixt oder neue Features hinzukommen. Ich spiele mit dem Gedanken, Support für mySQL-Datenbanken einzubauen. Wenn entsprechend die Nachfrage da wäre, würde ich das realisieren.

    Gruss, prodigy7
     
  6. clueless

    clueless Mitglied

    Registriert seit:
    7 Mai 2005
    Beiträge:
    243
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Bin ja auch kein Perl-Profi... ausserdem gibts immer viele Wege, die zum Ziel fuehren :)

    Eine generelle Anregung haette ich noch: Mach die "phone direction" doch etwas benutzerfreundlicher. Statt 0-3 akzeptierst Du sowas in der Form von incoming, outgoing, unanswered, etc.
     
  7. prodigy7

    prodigy7 Mitglied

    Registriert seit:
    28 Mai 2005
    Beiträge:
    732
    Zustimmungen:
    1
    Punkte für Erfolge:
    16
    Gute Idee ! Werd ich heute Abend machen, wenn es kälter ist :)
     
  8. prodigy7

    prodigy7 Mitglied

    Registriert seit:
    28 Mai 2005
    Beiträge:
    732
    Zustimmungen:
    1
    Punkte für Erfolge:
    16
    Ok, hab deine Anregung umgesetzt - Download-Link ist in meiner ersten Message aktualisiert.

    Gruss, prodigy7
     
  9. sphings

    sphings Mitglied

    Registriert seit:
    3 Okt. 2004
    Beiträge:
    522
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    ist es möglich die liste irgendwo auf nem ftp server zu speichern in ner sql datenbank?

    meine cgi kenntnisse reichen dafür nicht aus ... :(
     
  10. clueless

    clueless Mitglied

    Registriert seit:
    7 Mai 2005
    Beiträge:
    243
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ja was denn jetzt? Auf nem FTP-Server oder in eine Datenbank? Das .csv-File solltest Du relativ einfach in eine Datenbank importieren koennen.
     
  11. prodigy7

    prodigy7 Mitglied

    Registriert seit:
    28 Mai 2005
    Beiträge:
    732
    Zustimmungen:
    1
    Punkte für Erfolge:
    16
    Hi,

    also sofern du dich drauf einigen kannst, was du möchtest, kann ich dir auch eine 100%ige Antwort geben :)

    Also wenn du irgendwas via FTP hochladen möchtest, kannst du das selber über irgendwelche Skripte bauen. Ausgabe via CSV, hochladen usw.

    Wenn du darauf hinaus möchtest, dass man das Skript laufen lässt und das Skript dann selbstständig die Einträge in eine Datenbank schreibt (da ich mich nur mit mySQL auskenne, würde ich entsprechend auch nur einen mySQL-Support realisieren), ja, das kann ich einbauen und sollte auch recht problemlos funktionieren.

    By the way: Mein Server ist wieder On und das Skript kann wieder runter geladen werden.

    Gruss, prodigy7
     
  12. sphings

    sphings Mitglied

    Registriert seit:
    3 Okt. 2004
    Beiträge:
    522
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    sorry ich meinte ohne ftp ich meinte nur SERVER!

    und ja es geht mir um eine mysql datenbank, damit man das mit php wieder ordentlich auslesen kann ...

    wäre super wenn du sowas einbauen könntest!
    wäre erstrecht super wenn das script nachdem es die einträge in der sql datenbank gespeichert hat auch aus der anrufliste der box löschen könnte (ich sdag nur performance der box)

    Thx

    sphings
     
  13. clueless

    clueless Mitglied

    Registriert seit:
    7 Mai 2005
    Beiträge:
    243
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    *huestel* bitte was? Wird die Box bei Dir grottenlahm, sobald mehr als 2 Anrufe eingegangen sind? Sorry, aber den Stecker ziehen musste dann selbst.
     
  14. prodigy7

    prodigy7 Mitglied

    Registriert seit:
    28 Mai 2005
    Beiträge:
    732
    Zustimmungen:
    1
    Punkte für Erfolge:
    16
    Einbauen kann ich den mySQL-Support, kein Problem! Aber wie schon mein Vorredner sagte, musst wenn du den Stecker ziehen. Abgesehen davon wäre das ein Armutszeugnis für AVM wenn nach ein paar Anrufen die Performance der Box in die Knie gehen würde - da ich von AVM besseres gewohnt bin, gehe ich nicht davon aus, dass die Performance sinkt mit der Anzahl der Anrufe.

    Das einzige was ich gemerkt habe ist, dass die Performance während der Entwicklung meines Skripts in die Knie ging was evtl. daran lag, dass ich die zu sehr mit abrufen penetriert habe. Muss ich mal beantworten bzw wenn jemand sowas bemerkt, sollte er das mal melden. Im normalfall sollte sich aber an der performance der Box nichts ändern!

    Gruss, prodigy7
     
  15. sphings

    sphings Mitglied

    Registriert seit:
    3 Okt. 2004
    Beiträge:
    522
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    ne bei 2 oder 3 anrufen passiert da noch nix aber wenn die anrufliste recht voll wird, dann geht das doch auf die performance der weboberfläche ... ist zumindest bei uns auf der arbeit so...

    der mysql teil wäre aber für mich persönlich immo der wichtigste...
     
  16. prodigy7

    prodigy7 Mitglied

    Registriert seit:
    28 Mai 2005
    Beiträge:
    732
    Zustimmungen:
    1
    Punkte für Erfolge:
    16
    Ich guck mal wegen dem mySQL-Support. Von welchen Größenordnungen reden wir, wenn du sagst, dass die anrufliste recht voll ist? 10 / 100 / 1000 Einträge?

    Gruss, prodigy7
     
  17. sphings

    sphings Mitglied

    Registriert seit:
    3 Okt. 2004
    Beiträge:
    522
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    gezählt hab ichs noch net aber so im schnitt denk ich 250 calls vielleicht ...
     
  18. prodigy7

    prodigy7 Mitglied

    Registriert seit:
    28 Mai 2005
    Beiträge:
    732
    Zustimmungen:
    1
    Punkte für Erfolge:
    16
    SQL-Support ist eingebaut... testet mal ob alles so funktioniert wie gewünscht. Download-Link findet ihr auf der ersten Seite.
     
  19. Kermit

    Kermit Neuer User

    Registriert seit:
    24 Juli 2004
    Beiträge:
    171
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Berufskraftfahrer für Porsche AG
    Hallo,
    wie wird das script auf der FBF genau eingerichtet mit dem Cron?
    Könntest Du da mal eine Anleitung senden.

    Hat das Script auch ein Telefonbuch, wo man einer Telefonnummer einen Namen zuördnen kann?
     
  20. nokman

    nokman Neuer User

    Registriert seit:
    2 Aug. 2005
    Beiträge:
    169
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Kali
    Hallo,
    wie wird das script auf der FBF genau eingerichtet?
    Könntest Du da mal eine Anleitung senden.

    Hat das Script auch ein Telefonbuch, wo man einer Telefonnummer einen Namen zuördnen kann?


    genau das würde mich auch interessieren. Habe die Box neu.
    Tele läuft. Habe ich zumindest installiert.
    Gruß

    Nok