Tach,
jo bei mir jetzt schon. Hatte hier irgendwo einen guten Vorschlag gefunden (leider weiß ich den Link nicht mehr, möge mir der Autor verzeihen) und diesen dann an meine Anforderungen angepasst (wg. der LS-Pro Duo). Bin kein Profi.
Benötigt oder modifiziert werden muß... (bftpd habe ich auskommentiert, brauche ich z.Z. nicht).
- debug.cfg
- woc.sh
- wol.sh
- woc_off.sh
- wol
- busybox
Die habe ich ein geschütztes Verzeichnis (.htaccess) auf meiner Internetseite geschoben.
debug.cfg:
Code:
DOWNLOADPAGE='http://Benutzer:[email protected]/files/'
TEMP=/var/tmp
while !(ping -c 1 www.google.de); do sleep 5; done
cd $TEMP
wget $DOWNLOADPAGE/busybox
chmod 777 busybox
./busybox
wget $DOWNLOADPAGE/wol
chmod 777 wol
wget $DOWNLOADPAGE/wol.sh
chmod 777 wol.sh
wget $DOWNLOADPAGE/woc.sh
cat /var/tmp/woc.sh > /var/flash/calllog
wget $DOWNLOADPAGE/woc_off.sh
chmod 777 woc_off.sh
#Verzeichnis für Crontab erstellen und root schreiben und cron starten
#alle 2 min ein WOL an die LS senden wenn gefordert
#nach 30 min LS ausschalten wenn zuvor WOC eingegangen
mkdir /var/spool
mkdir /var/spool/cron
mkdir /var/spool/cron/crontabs
echo '*/2 * * * * /var/tmp/wol.sh' > /var/spool/cron/crontabs/root
echo '*/30 * * * * /var/tmp/woc_off.sh' >> /var/spool/cron/crontabs/root
/var/tmp/busybox crond
echo 'Cron gestartet'
#bftp laden und starten
#wget $DOWNLOADPAGE/bftpd
#chmod +x bftpd
#wget $DOWNLOADPAGE/bftpd.conf
#chmod 777 bftpd.conf
# bdftp Passwort festlegen und bftpd starten
#echo Benutzer:CodedPassword:0:0:root:/:null >> /var/tmp/passwd
#bftpd starten
#/var/tmp/bftpd -d -c /var/tmp/bftpd.conf
#echo 'bftpd gestartet'
In wol.sh wird geprüft ob eine bestimmte IP (in diesem Fall meine Sonos Zonebridge) erreichbar ist oder ob die Datei 'woc_state_1' vorhanden ist. Falls ja wird ein WOL an meine LS gesendet. Wol.sh wird alle 2 min (vgl. debug.cfg bzw. crontab) durchlaufen.
wol.sh:
Code:
#!/bin/sh
#WOCDATEI
file="/var/tmp/woc_state_1"
#LINKSTATION
MACADR=00:00:00:00:00:00
IPADR=192.168.2.99
#SONOS
CHKIP1=192.168.2.98
#WOL Senden
dowol () {
./var/tmp/wol $MACADR -i $IPADR -p 9
}
WOLDONE=0
if [ $WOLDONE -eq 0 ]; then
ping -c 1 $CHKIP1
if [ $? -eq 0 -o -f "$file" ]; then
WOC_STATE="1"
echo "Sonos is alive..."
dowol
WOLDONE=1
fi
fi
Die woc.sh wird bereits in der debug.cfg in die Datei calllog geschrieben. Calllog wird aufgerufen, sobald ein Anruf eingeht. Ich wähle z.B. mit nem Handy meine Internetrufnummer an. Schaltet dann die LS sofort ein und legt eine Datei 'woc_state_1' an, dessen Vorhandenheit in wol.sh abgefragt wird. Man könnte sich das sofortige einschalten auch sparen, würde ohnehin von wol.sh erledigt aber warum max. 2min warten (crontab)?
woc.sh (calllog):
Code:
#!/bin/sh
# MAC Adresse fuer das Wecken eines PC
MACADR="00:00:00:00:00:00"
# NIC für das senden des WoL-Packages
# LAN1 = eth0 usw.
IPADR="192.168.2.99"
# Kommando zum wecken des PC's
startpc="/var/tmp/wol $MACADR -i $IPADR -p 9"
# Wenn ein Anruf auf diesem SIP Port erfolgt, dann soll er meinen Rechner starten
# SIP Port Nummer gibts hier: FBF Web-Interface öffnen / Telefonie / Internettelefonie
# Achtung: SIP-Nummer ist eins kleiner als der Wert unter "Auswahl", zumindest bei mir.
# Beispiel: Wenn *123# der Internetrufnummer 12345 zugeordnet ist
# Wenn Wake-On-Call deaktivert werden soll, dann irgendwas eintragen
wolsip="SIP0#012341234567"
# Wer darf den PC per WOL über Tel aufwecken?
# jeder Jeder der die Nummer $wolsip anruft, darf den Rechner aufwecken
# TelNummer Wenn es nur eine bestimmte Tel-Nummer darf
woltel="01231234567"
# $wolsip und $woltel lassen sich im $logfile kontrollieren
# Denn manchmal wird die Nummer nicht so übermittelt 0123... sondern so +49123...
# Bitte kontrollieren und entsprechend hier eintragen
localdir="/var/tmp"
logfile="/var/tmp/woc.log"
# Pruefen ob die angerufende Nr die WOL-SIP ist
if [ "$3" = "$wolsip" ]; then
# Prüfen ob jeder den Rechner wecken darf. Wenn "jeder" dann wecken
if [ "$woltel" = "jeder" ]; then
$startpc
statuscode="OK:EVERYONE_ALLOWED"
else
# Dann darf es wohl nur eine bestimmte Nummer
# Prüfen ob es die bestimmte Nummer ist
if [ "$1" = "$woltel" ]; then
$startpc
statuscode="OK:ALLOWED_USER"
touch /var/tmp/woc_state_1
else
statuscode="FAIL:INTRUDER"
fi
fi
else
statuscode="INFO:NO_WOC"
fi
# Im Produktiv-Einsatz auskommentieren:
# echo "$1 ($woltel),$2,$3 ($wolsip),$4,$5,$statuscode" >>$logfile
Nun schalte ich ja nach einer Zeit (30min) die LS wieder aus. Kann ja jeder halten wie er will..., dazu wird alle 30min die Datei woc_off.sh durchlaufen und eine evtl. vorhandene Datei 'woc_state_1' (wenn WOC eingegangen) gelöscht.
woc_off.sh:
Code:
#!/bin/sh
#WOCDATEI
file="/var/tmp/woc_state_1"
if [ -f "$file" ]; then rm $file; fi
Zusammenfassung:
Zwei Cronjobs laufen, alle 2 min wird wol.sh aufgerufen und alle 30 min woc_off.sh. Ist eine bestimmte IP erreichbar, wird in spätestens 2 min die LS per WOL geweckt. LS bleibt dann solange wach bis IP offline.
ODER/UND
Geht ein bestimmter Anruf ein, wird calllog aufgerufen und LS geweckt. Gleichzeitig wird leere Datei woc_state_1 angelegt. Nach spätestens 2min wird LS wach. Nach 30min wird woc_state_1 gelöscht und kurz danach geht LS aus.
Gruß
Tom