Telefonanlage AGFEO AS43 mit IPS auslesen

Hallo liebe Forumgemeinde,

da einige ja schon Ihre Fritz-Box auslesen und das Rufjournal im WebFront anzeigen, habe ich mir gedacht, dass müsste doch mit meiner AGFEO Telefonanlage AS43 auch gehen.

Hat jemand damit schon Erfahrungen gesammelt. Schließlich hat die Anlage ja eine serielle/USB-Anschluß für TAPI und Konfiguration.

bin mal gespannt ob es noch weitere AGFEO-User gibt :slight_smile:

Hallo wago-pdm,

Die TKSuite Software besitzt eine SOAP Schnittstelle.
Im Ordner TKSuite\Webpages\findest du die tksuite.wsdl.

Gruß Michael
Ps.: Hab’s auch schon propiert aber nicht hinbekommen, vielleicht klappts bei dir.

Hallo wago-pdm,

so hab doch was hinbekommen.
Die Anruferliste wird aus der Datenbank von TKsuite ausgelesen.TKSuite muss installiert werden.

<?
$text ="";
$Intern  =11;//Interne Rufnummer
$inhalt = GetCallerList($Intern);
foreach ($inhalt as $zeile)
{
$text.=date("d.m.y H:i", strtotime($zeile['time']))."   ".Str_Replace("#"," intern  ",$zeile['number'])."
";
}
Setvalue(52484 /*[SYSTEM\AGFEO\Anruferliste EG]*/ ,$text);


$text ="";
$Intern  =20;//Interne Rufnummer
$inhalt = GetCallerList($Intern,10);
foreach ($inhalt as $zeile)
{
$text.=date("d.m.y H:i", strtotime($zeile['time']))."   ".Str_Replace("#"," intern  ",$zeile['number'])."
";
}
Setvalue(54680 /*[SYSTEM\AGFEO\Anruferliste OG]*/  ,$text);

Function GetCallerlist($Intern,$LastMax= 10){
	$ausgabe =ARRAY();
	$TkserverDBpfad = "sqlite:\AGFEO\TK-Suite-Server\dbf\call_history.db";//Datenbank pfad ohne Laufwerksbuchstabe
	$dbh = new PDO($TkserverDBpfad);
	foreach ($dbh->query('SELECT * from callerlist WHERE pbx_user LIKE '.$Intern.' and incoming like 1 ORDER BY pbx_user DESC LIMIT '.$LastMax) as $row)//SQL-Abfrage nach Intern und Anzahl
	{
		$ausgabe[]= $row;
	}
	Return $ausgabe;
	$dbh = null;
}

?>

Anzeige Datum Uhrzeit und Nummer .
Was ich aber immer noch nicht hinbekommen habe ist die Soap-Verbindung zum TK-Server.Vielleicht kann mir da jemand weiter helfen, die wsdl hab ich anghängt.Bei mir komm immer SOAP Fehler, Dll wurde eingebunden,weil ich noch eine SOAP verbindung hab diese funktioniert auch.
Mit der Soap-Verbindung wäre meiner ansicht nach noch ein Anrufmonitor Im Webfront möglich.

Gruß Michael

tksuite.txt (27.7 KB)

Hallo
noch mal wegen dem Aufruf meiner Soap-Verbindung,
ich verstehe es einfach nicht.

Hier mal mein Aufruf:

$soap = new SoapClient("http://localhost:5080/TkSuite.wsdl");

dann kommt der Fehler

Fatal error: Uncaught SoapFault exepetion: [WDSL] SOAP-ERROR: Parsing WSDL : Couldn't load form 'http://localhost:5080/TkSuite.wsdl' : failed to load external entity "http//localhost:5080/tkSuite.wsdl"

Wenn ich im Browser die Adresse eingebe wird mir die wsdl angezeigt,also
müsste doch wenigstens die Adresse und der Port stimmen,oder?

Kann mir jemand den richtigen Aufruf erkären, oder wenigsten den Fehler?

Danke im voraus
Michael

Hallo Michael,

schöne Überraschung - ich hatte das Projekt schon beiseite gelegt :slight_smile:

also momentan bin ich noch an Deinem Skript dran, um die lokale DB auszulesen (klappt noch nicht, irgendwie scheinen die Pfadangaben nicht zu passen, wo ist der Laufwerksbuchstabe zu setzen???).

Warum möchtest Du noch über SOAP fahren, da doch die lokale DB die momentanen Anrufer drin hat?

ich probier mal weiter …

Gruß
Tilo

Hallo Tilo,

also der pfad ist bei mir C:\AGFEO\TK-Suite-Server\dbf\call_history.db dieser muss einfach ohne laufwerksbuchstabe angegeben werden.
Bei mir sqlite:\AGFEO\TK-Suite-Server\dbf\call_history.db.

Ich hab Windows 7 Installiert ,da ist er Pfad vielleicht anders?
Hast du TKSuite installiert?
Such doch einfach mal nach call_history.db.

Das mit dem Soap aufruf hab ich aufgegeben.
Wenn du die Software von Agfeo installiert hast, dort sieht man welches telefon abgehoben ist,wer mit wem im moment telefoniert und welche Ext S0 belegt sind.Wäre eine Tolle erweiterung gewesen.

Gruss
Michael

Hallo Michael,

mmh - es klappt noch nicht so richtig …

folgende Fehlermeldung kommt immer (bei manueller Skriptausführung)

Fatal error:  Uncaught exception 'PDOException' with message 'could not find driver' in D:\Programme\IP-Symcon\scripts\24591.ips.php:28
Stack trace:
#0 D:\Programme\IP-Symcon\scripts\24591.ips.php(28): PDO->__construct('sqlite:\AGFEO\T...')
#1 D:\Programme\IP-Symcon\scripts\24591.ips.php(9): GetCallerlist(14)
#2 {main}
  thrown in D:\Programme\IP-Symcon\scripts\24591.ips.php on line 28

die Zeile 28 ist folgende

$dbh = new PDO($TkserverDBpfad);

was heisst hier: ‚could not find driver‘ ??

  • habe den Pfad auch auf C:\ kopiert (lag vorher auf D:)
  • call-history.db ist auch vorhanden und befüllt
  • OS ist WinXP mit IPS 2.1
  • AGFEO ist AS 43 mit TK-Suite 4.2.12 (sollte aber keine Rolle spielen)

bzgl. sqlite habe ich was von speziellen „Extensions“ gelesen???

Danke für die Starthilfe :slight_smile:

Tilo

Hallo Tilo,

sorry hab vergessen du muss die Extensions php_pdo_*.dll reinkopieren, welche genau weis ich jetzt auch nicht, ich hab alle reinkopiert gehabt.

Michael

anruferliste.JPG

Hi Michael,

… klappt leider immer noch nicht, habe alle reinkopiert (unter ipsymcon/ext/…) und die php.ini angepasst.
IPS Neustart bzw. sogar Server-Neustart …

-> leider gleiche Fehlermeldung wie oben

p.s. Dein WebFront motiviert mich nur noch mehr :slight_smile:

Tilo

Hallo Tilo,

die Php.ini brauchst du nicht anzupassen wird alles automatisch geladen.
Hast du die aktuellen Dll der PHP 5.3.1 benutzt.
Zum runterladen

http://www.ip-symcon.de/service/dokumentation/installation/migration-v21-v22/

In welchem Pfad befindet sich die Datenbank Call_History.db?
Hab gesehen das IPS auf laufwerk D: läuft ,TKsuite auch? Dann musst du, hab ich gerade getestet,doch das Laufwerk angeben,Also „sqlite:Laufwerk:…“.Sorry bin PHP- Anfänger.

Michael

Hi Michael,

tja - dann habe ich erstmal das Update auf 2.2 durchgeführt (wollte ich mir eigentlich noch aufheben :slight_smile: )

aber supi - Skript läuft jetzt auch durch

leider werden die Variablen noch nicht befüllt - aber ich schau mal wo es klemmt …

melde mich wenn Vollzug :wink:

Tilo

… es funktioniert (nach dem ich mit dem Update 2.2 ein wenig „kämpfen“ musste).

Der Fehler war, dass die DB noch leer war - ich hatte das in der TK.Suite nicht aktiviert (Fotos für die Doku anbei).

Spannende Frage - wie sieht es mit der Anzeige des jeweiligen Namen aus
(muss man dass ggf. in der DB matchen bspw. mit der contact.db)???

Michael - Danke noch mal

Tilo

Hallo Tilo,

hab’s jetzt so gemacht das ich in der Contact.db suche und wenn kein eintrag dann Rückwärtssuche Das Örtliche.
Anbei der Code:

/*----------------------------------------------------------------------
Anruferliste OG bearbeiten und in Webfront ausgeben
----------------------------------------------------------------------*/
$text ="";
$Intern  =20;//Interne Rufnummer
$inhalt = GetCallerList($Intern,10,2);
$text.='<style type="text/css">table.Anruferliste { width: 100%; border-collapse: true; } table.Anruferliste td { border: 1px solid #444455; }</style>';
$text .= '<table class="Anruferliste">';
$text.='<tr>';
$text.='<td style="background: #223344;" colspan="1"><img src=/user/icons/Bill_inout.gif></td>';
$text.='<td style="background: #223344;" colspan="1">Datum</td>';
$text.='<td style="background: #223344;" colspan="1">Uhrzeit</td>';
$text.='<td style="background: #223344;" colspan="1">Rufnummer/Name</td>';
$text.='<td style="background: #223344;" colspan="1">Leitung</td>';
$text.='<td style="background: #223344;" colspan="1">Dauer</td>';
$text.='</tr>';
foreach ($inhalt as $zeile)
	{
	If ($zeile['internal'] ==0 and $zeile['incoming'] ==1){
//		$info ="<b style=color:#ea0a0a;/> > </b>";
		$info = "<img src=/user/icons/CallIn.png>";
	}
	Else
	{
		$Nummer = $zeile['number'];
		$info = "<b style=color:#1cb004;/> < </b>";
		If ($zeile['winner'] == -1) {
		   $info = "<img src=/user/icons/CallinFailed.png>";
		}
		else
		{
		$info = "<img src=/user/icons/Callout.png>";
		}
	}

	$Nummer =getCallerName($zeile['number']);
	$name = "unbekannt";
	$date =date("d.m.y", strtotime($zeile['time']));
	$time =date("H:i",strtotime($zeile['time']));
	$date= Str_Replace(Date("d.m.y"),"Heute",$date);
	$date= Str_Replace(Date("d.m.y",time()-86400),"Gestern",$date);
	$text.='<tr>';
	$text.='<td>'.$info.'</div></td>';
	$text.='<td>'.$date.'</div></td>';
	$text.='<td>'.$time.'</div></td>';
	$text.='<td>'.$Nummer.'</div></td>';
	$text.='<td>'.$zeile['line'].'</div></td>';
	$text.='<td>'.date("i:s",$zeile['duration']).'</div></td>';
	$text.='</tr>';
}
$text.="</table>";
//echo $text;
Setvaluestring(54680 /*[SYSTEM\AGFEO\Anruferliste OG]*/  ,$text);



/*----------------------------------------------------------------------
Datenbank Agfeo Tk-Suite auslesen und in Array übergeben
----------------------------------------------------------------------*/

Function GetCallerlist($Intern,$LastMax= 10,$listening = 0){
//listening 0 = Outgoing;
//          1 = incomming;
//          2 = inOut;
	$ausgabe =ARRAY();
	$TkserverDBpfad = "sqlite:C:\AGFEO\TK-Suite-Server\dbf\call_history.db";
	$dbh = new PDO($TkserverDBpfad);
	foreach ($dbh->query('SELECT * from callerlist WHERE pbx_user LIKE '.$Intern.' ORDER BY pbx_user DESC LIMIT '.$LastMax)as $row) //SQL-Abfrage nach Intern und Anzahl
	{
		If ($listening == 0 and $row['internal'] == 0 and $row['incoming'] == 0){
			
		}
		If ($listening == 1 and $row['internal'] == 0 and $row['incoming'] == 1){
			$ausgabe[]= $row;
		}
		If ($listening == 2 and $row['internal'] == 0){
			$ausgabe[]= $row;
		}
	}
	Return $ausgabe;
	$dbh = null;
}
/*----------------------------------------------------------------------
Adress-Datenbank Agfeo Tk-Suite auslesen und in Array übergeben
----------------------------------------------------------------------*/
Function GetCallerName($Nummer){
$ausgabe ="";
$TkserverDBpfad = "sqlite:C:\AGFEO\TK-Suite-Server\dbf\contact.db";
$dbh = new PDO($TkserverDBpfad);
Foreach ($dbh->query('Select * from communication')as $row){
	IF ($row['realnumber'] == $Nummer){
		Foreach ($dbh->query('Select * from contact')as $row2){
			If ($row['id'] == $row2['id']){
				$ausgabe= $row2['name']."  ".$row2['firstname'];
				Break;
				}
				
		}
	}

}
	If ($ausgabe <>""){
		Return $ausgabe;}
	Else{
	$www = WWWCallername($Nummer);
	If ($www==FAlse){
		Return $Nummer;}
	Else{
	   Return $www;}

}
$dbh = null;
}
/*----------------------------------------------------------------------
Rückwärtssuche DasÖrtliche.de
----------------------------------------------------------------------*/
Function WWWCallername($Nummer){
$url="http://www.dasoertliche.de/Controller";
$telefonnummer=$Nummer;
$query=array(
    "form_name"=>"search_inv",
    "ph"=>$telefonnummer);
$data=http_post_fields($url,$query);

if(preg_match('/na: "(.*)"/', $data, $result)){    // Haben wir ein Ergebniss?
    $name=$result[1];

    // --- Optional: PLZ, Ort, Strasse&Hnr
    if(preg_match('/pc: "(.*)"/', $data, $result))  // PLZ
       $plz=$result[1];
    if(preg_match_all('/ci: "(.*)"/', $data, $result))  // Stadt
       $stadt=$result[1][0];
    if(preg_match('/st: "(.*)"/', $data, $result))  // Strasse
       $strasse=urldecode($result[1]);
    // --- Optional ENDE
}else{
	Return False;
}
 Return $name ."
".$strasse." 
 ".$plz." ".$stadt;
}
?>

In der ersten Spalte sind Icons für ein und ausgehende Anrufe.
Bilder must du noch anpassen, sind aus diesem Thread http://www.ip-symcon.de/forum/f53/anruferliste-fritzbox-auslesen-9948/index5.html.

Gruß Michael

Hallo Michael,

Du bist mein „Held“ :):):slight_smile:

das wird ja richtig schick …

p.s. leider habe ich noch keine Einträge in der contact.db, da meine Anlage eine Version < 8.2 hat und damit noch nicht das Anlagentelefonbuch synchronisiert :frowning:

jetzt muss ich mal sehen, wie ich ein Update auf die Anlage bekommen (die Firmware ist ja nicht frei verfügbar …)

aber Dein Skript gefällt mir wirklich gut - Danke

Tilo

Hallo Tilo,

das mit der Firmware brauchst du eigentlich nicht, ist ja nur zur Syncronisierung
zwischen Anlage und Tksuite.Wenn du deine Kontakte in Tksuite eingibst hast du alles.
Bei sind die Datenbanken mit im Backup,wie ips,Falls was passiert kann ich’s zurrückspielen.

Gruß Michael

Ps.:Anlagenfirmware bekommen nur Fachbetriebe!

Hallo Michael,

„alles gar nicht so einfach …“ :slight_smile:

ich hatte unter der alten TK-Suite ein gepflegtes Anlagentelefonbuch. An welches ich jetzt mit der aktuellen TK-Suite nicht mehr zugreifen kann :frowning:
Eine Synchronisation ab Ver > 8.2 wäre halt schon prima.

Eine manuelle Eingabe in der TK-Suite funktioniert auch nicht richtig, da es offensichtlich mit den Konto ein Problem gibt …

… also muss ich erstmal die AGFEO-Seite in Ordnung bringen …

ansonsten bin ich immer wieder begeisert von Deinem Skript :loveips:

Tilo