Dial-/Wähl-Skript für Ubuntu

[email protected]

Neuer User
Mitglied seit
11 Aug 2005
Beiträge
135
Punkte für Reaktionen
0
Punkte
0
Hallo Zusammen,

ich habe auf eine Webseite ein Wähl-Skript für Linux gefunden.
Mit dessen hilfe werden Telefonnummern an die Fritzbox weitergegeben und es klingelt am gweünschten standart Telefon.

Das Skript ist für eine Fritz!box 7170 ausgelegt, auf der eine etwas ältere Firmware lief.
Da ich von der Skripterstellung keine Ahnung habe die Frage an Euch, was in dem Skript geändert werden muss, damit es mit einer Fritz!box 7270 mit neuester Firmware läuft.
Vielleicht kann man daraus ggf. auch ein Addon für den FireFox machen, da Fritz!Dial ja nicht mehr geht.

Freue mich auf eine Antwort gecks

Holger
Code:
#!/bin/bash
# Martin
# VERSION=1.2.3
# Erfordert folgende Pakete (Debian-Paketnamen)
#    - libwww-perl für das Kommando "lwp-request"
#    - html2text zur Formatierung der HTML-Ausgaben der Fritz-Box
#    - mpg123 oder ogg123, wenn ein Signalton ausgegeben werden soll
#    - xclip zur Verwendung der Option "-c" (Wählen der Nummer aus Clipboard)
#
#
# Uebergebene Nummer:
ARG=${1:-"-h"}

##################################################
# Konfiguration
##################################################
# 
# Konfigurationspasswort der FritzBox
password="123456"

# Standard-Nebenstelle, die verwendet wird, wenn nicht beim Aufruf übergeben
dialport=${2:-"Büro"}

# Anzeigedauer der Infobox in Sekunden
DIALOG_TIMEOUT=0

# Ausgaben werden zur Fehlerdiagnose in diese Datei geschrieben:
LOGFILE=/tmp/$(basename "$0" .sh).log

# Klang abspielen, wenn der Hörer abgenommen werden muss; ("y" für Yes)
PLAY_SOUND=y
SOUND_FILE="/home/roger/.bin/KDE-Im-Sms.ogg"

# Bei Übergabe von "-c" die Nummer aus der Zwischenablage lesen:
USE_CLIP=1

##################################################
# Usage-Hinweis
##################################################
if [ "$ARG" = "-h" -o "$ARG" = "-?" -o "$ARG" = "--help" ]; then
	echo "Usage: $(basename ${0}) [ -c | <Nummer> ] [<Anschluss-Id>]"
	exit 0
else
	# Ungeeignete Zeichen aus der Nummer entfernen:
	dialnumber=$(echo ${1} | sed -e '
		s/+/00/
		s/[^0-9]//g
	')
fi

##################################################
# Nummernbereinigung
##################################################
clean_number() {
	# Ungeeignete Zeichen aus der übergebenen Nummer entfernen:
	#echo "clean_number: $@" >&2
	CLEANNUM=$(echo $@ | sed -e '
		s/+/00/
		s/[^0-9]//g
	')
	echo ${CLEANNUM}
	#echo "clean_number: ${CLEANNUM}" >&2
}

##################################################
# Klang-Abspiel-Funktion
##################################################
play_sound() {
	if ! test -r "$SOUND_FILE"; then
		echo "Klangdatei $SOUND_FILE nicht lesbar!" >&2
		return 1
	fi
	SUFFIX=${SOUND_FILE: -3:3}
	case $SUFFIX in
		mp3|MP3) PLAYER=mpg123;;
		ogg|OGG) PLAYER=ogg123;;
		*)	echo "Das Format ($SUFFIX) kann ich nicht!" >&2;
			return 2;;
	esac
	which $PLAYER 1>/dev/null || echo "Das Programm \"$PLAYER\" fehlt. Klang kann nicht abgespielt werden." >&2
	echo "Klang abspielen: $PLAYER $SOUND_FILE"
	$PLAYER "$SOUND_FILE"
}

##################################################
# Test der erforderlichen Programme
##################################################
which Xdialog 1>/dev/null || { 
	echo "Das Programm \"Xdialog\" fehlt. Installieren Sie das Paket \"xdialog\"." >&2
	exit 1 
}
which lwp-request 1>/dev/null || {
	echo "Das Programm \"lwp-request\" fehlt. Installieren Sie das Paket \"libwww-perl\"." >&2
	exit 1
}
which html2text 1>/dev/null || {
	echo "Das Programm \"html2text\" fehlt. Installieren Sie das Paket \"html2text\"." >&2
	exit 1
}
which xclip 1>/dev/null || {
	echo "Das Programm \"xclip\" fehlt, keine Verarbeitung der Zwischenablage. Installieren Sie das Paket \"xclip\"." >&2
	USE_CLIP=0
}

##################################################
# Rufnummer festlegen/ermitteln
##################################################
if test "$ARG" = "-c" -a "$USE_CLIP" -eq 1 ; then
	NUM=$(xclip -o)
else
	NUM=${ARG}
fi
#echo "Rufnummer (ungesäubert): $NUM"
dialnumber=$(clean_number ${NUM})
#echo "Rufnummer (gesäubert): $dialnumber"
#exit

##################################################
# Konfiguration der Kommandos
##################################################
#
# lwp-request wird auf folgende Weise verwendet:
cmd_lwp="lwp-request -s -m POST http://fritz.box/cgi-bin/webcm"
# folgende Angaben soll lwp-request zum Anmelden bei der Fritzbox verarbeiten;
# die Zeichenfolge funktioniert nicht, wenn nicht ein Einstellungsparameter
# (hier "telcfg:settings/UseClickToDial ..." folgt. Warum, weiß ich nicht.
cmd_login="getpage=../html/de/menus/menu2.html\
&var:lang=de\
&login:command/password=${password}\
&telcfg:settings/UseClickToDial=1\

"
# folgende Angaben soll lwp-request für die Telefonwahl verwenden:
cmd_telcfg="getpage=../html/de/menus/menu2.html\
&var:lang=de\
&telcfg:settings/UseClickToDial=1\
&telcfg:command/Dial=${dialnumber}\
&telcfg:settings/DialPort=${dialport}"

##################################################
# Verarbeitung
##################################################
echo "Aufruf-Parameter: $@" > $LOGFILE
#echo -e "$cmd_login" | $cmd_lwp | html2text - >> $LOGFILE
#echo -e "$cmd_telcfg" | $cmd_lwp | html2text - >> $LOGFILE
#exit
{
	FEHLER=0
	echo "XXX Anmelden an FritzBox ... XXX"
	echo "Anmelden ... " >> $LOGFILE
	echo -e "$cmd_login" | $cmd_lwp | html2text - >> $LOGFILE || FEHLER=1
	if [ $FEHLER -eq 0 ]; then
		echo "XXX Wähle ${dialnumber} ... XXX"
		echo "Wählen ... " >> $LOGFILE
		echo -e "$cmd_telcfg" | $cmd_lwp | html2text - >> $LOGFILE || FEHLER=2
	fi
	if [ $FEHLER -ne 0 ]; then
		echo "XXX Fehler $FEHLER aufgetreten.\\nSiehe $LOGFILE. XXX"
		sleep 5
	else
		test ${PLAY_SOUND:-n} = "y" && play_sound 1>/dev/null
		echo "XXX Bitte Hörer abnehmen von Nebenstelle ${dialport}. XXX"
		sleep $DIALOG_TIMEOUT
		echo "XXXX"
	fi
} | Xdialog --title "Wählen über FritzBox" --cancel-label "Schließen" --infobox "Anwahl ${dialnumber} für Nst. \"${dialport}\" ..." 6 50 0

PS: Wenn es funktioniert, oder funktionieren kann, hat vielleicht noch jemand eine Idee wie es in ein Kontextmenü verfrachtet werden kann.
 
Ich habe das Problem wahrscheinlich gelöst.

Nach einem Firmware-Update meiner 7170 funktionierte mein Skript hier auch nicht mehr. Ursache war das von AVM geänderte Login-Verfahren mit Session-ID.

Dank eines Artikels auf
wehavemorefun.de
habe ich das neue Verfahren (zusätzlich zum alten) einbauen können.

Vermutlich hatte die 7270 das Verfahren schon früher.

Wer das probieren mag, kann das Skript herunterladen von:

http://download.schniewindnetz.de/LINUX/fritzdial.sh

@hoenloh: Ich weiß nicht, wo du das zitierte Skript her hattest, aber das ist, so wie es ausschaut, das von mir geschriebene. Leider ist die Quellenangabe auf meinen Vornamen verkürzt. Ich freue mich, wenn du bei Weitergabe die volle Angabe verwendest: "Martin Schniewind, http://www.schniewindnetz.de". Danke!
 
Kostenlos!

Neueste Beiträge

Statistik des Forums

Themen
248,873
Beiträge
2,303,516
Mitglieder
378,533
Neuestes Mitglied
PatrickSt91