Ich habe in den letzten Tagen ein Script zum Setzen von Rufumleitungen geschrieben. Es gibt schon verschiedene Lösungen und Möglichkeiten Rufumleitungen über die Konsole zu setzen, wie z.B. capidivert oder über AT-Befehle.
Aber ich hatte nichts gefunden, was meine Anforderungen komplett abdeckt. Das Script soll über cron eine zeitgesteuerte Aktivierung von Rufumleitungen ermöglichen. Vielleicht ist das auch für andere hier im Forum interessant oder kann als weitere Anregung dienen.
1. Bestehende Rufumleitugen sollen nicht verändert werden. Für eine MSN wird im WebIF immer nur ein Umleitungszeil gespeichert. Falls z.B. temporär eine Umleitung auf das Handy existiert, soll die zeitgesteuerte Umleitung auf den AB nicht durchgeführt werden.
2. Es soll zwischen Rufumleitungen für Festnetz und VOIP mit gleicher MSN (bei VOIP-Anbieter registrierte Festnetznummer) unterschieden werden können. Über die Telefoncodes setzt die FritzBox immer beide Umleitungen.
3. Nur vorhandene Rufumleitungen sollen aktiviert bzw. deaktivert werden
Für das Script ist CURL notwendig. Ausserdem müssen die Rufumleitungen über das WebIF definiert werden. Folgende 4 Parameter müssen mitgegeben werden:
1. MSN
2. Ziel der Umleitung
3. Typ (Festnetz und/oder VOIP)
4. Wert (aktivieren/deaktivieren/Status
Danke an Whoopie, dessen Skript mir als Basis diente, besonders für das neue Loginverfahren
http://www.ip-phone-forum.de/showpost.php?p=1374141&postcount=5
Hier ist das Script:
Gruß
joesy
Code:
echo "ATH0" | nc 127.0.0.1 1011
echo "ATD*21*$AWS_ZIEL1*$AWS_MSN1#" | nc 127.0.0.1 1011
Aber ich hatte nichts gefunden, was meine Anforderungen komplett abdeckt. Das Script soll über cron eine zeitgesteuerte Aktivierung von Rufumleitungen ermöglichen. Vielleicht ist das auch für andere hier im Forum interessant oder kann als weitere Anregung dienen.
1. Bestehende Rufumleitugen sollen nicht verändert werden. Für eine MSN wird im WebIF immer nur ein Umleitungszeil gespeichert. Falls z.B. temporär eine Umleitung auf das Handy existiert, soll die zeitgesteuerte Umleitung auf den AB nicht durchgeführt werden.
2. Es soll zwischen Rufumleitungen für Festnetz und VOIP mit gleicher MSN (bei VOIP-Anbieter registrierte Festnetznummer) unterschieden werden können. Über die Telefoncodes setzt die FritzBox immer beide Umleitungen.
3. Nur vorhandene Rufumleitungen sollen aktiviert bzw. deaktivert werden
Für das Script ist CURL notwendig. Ausserdem müssen die Rufumleitungen über das WebIF definiert werden. Folgende 4 Parameter müssen mitgegeben werden:
1. MSN
2. Ziel der Umleitung
3. Typ (Festnetz und/oder VOIP)
4. Wert (aktivieren/deaktivieren/Status
Danke an Whoopie, dessen Skript mir als Basis diente, besonders für das neue Loginverfahren
http://www.ip-phone-forum.de/showpost.php?p=1374141&postcount=5
Hier ist das Script:
Code:
#!/bin/sh
if [ x"$1" == x"" ] || [ x"$2" == x"" ] || [ x"$3" == x"" ] || [ x"$4" == x"" ]; then
echo "Usage: $0 {msn} {dst} {typ} (0=Festnetz, 1=VOIP, 2=FN+VOIP) {0|1|2} (0=rul off, 1=rul on, 2=rul status)"
exit 1
fi
msn=$1
dst=$2
typ=$3
setvalue=$4
IP=127.0.0.1
PASSWD=$(/bin/allcfgconv -C ar7 -c -o - | sed -ne '/^webui[[:space:]]*{/,/^}/{/=/{s/[[:space:]]*=[[:space:]]*/=/;s/^[[:space:]]*//;p}}' | grep '^password=' | cut -d '"' -f2)
CURL=$(which curl)
login(){
# neues Loginverfahren seit xx.04.76
if [ -e /var/html/html/login_sid.xml ];then
#[ -f /tmp/sid ] && cgisid="$(cat /tmp/sid)"
eval "$($CURL -s "http://$IP/cgi-bin/webcm" -d "getpage=../html/login_sid.xml" -d "sid=$cgisid" | sed -n 's,.*<\(Challenge\|iswriteaccess\|SID\)>\([^<]*\).*,\1=\2;,p')"
if [ "$iswriteaccess" = 0 ] && [ "$SID" = "0000000000000000" -o -z "$SID" ]; then
chksum="$(echo -n "$Challenge-$PASSWD" | sed -e 's,.,&\n,g' | tr '\n' '\0' | md5sum)"
eval "$($CURL -s "http://$IP/cgi-bin/webcm" -d "getpage=../html/login_sid.xml" -d "login:command/response=$Challenge-${chksum%% *}" | sed -n 's,.*<SID>\(.*\)</SID>.*,SID=\1,p')"
cgisid="$SID"
#echo -n "$cgisid" >/tmp/sid
fi
fi
}
rul_find(){
# Bestimmung der Zuordnung von MSN zu Festnetznummer und VOIP-Nummmer
# Bei Festnetznummern wird ein nummerischer Wert [0-9] zurückgeliefert
# Bei VOIP-Nummern wird ein Wert SIP[0-9] zurückgeliefert
#
# Mit Hilfe dieser Wert erfolgt die Bestimmung der Rufumleitungen zu der angegebenen MSN
rulall=$($CURL \
-s "http://$IP/cgi-bin/webcm" \
-d "login:command/password=$PASSWD" \
-d "sid=$cgisid" \
-d "getpage=../html/de/menus/menu2.html" \
-d "errorpage=../html/de/menus/menu2.html" \
-d "var:pagename=rulall" \
-d "var:menu=fon" )
#echo -n "$rulall" >/var/tmp/rulall
getmsn=$(echo "$rulall" | grep 'var g_msn' | grep $msn | sed -n 's,.*g_msn\([0-9]\).*,\1,p')
#echo 'getmsn: '$getmsn
getsip=$(echo "$rulall" | grep 'telcfg:settings/SIP' | grep $msn | sed -n 's,.*telcfg:settings/\(SIP[0-9]\).*,\1,p')
#echo 'getsip: '$getsip
fnmsn=$(echo "$rulall" | grep "document.write(TrRul(\"Diversity[0-9]" | grep "\"$getmsn\", \"\", \"$dst\", \"0\"" | sed -n 's,.*\(Diversity[0-9].*\)\" -->,\1,p')
#echo 'fnmsn: '$fnmsn
voipsip=$(echo "$rulall" | grep "document.write(TrRul(\"Diversity[0-9]" | grep "\"$getsip\", \"\", \"$dst\", \"0\"" | sed -n 's,.*\(Diversity[0-9].*\)\" -->,\1,p')
#echo 'voipsip: '$voipsip
}
rul_status(){
if [ "$typ" = 0 ] || [ "$typ" = 2 ]; then
if [ -n "$fnmsn" ]; then
fnstatus=$($CURL \
-s "http://$IP/cgi-bin/webcm" \
-d "login:command/password=$PASSWD" \
-d "sid=$cgisid" \
-d "getpage=../html/de/menus/menu2.html" \
-d "errorpage=../html/de/menus/menu2.html" \
-d "var:pagename=rulall" \
-d "var:menu=fon" |\
grep "telcfg:settings/$fnmsn/Active" | sed -n 's,.*value="\([^\"]*\).*,\1,p')
if [ "$fnstatus" = 0 ]; then
echo "rul for msn $msn and dst $dst is disabled."
else
echo "rul for msn $msn and dst $dst is enabled."
fi
fi
fi
if [ "$typ" = 1 ] || [ "$typ" = 2 ]; then
if [ -n "$voipsip" ]; then
voipstatus=$($CURL \
-s "http://$IP/cgi-bin/webcm" \
-d "login:command/password=$PASSWD" \
-d "sid=$cgisid" \
-d "getpage=../html/de/menus/menu2.html" \
-d "errorpage=../html/de/menus/menu2.html" \
-d "var:pagename=rulall" \
-d "var:menu=fon" |\
grep "telcfg:settings/$voipsip/Active" | sed -n 's,.*value="\([^\"]*\).*,\1,p')
if [ "$voipstatus" = 0 ]; then
echo "rul for sip $msn and dst $dst is disabled."
else
echo "rul for sip $msn and dst $dst is enabled."
fi
fi
fi
}
rul_change(){
if [ "$typ" = 0 ] || [ "$typ" = 2 ]; then
if [ -n "$fnmsn" ]; then
$CURL \
-s "http://$IP/cgi-bin/webcm" \
-d "login:command/password=$PASSWD" \
-d "sid=$cgisid" \
-d "getpage=../html/de/menus/menu2.html&errorpage=../html/de/menus/menu2.html&var:pagename=rulall&var:errorpagename=rulall&var:menu=fon" \
-d "telcfg:settings/$fnmsn/Active=$setvalue" \
1>/dev/null
fi
fi
if [ "$typ" = 1 ] || [ "$typ" = 2 ]; then
if [ -n "$voipsip" ]; then
$CURL \
-s "http://$IP/cgi-bin/webcm" \
-d "login:command/password=$PASSWD" \
-d "sid=$cgisid" \
-d "getpage=../html/de/menus/menu2.html&errorpage=../html/de/menus/menu2.html&var:pagename=rulall&var:errorpagename=rulall&var:menu=fon" \
-d "telcfg:settings/$voipsip/Active=$setvalue" \
1>/dev/null
fi
fi
}
login
if [ x"$setvalue" != x"2" ]; then
rul_find
rul_change $setvalue
rul_status
else
rul_find
rul_status
fi
Gruß
joesy