Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
[Gelöst] Script Verbesserung für WOC bei Fritz!Box WLAN 7050
#1
Hallo,

ich benutze eine pseudo-image von http://www.the-construct.com, um meine Fritzbox um ein paar nette features wie WOL, SSH, etc. zu erweitern. Ein schönes feature ist auch WOC.
Damit kann man dann den VDR per Telefon wecken und anschliessend per WAP mit dem Handy programmieren - geniale Sache.
Im Pseudo-Image ist bisher nur möglich 1 Telefonnummer zu hinterlegen, die dann eine Maschine weckt.
Für WOL habe ich die Erweiterung auf 2 Maschinen hinbekommen, aber für WOL nicht.
Ziel ist es mit meinem Handy (pcaller) 2 Nummern (pcalled) anrufen zu können, die dann entweder /var/tmp/startvdr oder /var/tmp/startpc aufrufen.
Vieleicht könnt ihr mir ja weiterhelfen.

Code:
#write calllog
cat > /var/calllog << 'ENDCALLLOG'
#!/bin/sh

CALLER=${1}
LINE=${3}
if [ -z "${LINE}" ]
then
  LINE=${2}
fi
if [ "${LINE}" = "ISDN" ]
then
  LINE=${2}
fi
if [ -z "${LINE}" ]
then
  LINE=${1}
  CALLER=""
fi

sh /var/tmp/parse_telefon.sh "${LINE}" "${CALLER}" &

ENDCALLLOG

\# save /var/calllog
mknod /var/flash/calllog c $tffs_major $((0x77))
cp /var/calllog /var/flash/calllog

# write dummy callmessage script
echo "#!/bin/sh" > /var/tmp/callmessage.sh
make it executable
chmod +x /var/tmp/callmessage.sh

# write WakeOnCall script
cat > /var/tmp/woc.sh << 'ENDWOC'
#!/bin/sh

pcaller=Handy
pcalled=ISDN1

# read params
caller=$2
called=$1

# check if woc is permitted for caller and called
if [ "${pcaller}" = "all" ]
then
  if [ "${pcalled}" = "all" ]
  then
    /var/tmp/startvdr
  elif [ "${pcalled}" = "${called}" ]
  then
    /var/tmp/startvdr
  fi
elif [ "${pcaller}" = "${caller}" ]
then
  if [ "${pcalled}" = "all" ]
  then
    /var/tmp/startvdr
  elif [ "${pcalled}" = "${called}" ]
  then
    /var/tmp/startvdr
  fi
fi

ENDWOC

# make it executable
chmod +x /var/tmp/woc.sh

# write parse_telefon script to file
cat > /var/tmp/parse_telefon.sh << 'ENDPARSETEL'
#!/bin/sh

trap "" SIGCHLD

prefix=
caller="$2"
called="$1"

# normalize caller
case ${caller} in
  0049*)
    caller=0${caller#*0049}
  ;;
  49????????*)
    caller=0${caller#*49}
  ;;
  [1-9]????????*)
    caller=0${caller}
  ;;
  [1-9]*)
    caller=${prefix}${caller}
  ;;
esac

# exec woc.sh
/var/tmp/woc.sh ${called} ${caller} &
# exec callmessage.sh
/var/tmp/callmessage.sh ${called} ${caller} &
Distri: easyVDR 0.4, VDR 1.4.4, Kernel 2.6.18.3
Hardware: 2 x Hauppauge DVB-C Nexus, 2xCAM + 2xCI,
MSI K8MM3-V (NVRAM), AMD 3200+ (Cool&Quiet), 1024 MB RAM, DVD-Brenner LG-4210B, Gehäuse SilverStone LaScala LC10
Root-HD: 30 GB 2,5'' IDE Samsung HM030GC
Video/Media-HD: 160 GB SATA Samsung SP1614C
Zitieren
#2
wenn ich das richtig verstehe, bekommt das skript die anrufende nummer
"caller" und die angerufene rufnummer "called" übertragen
versuchs doch mal mit einem case:

irgendwo nach
prefix=
caller="$2"
called="$1"
(ist anscheinend die nummernübergabe)

case $called in
  "MSN1")
    /var/tmp/startpc
  ;;
  "MSN2")
    /var/tmp/startvdr
  ;;
esac

MSN1 und MSN2 müssen nat. durch die jew. rufnummer ersetzt werden.
Distrie:                easyVDR 0.9.10 VDR-Version:1.7.0
Hardware:            Athlon64 x2 4050 be passiv gekühlt
                          ECS GF8200A
                          passives 400W NT
Root-HD:              80 GB 2,5" Sata-Laptop HDD
Video/Media-HDD:  400 GB Sata-Samsung
Convert und Filme: 1TB WD
DVB: 2.1er TT FF + Budget
Alles in allem: Power und das sogar äusserst sparsam und geräuscharm!
Zitieren
#3
Hei Uwe,

im script gibt es die zeilen
pcaller=Handy
pcalled=ISDN1
wo man die Handynr eingibt und die Zielrufnummer.
Ich bin kein Scriptexoerte (leider >Sad), aber ich denke, dass ich ja hier schon einen neuen Eintrag z.B. pcalled1 erstellen müsste - oder.
Diese Variablen werden dann doch irgendwie mit den Variablen caller und called vergliechen - so verstehe ich es zumindest.

Distri: easyVDR 0.4, VDR 1.4.4, Kernel 2.6.18.3
Hardware: 2 x Hauppauge DVB-C Nexus, 2xCAM + 2xCI,
MSI K8MM3-V (NVRAM), AMD 3200+ (Cool&Quiet), 1024 MB RAM, DVD-Brenner LG-4210B, Gehäuse SilverStone LaScala LC10
Root-HD: 30 GB 2,5'' IDE Samsung HM030GC
Video/Media-HD: 160 GB SATA Samsung SP1614C
Zitieren
#4
versuchen wir das skript mal zu zerlegen:

-- hier werden die variablen pcaller und gefüllt. da ich keine variblen sehe sind das einscheinend feste textwerte
pcaller=Handy
pcalled=ISDN1

--hier wird den zwei variablen den übergebenen wert zugewiesen
# read params
caller=$2
called=$1

--hier wird einfach nur die feste zuweisung mit der übergabe verglichen
# check if woc is permitted for caller and called
if [ "${pcaller}" = "all" ]
then
  if [ "${pcalled}" = "all" ]
  then
    /var/tmp/startvdr
  elif [ "${pcalled}" = "${called}" ]
  then
    /var/tmp/startvdr
  fi
elif [ "${pcaller}" = "${caller}" ]
then
  if [ "${pcalled}" = "all" ]
  then
    /var/tmp/startvdr
  elif [ "${pcalled}" = "${called}" ]
  then
    /var/tmp/startvdr
  fi
fi

das einfachste wäre mal festzustellen, was die fritzbox beim aufruf mitübergibt. dazu einfach mal ziemlich am ende
echo "pcalled: $pcalled" >> /test
echo "called: $called" >> /test
echo "pcaller: $pcaller" >> /test
echo "caller: $caller" >> /test

einfügen und ganz normal starten.
dann sieht man in der datei /test die übegebenen werte. damit kann man dann weiterschauen
Distrie:                easyVDR 0.9.10 VDR-Version:1.7.0
Hardware:            Athlon64 x2 4050 be passiv gekühlt
                          ECS GF8200A
                          passives 400W NT
Root-HD:              80 GB 2,5" Sata-Laptop HDD
Video/Media-HDD:  400 GB Sata-Samsung
Convert und Filme: 1TB WD
DVB: 2.1er TT FF + Budget
Alles in allem: Power und das sogar äusserst sparsam und geräuscharm!
Zitieren
#5
Hallo Uwe,

deine Erklärung zum script haben mir weitergeholfen - Danke Big Grin

Es geht wahrscheinlich eleganter, aber so klappts auf jeden Fall.

Code:
pcaller=HandyNr
pcalled=ISDN1
pcalled1=ISDN2

# read params
caller=$2
called=$1

# check if woc is permitted for caller and called
if [ "${pcaller}" = "all" ]
then
  if [ "${pcalled}" = "all" ]
  then
    /var/tmp/startvdr
  elif [ "${pcalled}" = "${called}" ]
  then
    /var/tmp/startvdr
  fi
elif [ "${pcaller}" = "${caller}" ]
then
  if [ "${pcalled}" = "all" ]
  then
    /var/tmp/startvdr
  elif [ "${pcalled}" = "${called}" ]
  then
    /var/tmp/startvdr
  fi
fi

# read params
caller=$2
called=$1

# check if woc is permitted for caller and called
if [ "${pcaller}" = "all" ]
then
  if [ "${pcalled1}" = "all" ]
  then
    /var/tmp/startpc
  elif [ "${pcalled1}" = "${called}" ]
  then
    /var/tmp/startpc
  fi
elif [ "${pcaller}" = "${caller}" ]
then
  if [ "${pcalled1}" = "all" ]
  then
    /var/tmp/startpc
  elif [ "${pcalled1}" = "${called}" ]
  then
    /var/tmp/startpc
  fi
fi

ENDWOC
Distri: easyVDR 0.4, VDR 1.4.4, Kernel 2.6.18.3
Hardware: 2 x Hauppauge DVB-C Nexus, 2xCAM + 2xCI,
MSI K8MM3-V (NVRAM), AMD 3200+ (Cool&Quiet), 1024 MB RAM, DVD-Brenner LG-4210B, Gehäuse SilverStone LaScala LC10
Root-HD: 30 GB 2,5'' IDE Samsung HM030GC
Video/Media-HD: 160 GB SATA Samsung SP1614C
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: