dtmfbox (AB/CB/CT VoIP/ISDN/Analog)

Hallo,

da ich immer noch nicht weiss, wie ich mit dem Programm die Fon1-3 Schnittstellen erreiche, habe ich halt einen A/B-Adapter an den internen S0-Bus angeschlossen und meinen Teleswitch daran angeschlossen.
Ich wollte dann Deine Idee umsetzen und die Tonfolge aufnehmen und dem Teleswitch vorspielen. Um hier flexibel zu sein, wollte ich allerdings die Töne einzeln aufnehmen (also 0-1, * und #), das Aufnehmen hat zwar geklappt, aber mit dem Abspielen gibt's Probleme, da wohl ein "sleep" zwischen zwei "play"-s nicht wie erwartet funktioniert. Das ganze also an einem Stück aufnehmen probiere ich morgen, dafür muss ich wohl erst mal mein Metronom suchen... Ich melde mich.

Gruss, rusmueller
 
Also wenn ich das richtig verstehe, möchtest du den Teleswitch anrufen und DTMF-Töne abspielen. Der interne S0-Bus ist Controller 3 (siehe #2 - Übersicht der Controller).

Das mit dem sleep wird nicht funktionieren, außer du startest ein weiteres Skript (als Daemon) und lässt das aktuelle beenden (so dass die DTMF-Box von dem Daemon-Skript gesteuert wird).

Ungefähr so:
Code:
.
.
.
if  [ "$1" == "CONNECT" ];
then

  # Abheben und direkt abspielen:
  $CURRENT_DIR/dtmfbox -hook up -play "$CURRENT_DIR/beep.711" -loop 1


  # oder Skript erstellen und im Hintergrund starten:
  echo "sleep 10" > /var/teleswitch.sh
  echo "$CURRENT_DIR/dtmfbox -play '$CURRENT_DIR/dtmf-1.711' -loop 1" >> /var/teleswitch.sh
  echo "sleep 3" >> /var/teleswitch.sh
  echo "$CURRENT_DIR/dtmfbox -play '$CURRENT_DIR/dtmf-2.711' -loop 1" >> /var/teleswitch.sh
  echo "sleep 3" >> /var/teleswitch.sh
  echo "$CURRENT_DIR/dtmfbox -play '$CURRENT_DIR/dtmf-3.711' -loop 1" >> /var/teleswitch.sh

  # im Hintergrund starten
  chmod +x /var/teleswitch.sh
  /var/teleswitch.sh&

fi
.
.
.

Wenn die DTMF-Box ein Skript aufruft, wird der Thread für diese Zeit angehalten. Deswegen der Umweg.
 
Hallo,

danke für die Info und das vorbereitete Script, so geht's!
Jetzt habe ich einen per FTP-Freigabe fernbedienbaren 220V Schalter.

Ich hab die Variante "einzelne Töne per Hintergrundscript abspielen" genommen. Tatsächlich hört sich das Abgespielte nicht sehr gut an, manchmal gibt's bei den einzelnen Tönen Aussetzer beim Abspielen (das hört sich dann wie zwei sehr kurze Töne an). Aber der Teleswitch ist recht tolerant, den stört das offensichtlich nicht.

Trotzdem hätte ich noch zwei Fragen:
- Der Teleswitch hängt ja jetzt an einem A/B-Adapter am internen S0-Bus, gibt es die theoretische Möglichkeit ihn auch an die interne Fon1 anzuschliessen und dort mit dem dtmf-box programm direkt zu erreichen? Wenn nicht, werden ich ihn dann wohl über's Amt anwählen.
- würde es gehen, das dtmfbox-programm um eine Action -call x zu erweitern, um damit auch bei einer bestehender Verbindung Tonwahl zu ermöglichen (evtl. nur über über den analogen Amtsanschluss)?

Nochmal danke und Gruss, rusmueller
 
Die abgehackten DTMF-Töne sind normal.
Den internen S0-Bus müsstest du mit Ctrl 3 erreichen. Da hilft nur ausprobieren ;). Bei der -call Option müsste ich mal schauen.
 
DTMF-Box: Fernwartung per Telefon

Hallo,

ich habe mir eine nette Anwendung für die DTMF-Box gebastelt.
Per Telefon, kann man auf der Fritz!Box verschiedenen Funktionen auslösen, wie den eigenen PC zuhause hochfahren, DSL-Verbindung auf- und abbauen, die Fritz!Box neu booten. Theoretisch wären auch noch andere Dinge realsierbar, die man über die Fritz!Box per Telefonanruf tätigen kann.

Vorraussetzungen für das folgende Projekt:

- Kenntnisse in der Shellprogrammierung
- sicherer Umgang mit dem "vi" bzw. "nvi"
- Kenntnisse um die debug.cfg der Fritz!box
- Softwarepaket der DTMF-Box von "bodega"
- Fritz!Box 7170 mit Firmware 29.04.29 (die läuft bei mir)

Nun zur Funktionsbeschreibung:

Ich verwende für mein Projekt die DTMF-Box von "bodega" und eine MSN meines ISDN-Anschlusses, die speziell für die DTMF-Box verwendet wird.
Man kann die DTMF-Box von einer beliebigen Rufnummer aus anwählen.
Nachdem von der Box eine kurze Begrüßung ausgegeben wird, fordert sie anschließend zu PIN-Eingabe auf.
Für die Eingabe der richtigen PIN hat man ca. eine halbe Minute Zeit, bevor die Verbindung durch die DTMF-Box wieder getrennt wird. Hat man eine falsche PIN eingegeben, wird man von der Box darauf hingewiesen, dass die PIN falsch ist.
Wird jedoch die richtige Box-Betreiber-PIN eingegeben, wird von der Box ein Menütext gesprochen, so dass man nun weis mit welchen Tastenkombinationen (Zifferncode) man welche Funktionen auf der Box auslösen kann.
Bei einer falschen Tastenkombination wird man wieder von der Box darauf hingewiesen, dass dieser Funktionscode nicht unterstützt wird.
Bei richtigem Funktionscode (Bestätigung mit #) wird nun durch die DTMF-Box die gewünschte Funktion ausgelöst.
Das ganze Paket habe ich auf einem USB-Stick, der an der Fritz!Box betrieben wird, abgelegt.
Und zwar im Ordner "fritz!box", wo sich generell meine Softwareerweiterungen befinden und dort in Unterordner "dtmfbox".
Gestartet wird die DTMF-Box durch ein paar Zeilen, die der "debug.cfg" hinzugefügt werden oder über einen eigenen Bootscript, der sich ebenfalls auf dem USB-Stick befindet.
Ich habe im ShellScript (dtmfboxscript) viele Kommentare eingebaut, die die Funktionalität nochmals näher erläutern.


Hier ein Beispiel mit den betreffende Zeilen, die die DTMF-Box starten.

Code:
#
#
# Die Dateien fuer die Softwareerweiterungen befinden sich auf dem 
# USB-Stick im Ordner "fritz!box".
# Die Dateien der DTMF-Box befindet sich im Unterordner "$USBSTICK/dtmfbox".
# XXX muss je nach USB-Stick angepasst werden.
# Bitte aendern!

USBSTICK="/var/media/ftp/XXX/fritz!box"

# dtmfbox starten
# YYYYYYYY ist die MSN, die fuer die DTMF-Box verwendet wird (ohne Vorwahl).
# Bitte aendern!

$USBSTICK/dtmfbox/dtmfbox 1 YYYYYYYY -listen script -daemonize -workdir "$USBSTICK/dtmfbox" -script "$USBSTICK/dtmfbox/dtmfboxscript" -delimiter "#"

#
#

Über den nachfolgenden Schellscript "dtmfboxscript" wird die Fernwartung realisiert.

Code:
#!/bin/sh

#####################################################################################################################
###
### ./dtmfboxscript
###
### Die DTMF-Box laueft hier auf der Fritz!Box 7170 (zur Zeit unter Firmware 29.04.29).
### Es wird ein ISDN-Anschluss verwendet. Fuer die DTMF-Box wurde eine eigene MSN bereitgestellt.
### Ich weis nicht, ob dieses Script bzw. die DTMF-Box unter anderen Fritz!Box-Versionen zufriedenstellend laeuft.
### Fuer Analoganschluesse muesste das Script modifiziert werden.  
###
### Debug-Option:
### Debug-Ausgaben (DEBUG=TRUE) nur bei manuellem Start der DTMF-Box (ueber eigenen Script: start_dtmfbox)
### setzen, sonst wuerde das Script nicht mehr funktionieren. 
### Die Debug-Ausgaben erfolgen auf der Terminal-Session, von wo aus die DTMF-Box gestartet wurde.
###
######################################################################################################################

### diverse Variablen setzen

DEBUG=FALSE

# MAC-Adressen der zu weckenden PC im Format XX:XX:XX:XX:XX:XX  (XX = 2 Bytes im hex. Format)
# Nachfolgend sind statt XX die eigenen MAC-Adressen einzutragen
# 
MAC_PC1=XX:XX:XX:XX:XX:XX
MAC_PC2=XX:XX:XX:XX:XX:XX

# SMN, die fuer die DTMF-Box verwendet wird (ohne Vorwahl, nur die Rufnummer)
# Nachfolgend ist statt YYYYYYYY die eigene MSN einzutragen
#
MSN=YYYYYYYY

# Das momentane Arbeitsverzeichnis (Pfad) dieses Scriptes
# auf dem USB-Stick, wird in die Variable $USBSTICK abgelegt.
# Z.B "/var/media/ftp/XXX/dtmfbox". XXX ist je nach USB-Stick-Typ unterschiedlich.
# Die naechsten paar Zeilen ermitteln diesen Pfad.
# Wenn der Script ueber den vollstaendigen Pfad aufgerufen wird        
# dann wuerde auch genuegen                                                           
# USBSTICK=${0%/*}                                                                    
#                                                                                                                                                                            
USBSTICK=`cd ${0%/*} 2>/dev/null && pwd || echo ${0%/*}`                  
#
cd $USBSTICK

# Status-Variable fuer PIN setzen. Die Datei "pin" enthaelt den Status.
#
PIN=`cat $USBSTICK/pin`


if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-Start: Ereignis: $1 | Anrufer: $2 | auf MSN: $3 | PIN: $PIN | USBSTICK: $USBSTICK"; fi

case "$1" in

       CONNECT)
        	# --------------------------------------------------------------------
		#
		# Eingehender Anruf. DTMF-Box ruft dieses Script auf und uebergibt 3
		# Parameter ($1 = CONNECT | $2 = Anrufer | $3 = MSN)
		#
		# --------------------------------------------------------------------

		if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT: CONNECT! Anruf von $2 an $3"; fi
  
			if [ "$3" = "$MSN" ]; then
				#Flag fuer PIN auf FALSE setzen, da PIN noch nicht eingegeben wurde
				echo "FALSE" > $USBSTICK/pin
				
				# Abheben und
				# ===>>> Ansage Begruessung und Aufforderung zur PIN-Eingabe
				$USBSTICK/dtmfbox -hook up -play "$USBSTICK/greeting.711"
				
				# Script fuer Zeitbegrenzung der PIN-Eingabe generieren und
				# anschliessend im Hintergrund starten.
				
				echo "#!/bin/sh"									>  $USBSTICK/dtmfboxtimer
				echo ""											>> $USBSTICK/dtmfboxtimer
				echo "#"									        >> $USBSTICK/dtmfboxtimer 		
				echo "# ./dtmfboxtimer"									>> $USBSTICK/dtmfboxtimer
				echo "#"										>> $USBSTICK/dtmfboxtimer
			 	echo ""											>> $USBSTICK/dtmfboxtimer
				echo "USBSTICK=`cd ${0%/*} 2>/dev/null && pwd || echo ${0%/*}`"				>> $USBSTICK/dtmfboxtimer
				echo ""											>> $USBSTICK/dtmfboxtimer
				echo "#Prozess-ID von "dtmfboxtimer" in die Variable "dtmfboxtimer.pid" schreiben"	>> $USBSTICK/dtmfboxtimer
				echo "echo \$\$ > /var/run/dtmfboxtimer.pid"						>> $USBSTICK/dtmfboxtimer
				echo ""											>> $USBSTICK/dtmfboxtimer
				echo "# Nachfolgende wird ca. eine halbe Minute gewartet, bis Verbindung beendet wird," >> $USBSTICK/dtmfboxtimer
				echo "# wenn das Script nicht durch Eingabe einer richtigen PIN gestoppt wird."		>> $USBSTICK/dtmfboxtimer
				echo "sleep 30"										>> $USBSTICK/dtmfboxtimer
				echo ""											>> $USBSTICK/dtmfboxtimer
				echo "### ===>>> Ansage, dass die Zeit abgelaufen ist"					>> $USBSTICK/dtmfboxtimer
				echo "\$USBSTICK/dtmfbox -play \"\$USBSTICK/timeout.711\""				>> $USBSTICK/dtmfboxtimer
				echo ""											>> $USBSTICK/dtmfboxtimer
				echo "sleep 6"										>> $USBSTICK/dtmfboxtimer
				echo ""											>> $USBSTICK/dtmfboxtimer
				echo "# DTMF-Box beendet die Telefon-Verbindung"					>> $USBSTICK/dtmfboxtimer
				echo "\$USBSTICK/dtmfbox -hook down"							>> $USBSTICK/dtmfboxtimer
				echo ""											>> $USBSTICK/dtmfboxtimer
				echo "sleep 1"										>> $USBSTICK/dtmfboxtimer
				echo ""											>> $USBSTICK/dtmfboxtimer
				echo "rm -f /var/run/dtmfboxtimer.pid"							>> $USBSTICK/dtmfboxtimer

				# nachdem das Timer-Script erzeugt wurde, wird es nun gestartet
				$USBSTICK/dtmfboxtimer&
			fi   
		;;

    DISCONNECT)

		# --------------------------------------------------------------------
		#
		# Anruf beendet/aufgelegt
		#
		# --------------------------------------------------------------------
		if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT: DISCONNECT!"; fi
 		#Flag fuer PIN auf FALSE zurücksetzen, da Verbindung beendet wurde.
		echo "FALSE" > $USBSTICK/pin
		
		# dtmfboxtimer beenden, falls er noch laeuft. 
		if [ -f /var/run/dtmfboxtimer.pid ]; then
			DTMFBOXTIMER_PID=`cat /var/run/dtmfboxtimer.pid`
			kill $DTMFBOXTIMER_PID
			# PID-Datei loeschen
			rm -f /var/run/dtmfboxtimer.pid
		fi  
		;;

   5678 | 8765)
                # --------------------------------------------------------------------
                #
		# DTMF: - PIN (5678 = PIN , 8765 = 2. Vorfuehr-PIN)
		#
		# --------------------------------------------------------------------
                if [ "$PIN" = "FALSE" ]; then
                	#Flag fuer PIN auf TRUE setzen, da PIN richtig eingegeben wurde.
                	PIN="TRUE" 
                	echo $PIN > $USBSTICK/pin
          		if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT: PIN wurde eingegeben... : = $PIN"; fi
          		
          		# ===>>> Ansage fuer Menue ausgeben
          		$USBSTICK/dtmfbox -play "$USBSTICK/menu.711"
          		
          		# dtmfboxtimer beenden, falls er noch laeuft.
          		if [ -f /var/run/dtmfboxtimer.pid ]; then
          			DTMFBOXTIMER_PID=`cat /var/run/dtmfboxtimer.pid`
          			kill $DTMFBOXTIMER_PID
          			# PID-Datei loeschen 
          			rm -f /var/run/dtmfboxtimer.pid
          		fi
          		# Nachfolgend "exit 0" zum Beenden des dtmfboxscript.
          		# Da PIN=TRUE gesetzt ist, wuerde sonst im folgenden case-Konstrukt der "*"-Case durchlaufen. 
          		exit 0
          	else
          	 	if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT: Auswahl wird nicht unterstuetzt..."; fi
          	        
          	        # ===>>> Ansage das falsche Option gewaehlt wurde
          	        $USBSTICK/dtmfbox -play "$USBSTICK/wrongoption.711" 		
                fi
          	;;
          	
            *)
             	# ---------------------------------------------------------------------
             	#
       		# DTMF: * - Falsche PIN (restlicher Zifferncodes)
       		#
       		# ---------------------------------------------------------------------
       		if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-**1: $1 PIN = $PIN"; fi
       		if [ "$PIN" = "FALSE" ]; then
       			if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-**: Falsche PIN eingegeben..."; fi
       			
       			# ===>>> Ansage das falsche PIN gewaehlt wurde
       			$USBSTICK/dtmfbox -play "$USBSTICK/wrongpin.711"
       		fi
             	;;
esac
		                                 
##########################################################################################
### Folgende Optionen stehen nur zur Verfuegung, wenn die richtige Pin eingegeben wurde. #
##########################################################################################

if [ "$PIN" = "TRUE" ]; then 
        case "$1" in 
	    
	    ##########################################################################
	    ### Nur fuer die Entwicklungsphase gedacht, zum Aufnehmen der Ansagen    #
	    ##########################################################################
	    11)
		# --------------------------------------------------------------------
		#
		# DTMF: 11 - Aufnahme starten (record.711)
		#
		# --------------------------------------------------------------------
		if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-11: $1 PIN = $PIN"; fi
		if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-11: Record to file (record.711)..."; fi
		$USBSTICK/dtmfbox -record "$USBSTICK/record.711"
        	;;
    
    	    12)    
		# --------------------------------------------------------------------
		#                                                                     
		# DTMF: 12 - Aufname abspielen                                        
		#                                                                     
		# --------------------------------------------------------------------
		if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-12: $1 PIN = $PIN"; fi
	        if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-12: Aufnahme abspielen (record.711)..."; fi                         
        	$USBSTICK/dtmfbox -play  "$USBSTICK/record.711"
        	;;

	    13)
        	# --------------------------------------------------------------------
        	#
        	# DTMF: 13 - Aufnahme loeschen
        	#
		if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-13: $1 PIN = $PIN"; fi
        	if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-13: Aufnahme (record.711) wird geloescht..."; fi
        	if [ -f "$USBSTICK"/record.711 ]; then
        		rm -f $USBSTICK/record.711
        	fi
        	$USBSTICK/dtmfbox -play  "$USBSTICK/delrecord.711"
        	;;

	    ##########################################################################                                                           
            ### Nur fuer die Entwicklungsphase gedacht, fuer Experimente             #                                                           
            ##########################################################################
            
            51)                                                                                                                                  
            	# --------------------------------------------------------------------                                                           
                #                                                                                                                                
                # DTMF: 51 - Experimente                                                                                                 
                #                                                                                                                                
                if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-51: $1 PIN = $PIN"; fi                                                        
                if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-51: Experiment 1..."; fi                              
                
                #
                #
                
                ;;                                                          

            ##########################################################################
            ### Hier beginnen die eigentlichen Auswahloptionen der DTMF-Box          #
            ##########################################################################             
	    
	    21)
    		# --------------------------------------------------------------------
    		#
    		# DTMF: 21 - Rechner 1 WOL
    		#
    		# --------------------------------------------------------------------
        	if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-21: $1 PIN = $PIN"; fi
        	if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-21: Rechner 1 WOL..."; fi
		
		# DSL-Verbindung aufbauen 
		/sbin/dsld -i -n
		
		# Rechner ueber WOL wecken
       
                # Variante 1: bei aelterer Firmware als 29.04.29 wird "ether-wake" einer externen,
                # vom Befehlssatz her, umfangreicheren Busybox verwendet.
                # Die Befehle der Busybox die sich auf dem USB-Stick befindet, sind hier nach /var/tmp verlinkt.
                #/var/tmp/ether-wake -i eth0 $MAC_PC1
                 
                # Variante 2: "ether-wake" ist bei Firmware 29.04.29 im Busybox-binary der Fritz!Box enthalten
                ether-wake -i eth0 $MAC_PC1
                 
       		# ===>>> Ansage, dass PC1 hochgefahren wurde
       		$USBSTICK/dtmfbox -play "$USBSTICK/startpc1.711"
       		;;    

	    22)
    		# --------------------------------------------------------------------
    		#
    		# DTMF: 22 - Rechner 2 WOL
    		#
    		# --------------------------------------------------------------------
    		if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-22: $1 PIN = $PIN"; fi
    		if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-22: Rechner 2 WOL..."; fi
		
		# DSL-Verbindung aufbauen
		/sbin/dsld -i -n
		
    		# Rechner ueber WOL wecken
    		
    		# Variante 1: bei aelterer Firmware als 29.04.29 wird "ether-wake" einer externen,
    		# vom Befehlssatz her, umfangreicheren Busybox verwendet. 
    		# Die Befehle der Busybox die sich auf dem USB-Stick befindet, sind hier nach /var/tmp verlinkt.
    		#/var/tmp/ether-wake -i eth0 $MAC_PC2
    		
    		# Variante 2: "ether-wake" ist bei Firmware 29.04.29 im Busybox-binary der Fritz!Box enthalten
    		ether-wake -i eth0 $MAC_PC2
    		
    		# ===>>> Ansage, dass der PC2 hochgefahren wurde
    		$USBSTICK/dtmfbox -play "$USBSTICK/startpc2.711"
    		;;
  
   	    31)
    		# --------------------------------------------------------------------
    		#
    		# DTMF: 31 - DSL-Verbindung aufbauen
    		# 
    		# --------------------------------------------------------------------
    		if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-31: $1 PIN = $PIN"; fi
  		if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-31: DSL-Verbindung wird aufgebaut..."; fi
  		
  		/sbin/dsld -i -n  	
    		
                # ===>>> Ansage, dass die DSL-Verbindung aufgebaut wurde
    		$USBSTICK/dtmfbox -play "$USBSTICK/dslstart.711"
    		;;
    	
  	    32)
    		# --------------------------------------------------------------------
    		#
    		# DTMF: 32 - DSL-Verbindung trennen
    		#
    		# --------------------------------------------------------------------
        	if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-32: $1 PIN = $PIN"; fi
        	if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-32: DSL-Verbindung wird getrennt..."; fi
        	
        	/sbin/dsld -s
       
                # ===>>> Ansage, dass die DSL-Verbindung abgebaut wurde
        	$USBSTICK/dtmfbox -play "$USBSTICK/dslstop.711"
	        ;;  	

     	    77)
     		# --------------------------------------------------------------------
     		#
     		# DTMF: 77 - Status abfragen (noch nicht implementiert!)
     		#
     		# --------------------------------------------------------------------
     		if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-77: $1 PIN = $PIN"; fi
  		if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-77: Status wird abgefragt..."; fi
  		#
  
                # ===>>> Ansage das Status-Ausgabe der Fritz!Box noch nicht implementiert ist
  		# ...
  		# ...
  		# ...
  		$USBSTICK/dtmfbox -play "$USBSTICK/status.711"
  		#
  		;;
  
     	    99)
     		# --------------------------------------------------------------------
     		#
     		# DTMF: 99 - Fritz!Box reboot
     		#
     		# --------------------------------------------------------------------
  		if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-99: $1 PIN = $PIN"; fi
     		if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-99: FritzBox! wird neu gebootet..."; fi
                
                # Vor dem Reboot muss die "pin" noch auf "FALSE" gesetzt werden !
		echo "FALSE" > $USBSTICK/pin

                # ===>>> Ansage, dass die Fritz!Box gebootet wird
		$USBSTICK/dtmfbox -play "$USBSTICK/reboot.711"
		
                # Umweg ueber externen Bootscript, dass im Hintergrund aufgerufen wird,                                                                                           
                # da der Sleep-Befehl an dieser Stelle nicht funktioniert.                                                                                                        
                # Eine Pause ist hier noetig, da sonst vor dem Booten die Ansage nicht mehr ausgegeben wird. 

		echo "#!/bin/sh"											>  $USBSTICK/reboot
		echo ""													>> $USBSTICK/reboot
		echo "#"												>> $USBSTICK/reboot
		echo "# ./reboot"											>> $USBSTICK/reboot
		echo "#"												>> $USBSTICK/reboot
		echo ""													>> $USBSTICK/reboot
		echo "sleep 10"												>> $USBSTICK/reboot
		echo "reboot"												>> $USBSTICK/reboot

		# Nach dem das Script "reboot" erzeugt wurde, wird es nun gestartet
                $USBSTICK/reboot&               	
		
     		;;
     		
	    *)
	    	# ---------------------------------------------------------------------
	    	#
	    	# DTMF: * - Auswahl wird nicht unterstuetzt (restliche Zifferncodes)
	    	#
	    	# ---------------------------------------------------------------------
	    	if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-*: $1 PIN = $PIN"; fi
	    	if [ "$DEBUG" = "TRUE" ]; then echo "DTMFBOXSCRIPT-*: Auswahl wird nicht unterstuetzt..."; fi

                # ===>>> Ansage, dass die falsche Option gewaehlt wurde
	    	$USBSTICK/dtmfbox -play "$USBSTICK/wrongoption.711"
	    	;;
	esac    
fi

sleep 1

3 geheime Menüpunkte (11# = Aufnahme, 12# = Ausgabe, 13# = löschen) ermöglichen eine Sprachaufnahme über Telefon.
Zum Beispiel für die Gestaltung des Menütextes bzw. der Ansagen, die die Box dann später ausgeben soll.
So sind später leicht Anpassungen des ausgegebenen Ansagetextes möglich.
Die Datei des aufgenommene Textes kann dann einfach umbenannt werden, so dass er vom "dtmfboxscript" verwendet werden kann.
Da am Anfang noch die Dateien mit den Ansagen fehlen, kann die mit der DTMF-Box-Software von "bodega" mitgelieferte beep.711 verwendet werden.
Bis man selber die Ansagetexte aufgenommen hat, kann man vorerst die "beep.711" zum Abspielen im Script verwenden.
Einfach vorher umbenennen.


Hier die Sound-Dateien die DTMF-Box verwendet.
Sie sind im Alaw-Format.

- greeting.711 : --> Begrüßungstext + Aufforderung zur PIN-Eingabe
- wrongpin.711: --> Ansage, dass die PIN falsch ist
- timeout.711: --> Ansage, dass die Zeit fuer die PIN-Eingabe um ist
- menu.711: --> Ansage des Funktionsmenüs
- wrongoption.711: --> Ansage, dass diese Option (Ziffernkombination) nicht unterstützt wird
- startpc1.711: --> Ansage, dass PC 1 gestartet wurde
- startpc2.711: --> Ansage, dass PC 2 gestartet wurde
- dslstart.711: --> Ansage, dass die DsL-verbindung aufgebaut wurde
- dslstop.711: --> Ansage, dass die DSL-verbindung abgebaut wurde
- reboot.711: --> Ansage, dass die Fritz!Box gebootet wird
- delrecord.711: --> Ansage, dass der aufgenommene text gelöscht wurde
- status.711: --> Ansage, dass hier künftig der Box-Satus ausgegeben wird
- beep.711: --> Datei mit Beep-Ton für den Anfang

- record.711: --> Eigene Aufnahme


Noch wichtige Sicherheits-Tips !!!

Eine Modifikation der Firmware kann die FRITZ!Box lahm legen und muss jeder selber verantworten !!!
Wie es um die Gewährleitungsansprüche steht, kann man sich denken.
Die Mod läuft auf meiner FRITZ!Box 7170 mit Firmware 29.04.29.
Ob die Mod mit anderen Boxen und anderer Firmware läuft, weis ich nicht.
Ein sicherer Umgang mit dem "vi" bzw. "nvi" und Grundkenntnisse von Linux sind Voraussetzung für die Modifikationen.

Zum Editieren der "debug.cfg" mit dem "nvi" sollte man eine 2. Telnet-Session oder ssh-Session öffnen.
Die 1. Session benützt die Fritz!Box für die Standardausgabe von Meldungen, diese würden dann beim Editieren stören.
Zum Thema "telnet", "ssh" und "debug.cfg" gibt es bereits andere Forenbeiträge.

Vorsicht beim Editieren der betreffenden Dateien !
Grunsätzlich habe auch ich die Dateien auf dem USB-Stick mit vi oder nvi bearbeiten. Wegen unterschiedlicher Zeichensätze,
habe ich die Dateien auf dem USB-Stick nicht mit einem Windows-Editor bearbeitet.
Nur als Hinweis, falls jemand auf die Idee käme, den USB-Stick zu ziehen und an einem Windows-PC anzustecken.

Sicher kann der aufgeführte Script noch verbessert werden, da ich kein Profi bin, was Shell-Scripte anbelangt.
Auf weitere Fragen zu meinem Beitrag kann ich leider nicht immer gleich antworten.
Bitte um Nachsicht und viel Spaß beim Moding ! :p

---

Die Ansagen habe ich aus verständlichen Gründen nicht mitgeliefert. Die müsst ihr selber kreieren.
Nochmals schönen Dank an "bodega" ohne seien DTMF-Box wäre dieses interessante Projekt für die Fritz!Box nicht möglich gewesen.

Schöne Grüße

Joe3
 
Zuletzt bearbeitet von einem Moderator:
DTMF-BOX v0.2

Hallo bodega,

habe ich auch schon ausprobiert. Meine Bekannten staunen, was man mit der Fritz!Box alles machen kann.
Funktioniert prima. Das Programm "espeak", dass Du kompiliert hast, bietet viele Einstellmöglichkeiten, so dass man auch noch an Sprachverständlichkeit Tuningmaßnahmen vornehmen kann.

Übrigens, die DTMF-Box läuft seit Wochen stabil auf meiner Fritz!Box 7170.
Nur schade dass, das Potential der "DTMF-Box" von vielen scheinbar unterschätzt wird. Eigentlich müsste das meiner Meinung nach ein Dauerbrenner auf der ersten Seite in diesem Forum sein.

Schöne Grüße

Joe3
 
Hi Bodega,

wollte mal nachhören, was die aktuelle DTMF-BOX entwicklung so macht :)

p7
 
Hi prodigy7,

Der Voip-Teil funktioniert bereits. Z.Zt. arbeite ich an parallelen Anrufen, wobei das mit der Performance immer etwas schwierig ist.
Es wird auch eine Konfigurationsdatei hinzukommen. Callback wird eventuell auch integriert sein, was aber vorerst auf Voip zu Voip, bzw. Isdn zu Isdn beschränkt sein wird. Voip und Isdn können aber parallel betrieben werden.

Es wird dann so funktionieren:
- voipd Daemon meldet sich beim Registrar "DTMF-Box" an
- DTMF-Box dient als SIP-Server und Client und schleift das Audio-Signal durch

Es sind aber noch einige Dinge zu machen und zu testen...
 
Hi,

das hört sich wirklich sehr gut an. Ich frage mich ehrlich, warum in der Vergangenheit niemand anderes schon auf die Idee gekommen ist, so ein Utility zu schreiben, mit dem sich soviel machen lässt.
Was ich noch fragen wollte: Unter welcher Lizenz steht das und wird es auch Source-Code geben, den man dann auf einem x86-System z.B. compilieren kann?

Vielen danke für deine super Arbeit und weiter so!
p7
 
Den Source wollte ich unter GPL stellen. Ich werde ihn dabeipacken, sobald die gröbsten Bugs raus sind. Vielleicht pack ich dann das Ganze auch nach Sourceforge - mal sehen...

Probleme gibt's z.Zt. noch mit der Performance:
Ein Voip-Gespräch ist kein Problem und verkraftet die Box. Sobald ich ein zweites dazuschalte (Konferenz), wird's eng. Bei ISDN geht das allerdings ohne große Performanceverluste.
 
@bodega:
Wenn du dann Callback integrierst *lechz*, dann wäre es toll, die rückgerufene Nummer mit einer anderen externen Nummer verbunden würde. Mit ISDN geht das sogar so, dass dann am Fritzbox-Anschluss nur noch 1 Kanal belegt ist oder sogar die Konferenz komplett der Vermittlungsstelle überlassen wird. Darauf warte ich noch :)
 
@Chatty:
Early-B3 Connect hab ich mal probiert. Freizeichen bekomme ich auch, doch nach 5 Sek legt die Box dann einfach auf. Das wäre für einen "richtigen" Callback natürlich wichtig. Z.Zt. kann ich nur eine zweite Verbindung aufbauen und diese beiden miteinander verbinden. Warum der Early-B3 sich anders verhält, als in der CAPI-Referenz beschrieben, kann ich mir erstmal nicht erklären. Das bedarf noch weiterer Test :rolleyes:
 
Hallo!

Also ich bin irgendwie zu doof :) Ich würde gerne mit den Telefonen, die an der Fritz Box hängen das DTMF Tool anrufen. Wie realisiere ich das?

Welche MSN vergebe ich dafür? Habe es schon mit internen ISDN Rufnummern der Fritz Box versucht o.ä. aber das geht nicht.

Ich würde also gerne, dass ich **200 oder irgendeine andere Rufnummer wähle von intern und dann der DTMF abnimmt. Nur das kriege ich nicht hin.

Stefan
 
Das was du vor hast, wird (noch) nicht gehen. Die DTMF-Box lauscht nicht auf dem internen Controller.

Folgendes sollte aber funktionieren:

Du rufst deine eigene MSN an und die dtmf-box nimmt ab. Dann auf der Telefontastatur "200#" wählen (wenn du -delimiter "#" angegeben hast), damit der Event im Skript aufgerufen wird.

Schau dir auch mal die 'readme.txt' und das 'simple.sh' Skript an.
Es sollte die Funktionsweise erklären.
 
Hallo!

Auch das habe ich shcon probiert... geht nicht :-(

Idee?
 
OK - Problem gefunden. Es geht nur, wenn ich Controller 5 verwende => weil er halt VOIP nimmt standardmäßig. Kann ich das umstellen?

Mit den Wählregeln geht es nicht, weil er da anzeigt Wähltabelle - nehme an das liegt am Telefonsparbuch.de ...
 
Hmm meine erste "nicht Originale Anwendung" die ich auf meiner FB (7150) laufen lassen will. Ich bin soweit, dass das Programm auf meiner Analognr. horcht und auch abhebt, wenn ich meine Nr. anrufe. In der Konsole erscheint auch "Abheben!", dann stille auf meinem Handy, wovon ich angerufen habe. Nun drücke ich 100* für ein Event aus der dtmf.sh - In dieser habe ich soweit richtig statt den "XXXX" bei $2 und $3 die jeweiligen Nummern eingetragen. Sobald ich eine komplette Folge über DTMF eingegeben habe erscheint auf der Konsole folgendes:

PHP:
# ./dtmfbox 4 xxxxxxxx -listen -script /var/media/ftp/LeadtekLTD--Partition-0
-1/dtmfbox-0.2/dtmf.sh -delimiter "*"
-------------------------------------------------------------------------------
 DTMF-BOX v0.2
-------------------------------------------------------------------------------
5 Controller gefunden (10 B-Kanõle)!
CAPI erfolgreich initialisiert!
Verwende Controller Nr. 4!
Antworte auf Anschluss xxxxxxxx...
Anruf von xxxxxxx an unknown ...
[: ==: unknown operand
[: ==: unknown operand
[: ==: unknown operand
[: ==: unknown operand
[: ==: unknown operand
[: ==: unknown operand
Abheben!
[: ==: unknown operand
[: ==: unknown operand
[: ==: unknown operand
[: ==: unknown operand
[: ==: unknown operand
[: ==: unknown operand
Aufgelegt!
[: ==: unknown operand
[: ==: unknown operand
[: ==: unknown operand
[: ==: unknown operand
[: ==: unknown operand
[: ==: unknown operand

Der unknown operand scheint durch die IF Bedingungen ausgelöst zu werden, aber wieso? Ich habe per manuellem Echo versucht mal die Inhalte von den Variablen $1,$2,$3 auszugeben, hat aber nicht funktioniert.
Jemand vielleicht nen Tip :D
 
Hallo,

ich hab da fälschlicherweise den Operator '==' verwendet. Der sollte aber auch funktionieren. Richtig wäre '=' (mit einem Unix-Editor bearbeiten!).

Zum Testen könntest du das Skript auch manuell starten: './dtmf.sh CONNECT 12345 12345' und schauen, wann der Fehler nicht mehr kommt. Liegt zumindest an der if-Bedingung.
 
bodega schrieb:
Hallo,

ich hab da fälschlicherweise den Operator '==' verwendet. Der sollte aber auch funktionieren. Richtig wäre '=' (mit einem Unix-Editor bearbeiten!).

Zum Testen könntest du das Skript auch manuell starten: './dtmf.sh CONNECT 12345 12345' und schauen, wann der Fehler nicht mehr kommt. Liegt zumindest an der if-Bedingung.

Das hatte ich auch getestet, dort kam der Fehler auch. Also werd ich heute abend mal die Stellen ändern und sehen was Sache ist...
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.