Fritzbox Anrufliste auf MySQL server schieben

kami23

Neuer User
Mitglied seit
1 Jan 2007
Beiträge
148
Punkte für Reaktionen
1
Punkte
16
Hi,

ich möchte gerne, das meine Fritzbox automatisch, wenn ein neuer Anruf eingeht die entsprechenden Daten an einen Rechner in eine MySQL Datenbank schiebt.

Außerdem wäre es klasse wenn noch ein Perl-Skript das mir eine Push-Nachricht auf mein Iphone sendet, ausgeführt wird.

Gibt es sowas schon oder hat jemand einen Tipp wie man das einfach bewerkstelligen kann?

Gruß kami23
 
hallo,

du brauchst die mysql-unterstützung, was ich momentan nur mittels debian auf der fritzbox geschaft habe.

für ein Perl-Skript habe ich schon mal microperl auf der fritzbox erfolgreich ausprobiert. ich meine, dass es mircorperl auch in freetz gibt...

also beides möglich, aber nicht einfach zu realisieren.
mehr infos findest du über die suchfunktion

gruß
 
Hallo tjay,

vielen Dank. Das sieht echt genauso aus, wie ich es auch machen will. Am besten wollte ich meine Originalfirmware behalten und nur entsprechend die Anrufe an meinen Server weiterpushen. Sehe ich das so richtig, dass das mit deinem Script geht? Wie komme ich auf die Box um das Script anzulegen?

Also auf meinem Server läuft Apache+Php+Mysql. Eine Website aufzusetzen oder ein Skript dort abzulegen was mit entsprechenden Parametern eine Datenbank voll schreibt wäre kein Problem. Nur wie mache ich das dann auf der Fritzbox um diese Daten dort rauszukriegen.

Gruß kami
 
mit #96*7* telnet aktivieren

mit telnet verbinden
dann auf der fritzbox folgende befehle ausführen:

vi /var/tmp/anrufliste (das script einfügen und mit ":wq" speichern)
chmod +x /var/tmp/anrufliste (ausführbar machen)
/var/tmp/anrufliste (ausführen)
 
Hi

okay und wie deaktiviere ich dann Telnet wieder?
Wie muss das entsprechende Script auf dem Server aussehen, um die Daten auszuwerten? Hast du da auch schon was?

Wie machst du das mit unbeantworteten Anrufen? Geht das auch?
Welche Daten werden an den Server übertragen?

Gruß kami
 
telnet wird mit #96*7* wieder deaktiviert

ich hab da schon etwas fertiges ... ist aber eine Rails-Anwendung die alles in eine Sqlite Datenbank speichert und anzeigt.

Das Script auf der Fritzbox liefert dir einen String mit der entsprechenden Nummer und der aktuellen Aktion. Wie das genau das aussieht kannst du ja mit ein paar Tests rausfinden ( zB mit "nc localhost 1012" auf der Fritzbox)
 
Hi,

so also das mit nc klappt ja super.

Ich habe mir jetzt folgende Lösung überlegt. Ich habe ein PHP-skript auf meinem Server liegen, das per folgendem Aufruf die Befehl in ein textfile schreibt:

http://mein.server/add.php?wert=Anrufstring

Nun habe ich nur noch ein Problem ich kenne mich nicht so gut damit aus, das ich dein Skript soweit angepasst kriege, das er automatisch jede neue Zeile die nc localhost 1012 liefert in einem Aufruf in das Feld "Anrufstring" schreibt.

Kannst du mir damit helfen?

Gruß kami
 
Hallo,

das habe ich mir bereits nach Inspiration aus
http://www.ip-phone-forum.de/showthread.php?t=98161&highlight=sms gebastelt.

Es läuft ganz ohne sonstige Modifikationen an der FB.

Dazu habe ich das Script wie folgt angepasst:

calllog
Code:
callerid=$1 #anrufende Nummer
name=$5		#Name aus Fritz telefonbuch zuweisen, falls vorhanden


debug="/var/media/ftp/USB-FlashDisk-01/FRITZ/calllog/calllog.log" # Pfad für debugausgabe, wenn leer (=""), kein debug
IP="mysqlserverip" #URL/IP des Servers, auf dem die mysql Datenbank läuft


if [ -n "$debug" ]
	then
	echo "Server erreichbar? " | ping -c 1 $IP >> $debug
	echo "" >> $debug
fi
		
url_bild="http://mysqlserverip/anrufer.php?datum=`date +\"%d.%m"`&Uhrzeit=`date +\"%H:%M"`&anrufer=$name&msn=$2";
if [ -z "$callerid" ]
	then
	callerid="Unbekannt";
	name="Unbekannt";
	url_bild="http://mysqlserverip/anrufer.php?datum=`date +\"%d.%m"`&Uhrzeit=`date +\"%H:%M"`&anrufer=Unbekannt&msn=$2";
	if [ -n "$debug" ]
		then
		echo "Keine Rufnummer übermittelt, URL: " $url_bild >> $debug
	fi
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
                if [ -n "$debug" ]
					then
					echo "URL für Onlinebafrage: "  $url >> $debug
				fi 
				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');
				url_bild="http://mysqlserverip/anrufer.php?datum=`date +\"%d.%m"`&Uhrzeit=`date +\"%H:%M"`&anrufer=$name&msn=$2";
				if [ -n "$debug" ]
					then
					echo "Ergebnis Onlineabfrage" >> $debug
					echo "Name: " $name >> $debug
					echo "URL für anrufer.php: " $url_bild >> $debug
				fi 
		if [ -z "$name" ]
		  then
			url_bild="http://mysqlserverip/anrufer.php?datum=`date +\"%d.%m"`&Uhrzeit=`date +\"%H:%M"`&anrufer=$1&msn=$2";
			if [ -n "$debug" ]
				then
				echo "Name ist leer, setze Callerid: " $1 >> $debug
				echo $url_bild >> $debug
			fi 
       fi
    fi
fi

if [ -n "$debug" ]
	then
	output="Informationen ueber eingegangenen Anruf: $invisible Inhaber: $name Adresse: $street PLZ Ort: $city  Anrufer MSN: $callerid Auf Leitung: $2 ($3) $4"
	echo $output >> $debug
fi 

echo $url_bild | sed -e 's/ /_/g' > /var/tmp/tmp.txt
url_bild=`cat /var/tmp/tmp.txt`
wget -q -O - "$url_bild";

if [ -n "$debug" ]
	then
	echo "URL für anrufer.php falls Leerzeichen enthalten sind" >> $debug
	cat /var/tmp/tmp.txt >> $debug
fi 

rm -rf /var/tmp/tmp.txt


if [ -n "$debug" ]
	then
	echo "----------------End-of-Debug----------------" >> $debug
fi 


#  2> /dev/null

Und als PHP Script läuft:
anrufer.php
Code:
<?php

/* Datenbankserver - In der Regel die IP */
  $db_server = "mysqlserverip";
/* Datenbankname */
  $db_name = "deine";
/* Datenbankuser */
  $db_user = "deiner";
/* Datenbankpasswort */
  $db_passwort = "deins";

$datum=$_GET['datum'];
$uhrzeit=$_GET['Uhrzeit'];
$anrufer=$_GET['anrufer'];
$msn=$_GET['msn'];

  /* Erstellt Connect zu Datenbank her */
$db = @MYSQL_CONNECT($db_server,$db_user,$db_passwort) or die ("Konnte keine Verbindung zur Datenbank herstellen");
$db_check = @MYSQL_SELECT_DB($db_name);


if ($datum<>'') {
$anrufer=preg_replace("/_/"," ",$anrufer);

$db = @MYSQL_CONNECT($db_server,$db_user,$db_passwort) or die ("Konnte keine Verbindung zur Datenbank herstellen");
$db_check = @MYSQL_SELECT_DB($db_name);

$sql=('INSERT INTO anrufe (`datum`, `uhrzeit`, `anrufer`, `msn`) VALUES (\''.addslashes($datum).'\', \''.addslashes($uhrzeit).'\', \''.addslashes($anrufer).'\', \''.addslashes($msn).'\')');

$db=mysql_query($sql);

#echo "" .$anrufer. " wurde eingetragen";
echo $sql;
}  
?>
Benötigt wird eine Datenbank mit der Tabelle anrufe mit den Feldern Datum, Uhrzeit, anrufer und msn

Mit Sicherheit ein gruseliger Code, läuft aber bei mir Problemlos
 
Zuletzt bearbeitet:
Hey,
hab versucht den Code in meiner Fritzbox 7270 Firmeware x.x.x.80 zum laufen zu bringen nur irgendwie geht das nicht.
Per Mail schicken funktioniert nur irgendwie der Code von dir geht nicht.

Habe das ganze mal ein wenig umgebaut und so würde es funktionieren.
Zwischen den Variablen darf irgendwie kein & stehen sonst ließt er die 2te nicht mehr.
Code:
#! /bin/sh

callerid=$1
name=$5
if [ -z "$callerid" ]
        then
        callerid="unbekannt"
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=$callerid";
        name=$(wget -q -O - "$url" | grep -A 1 class=\"short\" | sed -e 's/<[^<]*>/\ /g;s/^[a-zA-Z0-9]*//;s/ / /g;s/[^ -~]//g')on=23&ort=&cifav=0
        fi
fi



wget -q -O - [url]http://192.168.x.x/anrufer.php?datum=12[/url][COLOR="Red"]?[/COLOR]anrufer=$name[COLOR="Red"]?[/COLOR]msn=$2

/sbin/mailer \
-s "$name $callerid auf $2 ($3) $4 um `date +\"%H:%M am %d.%m.%y\"`"\
-f '"Fritz!Box" <[email protected]>' \
-t "[email protected]" \
-m smtp.server.de \
-a user \
-w "pw" \

Muss ich vielleicht irgendwas noch einstellen ?
 
Zuletzt bearbeitet von einem Moderator:
wget -q -O - http://192.168.x.x/anrufer.php?datum=12?anrufer=$name?msn=$2

das wird wohl kaum funktionieren, solange du unter der von dir angegebenen Adresse keinen sql-Server laufen hast.

In der Regel hat man diese bei einem Hoster im Internet...

Außerdem scheint deine Syntax falsch zu sein, alle mir bekannten PHP-Server benutzen für Variablendeklarationen ein & und kein ?

also: anrufer.php?datum=12&anrufer=$name&msn=$2
 
Doch ich habe unter der Adresse einen Mysql Server laufen. Wenn ich anrufer.php?datum=12&anrufer=rr&msn=123 im Browser Aufruf wird ein Eintrag vorgenommen.
Nur nicht über die Fritzbox.
Und da habe ich halt ein wenig rumprobiert und wenn ich die & weglasse wird bei meinem Code etwas eingetragen.

Wenn ich
wget -q -O - http://192.168.x.x/anrufer.php?datum=12&anrufer=$name&msn=$2
direkt über die Konsole aufrufe geht es auch nicht. Es wird Datum eingetragen und dann kommt nichts mehr.
 
Du hast nicht zufällig einen $name, der mit einem Leerzeichen anfängt?

Laß doch am besten mal deinen String http://192.168.x.x/anrufer.php?datum=12&anrufer=$name&msn=$2 in eine Datei schreiben und schau dann mal nach, was da steht.

Diesen String dan über den Brower an deinen Server schicken und schauen, was er damit macht.
 
hm wenn ich das ganze mit " eingebe geht es.
Kann es sein das mein Router durch so ein Skript langsamer wird?
Es dauer jetzt nämlich ewig bis sich die Seiten vom Router aufbauen.
 
Ich kann bei mir keinen Geschwindigkeitseinbruch feststellen.
 
nur mal so am rande

das Ampersand (&) hat inner konsole (sh) aufm lin sys zur folge das der vorangestellte string/command als backround prozess ausgeführt wird ... deswegen kommt der rest auch nicht an ...

encodiert oder zumindest escaped würde es auch funzen
Code:
wget http://foo.bar/bla.php?keks=blub\&hirn=los
wget http://foo.bar/bla.php?keks=blub%26hirn=los
 
Zuletzt bearbeitet:
außerdem wird $name als eine shell-variable interpritiert, die bei diesem skript logischerweile keinen inhalt zeigt. $2 ist der zweite parameter beim aufruf, also auch leer. '' verhindern alle steuerzeicheninterpritationen.
somit wird bei dir folgendes ausgeführt:
Code:
# wget -q -O - http://192.168.x.x/anrufer.php?datum=12
# anrufer=
<befehl-unbekannt-meldung>
[...]
 
Ich kann bei mir keinen Geschwindigkeitseinbruch feststellen.

Aus irgendeinem Grund war die calllog Datei letzten gelöscht und ich habe mich schon gewundert warum sich die Seiten vom Router so schnell aufbauen also muss es doch an dem Skript liegen den jetzt wo es wieder läuft bauen sich die Seiten wieder extrem langsam auf.

Mein skript sieht so aus:

#! /bin/sh

callerid=$1
nam=$5
if [ -z "$callerid"]
then
callerid="Unbekannt"
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=$callerid"
nam=$(wget -q -O - "$url" | grep class=\"col1\" | sed -e 's/<[^<]*>/\ /g;s/^[a-zA-Z0-9]*//;s/ / /g');


fi
fi
if [ -z "$nam"]
then
nam="Unbekannt"
fi
na="$nam:$callerid"
wget -q -O - "http://192.168.x.x/anrufer.php?anrufer=$na&msn=$2&datum=`date +\"%d.%m"`&Uhrzeit=`date +\"%H:%M"`&"
 
Hmm, da das Script nur bei eingehenden Anruf ausgeführt wird finde ich keinen Zusammenhang zwischen dem Script und dem von dir geschilderten langsamen Seitenaufbau.
 
Aber es ist halt so seit dem ich das Script wieder am laufen habe baut sich die Weboberfläche ziemlich langsam auf
 
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.