#!/bin/sh
# calllog vom 20.2.2008
# cd /var/media/ftp/USBMassStorageDevice-Partition-0-1/calllog/; cat calllog > /var/flash/calllog
CalllogLog="/var/media/ftp/USBMassStorageDevice-Partition-0-1/calllog/calllog.log"
ContactDB1="/var/media/ftp/USBMassStorageDevice-Partition-0-1/calllog/contacte.txt"
ContactDB2="/var/media/ftp/USBMassStorageDevice-Partition-0-1/calllog/contact2.txt"
MailText="/var/media/ftp/USBMassStorageDevice-Partition-0-1/calllog/calllog_mail.txt"
CalllogFlag="/var/media/ftp/USBMassStorageDevice-Partition-0-1/calllog/calllog.flg"
MailFrom="Name <[email protected]>"
MailTo="Name <[email protected]>"
SMTP="mail.gmx.net" # Server
User="123456" # Mailuser
PW="passwort" # Passwort für User
AWS_MSN1="111"
AWS_MSN2="222"
MSN_Msg_On="333"
MSN_PC_On="444"
MSN_AWS_On="555"
MSN_Callthrough="666"
MSN_CallBack1="777" # ruft CID zurück
MSN_CallBack2="888" # ruft Buero_Nr zurück
MSN_Mail_AWS_Off="999"
AWS_ZIEL="089111"
Buero_Nr="089222"
Admin1="0171222" # Meine Telnr1, die ein- und ausschalten darf.
Admin2="089222" # Meine Telnr2, die ein- und ausschalten darf.
Admin3="070222" # Meine Telnr3, die ein- und ausschalten darf.
Admin4="069222" # Meine Telnr4, die ein- und ausschalten darf.
prefix="089" # meine Ortsvorwahl
dbox1="10.10.10.11" # IP von dbox 1
dbox2="10.10.10.12" # IP von dbox 2
wolinterface="eth0" # Fritzboxinterface an dem der PC hängt
wolmac="00:33:44:55:66:77" # MAC des PC
# Logfilehandling
if [ `grep -c "" $CalllogLog` -gt 10000 ];then # mehr als 10000 Zeilen, dann die ersten 20 ZEILEN löschen.
tail +20 $CalllogLog > ${CalllogLog}_; cp ${CalllogLog}_ $CalllogLog; rm ${CalllogLog}_
fi
# Start
echo "" >> $CalllogLog; echo "I:"`date` >> $CalllogLog
echo 14,3 > /var/led; echo "I:Internet LED flash." >> $CalllogLog
CID=$1
Line=$2 # $3=ISDN, SIP..., $5=Name aus Fritzboxtelefonbuch
if [ -z "$CID" ];then # wenn keine Nummer übertragen
echo "I:keine CID übertragen" >> $CalllogLog
CID="anonym";
name="Anonym"
else # wenn Nummer übertragen #
case ${CID} in # normalize CID
0049*) CID=0${CID#*0049} ;;
49????????*) CID=0${CID#*49} ;;
[1-9]????????*) CID=0${CID} ;;
[1-9]*) CID=${prefix}${CID} ;;
esac
CCID=`echo "${CID}" | sed -e 's/^0049//; s/^49\([0-9]\{8,\}\)/\1/; s/^0//'`
echo "I:CID/CCID: $CID/$CCID erkannt." >> $CalllogLog
# search LineName in line list
LineName=`cat $ContactDB1 2>/dev/null | fgrep "#line=${Line}:" | sed "s/#line=${Line}://"`
LineName=${LineName%%\;*} # Semikolon entfernen
if [ -z "${LineName}" ];then # LineName not found?
Name="N.N." # Nomen Nescio
echo "W:Zeile: #Line=$Line:MSNx nicht in $ContactDB1 gefunden. Zeile manuell nachtragen." >> $CalllogLog
fi
httpLineName=`echo "${LineName}" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
# search name in LocalTelbook
entry=`cat $ContactDB1 2>/dev/null | fgrep "#contact=${CID}:" | sed "s/#contact=${CID}://"`
name=${entry%%\;*}
address=${entry#*\;}
address=${address%\;*}
streetL=${address%%\;*}
cityL=${address##*\;}
if [ -z "${name}" ];then # name not found LocalTelbook? Inverssuche
echo "I:CID: $CID nicht in $ContactDB1 gefunden. Inverssuche:" >> $CalllogLog
# Inverssuche bei dasoertliche.de
url="http://www2.dasoertliche.de/?form_name=search_inv&page=RUECKSUCHE&context=RUECKSUCHE&action=STANDARDSUCHE&la=de&rci=no&ph=0$CCID";
nameDO=$(wget -q -O - "$url" | grep class=\"entry\" | sed -e 's/<[^<]*>/\ /g; s/^[^a-zA-Z0-9]*//g; s/ /, /g')
addrDO=$(wget -q -O - "$url" | grep -A 6 class=\"entry\" | sed -e '1,6d; 7s/ / /g; s/<[^<]*>/\ /g; 7s/^ *//g')
nameDO=`echo $nameDO | tr -d "\f\n\r\t\v\a\b" | sed 's/[^ -ü]//g' | sed "s/^\ *//g" | sed "s/\ *$//g"` # entfernt alles, was nicht zwischen $20 - $FC ist, TRIM
addrDO=`echo $addrDO | tr -d "\f\n\r\t\v\a\b" | sed 's/[^ -ü]//g' | sed "s/^\ *//g" | sed "s/\ *$//g"` # entfernt alles, was nicht zwischen $20 - $FC ist, TRIM
# Inverssuche bei dastelefonbuch.de
url="http://dastelefonbuch.de/?sp=55&aktion=23&ort=&cifav=0&s=a10000&stype=S&la=de&cmd=search&ort_ok=0&vert_ok=0&x=31&y=9&kw=$CID"
nameDT=$(wget -q -O - "$url" | grep class=\"celname\" | sed -e 's/<[^<]*>/\ /g;s/^[a-zA-Z0-9]*//;s/ / /g')
streetDT=$(wget -q -O - "$url" | grep class=\"celstreet\" | sed -e 's/<[^<]*>/\ /g;s/^[a-zA-Z0-9]*//;s/ / /g' -e 's/ / /g')
cityDT=$(wget -q -O - "$url" | grep class=\"celcity\" | sed -e 's/<[^<]*>/\ /g;s/^[a-zA-Z0-9]*//;s/ / /g' -e 's/ / /g')
nameDT=`echo $nameDT | tr -d "\f\n\r\t\v\a\b" | sed 's/[^ -ü]//g' | sed "s/^\ *//g" | sed "s/\ *$//g"` # entfernt alles, was nicht zwischen $20 - $FC ist, TRIM
streetDT=`echo $streetDT | tr -d "\f\n\r\t\v\a\b" | sed 's/[^ -ü]//g' | sed "s/^\ *//g" | sed "s/\ *$//g"` # entfernt alles, was nicht zwischen $20 - $FC ist, TRIM
cityDT=`echo $cityDT | tr -d "\f\n\r\t\v\a\b" | sed 's/[^ -ü]//g' | sed "s/^\ *//g" | sed "s/\ *$//g"` # entfernt alles, was nicht zwischen $20 - $FC ist, TRIM
# dastelefonbuch hier bevorzugt
# nimmt nameDO nur wenn nameDT leer, sonst Unbekannt; NoAddress
if [ -n "$nameDO" ];then # wenn nameDT gefüllt
name=$nameDO
address="$addrDO;"
echo "I:Inverssuche DO: erfolgreich: $name $address" >> $CalllogLog
fi # wenn nameDO gefüllt
if [ -n "$nameDT" ];then # wenn nameDT gefüllt
name=$nameDT
address="$streetDT; $cityDT"
echo "I:Inverssuche DT: erfolgreich: $name $address" >> $CalllogLog
fi # wenn nameDT gefüllt
# LocalTelbook ergänzen
if [ -n "${name}" ];then # Wenn inverssuche erfolgreich
cat $ContactDB1 | sed -e "s/^#CONTACTSEND$/#contact=${CID}:${name};${address};#CONTACTSEND/g" | sed -e 's/#CONTACTSEND$/\n#CONTACTSEND/g' > $ContactDB2
echo "I:Inverssuche DT: erfolgreich: $name $address $ContactDB1 ergänzt." >> $CalllogLog
else # wenn inverssuche erfolglos
if [ -n "$5" ];then # CID im Fritzbox-Telefonbuch gefunden?
name=$5
address="NoAddress"
echo "I:Name im FBF-Tel.buch gefunden: $name" >> $CalllogLog
else # CID leider auch nicht im Fritzbox-Telefonbuch gefunden
name="Unbekannt"
address="NoAddress"
fi # CID im Fritzbox-Telefonbuch gefunden
# Eintrag mit Nummer in contact.txt vorbereiten
cat $ContactDB1 | sed -e "s/^#CONTACTSEND$/#contact=${CID}:${name};;;#CONTACTSEND/g" | sed -e 's/#CONTACTSEND$/\n#CONTACTSEND/g' > $ContactDB2
echo "W:Inverssuche: erfolglos. $ContactDB1 mit $CID $5 erweitert. Manuell ergaenzen!" >> $CalllogLog
/sbin/mailer -s "FRITZ!Admin: contacte.txt um $CID $5 erweitert. Manuell ergaenzen!" -f "$MailFrom" -t "$MailTo" -m "$SMTP" -a "$User" -w "$PW" -i "$ContactDB2"
fi # Wenn inverssuche erfolgreich
cp $ContactDB2 $ContactDB1
fi # name not found LocalTelbook?
fi # wenn Nummer übertragen
echo "I:LineName: $LineName" >> $CalllogLog
echo "I:name: $name" >> $CalllogLog
echo "I:address: $address" >> $CalllogLog
httpname=`echo "${CID} (${name})" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
httpLine=`echo "${Line} (${LineName})" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
httpAddress=`echo "${address}" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
httpZeit=`date +"%20%d.%m.%Y%20%H%3A%M%3A%S%20Uhr"`
case "$Line" in # auf AdminAnrufe prüfen
"$MSN_CallBack1")
# if [ "$CID" = "$Admin1" ] || [ "$CID" = "$Admin2" ];then # CallBack mit hoher Sicherheit
if [ "$CID" != "anonym" ];then # CallBack mit niederiger Sicherheit
rc1=`echo "ATP3" | nc 127.0.0.1 1011 | tr -d "\n\r"`
# sleep 5
rc2=`echo "ATD$CID" | nc 127.0.0.1 1011 | tr -d "\n\r"`
# sleep 40
# echo "ATH" | nc 127.0.0.1 1011 >> $CalllogLog # Auflegen nach 40 Sekunden
MailBetreff="FRITZ!Admin:"
MailDetails="CallBack1: ATP3: ($rc1) ATD$CID: ($rc2):"
httpAdminAnruf=`echo "${MailBetreff} ${MailDetails}" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
else
MailBetreff="FRITZ!Achtung:"
MailDetails="CallBack1: ATP3: ($rc1) ATD$CID: ($rc2):"
httpAdminAnruf=`echo "${MailBetreff} ${MailDetails}" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
fi
;;
"$MSN_CallBack2")
# if [ "$CID" = "$Admin1" ] || [ "$CID" = "$Admin2" ];then # CallBack mit hoher Sicherheit
if [ "$CID" != "anonym" ];then # CallBack mit niederiger Sicherheit
rc1=`echo "ATP3" | nc 127.0.0.1 1011 | tr -d "\n\r"`
# sleep 5
rc2=`echo "ATD$Buero_Nr" | nc 127.0.0.1 1011 | tr -d "\n\r"`
# sleep 40
# echo "ATH" | nc 127.0.0.1 1011 >> $CalllogLog # Auflegen nach 40 Sekunden
MailBetreff="FRITZ!Admin:"
MailDetails="CallBack2: ATP3: ($rc1) ATD$Buero_Nr: ($rc2):"
httpAdminAnruf=`echo "${MailBetreff} ${MailDetails}" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
else
MailBetreff="FRITZ!Achtung:"
MailDetails="CallBack2: ATP3: ($rc1) ATD$CID: ($rc2):"
httpAdminAnruf=`echo "${MailBetreff} ${MailDetails}" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
fi
;;
"$MSN_Callthrough")
# if [ "$CID" = "$Admin1" ] || [ "$CID" = "$Admin2" ] || [ "$CID" = "$Admin3" ] || [ "$CID" = "$Admin4" ];then # CallBack mit hoher Sicherheit
if [ "$CID" != "anonym" ];then # CallBack mit niederiger Sicherheit
MailBetreff="FRITZ!Admin:"
MailDetails="Callthrough:"
httpAdminAnruf=`echo "${MailBetreff} ${MailDetails}" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
else
MailBetreff="FRITZ!Achtung:"
MailDetails="Callthrough:"
httpAdminAnruf=`echo "${MailBetreff} ${MailDetails}" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
fi
;;
"$MSN_PC_On")
if [ "$CID" = "$Admin1" ] || [ "$CID" = "$Admin2" ] || [ "$CID" = "$Admin3" ] || [ "$CID" = "$Admin4" ];then # WOC, Mail senden
/bin/busybox ether-wake -i ${wolinterface} ${wolmac}
MailBetreff="FRITZ!Admin:"
MailDetails="WOC:"
httpAdminAnruf=`echo "${MailBetreff} ${MailDetails}" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
else
MailBetreff="FRITZ!Achtung:"
MailDetails="WOC:"
httpAdminAnruf=`echo "${MailBetreff} ${MailDetails}" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
fi
;;
"$MSN_Msg_On")
if [ "$CID" = "$Admin1" ] || [ "$CID" = "$Admin2" ] || [ "$CID" = "$Admin3" ] || [ "$CID" = "$Admin4" ];then # MailCallinfo Einschalten: Flag löschen, Mail senden
rm $CalllogFlag 2>/dev/null
MailBetreff="FRITZ!Admin:"
MailDetails="Callinfo AN:"
httpAdminAnruf=`echo "${MailBetreff} ${MailDetails}" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
else
MailBetreff="FRITZ!Achtung:"
MailDetails="Callinfo AN:"
httpAdminAnruf=`echo "${MailBetreff} ${MailDetails}" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
fi
;;
"$MSN_AWS_On")
if [ "$CID" = "$Admin1" ] || [ "$CID" = "$Admin2" ] || [ "$CID" = "$Admin3" ] || [ "$CID" = "$Admin4" ];then # MailCallinfo Ausschalten: Flag setzen, Mail senden
rc1=`echo "ATD*21*${AWS_ZIEL}*${AWS_MSN1}#" | nc 127.0.0.1 1011 | tr -d "\n\r"`
rc2=`echo "ATD*21*${AWS_ZIEL}*${AWS_MSN2}#" | nc 127.0.0.1 1011 | tr -d "\n\r"`
echo "I:AWS ON: ATD*21*${AWS_ZIEL}*${AWS_MSN1}#: ($rc1)" >> $CalllogLog
echo "I:AWS ON: ATD*21*${AWS_ZIEL}*${AWS_MSN2}#: ($rc2)" >> $CalllogLog
MailBetreff="FRITZ!Admin:"
MailDetails="AWS AN (rc1=$rc1 rc2=$rc2)"
httpAdminAnruf=`echo "${MailBetreff} ${MailDetails}" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
else
MailBetreff="FRITZ!Achtung:"
MailDetails="AWS AN (rc1=$rc1 rc2=$rc2)"
httpAdminAnruf=`echo "${MailBetreff} ${MailDetails}" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
fi
;;
"$MSN_Mail_AWS_Off")
if [ "$CID" = "$Admin1" ] || [ "$CID" = "$Admin2" ] || [ "$CID" = "$Admin3" ] || [ "$CID" = "$Admin4" ];then # MailCallinfo Ausschalten: Flag setzen, Mail senden
echo "I:Admin-Anruf: Message+AWS OFF..." >> $CalllogLog
touch $CalllogFlag # Flag setzen
rc1=`echo "ATD*21**${AWS_MSN1}#" | nc 127.0.0.1 1011 | tr -d "\n\r"`
rc2=`echo "ATD*21**${AWS_MSN2}#" | nc 127.0.0.1 1011 | tr -d "\n\r"`
echo "I:AWS OFF: ATD*21**${AWS_MSN1}#: ($rc1)" >> $CalllogLog
echo "I:AWS OFF: ATD*21**${AWS_MSN2}#: ($rc2)" >> $CalllogLog
MailBetreff="FRITZ!Admin:"
MailDetails="Callinfo+AWS AUS (rc1=$rc1 rc2=$rc2)"
httpAdminAnruf=`echo "${MailBetreff} ${MailDetails}" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
else
MailBetreff="FRITZ!Achtung:"
MailDetails="Callinfo+AWS AUS (rc1=$rc1 rc2=$rc2)"
httpAdminAnruf=`echo "${MailBetreff} ${MailDetails}" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
fi
;;
*) # Anrufe auf anderen Lines (keine Admin Line (MSN))
MailBetreff="FRITZ!Anruf:"
MailDetails="Normal:"
httpAdminAnruf=`echo "${MailBetreff} ${MailDetails}" | sed -e '{s/ /%20/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;s/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/ß/ss/g;s/&/%26/g;}'`
;;
esac # AdminAnrufe
echo "I:$MailBetreff $name am `date +\"%d.%m.%Y,%H:%M\"`" >> $CalllogLog
echo "I:$MailDetails $name ($CID) an $Line ($3) am `date +\"%d.%m.%Y,%H:%M\"`" >> $CalllogLog
if [ ! -e $CalllogFlag ];then # nur wenn FlagDatei fehlt: Mailversand und dbox-Nachricht
# send information to DBox -> TV screen
wget -O /dev/null "http://${dbox1}/control/message?popup=${httpAdminAnruf}%0AAnrufer%3A%20${httpname}%0AAdresse%3A%20${httpAddress}%0ALeitung%3A%20${httpLine}%0AZeit%3A%20${httpZeit}" >/dev/null 2>&1 &
wget -O /dev/null "http://${dbox2}/control/message?nmsg=${httpAdminAnruf}%0AAnrufer%3A%20${httpname}%0AAdresse%3A%20${httpAddress}%0ALeitung%3A%20${httpLine}%0AZeit%3A%20${httpZeit}" >/dev/null 2>&1 &
echo "I:Anrufinfo an dboxen gesendet." >> $CalllogLog
# Mailtext zusammenbauen
mehrParameter=`echo $4 $5 $6 $7 $8 $9 | tr -d "\f\n\r\t\v\a\b" | sed 's/[^ -ü]//g' | sed "s/^\ *//g" | sed "s/\ *$//g"` # entfernt alles, was nicht zwischen $20 - $FC ist, TRIM
# echo "FRITZ! $CID ($name) an $Line ($3) am `date +\"%d.%m.%Y,%H:%M\"`" > $MailText
echo "$MailDetails $name ($CID) an $Line ($3) am `date +\"%d.%m.%Y,%H:%M\"`" > $MailText
echo "
$mehrParameter
Ergebnis der lokalen Suche $ContactDB1 fuer $CID:
$name
$address
Ergebnis der Inverssuche dasoertliche.de fuer $CID:
$nameDO
$addrDO
Ergebnis der Inverssuche dastelefonbuch.de fuer $CID:
$nameDT
$streetDT $cityDT
--
Fritz!Box: Mail send at $(date +%H:%M:%S)" >> $MailText
# und ab die Post
/sbin/mailer -s "$MailBetreff $name am `date +\"%d.%m.%Y,%H:%M\"`" -f "$MailFrom" -t "$MailTo" -m "$SMTP" -a "$User" -w "$PW" -i "$MailText"
echo "I:Mail an $MailTo via: $SMTP versendet." >> $CalllogLog
fi # nur wenn FlagDatei fehlt: Mailversand und dbox-Nachricht
echo 14,1 > /var/led; echo "I:Internet LED off." >> $CalllogLog
echo "I:"`date` >> $CalllogLog
# Ende