Gesprächsdatensätze aus der Telefonanlage übernehmen

Hallo,

Eine kleine Vorgeschichte:
ich war in den letzten Tagen dabei, meine Telefonanlage gegen die Telefoniefunktionen der FritzboxFon auszustauschen, da hier ja recht viel Scripterei rund die AVM-Box vorhanden ist.
Nun kommt es leider recht häufig vor, dass alle DECT-Mobile die Basis suchen, auch wenn die Mobilteile direkt daneben liegen. Das gab natürlich mismutige Stimmung zu Hause.

Hat den Fehler auch jemand? Zu Anfang ging es nur mit Neustart nun auch mit einiger Wartezeit, dass die MTs wieder da sind…

Also wieder die Hipath ran. Da möchte ich nun die Gespräche abgreifen. Das geht z.B. mit einem TCP-Client. Also habe ich einen Server-Socket mit Port und Anzahl der Verb. eingerichtet. In der Anlage die IP-Adresse der IPS und denselben Port eingetragen. Register-Var. und ein Zielscript. Es kommen aber keine Daten. Kann ich den Server-Socket durch einen anderen Monitor (im Debug-Fenster der Socket steht nichts drin) beobachten, ob da überhaupt irgendwas ankommt?

Ein anderer Weg könnte auch TFTP sein. Da kann die Anlage Server oder Client sein.

Hallo,

Geh mal ins FritzBox-Menü unter DECT -> Basisstation und schau nach, das die Haken bei „DECT Funkleistung verringern“ und „DECT Eco“ nicht gesetzt sind.
Der Stromsparmodus bei DECT verursacht einige Probleme, selbst mit AVM-Handsets

Hallo,

Welche hipath haste denn am kaufen? Haste mal die Version? Ich kann dann mal nachschauen was noch möglich ist. Kanste auch mit rs232 ausgeben lassen!

Dirk

Hallo,

@Tuxtom007: Die Haken sind bereits alle raus.

@onkeldirk: Ist ne HP3550 mit V8. V24 wollte ich vermeiden, da ich alles LAN habe. Kann aber mit einem DOS-Befehl die Gebühren per TFTP aulesen, in ein File schreiben. Diese müßte ich dann einlesen und nach den Kriterien aufteilen (Explode). -> IPS-Variablen zuteilen -> in DB schreiben. Anschließend bei Aufruf im WFE wieder auslesen und anzeigen. Schicker wäre einen Socket zu benutzen, aber damit komme ich derzeit nicht wirklich klr. Hatte beim Socket für den Fritzbox abgeguckt, aber nicht wirklich was zielführendes gefunden.

Geht bei der Fritzbox einfacher, aber wenn die Mobilteile öfter abstürzen habe ich damit dann auch keine Freude damit.

Wie kann ich den mit Wireshark feststellen, ob da was grundsätzlich per LAN ausgegeben wird.

Hallo,

Ich habe mal in der Firma mir die Gebührendaten Via TCP-Client ausgeben lassen und diese dann mit Wireshark getraced. Die anlage gibt daten heraus. Ich kann sie aber leider nicht richtig lesen.

Leider habe ich IPs nicht auf einem Rechner in der Firma. Ich habe unter
Systemstatus -> Gebühren -> Ausgabe folgendes gekreuzt. Anrufprotokoll,kommende Gespäche, Gehend ohne verbindung und LCR-Rufnummer.

Dann habe ich unter LAN-Settings TCP-Client auf Addr. 192.168.242.132 : 7654 eingestellt.

nun kommen bei mir daten auf dem Port 7654.

Zitat-Handbuch:
„TCP- Client
Bei anfallenden Gebühren initiiert der Client eine TCP/IP-Verbindung zu einem externen Gebührenserver
(externe Applikation). Nach dem Verbindungsaufbau werden die Gebührendaten
übertragen, die Verbindung bleibt permanent bestehen, weiter anfallende Gebühren werden
versendet. Jeder Datensatz wird dabei einzeln verschickt.
Die TCP/IP-Adresse des Servers ist über IP-Addr. konfigurierbar.“

Dirk

Hi,

hab ich das richtig verstanden, Du bekommst aus der HiPath 35xx die kommenden Rufnummern herraus, nur noch nicht in den IPS Rechner?
Bau gerade die 3500 V8 ein und würde gerne eine Anruferliste und Ansage bei Anruf realisieren…

Gruß

Jan

Moin,

nun kommt doch noch ein wenig Stimmung auf. Auch eine Anrufliste und die Anzeige im WFE (ähnlich der Fritzbox) schweben mir vor.
Genial wäre dann nicht nur die Anzeige im WFE, sondern auch eine Rückruffunktion. Da müßte dann eine TAPI-Schnittstelle vorhanden sein. Aber das ist alles Kür.

Zunächst die Übernahme des Satzes ins IPS. Habe es per TCP-Client nicht hinbekommen, dass im IPS etwas erscheint. Habe einen Server-Socket mit dem gleichen Port wie in der Anlage angelegt. Anzahl auf 1 und Socket ist geöffnet. Registervar und Script angelegt. Dann Gebühren erzeugt. Aber keine Reaktion im IPS. Alles bei ausgeschalter Firewall.

Was mache ich noch falsch? Oder wie funktioniert der ServerSocket im IPS?

PS: Auch nach einem externen Gespräch finde ich keinerlei Meldungen im Wireshark von der IP der Hipath. Anlage ist auch schon neugestartet.

Nochmal ich:

nachdem ich nicht ein Stück weitergekommen bin, nun ein anderer Weg:
ich möchte mir die Gebühren per tftp aus der Anlage holen, was auf dem DOS-Prompt aus dem angegeben Ordner auch funktioniert - das File wird angelegt:

tftp -i 192.168.1.53 GET gez.txt C:\IP-Symcon-Daten\Hipath\geb_temp.txt

Nun bin ich ja nicht ständig am IPS-Server angemeldet. Dennoch soll per IPS dieser Befehl zyklisch ausgeführt werden.

Das klappt weder mit shell_exe()

shell_exec („C:\IP-Symcon-Daten\Hipath\abholen.bat“); oder shell_exec (‚C:\IP-Symcon-Daten\Hipath\abholen.bat‘);

noch mit IPS_ExecuteEX bzw. IPS_Execute:

IPS_ExecuteEx(„C:/IP-Symcon-Daten/Hipath/abholen.bat“, „“, true, false, 2);

Was könnte ich falsch machen? Zum Testen bin ich am IPS-Server angemeldet und habe aus dem Taskmanager die Session-ID in den Befehl übernommen. Und trotzdem nichts. Führe ich die Batchdatei manuell aus geht es ohne Probleme.

So. Ich bin mal einen anderen Weg gegangen: mit cURL. Habe aus dem Internet einige Dinge zusammengetragen - läuft aber nicht.

<?

// http://www.ivankristianto.com/web-development/programming/things-you-can-do-with-php-curl/1454/
// http://answerpot.com/showthread.php?716562-curl+tftp+connection+fail
 
 
set_time_limit(0); // set no time limit to download large file
ini_set('display_errors',true);//Just in case we get some errors, let us know....

$fp = fopen (IPS_GetKernelDir().'geb.log', 'w+');//where the file will be saved
$ch = curl_init('tftp://192.168.2.53/gez.txt');//Here is the file we are downloading
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_FILE, $fp);

curl_exec($ch);
curl_close($ch);
fclose($fp);
?>

Das File wird angelegt, enthält jedoch keine Daten -> kein TFTP-Abholen

Hat das jemand damit gemacht?

Habe nun auch versucht über Sockets zu gehen, geht auch nicht.

<?php

// http://www.php.net/manual/de/function.socket-create.php#43057


$h = "192.168.2.53";
$f = "gez.txt";
tftp_fetch($h,$f);
echo $ret;


  function tftp_fetch($host, $filename)
  {
    $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

    // create the request packet
    $packet = chr(0) . chr(1) . $filename . chr(0) . 'octet' . chr(0);
    // UDP is connectionless, so we just send on it.
    socket_sendto($socket, $packet, strlen($packet), 0x100, $host, 69);

    $buffer = '';
    $port = '';
    $ret = '';
    do
    {
      // $buffer and $port both come back with information for the ack
      // 516 = 4 bytes for the header + 512 bytes of data
      socket_recvfrom($socket, $buffer, 516, 0, $host, $port);

      // add the block number from the data packet to the ack packet
      $packet = chr(0) . chr(4) . substr($buffer, 2, 2);
      // send ack
      socket_sendto($socket, $packet, strlen($packet), 0, $host, $port);

      // append the data to the return variable
      // for large files this function should take a file handle as an arg
      $ret .= substr($buffer, 4);
    }
    while(strlen($buffer) == 516);  // the first non-full packet is the last.
    return $ret;
  }

?>

Gibt diesen Fehler:

Warning: socket_sendto(): in C:\IP-Symcon\scripts\28571.ips.php on line 19

Warning: socket_recvfrom(): unable to recvfrom [0]: Der Vorgang wurde erfolgreich beendet.
in C:\IP-Symcon\scripts\28571.ips.php on line 28

So, hab da mal wieder nen bissl rumprobiert und dabei Daten aus der RS232 rausbekommen.

Beim klingeln kommen Daten in denen auch der Anrufer dabei ist.

<?


if(stristr($IPS_VALUE, "
")) {//ist in Uebergebenen String ein "Return (
)" enthalten?
   $tmp2 = getvalue(46227 /*[Test & Bastel\Rufnummern aus HiPath3500\String_Anruferanzeige]*/);
	$tmp2 .= $IPS_VALUE;
   setvalue(46227 /*[Test & Bastel\Rufnummern aus HiPath3500\String_Anruferanzeige]*/, "");
   
   echo "
Telefonstring: ".strlen($tmp2)."
";


   $arrsplit = array();
   $arrsplit['Datum'] = substr($tmp2,0,8);
   $arrsplit['Zeit'] = substr($tmp2,8,8);
   $arrsplit['Leitung'] = substr($tmp2,16,3);
   $arrsplit['Teilnehmer'] = substr($tmp2,19,6);
   $arrsplit['Rufdauer'] = substr($tmp2,25,5);
   $arrsplit['Gespraechsdauer'] = substr($tmp2,30,8);
   $arrsplit['Rufnummer'] = substr($tmp2,38,25);
   $arrsplit['Gebuehr'] = substr($tmp2,63,11);
   $arrsplit['Info'] = substr($tmp2,74,2);
   $arrsplit['Prjekt'] = substr($tmp2,76,11);
   $arrsplit['MSN'] = substr($tmp2,87,11);
   $arrsplit['Access-Code'] = substr($tmp2,98,5);
   $arrsplit['LCR-Route'] = substr($tmp2,103,2);
   $arrsplit['PRI'] = substr($tmp2,105,2);
   $arrsplit['PWI'] = substr($tmp2,107,1);
   $arrsplit['PRI-CIC'] = substr($tmp2,108,4);
   $arrsplit['Gesendete-Ziffern'] = substr($tmp2,112,25);
   $arrsplit['Zeilenende'] = substr($tmp2,137,2);
print_r($arrsplit);

/*
if($arrsplit['Info'] == 0) {
	echo "Rufnummer: ".$arrsplit['Rufnummer']."
";
}elseif($arrsplit['Info'] == 1) {

}

*/

#x Ruft an => Ansage "Bla" an "xxxxx"

#Anruferliste mit Nichtangenommen


}else {
	$tmp = getvalue(46227 /*[Test & Bastel\Rufnummern aus HiPath3500\String_Anruferanzeige]*/);
	$tmp .= $IPS_VALUE;
	setvalue(46227 /*[Test & Bastel\Rufnummern aus HiPath3500\String_Anruferanzeige]*/, $tmp);
}


?>

Wer mich kennt weiss, dass das Script nicht von mir sein kann - also nicht ich sondern Hilfe gehabt

Es kommen auch bei Bendigung des Gespräches Daten aus der Anlage.

Gruß

Jan