Anrufererkennung

Hallo,

ich benutze auch die Rufnummerauflösung aus „DasOertliche“. Nun gbt es ja Anrufer deren Rufnummer übermittelt wird, die aber nicht im Telefonbuch stehen.

Nun meine Frage ist möglich eine einfache Textdatei zu erstellen, in der man Rufnummer und Name hinterlegt.

z.B. so

0123582582, Erwin Müller
0124123654, Fritz Schmitt

und diese dann durchsuchen lässt und wenn die Nummer gefunden wird der dazugehörige Name angesagt wird.

Und vor allen Dingen wie muss dann das Script aussehen um solch eine Datei zu öffnen und durchsuchen zu lassen.

Hallo,

gibt es hier zu schon eine Lösung ?

Gruß Uwe

17.12.06, 10:43

:confused:

Du bist im Archiv der V1 ;).

Hallo,

klar gibt es eine Lösung.

Er werden einige Variablen benötigt.

  • Anrufer Var
  • Anrufer Stadt
  • Anrufer Name
  • Anrufer Liste (Textbox der letzen x Einträge)

Es wird als erstes das Textfile in Media durchsucht.
Wird dort ein Eintrag gefunden werden die Daten übernommen und über die Soundkarte wieder gegeben.

Ist kein Eintrag gefunden, wird das örtliche durchsucht.
Das funktioniert aber nicht zuverlässig. Aus Zeitmangel habe ich den Fehler noch nicht gefunden.
Falls ein Eintrag gefunden wird, wird dieser auch auf der Soundkarte wiedergegeben.

Wiedergabe Text wäre dann „Anruf von Steiner“

Bekannte Bugs:
kein sauberen Eintrag bei Anonymen Anrufern.
Falls in beiden beide Telefonbüchern keinen Eintrag haben sollte die Telefonnr. vorgelesen werden. Es wird die Nummer leider als eine Zahl vorgelesen.

Aufbau der Datei Telefonbuch.txt:
Telefonnummer, Name, Ort
Die Datei muß sich im IPS\Media Verzeichnis befinden.

Die ID müssen entsprechend angepasst werden.
Ebenso die Namen Ihrer Telefonnummer. Bei mir hängt IPS an einer Nebenstellen Anlage.

Die Basis des Scriptes ist hier aus dem Forum. Ich habe es um die Soundausgabe und das interne Telefonbuch erweitert.

Viel Spaß

Hier nun das Script:

<?
 //Aktive Verbindungen ausgeben
//print_r (ISDN_GetActiveConnections(59334 /*[ISDN Haussteuerung\ISDN Anschluß]*/));

echo "Start";
 if($IPS_SENDER == "ISDN")
 {
    //Informationen ins Meldungsfenster ausgeben
    echo " Event: ".$ISDN_EVENT."\r";

	//Ablageort für termine.txt
	$filename = IPS_GetKernelDir()."media\	elefonbuch.txt";

    //Informationen ins Meldungsfenster ausgeben
	$stunde=date("H");
	$minute=date("i");
	$zeit = $stunde.":".$minute;
	$tag = date("d");
	$monat = date("m");
	$jahr = date("Y");

    if($ISDN_EVENT != "Disconnect")
    {
		 $callinfo = ISDN_GetConnectionInfo(59334 /*[ISDN Haussteuerung\ISDN Anschluß]*/ , $ISDN_CONNECTION);
//Mehr Informationen ausgeben
//      print_r($callinfo);

		switch ($callinfo['CalledNumber'])
		{
			case "41":
				$ziel = "Intern 41";
				break;
			case "42":
				$ziel = "Intern 42";
				break;
			case "43":
				$ziel = "Intern 43";
				break;
			case "44":
				$ziel = "Intern 44";
				break;
			case "45":
				$ziel = "Fax";
				break;
			case "46":
				$ziel = "IP-Symcon";
				break;
			case "47":
				$ziel = "intern 47";
				break;
			case "48":
				$ziel = "intern 48";
				break;
		}

		//internes Telefonbuch abfragen
		$tel = $callinfo['CallingNumber'];
//echo $tel." ".$ziel."
";
      $Anrufer_Name = "";
		$anruffile = file_get_contents($filename); 											// Einträge in Variable einlesen
		$anruf_arr_komplett = explode("
", $anruffile); 								// nach Zeilenumbruch trennen und in array
   	foreach($anruf_arr_komplett as $key => $value) 										// alle Einträge durchlaufen
	   {
//			$value =  str_replace("
","",$value) ;                                 // CR rausfiltern
   	   $anruf_arr = explode(",", $value); 													// einzelnen Datensatz in Daten zerlegen

			$anruf_tel   		= $anruf_arr[0];
	      $anruf_name   		= $anruf_arr[1];
   	   $anruf_stadt      = $anruf_arr[2];
			if ($anruf_tel == $tel)                                                 // Übereinstimmung internes Telefonbuch und Anrufer
			{
				$Anrufer_Name = $anruf_name;
			}
		}

		// externes Telefonbuch abfragen
		if (($Anrufer_Name == "") and (strlen($tel) > 4))                          // Wenn internes Telefonbuch kein Ergebnis brachte extern suchen
		{
         if ((substr($tel, 0, 1) !== "0") and (strlen($tel) > 4))  					//erste 0 verschluckt
         {
				$tel="0".$tel;
			}
         $url="http://www1.dasoertliche.de/?form_name=search_inv&ph=".$tel;      // versuchen Anrufen zu identifizieren
	      WWWReader_SetPage(56096 /*[WWW reader (Das örtliche)]*/ ,$url);
	      WWWReader_UpdatePage(56096 /*[WWW reader (Das örtliche)]*/ );
			$test = WWWReader_GetPage(56096 /*[WWW reader (Das örtliche)]*/);

			echo $test."
";
			$Anrufer_Var = GetValueString(34316 /*[Webfront\.Anrufer_Var]*/ );
			// Wenn in Anrufer_Var "item noprint" steht, war Suche erfolgreich
			if ($Anrufer_Var !== "item noprint")                                    // Suche ohne Ergebnis, dann ist der Name die Telefon Nummer
			{
				$Anrufer_Name = $tel;
				$Anrufer_Stadt = "";
			}
			else                                                                    // Suche mit Ergebnis
			{
		      $Anrufer_Name = GetValueString(27732 /*[Webfront\.Anrufer_Name]*/ );
		      $Anrufer_Stadt = GetValueString(18794 /*[Webfront\.Anrufer_Stadt]*/ );
				$newanruf = $tel.",".$Anrufer_Name.",".$Anrufer_Stadt."
";
				file_put_contents($filename, $newanruf, FILE_APPEND);
			}
		}
		$data = GetValueString(49190 /*[Webfront\Anrufer_Liste]*/);                         // Anruf Liste lesen und aufarbeiten
      $datasets = explode("
", $data);
		$data = $datasets[0]."
";
      for ($i = 1; $i < 18 ; $i++)                                               // Alte Anrufliste auf 20 Einträge reduzieren
      {
			$data .= $datasets[$i]."
";
      }
		if (($Anrufer_Name == "") or ($Anrufer_Stadt == ""))
		{
			$text = $tag.".".$monat.".".$jahr."  ".$stunde.":".$minute."  ".$Anrufer_Name." ruft ".$ziel;
			$textansage = $tel." ruft ".$ziel;
		}
		else
		{
			$text = $tag.".".$monat.".".$jahr."  ".$stunde.":".$minute."  ".$Anrufer_Name." aus ".$Anrufer_Stadt." ( ".$tel." ) ruft ".$ziel;
			$textansage = $Anrufer_Name." aus ".$Anrufer_Stadt." ruft ".$ziel;
		}
      SetValueString(49190 /*[Webfront\Anrufer_Liste]*/ ,$text."
".$data);               // Neue Anrufliste erstellen
   	echo $text."
";
      $file = IPS_GetKernelDir()."media\\Anrufer.wav";
      TTS_GenerateFile(37903 /*[Geräte\Text To Speech]*/ , "Anruf von ".$textansage, $file, 6);
      WAC_PlayFile(27579 /*[Webfront\Radio\Webradio]*/   ,$file);


    }
 }

?>

@Foren-Admins:
Kann das mal bitte jemand in den normalen aktuellen Bereich transferieren, zumindest die letzten 2010er-Beiträge, zB. mit Link auf die alten im Archiv?

Das Thema selbst ist aber m.E. zu heiß, als dass es wegfallen sollte. Danke!

Zum Thema:

@MCS-51:
wo / wie bitte füllst du diese Variable?


$Anrufer_Var = GetValueString(34316 /*[Objekt #34316 existiert nicht]*/ );

Der Kommentar-Verweis auf das Webfront in deinem originalen Posting läßt da „Schlimmes“ erahnen, bzgl. vorprogrammierter Instabilitäten und nahezu unmöglicher Fehlersuche.

Müßten statt des Webfronts hier nicht besser Cutter und Co ansetzen?

Nachtrag:
wg. Vorlesen der Nr.: Mach doch Leerzeichen zwischen alle Ziffern. Schleife über alle Stellen des Nummern-Strings und dabei neuen String zzgl. Space zusammenbauen

Gruß Gerd

Hallo,

da konnte ich schon einiges mit anfangen.

Meine Textdatei sieht aber so aus. Es ist ein Exportdatei von Outlook.

„“,„Vorname“,"",„Name“,"",„Firma“,"","",„Straße 25“,„Ort“,„NRW“,„40472“,„Deutschland“,"+49 (178) 5370699",

Wie müsste ich das machen um die passenden Daten da raus zu bekommen.

Gruß Uwe

probier es mal mit…

explode(",", $string);

Hallo, RWN

das steht doch schon im Script drin. Ich muß die " weg bekommen,
und die Anzahl der Array Stellen einfach mal Anzahl der (,) oder ?

Wie bekomme ich die TelNr. noch geändert in (01785370699).

Gruß Uwe

sorry, hab mir das Script nicht angesehen. Dann nimm halt ‚"‘ dann mach ein print_r($string) dann hast Du deine Daten ohne Komma.

Hallo,

war schon ein wenig spät. Weswegen ich vielleicht eine Erklärung weggelassen habe.

WF ist Standard. Nichts geändert o. ä.

Als erstes gibt es einen WWWReader (ID:56096). Der Link darin ist egal. Der wird vom Script gesetzt.

Dann gibt es einen Textparser (19700). Als Quelle hat er fest den WWWReader. Das Ziel ist Anrufer_Var (34316), Anrufer_Name(27732), Anrufer_Stadt (18794).
Siehe Anhang.

Anrufer_Var wird nur dazu genutzt um zu erkennen ob die Suche beim örtlichen nicht Erfolgreich war. Wenn Erfolgreich dann sind die Variablen Anrufer_Stadt, Anrufer_Name gültig. Wenn nicht stehen noch alte Werte drin.
Alternativ könnte man die Variablen auch vorm der Abfrage beim örtlichen löschen. Dann sehe ich aber nicht, wer als letzter mit Namen angerufen hat.
Die unbekannten kenne ich nicht und sind mir egal. Bekannte und Freunde sind in meinen Adressbuch (Telefonbuch.txt) und somit namedlich bekannt.

Die Tel Nur zerlegen und mit " " auffüllen kam mir auch schon.
Programmiere aber derzeit ein Grafisches Raumdisplay für mein IPS daher fehlt mir die Zeit. Man muß eben Prioritäten setzen.

@gwanjek:
Nichts verbogen alles Standard. Auch nichts Schlimmes :smiley:
Alles mit Board mitteln.

@UH368:
Der Export sieht ja ganz gut aus. Mußt nur dann in dem Script die variablen Positionen der Textdatei ändern. Zeile 67 - 69.

Ich hoffe ich konnte etwas Licht ins Dunkle bringen.
Einiges geht bestimmt auch eleganter. Ich bin blutiger PHP Anfänger. Assembler ist meine Welt.

Basis ist ein Script hier aus dem Forum, welches das oertliche Abfragt.

Gruß

MCS-51

Hallo,

ich habe das Skript jetzt so geändert das ich die Outlook Text (Kontakt) Datei nutzen kann. Aber das werde ich wieder verwerfen.

Meine Idee die ich jetzt habe, ist es. Wenn ein Anruf reinkommt, das ich irgendwie auf die Nummer tippen kann, und ich die Telefonbuch Datei editieren kann.

Sozusagen übernehme die Rufnummer in die Telefonbuchdatei mit folgendem Name. Den Namen würde ich dann per Tastatur eingeben.

Ist das irgendwie möglich, das man in einen Textdatei schreiben kann?

Gruß Uwe

Das war die missing Info. Thx, nun funzt es, zumindest im rudimentären Testscript.

„Schlimmes“ bezog sich auf Vermutungen, dass das WF und dortige interne Variablen o.ä. da eine Rolle spielen würden. Das wäre ein wenig „von hinten mit der Faust durchs Auge“ usw. aber soll ja Kollegen geben, die sowas tun :wink:

Werd mal ein wenig rumprobieren, mal sehen was so rauskommt.

Erstmal nochmals Danke,
Gruß Gerd

Nachtrag:
Das Zusammenspiel von WWW Reader und Textparser ist so, wie hier angewendet, definitiv buggy! Die Änderunen der URL werden nicht wirklich oder erst nach langem, stochastischen Timeout wirksam. Vielleicht fiel das bisher nicht so auf, weil ja meist relativ viel Zeit zwischen Anrufen vergeht.

Ergänze bitte mal folgende Zeile sinngemäß (Variablen anpassen usw.):


	WWWReader_SetPage($iID, $url);
	IPS_ApplyChanges($iID);   // <-- diesen Befehl hier einfügen!
	WWWReader_UpdatePage($iID);

Mit „IPS_ApplyChanges($iID);“ wird die geänderte Konfiguration (=URL) der Instanz erst zurückgeschrieben! Quasi der „OK“-Knopp.

Findest Du auch hier, 3. Beispiel-Kasten.

Außerdem:
bei Befehl „$test = WWWReader_GetPage($iID);“ kommt es ab und zu zu folgender Konsolenausgabe:


Warning:  Read timed out. in [Versuche\anrufer Reverse test] on line 20

Es wäre schön, das direkt abfangen zu können. Aber da bin ich auch zu weit weg vom PHP. Vielleicht hat jemand eine Idee, wie das in eine PHP-Variable zurückgelesen werden könnte?

Das "if ($Anrufer_Var !== „item noprint“) " kann definitiv nicht mehr greifen. Bei meinen Versuchen heute kam kein einziger derartiger „<div class=„xxxxx“>“-String mit xxxxx=„item noprint“ im Quellcode korrekter Abfragen vor, auch nicht als Teilstring. Dafür viele viele andere.

Da sollte man vielleicht mal ansetzen, um mehr Stabilität zu erhalten.

Übrigens liefern der Parser-String: {st: „/“,} (ohne {}, Trennung bei /) die Strasse. {pc: „/“,} müßte die PLZ liefern, greift aber bei mir im Gegensatz zur Strasse irgendwie nicht.

Außerdem finde ich es sehr sinnvoll, initial die Variableninhalte (Name, Ort usw.) zu löschen. Evtl. fehlende Angaben mit Werten vorheriger Abfragen zu füllen, ist irgendwie sinnfrei.

Einen Stack der (erfolgreichen) Abfragewerte für Anzeige und Auswertung aufzubauen, ist dagegen Aufgabe einer nachgeschalteten Datenbankein-/-ausgabe oder einer Variablenrotation der Anzeige-String-Variablen, nicht jedoch der dort wiederum angelieferten und hier aufgebauten Initialwerte.

Gruß Gerd