Reitwiessner.de
Sprechender Klingelton


Why only in german?

This howto is only available in german, because german is my native language, so I can write better documentation in it, and ISDN, which is essential for this to work, is (AFAIK) not very common outside Germany or even Europe. If you really want to know how to remote-control your PC via the telephone, let me know via e-mail and I'll see what I can do to help you.

Was ist ein sprechender Klingelton?

Der sprechende Klingelton ermöglicht es, bei einem Anruf die Nummer, den Namen des Anrufers, und andere Informationen via Spachsynthese "vorzulesen". So verpasst man nie ein Gespräch, wenn das Telefon nicht so nah am Computer steht, und man weiss sofort, wer anruft.

Voraussetzungen

Voraussetzungen für dien sprechenden Klingelton sind:

Für Hilfe zur Installation von isdnutils ziehen Sie bitte das Handbuch ihrer Distribution oder die Dokumentation von isdnutils zu Rate.
Die Distribution Debian ist in gewissem Sinne auch eine Art Voraussetzung, weil ich hier ein Debian-System habe, und nicht garantieren kann, dass die Dateien bei anderen Distributionen an der gleichen Stelle sind.

Programmstarts erlauben

Um den Start von Programmen über isdnlog (also bei ISDN-Ereignissen) zu erlauben muss eine Konfigurationsvariable gesetzt werden, und zwar in der Datei /etc/isdn/isdn.conf (Ausschnitt):

[ISDNLOG]
LOGFILE = /var/lib/isdn/calls
ILABEL  = %b %e %T %ICall to tei %t from %N2 on %n2

...

START  = {
	[FLAG]
	FLAGS = I|R|U
	PROGRAM = /usr/local/bin/saytelephonecall "$19" "$17" "$2"
	USER = nobody
	GROUP = nogroup
	INTERVAL = 17
}

Diese Datei kann auch etwas anders aussehen, wichtig ist, dass der START-Block neu hinzugefügt werden muss, und zwar in die Sektion [ISDNLOG].
INTERVAL sagt aus, in welchen Abständen (in Sekunden) das Programm während des Klingelns jeweils neu gestartet werden soll.
Aufgerufen wird das Skript /usr/local/bin/saytelephonecall, das später noch erläutert wird.

Namen definieren

Wenn man nicht nur die Telefonnummer des Anrufers vorgelesen haben will, sondern bestimmten Nummern auch Namen zuweisen will, müssen diese definiert werden. Das kann man in der Datei /etc/isdn/callerid.conf tun:

[NUMBER]
NUMBER = +49912345678
ALIAS  = Martina Musterfrau

So einen Block muss man für jede angegebene Nummer einfach ans Ende der Datei hängen.

Das Skript

Nun zum Skript, das bei Anruf ausgeführt wird. Dies ist ein Python-Skript, wem dies aber zu kompliziert ist, oder wer kein Python mag, kann auch ein sehr simples shell-Skript schreiben, das dann aber nicht so schoen formattiert. Allgemein kann man auch einfach als PROGRAM-Parameter in der isdn.conf folgendes verwenden:
echo "$19" from "$17" is calling on the phone. Number: "$2" | festival --tts (/usr/local/bin/saytelephonecall).

#!/usr/bin/python
import sys, os

caller, town, number = sys.argv[1:4]

if not caller or caller == "?":
        caller = "Someone "
else:
        caller = '"%s" ' % (caller,)

if not town or town == "?":
        town = ""
else:
        town = 'from "%s" ' % (town,)

if number and number != "?":
        if number[:3] == "+49":
                number = "0" + number[3:]

        numbernew = ''
        for c in number:
                numbernew = numbernew + c + " "
        number = numbernew
        number = ' Number: "%s"' % (number,)
else:
        number = ""

os.system('echo %s%sis calling on the phone.%s | festival --tts &' % (
        caller.replace('"', '\"'),
        town.replace('"', '\"'), number.replace('"', '\"')))

Die Datei muss neu angelegt werden und als ausführbar markiert werden (chmod +x /usr/local/bin/saytelephonecall).

Weiterführendes

Zu Hause habe ich das ganze noch ein bisschen ausgebaut: Auf meinen Desktop-Rechner habe ich des ESound-Daemon laufen, damit ich mehrere Soundquellen gleichzeitig abspielen kann, und meine ISDN-Karte ist in einem anderen Rechner. Ich habe Festival als Server laufen, der auf einem TCP-Port Verbindungen entgegennimmt. Auf dem Router lasse ich dann ein Programm ausführen, das den Text über das Netzwerk und ueber den ESound-Daemon auf dem Desktop-Rechner ausgibt.
Wenn Sie daran interessiert sie, wie man das genau realisiert, schreiben Sie mir bitte eine e-Mail.