Quick'n'Dirty: SMS-Benachrichtigung bei eingehenden Anrufen

calltype.sh

Habs noch etwas erweitert:

calltype.sh kann nun vom calllog aufgerufen werden.
callog
Code:
...
USB_Stick=`echo /var/media/ftp/*USB*`
$USB_Stick/calllog/calltype.sh $CID 600 &

1. Parameter: CID
2. Parameter: Verzögerungszeit in Sekunden

Es wird dann eine Mail an die angegeben Mail-Adresse gesendet, die wie folgt aussehen kann:

Eingehender Anruf: Typ: 1;17.03.09 21:55;Eltern;01701234567;Gigaset 3000 Micro;222222;0:04
--
1;17.03.09 21:55;Eltern;01701234567;Gigaset 3000 Micro;222222;0:04
3;17.03.09 21:45;Eltern;01701234567;Gigaset 3000 Micro;222222;0:07
1;17.03.09 20:14;Eltern;01701234567;T Sinus 45K;222222;0:04
1;17.03.09 19:54;Eltern;01701234567;Gigaset 3000 Micro;222222;0:01
3;17.03.09 19:53;Eltern;01701234567;Gigaset 3000 Micro;222222;0:01
(1-incoming, 2-missed, 3-outgoing)

Es wird hinter -- die CID auch nochmal aus der Anrufliste herausgesucht.

Fehlt der 2. Paramter erfolgt die Ausgabe auf dem Telnet-Bildschirm, also ohne Mail, sofort.

calltype.sh
Code:
CID=$1
SLEEP=$2

USB_Stick=`echo /var/media/ftp/*USB*`
MailText="$USB_Stick/calllog/calltype_mail.txt"

# Zeitverzögerung mitgegeben? Dann warten.
if [[ $# -eq 2 ]]; then
  sleep $2
fi

# FBF passwort übertragen
FBFPASSW="fbfpasswort"
export REQUEST_METHOD="POST"
export REMOTE_ADDR="127.0.0.1"
export CONTENT_TYPE="application/x-www-form-urlencoded"
POST_DATA="login:command/password=$FBFPASSW"
export CONTENT_LENGTH=${#POST_DATA}
echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null

# Calltype bestimmen
# http://www.ip-phone-forum.de/showthread.php?p=1291387&posted=1#post1291387
url="http://${REMOTE_ADDR}/cgi-bin/webcm?getpage=../html/de/menus/menu2.html&var:lang=de&var:pagename=foncalls&var:errorpagename=foncalls&var:menu=home"
wget -q -O - "$url" > /dev/null
# csv anrufliste auslesen
# hier sind die neusten zuerst; format:
# Typ;Datum;Name;Rufnummer;Nebenstelle;Eigene Rufnummer;Dauer
url="http://${REMOTE_ADDR}/cgi-bin/webcm?getpage=../html/de/FRITZ!Box_Anrufliste.csv"
Call=$(wget -q -O - "$url" | grep $CID | head -1)
CallType=`echo $Call | sed 's/^\(.\).*$/\1/'`

if [ -z "$CallType" ]
  then
    echo "Anruf (noch) nicht in der Anrufliste..." > "$MailText"
  else
    case "$CallType" in
      1*) echo "Eingehender Anruf: Typ: $Call" > "$MailText"
          ;;
      2*) echo "Verpasster Anruf: Typ: $Call" > "$MailText"
          ;;
      3*) echo "Ausgehender Anruf: Typ: $Call" > "$MailText"
          ;;
      *)  echo "Unbekannter Anruf: Typ: $Call" > "$MailText"
          ;;
    esac
fi

echo "--" >> $MailText
wget -q -O - "$url" | grep $CID | head -5 >> $MailText
echo " (1-incoming, 2-missed, 3-outgoing)" >> $MailText

MailFrom="FRBXY <[email protected]>"
MailTo1="FRBXY <[email protected]>"
SMTP="mail.gmx.net"
User="12345678"
PW="gmxpasswort"
MailBetreff="F!INFO:"

if [[ $# -eq 2 ]]; then
  /sbin/mailer -s "$MailBetreff am `date +\"%d.%m.%Y,%H:%M\"`" -f "$MailFrom" -t "$MailTo1" -m "$SMTP" -a "$User" -w "$PW" -i "$MailText"
else
  cat "$MailText" # ohne sleeptimer nur auf Bildschirm ausgeben.
fi 
if [ -e $MailText ];then rm $MailText; fi
 
... spannendes Thema, allerdings für den Neueinsteig ein wenig unübersichtlich :) Ich suche nach einer Lösung lediglich eine E-Mail auszulösen bei einem eingehenden Anruf (die wird dann via MS Exchange direkt auf iPhone gepusht) - welche Lösung gibt es hierfür? Danke!!
 
Hallo zusammen,

hab mich hier mal versucht einzulesen - das ist (wenn man wie ich) kaum Code Kenntnisse hat nicht so einfach :confused:

Was ich bisher gefunden habe:

a) eine Lösung um bei allen Anrufen (incoming UND missed) per Mail benachrichtigt zu werden
INKL. Inverssuche & Fritzbox-Telbuch Suche.
siehe Post 251

und

b) eine Lösung um bei bestimmten Anrufen (NUR missed calls) per Mail benachrichtigt zu werden
- allerdings OHNE Inverssuche & Fritzbox-Telbuch Suche.
siehe Post 281


Was ich suche ist die Kombination aus beidem, d.h. dass nur eine Mail gesendet wird bei VERPASSTEM Anruf
UND
eine Inverssuche (dasÖ oder ähnliches) & Fritzbox-Telbuch-Suche durchgeführt wird.


Hat das schon jmd. realisiert? Wäre nett wenn er den Code hier posten könnte.

Danke und Gruß,
duffy6
 
Hallo,

ich habe einen gefritzten SP W920V (siehe Signatur) und möchte gerne über Anrufe in Abwesenheit per Email informiert werden. Das es funktioniert zeigt dieser Thread. Ich habe ein Windows XP Professional SP 3 und ein Knoppix.

Ich habe keinerlei Erfahrung mit Telnet und stehe noch ganz am Anfang. Zunächst habe ich Telnet auf der Box mit den Tastenkombinationen #96*7* Telnet an #96*8* Telnet aus ein- bzw. ausgeschaltet. Wenn es eingeschaltet ist kann ich unter der Windows Shell (cmd.exe) telnet 192.168.178.1 eingeben. Anschließend werde ich nach dem Webkennwort gefragt und dann steht da nur ein: #

Ich habe die Datei jetzt auf einem USB Stick und an die Fritz Box angeschlossen. Einmal habe ich die Datei mit calllog.txt und einmal calllog (ohne Endung) abgespeichert.

Dann tippe ich ein:

USB Stick ist: CCR-70-01/

cp /var/media/ftp/CCR-70-01/calllog /var/tmp/calllog

Es passiert nix und kommt nur eine #

Dann:

cat /var/tmp/calllog > /var/flash/calllog dann dauert es eine Zeit und es kommt wieder eine #

Anschließend boote ich die Box neu aber es passiert nichts bei Anrufen.

Jetzt komplette Ahnungslosigkeit. Es kommt keine email. Muss ich die Datei calllog.txt nennen oder einfach nur calllog ???
Ist die Struktur bei geflashten Speedports auf Fritz anders? Dürfte ja eigentlich nich sein

Habe mir hierfür einen neuen email account angelegt [email protected]

Hier der Code

Code:
#!/bin/sh

callerid=$1
name=$5
if [ -z "$callerid" ]
  then
    callerid="Unbekannt";
    invisible="\r\n Die Rufnummer des Anrufers wurde unterdrueckt.\r\n\r\n Sofern der Anrufer eine Nachricht hinterlassen hat, erhalten Sie diese in einer separaten E-Mail.\r\n "
  else
    if [ -z "$5" ]
      then
		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=$1";
                sleep 5
                name=$(wget -q -O - "$url" | grep class=\"col1\" | sed -e 's/<[^<]*>/\ /g;s/^[a-zA-Z0-9]*//;s/ / /g');
                street=$(wget -q -O - "$url" | grep class=\"col2\" | sed -e 's/<[^<]*>/\ /g;s/^[a-zA-Z0-9]*//;s/ / /g' -e 's/&nbsp;/ /g');
                city=$(wget -q -O - "$url" | grep class=\"col3\" | sed -e 's/<[^<]*>/\ /g;s/^[a-zA-Z0-9]*//;s/ / /g' -e 's/&nbsp;/ /g');

if [ -z "$name" ]
  then
        invisible="\r\nDer Anschlussinhaber konnte nicht ermittelt werden, oder hat einer Verzeichniseintragung widersprochen.\r\n "
        fi
  fi
fi

         output="Informationen ueber eingegangenen Anruf:\r\n $invisible \r\n Inhaber: $name \r\n Adresse: $street \r\n PLZ Ort: $city\r\n\r\n Anrufer MSN: $callerid \r\n Auf Leitung: 02***$2 ($3) $4 \r\n Anruf Zeit: `date +\"am %d.%m.%y, um %H:%M \"`"\


         echo -e $output >/var/tmp/calllog.txt



        case "$2" in
                                MSN1| MSN2| MSN3)
                                [email protected]
                                ;;
                                esac
if [ -z "$TOADDRESS" ]
then
echo "quit, no notification for this MSN"
        exit
fi

.
.
.
.

/sbin/mailer \
          -s "Von $callerid auf $2 ($3) $4 um `date +\"%H:%M am %d.%m.%y\"`"\
          -f 'FritzBox | Daheim <[email protected]>' \
          -t "$TOADDRESS" \
          -m 'mail.gmx.net' \
          -a '[email protected]' \
          -w 'meinpasswort' \
          -i '/var/tmp/calllog.txt'

2> /dev/null

Wie man vielleicht merkt habe ich noch einige Lücken was das Thema angeht und würde mich über Hilfe freuen.

Viele Grüße
 
Zuletzt bearbeitet:
Wie kann ich denn den Mailer dazu bringen die Mail an zwei Empfänger zu schicken?

Gruß und schönes WE
 
Quick&Dirty: 2x aufrufen? ;)
 
@duffy6
steht das nicht schon irgendwo hier beschrieben? ;)
Telefonnummer)
TOADDRESS=email1,email2,email3

zu Deiner PN: habe das ganze leider nicht so am laufen wie du es gerne hättest.
Ich bekomme bei jedem Anruf eine email, da ich jeden Anruf erst einmal annehme und dann weiter route - ich habe somit keine "verpassten Anrufe" in diesem Sinne :)
 
Kann mir keiner zu Post Nr 285 (4 über diesen Post) weiterhelfen???

Viele Grüße
 
@ironinmysoul

Deine Problematik aus Post 285 ist weniger auf dieses Script, als auf deine mangelnden Linuxkenntnisse zurückzuführen. Vielleicht solltest Du dich erstmal mit den grundlegenden Shellbefehlen und bash beschäftigen, bevor Du solche Scripte umsetzt. Google hilft da sicherlich gerne weiter....

Dennoch eine kurze Erklärung:

Am Anfang des Scriptes sind Variabeln definiert "$1, $2, etc.", diese werden beim aufruf übergeben. D.h. die Fritzbox ruft dieses Script bei einem Anruf von 12345, mit dem Befehl /pfad.../calllog.sh 12345 auf. Somit kennt das Script die Nummer und kann damit arbeiten. Wenn Du das Script selbst nun testen willst, musst Du in der Konsole auch eine Nr. übergeben, damit das Script überhaupt ne Grundlage zum arbeiten hat.

Ferner werden Bashscripte mit "./" oder einem "sh" vor dem script.sh ausgeführt. Da Du das nicht gemacht hast, passiert auch nichts. Das setzt natürlich vorraus, dass dein Script ausführbar ist. Stichwort ist hier "chmod +x"

Dass sollte Dir erstmal weiterhelfen, den Rest schaffst Du auch mit ein bisschen Einarbeitung.... ;)

Grüße Lemur
 
Hallo zusammen,

wenn ich eine /var/flash/calllog anlege wird die bei einem Anruf nicht ausgeführt. Nach einigem Hin und Her ist mir eingefallen, dass ich von the-construct.com eine gemoddete Firmware/debug.cfg habe.

1) Kann ich einfach im Code (s.u.) den Abschnitt von #---ANFANG bis #---ENDE entfernen und mir stattdessen eine calllog Datei erstellen?

2)
Ich verstehe auch nicht wie die debug.cfg meine Anrufe abfangen konnte. Die Box ruft doch eigentlich die calllog Datei auf?


Gruß,
duffy6


Meine debug.cfg sieht so aus:

Code:
#!/bin/sh

LED_DEVICE=/proc/led_mod/led
if [ ! -f /proc/led_mod/led  ] ; then
  LED_DEVICE=/var/led
  echo "set led: ${LED_DEVICE}"
fi
# start internet phone led flashing
echo "set internet phone led to blink (modul=14, state=3)"
echo 14,3 > ${LED_DEVICE}

# check kernel version
KERNEL_VERSION=`uname -r | grep 2.6`
if [ -z "${KERNEL_VERSION}" ]
then
  KERNEL_VERSION="linux24"
  ETHERWAKE="etherwake"
else
  KERNEL_VERSION="linux26"
  ETHERWAKE="ether-wake"
fi

# init busybox var
BUSYBOX="/bin/busybox"

# wait to be able to interrupt in case of emergency
sleep 120

if [ -z "$(busybox | grep telnetd)" ]
then
  while !(ping -c 1 ftp.the-construct.com)
  do
    sleep 5
  done
  # check if file already exists
  if [ ! -f /var/tmp/busybox ]
  then
    wget -qO /var/tmp/busybox http://ftp.the-construct.com/files/${KERNEL_VERSION}/busybox
    # make it executable
    chmod +x /var/tmp/busybox
  fi
  # set busybox var
  BUSYBOX="/var/tmp/busybox"
fi
# start telnet deamon with password of web gui
${BUSYBOX} telnetd -l /sbin/ar7login

major=`grep tffs /proc/devices`
tffs_major=${major%%tffs}
[COLOR="Red"][B]#---ANFANG
#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

#CONTACTS
#contact=:anonym;
#contact=0179111111:0179111111;
#CONTACTSEND

#LINES
#line=:anonym;
#LINESEND

# write reverse lookup script to file
cat > /var/tmp/invers.sh << 'ENDINVERS'
#!/bin/sh

number=$1

wget -q -O /var/tmp/page "http://www2.dasoertliche.de/?form_name=detail&lastFormName=search_inv&ph=${number}&recFrom=1&hitno=0" 2>/dev/null

while read reverse
do
  case ${reverse} in
    *detail_top*)
      name=${reverse#*\>}
      name=${name%%\<*}
      break
    ;;
  esac
done < /var/tmp/page

echo "${name}" > /var/tmp/name

# get address
while read reverse
do
  if [ -n "${gotaddress}" ]
  then
    address=${reverse#*\>}
    address=${address%\<*}
    break
  fi
  case ${reverse} in
    *da_adresse*)
      gotaddress=1
    ;;
  esac
done < /var/tmp/page

echo "${address}" | sed -e '{s/&nbsp;/ /g;s/<br \/>/;/g;}' > /var/tmp/address
ENDINVERS

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

# write send script to file
cat > /var/tmp/callmessage.sh << 'ENDCALLMESSAGE'
#!/bin/sh

caller=${2}
called=${1}

# search name in contact list
entry=`cat /var/flash/debug.cfg 2>/dev/null | fgrep "#contact=${caller}:" | sed "s/#contact=${caller}://"`
name=${entry%%\;*}
address=${entry#*\;}
address=${address%\;*}
street=${address%%\;*}
zip=${address##*\;}

# name not found?
if [ -z "${name}" ]
then
  # do reverse lookup at www.dasoertliche.de
  /var/tmp/invers.sh ${caller}
  name=`cat /var/tmp/name`
  # found name?
  if [ -n "${name}" ]
  then
    # add found contact to debug.cfg
    address=`cat /var/tmp/address`
    street=${address%%\;*}
    zip=${address##*\;}
    cat /var/flash/debug.cfg | sed -e "s/^#CONTACTSEND$/#contact=${caller}:${name};${address};#CONTACTSEND/g" | sed -e 's/#CONTACTSEND$/\
#CONTACTSEND/g' > /var/tmp/debug.cfg
  else
    # add anonymous for contact to debug.cfg
    cat /var/flash/debug.cfg | sed -e "s/^#CONTACTSEND$/#contact=${caller}:${caller};#CONTACTSEND/g" | sed -e 's/#CONTACTSEND$/\
#CONTACTSEND/g' > /var/tmp/debug.cfg
  fi
  cat /var/tmp/debug.cfg > /var/flash/debug.cfg
  rm /var/tmp/debug.cfg
fi

# name not found?
if [ -z "${name}" ]
then
  name=${caller}
fi
httpname=`echo "${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;}'`
httpstreet=`echo "${street}" | 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;}'`
httpzip=`echo "${zip}" | 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;}'`
echo "Name: ${name}"
echo "Strasse: ${street}"
echo "PLZ: ${zip}"

# search line in line list
theline=`cat /var/flash/debug.cfg 2>/dev/null | fgrep "#line=${called}:" | sed "s/#line=${called}://"`
theline=${theline%%\;*}

# line not found?
if [ -z "${theline}" ]
then
  theline=${called}
fi
httptheline=`echo "${theline}" | 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;}'`

# Send information to all DHCP clients
while read x x IP x
do
  wget -O /dev/null "http://${IP}:23232/?caller=${caller}&called=${called}&name=${name}&line=${theline}" >/dev/null 2>&1 &
done < /var/flash/multid.leases

# send information to DBoxes -> TV popup
wget -O /dev/null "http://root:[email protected]/control/message?popup=Eingehender%20Anruf%0AAnrufer%3A%0A${httpname}%0A${httpstreet}%0A${httpzip}%0A%0ALeitung%3A%20${httptheline}" >/dev/null 2>&1 &

# send information to DBoxes -> LCD
wget -O /dev/null "http://root:[email protected]/control/lcd?lock=1&clear=1&xpos=5&ypos=20&size=18&font=2&text=${httpname}&update=1" >/dev/null 2>&1 &
sleep 1
wget -O /dev/null "http://root:[email protected]/control/lcd?lock=1&clear=0&xpos=5&ypos=42&size=18&font=2&text=an%20${httptheline}&update=1" >/dev/null 2>&1 &
sleep 10
wget -O /dev/null "http://root:[email protected]/control/lcd?lock=0" >/dev/null 2>&1 &

sleep 3
killall wget
ENDCALLMESSAGE

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

# write dummy WakeOnCall script
echo "#!/bin/sh" > /var/tmp/woc.sh
# 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"
called=${called%%#*}

# 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} &

ENDPARSETEL

# make it executable
chmod +x /var/tmp/parse_telefon.sh
#---ENDE[/B][/COLOR]


# load SSH-Server (dropbear) and etherwake

# CONFIGURATION

# SSH
# port
dropbearport="22"
# password
PASSWD='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

# Etherwake
# MAC address
wolmac="XXXXXXXXXXXXX"
# interface to use for WOL
# intf = std  - ata
# eth0 = LAN1 - WAN
# eth1 = LAN2 - LAN1
wolinterface="eth0"

# CONFIGURATION END

# try to load files from USB drive
for f in /var/media/ftp/*
do
  if [ -f ${f}/_binaries/dropbear ]
  then
    echo "${f}/_binaries/dropbear"
    cp ${f}/_binaries/dropbear /var/tmp/dropbear
  fi
  
if [ -f ${f}/_binaries/sftp-server ]
  then
    echo "${f}/_binaries/sftp-server"
    cp ${f}/_binaries/sftp-server /var/tmp/
fi

done

# check if file already exists
if [ ! -f /var/tmp/dropbear ]
then
  # wait for server
  while !(ping -c 1 ftp.the-construct.com)
  do
    sleep 5
  done
  # load files
  wget -qO /var/tmp/dropbear http://ftp.the-construct.com/files/${KERNEL_VERSION}/dropbear
fi

# try to load files from USB drive
for f in /var/media/ftp/*
do
  if [ -f ${f}/files/${KERNEL_VERSION}/busybox ]
  then
    echo "${f}/files/${KERNEL_VERSION}/busybox"
    cp ${f}/files/${KERNEL_VERSION}/busybox /var/tmp/busybox
  fi
done


# check if file already exists
if [ ! -f /var/tmp/busybox ]
then
  # wait for server
  while !(ping -c 1 ftp.the-construct.com)
  do
    sleep 5
  done
  # load files
  wget -qO /var/tmp/busybox http://ftp.the-construct.com/files/${KERNEL_VERSION}/busybox
fi

# make them executable
chmod +x /var/tmp/busybox
chmod +x /var/tmp/dropbear
chmod +x /var/tmp/sftp-server

# set busybox var
BUSYBOX="/var/tmp/busybox"

# change root password
${BUSYBOX} sed -e "/root:/s#^root:[^:]*:#root:${PASSWD}:#" -i /var/tmp/shadow

# create symlink for dropbearkey
ln -s /var/tmp/dropbear dropbearkey

${BUSYBOX} uudecode -o /var/tmp/dropbear_rsa_host_key << 'RSA'
begin 600 /var/tmp/dropbear_rsa_host_key
XXXXX
end

RSA

${BUSYBOX} uudecode -o /var/tmp/dropbear_dss_host_key << 'DSS'
begin 600 /var/tmp/dropbear_dss_host_key
XXXX
end

DSS

# start dropbear
sleep 60
/var/tmp/dropbear -p ${dropbearport} -r /var/tmp/dropbear_rsa_host_key -d /var/tmp/dropbear_dss_host_key

# create simplified WOL script
echo "${BUSYBOX} ${ETHERWAKE} -i ${wolinterface} ${wolmac}" > /var/tmp/startpc

# make it executable
chmod +x /var/tmp/startpc

# make FBF accessable from the internet (192.168.0.253)
# funktioniert seit .67 Firmware nicht mehr; nun direkt über ar7.cfg
sleep 10
ifconfig eth0:1 192.168.0.253 netmask 255.255.255.0 broadcast 192.168.0.255 up

#SFTP login Pfad Änderung: Bei login direkt in USB-Speicher Pfad
sed -i "s,:/:,:/var/media/ftp/:,g" /var/tmp/passwd


# stop internet phone led flashing
echo 14,1 > ${LED_DEVICE}

# Lighttpd 1.4.15 + PHP 5.2.2 CGI
ln -s /var/media/ftp/tinydisk-2008-01-11-01/lighttpd /var/tmp/lighttpd
cd /var/tmp/lighttpd; ./lighttpd -f lighttpd.conf $
# Autorun FritzLoad
cd /var/media/ftp/tinydisk-2008-01-11-01/lighttpd/www/FritzLoad; ./autorunfl.sh -l /var/media/ftp/tinydisk-2008-01-11-01/lighttpd/www/FritzLoad > /dev/null &
 
Danke für deine Antwort Lemur.

Vielleicht war ich einfach zu blauäugig aber in Post 251 hat es jemand exakt so gemacht. Die Befehle wurde aber offensichtlich über Linux ausgeführt und nicht unter der Eingabeaufforderung von XP.

Die Variablen sind in dem Skript doch festgelegt oder nicht? Also Anrufer etc. ist ja und meine MSN´s etc habe ich in dem Skript schon eingetragen nur hier halt nich gepostet.

Vielleicht kann mir ja noch jemand einen Tipp geben:

Wäre folgendes hilfreich:

Ich starte Knoppix und nenne meine Skript callog.sh (ohne Endung wie in Post 251).

Dann gebe ich in der Konsole ein: $ chmod a+x calllog.sh um die Datei für alle ausführbar zu machen!?!

Also nächstes tippe ich ./calllog.sh und das skript wird auf dem Rechner ausgeführt. Oder muss ich es dann noch wie oben auf die Box kopieren mit

USB Verzeichnis: CCR-70-01

Kopieren von Stick auf Box: cp /var/media/ftp/CCR-70-01/calllog.sh /var/tmp/calllog.sh

In den Flashspeicher und ausführen: cat /var/tmp/calllog.sh > /var/flash/calllog.sh

oder

Ich starte Knoppix und nenne meine Skript callog.sh (ohne Endung wie in Post 251).

cp /var/media/ftp/CCR-70-01/calllog /var/tmp/calllog

cat /var/tmp/calllog > /var/flash/calllog

Danke!
 
Zuletzt bearbeitet:
@duffy6

Ja, kannst Du grundsätzlich machen. Dabei erstellt die Debug.cfg beim Starten der Box die Datei und mach Sie ausführbar. Ob das mit dem "parse.... .sh" allerdings klappt, weis ich nicht, dass hängt davon ab, nach welchen Dateien die Box sucht, wenn ein Anruf eingeht, um sie auszufürhen, ggf. wäre hier noch was anzupassen, ich würds vorab einfach mal testen.

@ironinmysoul

Mit dem "Linux" haben wir uns wohl missverstanden....
Auf der Box läuft ja schon eine Art Linux, selbst mit der Standartfirmware, auch wenn AVM dass gerne als Eigenproduktion ansieht... ;)

Von welchem System Du dieses Script nun bearbeitest, bzw. ausführst um es zu testen, ist - solange Du das direkt auf der Box machst (z.B. via Telnet) - also egal.

Der Speicher ist flüchtig, d.h. Du musst nach jedem Neustart der Box, dass Script nach /var/flash kopieren. Das geht ja über die Debug.cfg, die routinemäßig bei jedem Start durchläuft. CAT ist hier also nicht das eigendliche Ausführen des Scripts, sondern vielmehr eine Art kopiervorgang. Übrigens sollte ein direktes cat von deinem USB Verzeichnis nach /var/flash/ auch gehen, das zwischenspeichern im tmp ist also überflüssig. In deiner Debug.cfg sollte dann sowas stehen: (vorher auf dem USB-Stick mit chmod+x ausführbar machen)

Code:
cat /var/media/ftp/CCR-70-01/calllog.sh > /var/flash/calllog.sh

Kommt jetzt ein Anruf rein, prüft die Box automatisch, ob ein Script in /var/flash/ mit dem Namen "calllog.sh" existiert und führt es, sofern vorhanden aus. Sie ruft Quasi das Script mit

Code:
sh /var/flash/calllog.sh 12345 98765
auf.

Da in diesem Beispiel 12345 die 1. Variable ist, und im Script $1=AnruferID ist, weiß dein Script dass hier 12345 anruft und entsprechend gesucht werden soll, wem 12345 gehört.

Wenn dass jetzt nicht so funktioniert, wie vorgesehen, solltest Du dich z.B. via Telnet oder SSH auf die Box einloggen und dann dieses Script über die Konsole aufrufen und gucken, ggf. hier Posten, was passiert bzw. was nicht passiert.

Grüße Lemur
 
Zuletzt bearbeitet:
Hallo zusammen,


habe den Code aus dem ersten Post in eine mit vi erstellte calllog gepastet.

Aber bei einem Anruf erscheint in Telnet nur:

Code:
Apr 29 21:33:52 telefon[484]: SIGCHLD received!

und es wird keine Mail gesendet.

Aber beim Aufruf der calllog mit:

Code:
sh /var/flash/calllog

wird eine Mail gesendet.

Wieso wird beim Anruf nicht die calllog aufgerufen?

Die Syntax muss ja richtig sein, sonst würde der manuelle Aufruf nicht klappen.

Danke für die Tipps.

Gruß,
duffy6
 
Wieso wird beim Anruf nicht die calllog aufgerufen?

Wo liegt das Script und wie heißt es?
Poste doch mal die Ausgabe von:
Code:
ls -l /var/flash/

Code:
Apr 29 21:33:52 telefon[484]: SIGCHLD received!
Hat nichts mit dem Script zu tun. Das ist der telefond der Box selbst!

Gruß Lemur
 
Hallo,

das Script liegt in /var/flash
und heisst calllog

Früher wurde die calllog in der debug.cfg erzeugt. Dort habe ich aber die entsprechenden Zeilen (siehe mein Post 291) entfernt.


Die Ausgabe von ls -l /var/flash/
Code:
# ls -l /var/flash/
crw-r--r--    1 root     root     240, 113 Apr 29 23:22 ar7.cfg
crw-r--r--    1 root     root     240, 160 Jan  1  2000 aura-usb
crw-r--r--    1 root     root     240, 168 Jan  1  2000 browser-data
-rwxrwxrwx    1 root     root          353 Apr 29 21:13 calllog
crw-r--r--    1 root     root     240, 208 Jan  1  2000 cert.cfg
crw-r--r--    1 root     root     240,  98 Jan  1  2000 debug.cfg
crw-r--r--    1 root     root     240, 143 Jan  1  2000 fonctrl
crw-r--r--    1 root     root     240, 132 Jan  1  2000 fx_cg
crw-r--r--    1 root     root     240, 129 Jan  1  2000 fx_conf
crw-r--r--    1 root     root     240, 130 Jan  1  2000 fx_lcr
crw-r--r--    1 root     root     240, 131 Jan  1  2000 fx_moh
crw-r--r--    1 root     root     240, 112 Jan  1  2000 multid.leases
crw-r--r--    1 root     root     240, 117 Jan  1  2000 net.update
crw-r--r--    1 root     root     240, 142 Jan  1  2000 phonebook
crw-r--r--    1 root     root     240, 116 Apr 29 22:41 stat.cfg
crw-r--r--    1 root     root     240, 133 Jan  1  2000 telefon_misc
crw-r--r--    1 root     root     240, 119 Jan  1  2000 tr069.cfg
crw-r--r--    1 root     root     240, 120 Apr 29 20:37 user.cfg
crw-r--r--    1 root     root     240, 121 Apr 29 22:37 userstat.cfg
crw-r--r--    1 root     root     240, 114 Jan  1  2000 voip.cfg
crw-r--r--    1 root     root     240, 122 Jan  1  2000 voipd_call_stat
crw-r--r--    1 root     root     240, 118 Jan  1  2000 vpn.cfg
crw-r--r--    1 root     root     240, 202 Jan  1  2000 websrv_ssl_cert.pem
crw-r--r--    1 root     root     240, 201 Jan  1  2000 websrv_ssl_key.pem
crw-r--r--    1 root     root     240, 115 Jan  1  2000 wlan.cfg

Eine Idee woran es liegen könnte?

Gruß,
duffy6
 
Hm,
und beim "manuellen" Test via Konsole läuft das Script einwandfrei durch?

Wird denn beim echten Anruf die Ergebnisdatei erstellt?

Wenn das manuell durchläuft, liegts wohl daran, dass die Box das Script beim Anruf nicht ausführt, die frage ist nur, warum nicht. Versuch mal Testweise das Script in "calllog.sh" umzubennen.

Sowas wie Syslog läuft bei Dir nicht zufällig? Falls ja, poste doch auch mal davon die Ausgabe beim Anruf.
 
ja, beim manuellen Aufruf läuft die calllog einwandfrei durch - nur eben nicht bei Anruf.

Habe mal versucht die Datei umzubenennen in calllog.sh - leider mit dem selben Ergebnis = kein Aufruf der calllog.

Syslog sagt mir jetzt leider nichts da müsstest Du mich mal genauer einweisen.

Habe aber mal einen reboot gemacht und siehe da:

Beim allerersten Anruf nach dem Reboot:
Code:
# Apr 30 08:54:13 telefon[486]: '[B]/var/calllog' script not found![/B]
: not foundcalllog: line 2:
: not foundcalllog: line 5:
/var/flash/calllog: line 7: -s: not found
/var/flash/calllog: line 8: -f: not found
/var/flash/calllog: line 9: -t: not found
/var/flash/calllog: line 10: -m: not found
/var/flash/calllog: line 11: -a: not found
/var/flash/calllog: line 12: -w: not found
: not foundcalllog: line 13:

Bei allen weiteren Anrufen fehlt dann aber interssanterweise die Meldung '/var/calllog' script not found!:
Code:
Apr 30 08:54:17 telefon[486]: SIGCHLD received!
: not foundcalllog: line 2:
: not foundcalllog: line 5:
/var/flash/calllog: line 7: -s: not found
/var/flash/calllog: line 8: -f: not found
/var/flash/calllog: line 9: -t: not found
/var/flash/calllog: line 10: -m: not found
/var/flash/calllog: line 11: -a: not found
/var/flash/calllog: line 12: -w: not found
: not foundcalllog: line 13:


Zur Analyse anbei mal meine calllog:
Code:
#! /bin/sh
echo "`date +\"%d.%m.%y %H:%M\"` - Anruf von $1 auf Leitung $2 ($3) $4"
/sbin/mailer \
  -s "`date +\"%d.%m.%y %H:%M\"` - Anruf von $1 auf Leitung $2 ($3) $4" \
  -f 'FritzBox | Daheim <[email protected]>' \
  -t "[email protected]" \
  -m mail.gmx.net \
  -a [email protected] \
  -w "PASSW" \
#  2> /dev/null

Die Schalter für den Mailer hab ich mit TAB eingerückt.

Weitere Ideen warum es klappen könnte?

Danke und Gruß,
duffy6
 
na das ist doch schon mal was:

Bist Du ganz sicher, das die calllog "zur Analyse" vollständig und exakt die Selbe ist, wie die aus der die Fehlermeldungen resultieren, (abgesehen von den Mailzugangsdaten) ?

Scheinbar hat er ein paar Probleme mit den ":" und den Parametern vom mailer, die Zeilennummern stehen ja mit in der Meldung (Bsp. line 7 = Zeile 7 im calllog.sh)

Versuch 1. ändere mal Zeile 1 in
Code:
 #!/bin/sh
dann testen...
Versuch 2. Poste mal die Ausgabe von
Code:
 /sbin/mailer -help

Gruß Lemur
 
Hey danke Lemur.

Tipp 1 hats gebracht!!!:groesste:

Jetzt bin ich grad dabei folgendes zu realisieren:

Mail nur bei verpasstem Anruf und
Inverssuche

Hier entsteht nun das Problem, dass der Calltype nur bestimmt werden kann wenn eine CallerID übertragen wird, da sonst in der CSV Datei kein Bezug zum "richtigen" Anruf hergstellt werden kann.

Ich meine also diese Zeilen hier:
Code:
url="http://${REMOTE_ADDR}/cgi-bin/webcm?getpage=../html/de/FRITZ!Box_Anrufliste.csv"
Call=$(wget -q -O - "$url" | grep $CID | head -1)
CallType=`echo $Call | sed 's/^\(.\).*$/\1/'`


Bei einem Anruf ohne Nummer kommt das Skript hier nicht klar und kann keinen Calltype bestimmen.

Jetzt meine Idee: Da das ganze bei Anrufen OHNE Nummer ja nicht funktioniert: könnte man stattdessen nicht über die aktuelle Anrufzeit einen Bezug zur CSV Datei herstellen (in der ja ebenfalls die Anrufzeit steht), und sich damit die richtige Zeile herausfischen?

Leider bin ich nicht fähig diesen Gedanken in Code umzusetzen. Aber vielleicht kann das ja jmd von Euch? ;)

Grüße und danke nochmal Lemur!
duffy6
 

Statistik des Forums

Themen
244,885
Beiträge
2,220,163
Mitglieder
371,619
Neuestes Mitglied
Lebeat
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.