#!/bin/sh
# ************************************************
# * Fritz!Dect 200 Steckdosen ein/ausschalten    *
# *                                              *
# * zusammengestellt und angepasst von           *
# * fred_feuerstein (NI-Team), LoginTeil zur     *
# * Ermittlung der FritzBox SID nach Vorlage von *
# * "http://www.wehavemorefun.de/fritzbox/Anruf- *
# * liste_von_der_Box_holen" und aus KeyWelt     *
# *                                              *
# * Das Plugin/Skript schaltet eine Fritz!Dect200*
# * Steckdose von AVM, die mit der FritzBox ge-  *
# * koppelt ist im toggle-Mode ein/aus.          *
# *                                              *
# * Vorbereitung:                                *
# * die Login-Daten fuer die FritzBox werden aus *
# * der FritzCallMonitor.cfg geholt. Bitte die   *
# * Datei vorher ggfs. anpassen. Ausserdem auch  *
# * die Nummer der FritzDect Steckdose.          *
# ************************************************

#set -x

# Toggle-Modus (manuell / auto), wer Probleme mit dem Toggle-Modus "auto" hat,
# bitte hier auf "manuell" stellen.

toggle="auto"


# ab hier keine Eintragung mehr nötig
#################################################

# Die Config-Daten werden aus der FritzCallMonitor.cfg geholt
CONFIG=$(cat /var/tuxbox/config/FritzCallMonitor.cfg)

#Daten aus Config
FRITZIP=`echo "$CONFIG" | grep FRITZBOXIP | cut -d "=" -f2 | tr -d ' '`
Passwd=`echo "$CONFIG" | grep PASSWD | cut -d "=" -f2 | tr -d ' '`
DECT200=`echo "$CONFIG" | grep FRITZDECT3 | cut -d "=" -f2 | tr -d ' '`

Username=""

teil1=`echo $DECT200 | cut -c 1-5`
teil2=`echo $DECT200 | cut -c 6-20`

if [ "$teil1" != "08761" ]; then
   getrennt=$DECT200
   else
   getrennt=`echo $teil1 $teil2`
fi

# OS-Version ermitteln
Version=`wget -O- http://$FRITZIP/jason_boxinfo.xml | grep Version | awk '{match($0,/>[^<>]+</); print substr($0,RSTART+RLENGTH-6,5)}'`
echo $Version

if [ "$Version" \< "05.50" ]
then
	# Challenge abholen
	ChallengeXML=`wget -O - "http://$FRITZIP/cgi-bin/webcm?getpage=../html/login_sid.xml" 2>/dev/null| grep Challenge`
	Challenge=`echo $ChallengeXML | awk '{match($0,/>[^<>]+</); print substr($0,RSTART+1,RLENGTH-2)}'`

	# login aufbauen und hashen
	CPSTR="$Challenge-$Passwd"
	echo -n $CPSTR | /bin/iconv -f ISO8859-1 -t UTF-16LE > /tmp/anrufer.md5
	MD5=`md5sum /tmp/anrufer.md5 | sed -e s/' '.*$//`
	RESPONSE="$Challenge-$MD5"
	POSTDATA="login:command/response=$RESPONSE&getpage=../html/de/menus/menu2.html"

	# login senden und SID herausfischen
	SID=`wget -O - --post-data="$POSTDATA" "http://$FRITZIP/cgi-bin/webcm" 2>/dev/null| grep "name=\"sid\"" | head -1 | awk '{match($0,/value="[^"]+"/); print substr($0,RSTART+7,RLENGTH-8)}'`

	# refresh der daten auslösen
	wget -O /dev/null "http://$FRITZIP//cgi-bin/webcm?sid=$SID&getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Apagename=foncalls&var%3Aerrorpagename=foncalls&var%3Amenu=home&var%3Apagemaster=&var%3Aactivtype=pppoe&var%3AtabInetstat=0&var%3Aweckernr=&logger%3Asettings%2Ffilter=2"

	# CSV runterladen
	wget -O /tmp/fb_anrufliste.csv "http://$FRITZIP/cgi-bin/webcm?sid=$SID&getpage=..%2Fhtml%2Fde%2FFRITZ%21Box_Anrufliste.csv" 2>/dev/null
else
	wget -O /tmp/anrufer.tmp http://$FRITZIP/login_sid.lua
	# SID testen
	SID=`cat /tmp/anrufer.tmp | awk '{match($0,/SID>[^<>]+</); print substr($0,RSTART+4,RLENGTH-5)}'`
	if [ "$SID" = "0000000000000000" ]
	then
		# Challenge abholen
		Challenge=`cat /tmp/anrufer.tmp | awk '{match($0,/Challenge>[^<>]+</); print substr($0,RSTART+10,RLENGTH-11)}'`
		# login aufbauen und hashen
		CPSTR="$Challenge-$Passwd"
  	echo -n $CPSTR | /bin/iconv -f ISO8859-1 -t UTF-16LE > /tmp/anrufer.md5
		#echo -n $CPSTR > /tmp/anrufer.md5
		MD5=`md5sum /tmp/anrufer.md5 | sed -e s/' '.*$//`
		RESPONSE="$Challenge-$MD5"
		GETDATA="?username=$Username&response=$RESPONSE"
		wget -O /tmp/anrufer.sid http://$FRITZIP/login_sid.lua$GETDATA 
		SID=$(sed -n '/.*<SID>\([^<]*\)<.*/s//\1/p' /tmp/anrufer.sid)
	fi
fi

echo "IP:     " $FRITZIP
echo "PW:     " $Passwd
echo "ID:     " $DECT200
echo "AIN:    " $teil1 $teil2
echo "SID:    " $SID
echo "Toggle: " $toggle

        # FritzDect Einschalten
        wget -O /tmp/anruf.tmp "http://$FRITZIP/webservices/homeautoswitch.lua?ain=$getrennt&switchcmd=setswitchon&sid=$SID" | echo "es wurde eingeschaltet"

rm /tmp/*anruf*

exit 1
