Lösung mit cron
Hier noch eine Alternativ-Lösung, die das An-/Abschalten (die Nachtschaltung) mit cron(d) erledigt.
Voraussetzung: ein für die jeweilige FB-FW vorhandenes busybox-Binary, das crond enthält.
Dieses muss als "busybox" auf dem eigenen Webspace abgelegt werden, da es über die debug.cfg beim Starten von dort geholt wird.
Eine passende busybox mit crond gibt es vielleicht
hier?
Der Einstellungsteil am Anfang muss natürlich angepasst werden.
Die Beispiel-Einstellungen bewirken folgendes:
- busybox liegt hier:
http://www.example.com/busybox (busybox=...)
- zu schaltender SIP-Account ist 2 (sip=...)
- Nachtschaltung startet Mo-Fr (tag=...) um 07:30 (vonstd/vonmin)
- Nachtschaltung endet Mo-Fr (tag=...) um 18:30 (bisstd/bismin)
- Nachtschaltungs-Skript legt keine Log-Datei an (log)
- Fritz Box ist nicht passwortgeschützt (pass)
Jeder Tag wäre tag="*", mo+mi wäre tag="1,3" (siehe
Handbuchseite crontab).
Hier die debug.cfg:
Code:
#!/bin/sh
###################################################################
vonstd=07
vonmin=30
bisstd=18
bismin=30
tag="1-5"
sip=2
log=0
pass=""
busybox="http://www.example.com/busybox"
###################################################################
von="$vonstd$vonmin"
bis="$bisstd$bismin"
mkdir /var/spool
mkdir /var/spool/cron
mkdir /var/spool/cron/crontabs
cat <<EOP > /var/spool/cron/crontabs/root
#* * * * * echo Aktion zur vollen Minute... >> /var/tmp/crontab.log
$vonmin $vonstd * * $tag /var/tmp/nachtschalt.sh START $sip
$bismin $bisstd * * $tag /var/tmp/nachtschalt.sh STOP $sip
EOP
max=10
i=0
while [ $i -lt $max ]; do
if ping -c 1 www.heise.de >/dev/null; then
break
fi
let i=$i+1
sleep 15
done
sleep 20
cd /var/tmp
cat <<EOP > /var/tmp/nachtschalt.sh
#!/bin/sh
##############################################################
log=$log # Logdatei fuehren (0=nein,1=ja)
pass=$pass # Passwort Fritzbox (""=keins)
EOP
cat <<\EOP >> /var/tmp/nachtschalt.sh
##############################################################
logit() {
if [ $log -eq 1 ]; then
echo "$1" >> /var/tmp/test.log
fi
}
TestIt () {
logit "TestIt: `date`"
case $(date +%a) in
Mon|Tue|Wed|Thu|Fri|Sat|Sun)
SipS=`ParseWebsite` # Daten einlesen
SipState $SipS # Ist irgend ein Sip-Acount verbunden?
if [ $verbunden -eq 1 ]
then
logit "TestIt: verbunden ... `date`"
(sleep 20; TestIt $1 $2) &
else
DoIt $1 $2
fi
;;
esac
}
flogin() {
if [ -n "$pass" ]; then
logit "flogin: `date`"
export REQUEST_METHOD="POST"
export REMOTE_ADDR="127.0.0.1"
export CONTENT_TYPE="application/x-www-form-urlencoded"
POST_DATA="login:command/password=$pass"
export CONTENT_LENGTH=${#POST_DATA}
echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null
sleep 3
fi
}
ParseWebsite() {
logit "ParseWebsite: `date`"
flogin
export REQUEST_METHOD="GET"
export REMOTE_ADDR="127.0.0.1"
export QUERY_STRING="getpage=../html/de/menus/menu2.html&var:lang=de&var:menu=home&var:pagename=home"
cd /usr/www/html/cgi-bin
./webcm | sed -n 's/^.*sip:status.sip[0-9].connect.*value="\([0-9]\).*/\1/p'
}
SipState() {
local i
logit "SipState: `date`"
verbunden=0
for i in $*
do
if [ $i -eq 3 ]
then
verbunden=1
fi
done
}
DoIt() {
logit "DoIt: $1 $2 `date`"
flogin
export REQUEST_METHOD="POST"
export REMOTE_ADDR="127.0.0.1"
export CONTENT_TYPE="application/x-www-form-urlencoded"
POST_DATA="sip:settings/sip$1/activated=$2"
export CONTENT_LENGTH=${#POST_DATA}
echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null
}
#################################################
# Hauptschleife. Einstieg automatisch ue�ber init()
NS_start() {
logit "NS_start: `date`"
TestIt $sip 0
}
NS_ende() {
logit "NS_ende: `date`"
TestIt $sip 1
}
#################################################
sip=$2
if [ "$1" = "START" ]; then
NS_start
else
NS_ende
fi
EOP
chmod a+x /var/tmp/nachtschalt.sh
wget $busybox
sleep 3
chmod a+x busybox
./busybox crond
/var/tmp/nachtschalt.sh STOP $sip
sleep 240
x=$(date +%a)
echo "x=$x" >> /var/tmp/start.log
# case $(date +%a) in
case $x in
Mon|Tue|Wed|Thu|Fri)
now=$(date +%H%M)
echo "now=$now" >> /var/tmp/start.log
if [ $von -gt $bis ]; then
if [ $now -ge $bis ] && [ $now -lt $von ]; then
echo "NS aus..." >> /var/tmp/start.log
# /var/tmp/nachtschalt.sh STOP $sip
else
echo "NS an...." >> /var/tmp/start.log
/var/tmp/nachtschalt.sh START $sip
fi
else
if [ $now -ge $von ] && [ $now -lt $bis ]; then
echo "NS an...." >> /var/tmp/start.log
/var/tmp/nachtschalt.sh START $sip
else
echo "NS aus..." >> /var/tmp/start.log
# /var/tmp/nachtschalt.sh STOP $sip
fi
fi
;;
esac
EDIT 26.03.07:
Es wird jetzt der eingestellte SIP-Account nach Neustart generell erstmal aktiviert
(falls er z.B. am WE manuell deaktiviert wurde und dann Stromausfall war ;-) [deakt. SIP wird normalerweise nicht automatisch aktiviert!])
Mo-Fr (an den eingestellten Tagen) wird jetzt 4 (statt 2) Min gewartet, bevor das akt. Datum ermittelt wird zur Sicherheit).