Reitwiessner.de
Telefon-Fernsteuerung


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.

Ziel

Das Ziel der Telefon-Fernsteuerung ist es, unter Linux je nach angerufener Telefonnummer oder je nach Anrufer diverse Befehle auszuführen. In meiner Konfiguration reagiert der Computer nur auf mein Mobiltelefon. Ich habe noch zusätzliche Telefonnummern beantragt (Bei der Telekom kann man bis zu zehn kostenlose Rufnummern pro ISDN-Anschluss haben.), womit ich dann je nach angerufener Nummer online gehen kann, offline gehen kann, meinen Desktop-Rechner per Wake On LAN einschalten kann, und noch ein paar andere Funktionen aufrufen kann. Dabei kostet mich so ein Befehl nichts, da der Computer den Anruf nur registriert, und nicht etgegennimmt.

Voraussetzungen

Voraussetzungen für diese Fernsteuerung 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/isdnlog.isdnctrl0:

[options]

#log=1          # log d-channel messages. value may be 0-15 (bit coded flags)
daemon=yes      # "yes"/"no": (dont) start isdnlog as daemon. Set yes for Debian
stdout=0x3f7    # log to stdout and file, and set log level
 # if you remove "outfile" option, also remove "stdout" option!
outfile=+/var/log/isdn/isdnlog  # logfile to log to ('+' is append mode)
console=/dev/null       # where to send stdout text; e.g. /dev/tty12
#monitor=yes    # enable support for imon and imontty (monitor progs)
syslog=0x1bf7   # log to syslog with log level X
#thruput=60     # if you log thruput : one message every X seconds
#time=2         # 1=get time from isdn one, 2=everytime
#hangup=5:3     # enable chargehup with 5 / 3 seconds security gap
start=yes       # enable program start on events
ciInterval=59   # show the cost etc. every 60s

Diese Datei kann auch etwas anders aussehen, wichtig ist, dass start auf yes gesetzt wird.

Aufzurufendes Programm angeben

Jetzt muss nur noch eingestellt werden, welches Programm aufgerufen werden soll. Dazu muss man die Datei /etc/isdn/callerid.conf editieren:

# this is a skeleton for a callerid configuration
# edit this file before using isdnlog or vbox !
# See isdn.conf manpage for details.
#
# These are the parameters that can be used when starting programs;
# See callerid.conf(5) manpage for details:
# $1 = flags            $2 = callernum          $3 = calleenum
# $4 = connecttime      $5 = duration           $6 = endtime
# $7 = bytesin          $8 = bytesout           $9 = bpsin
# $10 = bpsout          $11 = si                $12 = charges
# $13 = callercountry   $14 = calleecountry     $15 = callerarea
# $16 = calleearea      $17 = callertown        $18 = calleetown
# $19 = calleralias     $20 = calleealias

[NUMBER]
NUMBER = +491721234567
ALIAS  = Christian Mobil
START  = {
   [FLAG]
   FLAGS = I|R|
   PROGRAM = /usr/local/bin/handycall $3
}

Die Sektion [NUMBER] muss neu zur Datei hinzugefügt werden, wobei die fett markierten Stellen eventuell abgeändert werden müssen.

Mit NUMBER wird die Nummer des Anrufers festgelegt, der Computer reagiert dann nur auf diese Nummer. Wenn man noch eine zusätzliche Nummer angeben will, dann kann man einfach noch einen [NUMBER]-Block darunter angeben, wobei alles bis auf die NUMBER und der ALIAS gleich bleibt.

Wenn man alle Nummern zulassen will, dann muss die START-Sektion in die Datei /etc/isdn/isdn.conf, und nicht in diese. Mehr dazu im Telefon-Klingelton-HOWTO.

ALIAS hat nur informativen Wert, dies ist der Name des Anrufers, der in die Logs geschrieben wird.

Die FLAGS I und R bedeuten, dass das Programm beim Klingeln (R, ring) für einen eingehenden (I, incoming) Anruf aufgerufen wird.

Im Feld PROGRAM ist schließlich das Programm angegeben, das ausgeführt werden soll. Man kann noch diverse Parameter mit $<zahl> angeben. Die Parameter sind in der Datei erklärt. Hier wird die angerufene Nummer (calleenum) mit übergeben.

Das Fernsteuerungsskript

Nun zum Skript, das bei Anruf ausgeführt wird (/usr/local/bin/handycall):

#!/bin/sh

localnum=$1

case "$localnum" in
        +4995123456781)
		/usr/sbin/ether-wake -i eth0 "00:30:4F:1C:1A:2B"
                ;;
	+4995123456782)
                /usr/sbin/isdnctrl dial ippp0
                ;;
	+4995123456783)
                /usr/sbin/isdnctrl dial ippp2
                ;;
	+4995123456784)
                /usr/sbin/isdnctrl hangup ippp0
                /usr/sbin/isdnctrl hangup ippp1
                /usr/sbin/isdnctrl hangup ippp2
                ;;
	+4995123456785)
                /usr/local/bin/fetchradio.py Antenne
                ;;
	+4995123456786)
                /usr/local/bin/fetchradio.py Bayern3

Die Datei muss neu angelegt werden und als ausführbar markiert werden (chmod +x /usr/local/bin/handycall). Diese Version ist natürlich nur ein Beispiel. Die Nummern und auch die Aktionen müssen noch angepasst werden.

localnum enthält jetzt die angerufene Nummer ($3 in /etc/isdn/callerid.conf). Und je nach Nummer verhält sich das Skript anders:

  • Wenn +4995123456781 angerufen wird, wird ether-wake (beschrieben auf http://www.scyld.com/expert/wake-on-lan.html) mit der Hardware-Adresse meines Desktop-Rechners als Parameter aufgerufen, mein Desktop-PC wird also angeschaltet.
  • Bei +4995123456782 soll die erste ISDN-Internet-Verbindung online gehen,
  • bei +4995123456783 die dritte und
  • bei +4995123456784 gehen alle Verbindungen offline.
  • +4995123456785 und +4995123456786 rufen ein Skript auf, das den aktuellen Liedtitel von Antenne Bayern (Antenne) oder Bayern 3 (Bayern3) von deren Webseiten ausliest und per Mail an mich schickt. Wer interessiert ist, kann das Python-Skript ( fetchradio.py.gz, GPL) downloaden. Der Wert von recipient in diesem Skript muss geändert werden!
  • Zum Beispiel könnte man auch sein Mobiltelefon als Stereoanlage-Fernbedienung "missbrauchen", indem man bei laufendem xmms die xmms-remote-control-Befehle benutzt:
    xmms -f für forward, xmms -s für stop, etc.
    Details stehen wie immer unter "man xmms".

Weiterführendes

Die START-Option von isdnlog hat noch viel mehr Funktionen. So kann zum Beispiel ein Programm in bestimmten Intervallen gestartet werden, oder es können noch mehr Zusatzinformationen über die Verbindung übermittelt werden. Beschrieben sind diese Funktionen in der Dokumentation zu isdnlog / isdnutils / isdn4linux.
Ein weiteres HOWTO von mir zu diesem Bereich ist das Telefon-Klingelton-HOWTO. Es beschreibt, wie man einen beliebigen Klingelton, abhängig vom Anrufer über die Soundkarte ausgeben kann. Oder spezieller, wie man die Anruferinformationen mit Hilfe von Festival in Sprache umwandeln und über die Soundkarte ausgeben kann.