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:
- ISDN (Karte und Hardware wie NTBA, ...)
- isdnlog (Teil von isdnutils / isdn4linux)
- festival (Sprachsynthese)
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.