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

CallerID per OSD anzeigen lassen

Dieses Thema im Forum "Asterisk Skripte" wurde erstellt von Ber5erker, 2 Juni 2004.

  1. Ber5erker

    Ber5erker Mitglied

    Registriert seit:
    6 Apr. 2004
    Beiträge:
    305
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    So, hab noch ein bisschen "getüftelt"...

    Da mein Telefon partout nicht die Nummer im Display anzeigen will ("Telekom Tarsis C") habe ich mir etwas einfallen lassen.
    Mein VDR läuft ja nicht den ganzen Tag, also muß die Nummer auf dem PC angezeigt werden.
    Erste Versuche mit "callerid.agi", hier zu finden: http://www.bschwarz.com/asterisk/ , hatten den Nachteil, daß das Fenster nicht in den Vordergrund kam.

    Was liegt also näher als OSD (On-Screen-Display)? 8)

    Unter http://www.netzmafia.de/skripten/server/server4.html fand ich erste Schritte zu Client/Server-Basierten Perl-Scripts.

    Auf dem Client läuft nun ein "Server"-Script (empfaenger.pl). Es lauscht, ob etwas vom Asterisk-Server kommt:
    Code:
    #!/usr/bin/perl
    # empfaenger.pl -- Ein Single-threaded-TCP-Server
    
    $|=1;
    use strict;
    use IO::Socket;
    
    use constant MYPORT => 2001;
    my ($pid, $i);
    
    $pid = fork();
    die "cannot fork: $!\n" if ($pid == -1);
    
    # Parent beendet sich
    if ($pid > 0)
      {
      print "Parent exits\n";
      exit(0);
      }
    
    # Kindprozess wird von init adoptiert
    chdir "/tmp" or die "could not chdir to /tmp: $!\n";
    
    my $sock = '';
    my $client = 0;
    
    $sock = new IO::Socket::INET(LocalPort => MYPORT,
                                 Reuse     => 1,
                                 Listen    => 5)
        or die "can't create local socket: $@\n";
    print "Accepting connections on Port ", MYPORT, "...\n";
    
    while ($client = $sock->accept())
      {
      # Ausgabe des Anrufers:
      while (<$client>)
        {
        chomp;
        system "echo 'Eingehender Anruf von\n$_' | osd_cat -p middle -A center -f -adobe-helvetica-bold-*-*-34-*-*-";
        }
      $client->close() if defined $client;
      }
    
    Auf dem Asterisk-Server liegt ein "Sende"-Script (sender.pl), welches mittels AGI gestartet wird:
    Code:
    #!/usr/bin/perl
    # sender.pl -- Ein einfacher TCP-Client.
    
    use strict;
    use IO::Socket;
    
    use constant TIMEOUT => 5;
    my $ipaddr = '10.0.0.199';
    my $portnr = '2001';
    my $sock = '';
    my $reply = '';
    
    $sock = new IO::Socket::INET(PeerAddr => $ipaddr,
                                 PeerPort => $portnr,
                                 Proto    => 'tcp', Timeout => TIMEOUT)
        or die "can't connect to $ARGV[0]:$ARGV[1]: $@\n";
    
    print $sock $ARGV[0];
    
    $sock->close();
    
    In der extensions.conf kommt folgender Eintrag rein:
    [...]
    exten => 100,1,agi(sender.pl|${CALLERID})
    exten => 100,2,Dial(SIP/100,60,tr)
    [...]

    Kommt nun ein Anruf herein wird das Script sender.pl mit der Rufnummer aufgerufen, connectet zur eingetragenen IP (diese muß in der sender.pl angegeben werden!) und auf dem Client ruft das empfaenger.pl das OSD-Programm osd_cat auf.
    Unter Debian ist osd_cat im Paket xosd-bin

    TODO:
    - Einstellung der Schriftgröße. Weis einer wie das geht? -> siehe Zeile 24 der empfaenger.pl
    - Wenn die empfaenger.pl gestartet wird soll diese sich beim sender.pl "registrieren", sodaß bei mehreren Clients der richtige erwischt wird - ich sitze nicht immer am selben PC... 8)

    Bitte keine Schelte, ich bin KEIN Programmierer! Der Code wird für Profis fürchterlich aussehen, aber er geht!

    Gruß
    Seb

    ---EDIT---

    Im empfaenger.pl sind noch 3-4 Zeilen dazu gekommen, sodass das Script nun im Hintergrund läuft.

    ---EDIT 2---

    Habe den Font geändert. Sollte jetzt unkomplizierter laufen. Port ist auf 2001 geändert, da Port 2000 schon belegt war.
     

    Anhänge:

    • osd.jpg
      osd.jpg
      Dateigröße:
      49.8 KB
      Aufrufe:
      303
  2. rajo

    rajo Admin-Team

    Registriert seit:
    31 März 2004
    Beiträge:
    1,958
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Was verstehst Du mit "Einstellung der Schriftgröße"? Einfach per Kommandozeilenparameter übergeben? Oder aus einem vorher definierten Set an Schriften per Parameter eine auswählen? Oder einfach nur irgendeine andere Schrift haben?

    Beim empfaenger.pl frage ich mich grade nur, warum Du das ganze in eine temporäre Datei reinsteckst. Kann man das evtl. nicht gleich in osd_cat reinpipen? (also "echo 'Eingehender ...' | osd_cat -p ...")

    Was jetzt das registrieren betrifft weiss ich so direkt jetzt auch nicht, müsste ich schauen.

    BTW: Netzmafia.de ist cool :) Sehr viele und schöne Doku, v.a. auch zu Shell-Skripts etc.
     
  3. Ber5erker

    Ber5erker Mitglied

    Registriert seit:
    6 Apr. 2004
    Beiträge:
    305
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    osd_cat möchte die Schrift und -größe in Form von "-Adobe-Helvetica-Bold-R-Normal--24-240-75-75-p-124-iso8859-15" haben. Habe schon versucht, einzelne Zahlen (z.B. die ..-24-.., die soll für die Größe stehen) zu ändern, aber ohne Erfolg.
    Mir ist und bleibt diese Form der Schriften einfach ein Rätsel :|

    Temporär hatte ich deswegen, weil das osd_cat ne Datei wollte...
    Das mit "echo 'Eingehender ...' | osd_cat -p ..." hab ich mal getestet und auch gleich eingebaut. Funzt super!

    Wie gesagt, ich bin kein Programmierer (oder ist PHP programmieren?) - schon gar nicht Perl. Es fängt aber an, Spass zu machen!

    Bis jetzt lief das Teil jedenfalls ohne einen Ausfall 8)
     
  4. rajo

    rajo Admin-Team

    Registriert seit:
    31 März 2004
    Beiträge:
    1,958
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Die Schriftarten sind in dieser Schreibweise für Linux "üblich" :)

    Schau doch einfach mal in /etc/X11/fonts/*/ und dann in die dort liegenden Dateien. Das sind die auf Deinem System verfügbaren Schriften.

    Was das Programmieren betrifft... hmm... Definitionssache ;)
    Aber egal -- jedenfalls sind das bisher alles recht tolle Ideen -- btw: Du hattest doch auch mal was mit Kmail-Adressbuch->SIP-Anruf gebastelt?
    *interesseanmeld* :)
     
  5. Ber5erker

    Ber5erker Mitglied

    Registriert seit:
    6 Apr. 2004
    Beiträge:
    305
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hier das call.pl für das KDE-Adressbuch.

    Das originale Script stammt von Tony Wasson, http://www.azxws.com/asterisk/

    Wie immer: das Script sieht wüst aus, funktioniert aber (bei mir jedenfalls)...

    Ein Klick auf die Telefonnummer im Adressbuch veranlasst Asterisk dazu, das Telefon klingeln zu lassen.
    Wird der Höhrer abgenommen wird die eigentliche Nummer gewählt.
     

    Anhänge:

  6. rajo

    rajo Admin-Team

    Registriert seit:
    31 März 2004
    Beiträge:
    1,958
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Thx :) Funktioniert prima!

    (btw: bei einer einzelnen Datei lohnt kein tar, da reicht gzip ;) )
     
  7. Ber5erker

    Ber5erker Mitglied

    Registriert seit:
    6 Apr. 2004
    Beiträge:
    305
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    War etwas faul und habs auf die schnelle über das Kontex des Konqueror gemacht :lol:

    Das ist gut, wenns bei dir auch geht. Das original-Script wollte bei mir nämlich nicht funktionieren...

    Muss sagen, dass nach all den anfänglichen Schwierigkeiten mir dieses Asterisk immer besser gefällt - vor allem die vielen Schnittstellen, die man nutzen kann!
     
  8. rajo

    rajo Admin-Team

    Registriert seit:
    31 März 2004
    Beiträge:
    1,958
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Jupp, genau das ist eine *der* Stärken von Asterisk (neben den Protokollen und Codecs) - man kann sich im Prinzip fast jede fehlende Anwendung ergänzen. (z.B. auch Steuerung von Dingen über Telefon durch Senden von DTMF -> DialAnMP3)

    (siehe auch http://graphics.cs.uni-sb.de/VCORE/recordings.html -> "Asterisk Open Source PBX" falls Du das Video noch nicht kennst)
     
  9. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Tolle Sache - hat das mit der OSD-Anzeige mal jemand getestet, wenn der Asterisk-Server in Frankfurt (mit fester IP) steht und der Client-PC in einer anderen Stadt (mit dynamischer IP - DynDNS registriert) ?

    Habe mich selbst mit Perl noch nicht befaßt, aber so ein großer Aufwand kann es glaub ich nicht sein, das auch über einen DynDNS-Namen als Client zu realisieren.
     
  10. Ber5erker

    Ber5erker Mitglied

    Registriert seit:
    6 Apr. 2004
    Beiträge:
    305
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Sollte gehen, da es ein einfaches Client/Server-Prinzip ist. Port lässt sich in dem Script für die eigenen Bedürfnisse einstellen.

    Das Script ist für die Nutzung unter Linux - sowohl Server als auch Client - weil sich dort mit einfachen Mitteln die OSD-Ausgabe einbinden lässt.
    Obs auch unter Win zum laufen zu bringen ist weiß ich leider nicht :-|
     
  11. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Ich arbeite ausschließlich unter Linux :wink:

    Meine Frage ging einfach nur dahin, wie das Skript auf der Server-Seite abzuändern wäre, um dort einen Rechnernamen anstatt einer IP zu verwenden.
     
  12. dora71

    dora71 Neuer User

    Registriert seit:
    25 Sep. 2004
    Beiträge:
    50
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo zusammen,

    wollte auch die beiden Scripts von Ber5erker ausprobieren, leider habe ich wohl noch Probleme mit OSD und keine Ahnung wie ich die beseitigen kann. Ich bekomme als Fehlermeldung immer, egal welchen Font ich mit der Option -f bei osd_cat eingebe: "Error initializing osd: Default font not found". :?
    Die Ausgabe bleibt auch unter dem root-Benutzer gleich, kann also keine Rechte-Problematik sein (oder?).

    Habe daraufhin schon einmal ein wenig recherchiert:
    Sowohl die Eingabe von "xlsfonts" als auch die Eingabe von "fslsfonts -server unix/:7100" zeigen mir die gesamten Fonts auf, also das scheint ok zu sein.

    Habt Ihr dafür eine Lösung parat? Ich benutze hier übrigens Debian Sarge.

    Grüsse

    Dora71
     
  13. chaos2000

    chaos2000 Aktives Mitglied

    Registriert seit:
    22 Aug. 2004
    Beiträge:
    2,028
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    LE
    noch ein script für die D-BOXII

    Hi,

    hab mal ebend ein Script für die D-BoxII (unter Neutrino) verfasst. Hiermit ist es möglich Informationen über den Anrufer direkt auf dem Bildschirm darzustellen.

    Code:
    #!/usr/bin/perl -w
    # dboxmessage.pl -- Sendet eine Nachricht an die D-BoxII unter Neutrino. 
    # ARGV[0] - IPadresse der Box
    # ARGV[1] - Port des nhttpd (zu finden unter /var/tuxbox/config/nhttpd.conf)
    # ARGV[2] - Machrichtentyp popup|nmsg  
    # ARGV[3] - informationen über den Anrufer
    
    use strict; 
    use LWP::UserAgent;
    
    my ($url, $ua, $request, $response);
    my $ip = $ARGV[0];
    my $port = $ARGV[1];
    my $messagetype = $ARGV[2];
    my $anrufer = $ARGV[3];
    
    #$url = "http://172.17.1.150/control/message?popup=Anruf von: ".$ARGV[0];
    $url = "http://".$ip.":".$port."/control/message?".$messagetype."=Anruf von: ".$anrufer;
    
    print $url, "\n";
    $ua = LWP::UserAgent->new();
    
    $request = HTTP::Request->new('GET', $url);
    $response = $ua->request($request);
    #print $response->code ,"\n";
    
     
  14. Ber5erker

    Ber5erker Mitglied

    Registriert seit:
    6 Apr. 2004
    Beiträge:
    305
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    @dora71: versuchs mal mit

    -adobe-helvetica-bold-*-*-34-*-*-

    als Font. Sollte dann eigentlich gehen.
     
  15. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Ok - Nachdem ich es nun geschafft habe, das Skript auch "quer durch die Republik" zum Laufen zu bringen (Danke Ber5erker !) bleibt eine einzige Frage.

    Und zwar zum Thema "Programm läuft im Hintergrund"

    Wann, Wo und Wie muß ich den Client starten, damit das Programm auch wirklich stabil im Hintergrund funktioniert ?

    Wenn ich nach dem Start des X den Client in einem Terminalfenster starte und dieses Fenster offen lasse - dann klappt alles.

    Wenn ich dieses Terminalfenster dann schließe, läuft der Prozeß zwar weiter, aber ich erhalte keine Anzeigen mehr.

    Wenn ich den Client im Rahmen der allgemeinen Start-Skripte (also VOR X) starte, dann funktioniert es überhaupt nicht, obwohl der Client im Hintergrund als Prozeß läuft.
     
  16. Ber5erker

    Ber5erker Mitglied

    Registriert seit:
    6 Apr. 2004
    Beiträge:
    305
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ich habe bei mir im Ordner ~/.kde/Autostart eine Datei namens empfaenger.sh mit folgendem Inhalt angelegt:

    Code:
    #!/bin/bash
    
    perl ~/bin/empfaenger.pl
     
  17. fm2k

    fm2k Neuer User

    Registriert seit:
    7 Nov. 2005
    Beiträge:
    1
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    dora71, wahrscheinlich liegt das Problem mit osd an deinen locales Einstellungen. Mit LANG=de_DE@Euro bekam ich den selben Fehler wie du. Als ich die locales dann auch LANG=de_DE umstellte hat alles einwandfrei funktioniert.
    Danke an Martin Maurer, dem Verfasser des licq-osd-plugins.

    Achja, in der /etc/profile kannst du die LANG-Variable verändern.
     
  18. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Ich habe nach langer Zeit mal wieder das Script ausgegraben und aktiviert. Übrigens verwende ich als Font für osd_cat:

    -f '-b&h-lucida-bold-r-normal-*-*-240-*-*-p-*-*-*'

    da sieht man wenigstens was auf dem Bildschirm :wink:
    [hr:237dfa200b]
    Was mir jetzt noch fehlt, ist das Sender-Script in einer Version, die mit "microperl" auf dem Linksys-Asterisk-Router laufen würde ...
     
  19. JanG80

    JanG80 Mitglied

    Registriert seit:
    12 Juni 2008
    Beiträge:
    237
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ich weiß ja nicht, ob außer mir noch jemand ein auf Windows basierendes Mediacenter einsetzt, aber ich sowas für .Net realisiert. Läuft bei mir schon ganz gut. Das Ergebnis meiner Bemühungen gibt es hier:
    http://www.gsurf.de/index.php?id=63