vbox control with DTMF tones dialup request by mobile phone with isdn for linux (was: Re: linux-l: ISDN und automatische Einwahl auf Anruf)

Steffen Dettmer steffen at dett.de
Di Jan 16 12:31:37 CET 2001


* Ulrich Wiederhold wrote on Tue, Jan 16, 2001 at 09:05 +0100:
> Hallo Steffen,
> * Steffen Dettmer <steffen at dett.de> [010116 01:49]:

[DTMF tones erkennen und verwenden]
> > Hab sowas mal mit "vbox" gemacht, ist recht simpel, hat aber
> > einen Tag gedauert ;)

> hmmm

Ja, mußte da immer TCL Syntax raten. Die Doku, die ich hatte
(manpages usw.) halfen mir kaum. 

> > vbox kann z.B. DTMF Töne erkennen. 

> DTMF? Geht das dann nur vom Handy? 

Nein. Entspricht in etwa Tonwahl (genauer eben den Tönen der
Tonwahl :))

> Ich kenne den Begriff leider nicht...

Jetzt, da Du ihn kennst, kannst Du danach mal in der isdn4linux
newsgroup suchen (z.B. via deja), da findest DU möglicherweise
auch was.

> > Ich rufe meinen Rechner mit
> Coole Sache...

Ich werde jetzt mal doch die zentralen Zeilen posten, sonst denkt
hier noch jemand, das wäre kompliziert (hatte die erste Mail
vielleicht nicht so ganz richtig formuliert). Also.
Step 1. vbox einrichten (bei SuSE gings ziemlich out-of-the-box
mit ein paar Readme's, 1 Std)

Step 2. wir machen jetzt mal alles in
"/var/spool/vbox/steffen/", weil vbox conf da liegt. Also cd
dahin, dann $EDITOR vbox.conf, einfügen:

----------------[ vbox.conf ]-----------------------------------
#CONTROL ist for remote host control with DTMF tones of a mobile
#phone. The script is named at the end of this file:
0123456789      CONTROL                 Steffen Festnetz
0123456788      CONTROL                 Steffen Mobil

#here comes the original part of the file....

#here the control script gets involved: (ONE line!)
[CONTROL]
*               *       space.msg       20  SCRIPT=control.tcl
RINGS=3 TOLLRINGS=2
----------------[ vbox.conf end]-----------------------------------

Step 3. Die interessanten Teile von control.tcl:

----------------[ control.tcl ]-----------------------------------
# First we clear the touchtone sequences and remove all entries
# from
# the callerid breaklist.
vbox_init_touchtones
vbox_breaklist rem all
vbox_breaklist add *0#
#[...]
vbox_breaklist add *9#

#hier die codes rein (müssen mit * beginnen und # aufhören, und
#das muß auch so auf dem Telefon gedrückt)
vbox_breaklist add *0001#
vbox_breaklist add *0002#

if { "$vbox_flag_standard" == "TRUE" } {

   vbox_put_message $vbox_msg_beep
   set RC_ALL ""
   set RC [ vbox_put_message $vbox_msg_standard ]

   #ich glaube, daß ist jetzt mein hack:
   while { "1" == "1" } {
           set RC_ALL "$RC_ALL $RC"
           vbox_pause 500

           if { "$RC" == "HANGUP" } {
              return
           }
           if { "$RC" == "ERROR" } {
              return
           }
           if { "$RC" == "*1#" } {
              vbox_put_message /var/spool/vbox/steffen/messages/tap1.msg
           }
           #dieser code:
           if { "$RC" == "*0001#" } {
              vbox_put_message /var/spool/vbox/steffen/messages/gong.msg
              #wer kein TCL kann, muß perl nehmen:
              exec /var/spool/vbox/steffen/dialup.pl
              vbox_pause 2000
              return
           }
           vbox_put_message $vbox_msg_beep
           vbox_pause 500
           set RC [ vbox_put_message $vbox_msg_standard ]
    }
}
#hier geht's weiter wie im orginal...
----------------[ control.tcl end]-----------------------------------


Step 4. Neues File hier anlegen "dialup.pl" mit folgendem Inhalt:
----------------[ dialup.pl ]-----------------------------------
#!/usr/bin/perl
my $LOG="/var/spool/vbox/steffen/dialup.log";

open (LOG, ">>$LOG")
    or die("Error opening $LOG $!\n");

print LOG "Called at:  ", scalar(localtime(time)), "\n";
print LOG "Parameters: ", join(";", @ARGV), "\n";

print LOG `logger "starting internet dialup..."`;
print LOG `ping -c 1 sws.dett.de`;
print LOG `ping -c 3 sws.dett.de`;

print LOG "DONE.\n\n";
close (LOG);
----------------[ dialup.pl end]-----------------------------------

> Also ich kann es bestimmt nicht ordentlicher schreiben, wüßte nicht mal,
> wo ich anfangen sollte...

Sollte jetzt ja "sehende" Arbeit sein. Da wo "0001" ist kann
irgentwas rein. So kann man einfach auch verschiedene Codes
verwenden. Im einfachsten Fall startest Du verschiedene Scripte.

> Wie kann ich bei isdnutils eigentlich verhindern, daß immer der Versuch
> einer Einwahl stattfindet, obwohl ich jetzt mit DSL im Netz bin? 

Default-Route auf das DSL Interface setzen (?). Mein
Lieblingskommando ist übrigens "isdnctrl system off" :) Man kann
auch einfach das Interface runterfahren (ifconfig ippp0 down).

> Ich habe sie erstmal nur beendet, da "Dialmode=manual" nichts
> am Versuch geändert hat sondern die Meldung: "interface not in
> dialmode auto" produziert hat. 

Ja, das heißt, er hat nicht versucht, zu wählen. Da er es aber
hätte müssen, gibt's eben ne Warnung im Logfile, falls Dialmode
versehentlich verstellt wurde. Vermutlich haut Dein routing nicht
so ganz hin, so daß Packete über ein Dial-On-Demand Interface
geroutet werden sollen...

> Ich würde für den Notfall gerne alles konfiguriert lassen. 

Logo. Sollte kein Problem sein.

> Muß ich isdnutils für vbox gestarted lassen?

Ich glaub nicht. Die Hardware-Module müssen garantiert geladen
sein, aber ipppd usw. braucht man wohl nicht. Weiß aber nicht,
wer die /dev/ttyI0 Emulation macht. Na, ausprobieren!

oki,

Steffen

-- 
Dieses Schreiben wurde maschinell erstellt,
es trägt daher weder Unterschrift noch Siegel.



Mehr Informationen über die Mailingliste linux-l