CallerID per OSD anzeigen lassen

Ber5erker

Mitglied
Mitglied seit
6 Apr 2004
Beiträge
305
Punkte für Reaktionen
0
Punkte
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: [email protected]\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]: [email protected]\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

rajo

Admin-Team
Mitglied seit
31 Mrz 2004
Beiträge
1,958
Punkte für Reaktionen
0
Punkte
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.
 

Ber5erker

Mitglied
Mitglied seit
6 Apr 2004
Beiträge
305
Punkte für Reaktionen
0
Punkte
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)
 

rajo

Admin-Team
Mitglied seit
31 Mrz 2004
Beiträge
1,958
Punkte für Reaktionen
0
Punkte
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* :)
 

Ber5erker

Mitglied
Mitglied seit
6 Apr 2004
Beiträge
305
Punkte für Reaktionen
0
Punkte
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

rajo

Admin-Team
Mitglied seit
31 Mrz 2004
Beiträge
1,958
Punkte für Reaktionen
0
Punkte
36
Thx :) Funktioniert prima!

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

Ber5erker

Mitglied
Mitglied seit
6 Apr 2004
Beiträge
305
Punkte für Reaktionen
0
Punkte
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!
 

rajo

Admin-Team
Mitglied seit
31 Mrz 2004
Beiträge
1,958
Punkte für Reaktionen
0
Punkte
36
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!
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)
 

betateilchen

Grandstream-Guru
Mitglied seit
30 Jun 2004
Beiträge
12,882
Punkte für Reaktionen
0
Punkte
0
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.
 

Ber5erker

Mitglied
Mitglied seit
6 Apr 2004
Beiträge
305
Punkte für Reaktionen
0
Punkte
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 :-|
 

betateilchen

Grandstream-Guru
Mitglied seit
30 Jun 2004
Beiträge
12,882
Punkte für Reaktionen
0
Punkte
0
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.
 

dora71

Neuer User
Mitglied seit
25 Sep 2004
Beiträge
50
Punkte für Reaktionen
0
Punkte
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
 

chaos2000

Aktives Mitglied
Mitglied seit
22 Aug 2004
Beiträge
2,028
Punkte für Reaktionen
0
Punkte
36
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";
 

betateilchen

Grandstream-Guru
Mitglied seit
30 Jun 2004
Beiträge
12,882
Punkte für Reaktionen
0
Punkte
0
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.
 

Ber5erker

Mitglied
Mitglied seit
6 Apr 2004
Beiträge
305
Punkte für Reaktionen
0
Punkte
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
 

fm2k

Neuer User
Mitglied seit
7 Nov 2005
Beiträge
1
Punkte für Reaktionen
0
Punkte
0
dora71, wahrscheinlich liegt das Problem mit osd an deinen locales Einstellungen. Mit [email protected] 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.
 

betateilchen

Grandstream-Guru
Mitglied seit
30 Jun 2004
Beiträge
12,882
Punkte für Reaktionen
0
Punkte
0
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 ...
 

JanG80

Mitglied
Mitglied seit
12 Jun 2008
Beiträge
237
Punkte für Reaktionen
0
Punkte
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
 

3CX PBX - GRATIS
Linux / Win / Cloud

Statistik des Forums

Themen
232,832
Beiträge
2,027,217
Mitglieder
350,920
Neuestes Mitglied
askmeforit79