Bei Anruf Mord ist ein Thriller von Alfred Hitchcock aus dem Jahr 1954.
Wie man eine Bombe zündet oder auch nur ein Warnlicht einschaltet, wird im folgenden Beitrag beschrieben.
Voraussetzungen:
Callmonitor ist ein Dienst auf dem Port 1012 einer FRITZ!Box Fon, an dem ein Client zur Anzeige eingehender Anrufe betrieben werden kann. Der Port 1012 muss einmalig per analogen Telefon aktiviert werden: Telefoncode zum Öffnen des TCP-Ports: #965 und zum Schließen des TCP-Ports: #964 Diese Funktion wir ab der Firmware Version xx.03.99 von AVM unterstützt. Die eingehenden Anrufe haben das Format: Datum; RING; ConnectionID; Anrufer-Nr; Angerufene-Nummer;
In IP-Symcon muss ein ‚Client Socket‘ mit der IP-Adresse der Box und dem Port:1012 angelegt werden.
Zusätzlich noch eine ‚Register Variable‘ mit der 'Übergeordneten Instanz vom o.g. ‚Client Socket‘ sowie dem folgendem Skript:
$callmonitor = explode(";", $_IPS['VALUE']);
//IPS_LogMessage('FB_CALL_Monitor',print_r($callmonitor,1));
$id_wf = zzzzz; // ID des WebFront zur Visualisierung
if ($callmonitor[1] == "RING"){
WFC_SendNotification ($id_wf, "Ankommendes Gespräch!", "Von:".$callmonitor[3]." An:".$callmonitor[4], "", 60);
if ($callmonitor[4] == "045130500511"){ // eigene Tel.-Nummer
// IPS_RunScript(aaaaa);
}
}
if ($callmonitor[1] == "CALL"){
WFC_SendNotification ($id_wf, "Abgehendes Gespräch!", "Von ".$callmonitor[4]." wird ".$callmonitor[5]." angerufen!", "", 60);
}
if ($callmonitor[1] == "CONNECT"){
WFC_SendNotification ($id_wf, "Anruf angenommen!", $callmonitor[4], "", 60);
// IPS_RunScript(xxxxx);
}
if ($callmonitor[1] == "DISCONNECT"){
WFC_SendNotification ($id_wf, "Anruf beendet!", $callmonitor[4], "", 60);
// IPS_RunScript(yyyyy);
}
Danke für das Skript bzw. die Anleitung. Funktioniert einwandfrei.
Eine Frage am Rande. Ist es möglich, wenn ich bspw. eine meiner MSN´s anrufe und dann noch einen Zahlencode anfüge, diese in IPS auszulesen und dann eine Aktion entsprechend zu starten?
Beispiel:
Ich rufe meine Rufnummer mit meinem Handy an, dann geht meine Fritzbox dran und ich gebe dann eine Zahl bspw. 4000 ein. Daraufhin erkennt IPS, dass es sich um den Befehl „Garage öffnen“ handelt.
Ist so etwas möglich? Ein sprachgesteuertes Menü, mit dem ich nur über ein Passwort Zugriff habe ist wahrscheinlich so mit der Firtzzbox IPS nicht möglich …
erstmal danke für dieses nette kleine Script!! Trotzdem habe ich mal eine Frage. Ist es irgendwie möglich anstatt der Nr. den Namen des Anrufers anzuzeigen??
Ich bin mir grad nicht 100% sicher, aber glaube im „Fritzbox SOAP“ Thread wurde das Thema „Rückwärtssuche“ über verschiedene Anbieter immer wieder behandelt. Auch im „Fritzbox Anruferliste“ Thread und im Wiki ist die Rückwärtssuche mit eingebaut Also einfach „klauen“
Ich habe mich nun bei einigen Skripten bedient! Soweit so gut! Die Rückwärtssuche über das örtlich funktioniert! Nur habe ich damit das Problem, dass ich zu den Handynummern keine Namen bekomme. Nun dachte ich wie vorgeschlagen an die Telefonbuch XML der Fritzbox.
Nur wie kann ich die XML Datei nach einer bestimmten Rufnummer durchsuchen? Und den dazugehörigen Namen ausgeben?
Ich bin für jeden Rat dankbar.
Vielleicht sollte ich auch einfach mal eine Nacht drüber schlafen, manchmal sieht man den Wald vor lauter Bäumen nicht mehr.
Öhm…meine Skripte? Die FritzBox-SOAP-Skripte hier stammen aus der Feder von Nall chan! So gut bin ich noch lange nicht :eek:
>> FritzBox mit SOAP auslesen und steuern
Bzgl. XML vom FritzBox Telefonbuch durchsuchen. Joa…keine Ahnung, hab mir die XML noch nie angeschaut
Dürfte aber nicht weiter problematisch sein. Da kann dir Nall chan sicher einen Tipp geben
Die XML wird ja vmtl. in ein Array eingelesen und dann könnte man mit sowas in der Art arbeiten!?
function SearchArray($value, $key, $array) {
foreach ($array as $k => $val) {
if ($val[$key] == $value) {
return $k;
}
}
return NULL;
}
Das Problem ist der Faktor Zeit.
Äh… nicht meine…
Sondern wenn das Event des Anrufens ausgelöst wird, dann mal eben schnell den Anrufer aus der FB holen, wird einfach zu lange dauern.
Alternativ das Telefonbuch als XML oder CSV aus der FB downloaden und immer mit dieser Offline-Version arbeiten. Das könnte klappen.
Michael
Das abholen und eine offline Versionsnummer machen war der Plan nur habe ich noch nicht so richtig den roten Faden gefunden um in der XML Datei nach einer Rufnummer zu suchen! Hast du eine Idee ? Evtl über den Umweg die XML in ein Array zu schreiben und dann in dem Array suchen ?
Xpath ist eine Funktion mit der du XMLElemente Filtern kannst.
Bin gerade an Handy, aber schau mal in die PHP-Doku bei de.PHP.net
Dort steht glaube ich ein Link, mit Beispielen.
Michael
Ich berichte dann mal! Das mit, bei jedem Anruf live das Telefonbuch abholen, funktioniert bei der 7390 Problemlos in akzeptablere Zeit. Ich lege es mir dann in ein Array und durchsuche dieses. Falls nichts gefunden wird so suche ich noch bei Das Örtliche! Die ganze Aktion dauert bei 234 Nummer in der Fritzbox mit anschließender online Suche 1,5-1,7 sec. Je früher die Nummer gefunden wird desto weniger Zeit wird natürlich benötigt.
Ich würde sagen durchaus akzeptabel! Nun geht es an Sonos/Heos und Enigma2 Ausgabe.
Bzgl. Sonos-Ausgabe, da gibt es genug Thread hier mit Sprachausgabe/TTS über z.B. IPSSonos, PHPSonos, oder einfach so. Zu Heos gab ich meine ich auch mal was, da bin ich mir aber nicht sicher.
anbei mein Script, es muss lediglich die ID des SOAP Scripts eingefügt werden, welches das Telefonbuch als XML von der Fritzbox holt. Anschließend kann das Script z.b. bei Anruf Mord Includiert werden und mit Suche(‚Rufnummer‘) verwendet werden.
ich hoffe es ist akzeptabel für euch, ich bin ja kein PHP Meister
Gruß Bernd
<?
/*Ein Script von Teufel24111991 Aus dem IP-Symcon Forum*/
/********** Dises Script liest den Namen zu einer Rufnummer aus dem FritzBox Telvonbuch oder Das Örtliche aus ***////
$Telefonbuchscript_ID = 20434; //Hier ist die ID des XML-Telefonbuch-Scriptes einzutregen
/*Die Funktion wird aufgerufen mit Suche('Rufnummer');*/
/////////////////////////////////////////////////
// //
//*Ab Hier muss nichts mehr geändert werden!! */
// //
////////////////////////////////////////////////
function Suche($telefonnummer){
global $Telefonbuchscript_ID;
//Telefonbuch aus der Fritzbox holen und dann vergleichen
include(IPS_GetScriptFile($Telefonbuchscript_ID)); //XML Telefonbuch Includieren
$XML = simplexml_load_string($phonebook); //XML-Datei in Variable ablegen
$a = 0;
$Kontakte_alle = $XML->phonebook->contact; //XML_Datei auf Kontakte kürzen
$Anzahl_Kontakte=count($Kontakte_alle); //Anzahl der Kontakte ermitteln
//XML Datei Auslesen und Neues Array mit den Rufnummern zusammensetzen
while ($a <= $Anzahl_Kontakte-1){
//Name Auslesen und von UTF8 decodieren
$Name_UTF8 = $XML->phonebook->contact[$a]->person->asXML();
$Name = utf8_decode($Name_UTF8);
//Rufnummer Auslesen////////////////////////////////////////////////////////
$Rufnummer_alle = $XML->phonebook->contact[$a]->telephony->number;
$Anzahl_nummern=count($Rufnummer_alle); //Anzahl der gespeicherten Rufnummern Pro Person ermitteln
//Wenn nur eine Rufnunmmer Eingetragen ist
If ($Anzahl_nummern == 1){
(string)$Rufnummer = $XML->phonebook->contact[$a]->telephony->number->__toString();
If($Rufnummer == $telefonnummer){ //auf zu suchende Rufnummer Vergleichen
$Treffer = $Name;
break; //Schleife Abbrechen da Treffer gefunden
}
}
else //Wenn mehr als 1 Rufnummer eingetragen ist
{
$b=0;
while ($b <= $Anzahl_nummern-1){ //Für jede Rufnummer einen Anhang im Array erstellen und nummer Anhängen
(string)$Rufnummer = $XML->phonebook->contact[$a]->telephony->number[$b]->__toString(); //Rufnummer aus XML holen
If($Rufnummer == $telefonnummer){ //auf zu suchende Rufnummer Vergleichen
$Treffer = $Name;
break; //Schleife Abbrechen da Treffer gefunden
}
$b++;
}
}
If(!empty($Treffer)){ //Wenn Treffer einen Namen enthält schleife Abbrechen (Schneller)
break;
}
$a++;
}
If(empty($Treffer)){ //Wenn im internen Telefonbuch nichts gefunden wurde bei das Örtliche nach Teilnehmer suchen
//Rückwertssuche bei Das Örtliche wenn nichts im Internen Telefonbuch gefunden wurde
$data=Sys_GetURLContent("http://www.dasoertliche.de/Controller?form_name=search_inv&ph=$telefonnummer");
if(preg_match('/na: "(.*)"/', $data, $result)) $Name_ist = $result[1];
If(empty($Name_ist)){ //Wenn Online kein treffer gefunden wurde die Rufnummer in Name_ist schreiben
$Name_ist = $telefonnummer;
}
$Name_ist = strip_tags($Name_ist); //XML-Befehhle entfernen
return $Name_ist; //Name zurückgeben
}else{
$Treffer = strip_tags($Treffer); //XML-Befehhle entfernen
return $Treffer; //Name Zurückgeben
}
}
?>