- Mitglied seit
- 6 Apr 2004
- Beiträge
- 305
- Punkte für Reaktionen
- 0
- Punkte
- 16
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:
Auf dem Asterisk-Server liegt ein "Sende"-Script (sender.pl), welches mittels AGI gestartet wird:
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.
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.