Cisco IP Phone und Symcon

ja, das hatte ich bereits im Debug-Fenster des Webserver beobachtet. Da habe ich dann für die services.php auch das „Request Processed“.

Komisch, dass es bei mir einfach nicht will - ich begreife das nicht.

zur Sicherheit: Diese 3 Punkte aus der services.php müssen doch raus, oder ? Oder was hat es mit denen auf sich ?

Hallo Tom,
Ich habe nun noch mal die neue Version der Skripte installiert und versucht, soweit zu kommen, dass das Grafikmenü auf dem Telefon erscheint. Vorab: Ich habe das Cisco 7970G mit SIP-FW 9-4-2. die Skripte laufen auf einem BananaPI mit aktueller IPS 4.0 beta.

Anpassungen:

  • wo notwendig, die IP-Adresse des Webservers angepasst
  • Pfade angepasst
  • in services.php in Zeile 7/8 die richtige „SEP …“ eingetragen

Ein „php services-bild.php“ gab einen Fehler aus, der besagte, dass „IPS_RunScriptWait()“ nicht gefunden wurde. Ist ja auch klar, da man diese wohl nur aus IPS aufrufen kann. Vielleicht gibt’s irgendeinen Trick, den ich aber nicht kenne.

Testweise habe ich dann mal folgende Änderung in services-bild.php durchgeführt:

//$data = base64_decode(IPS_RunScriptWait(37143));
$data1 = exec("php /var/lib/symcon/scripts/28195.ips.php");
$data = base64_decode($data1);

28195.ips.php entspricht dabei dem Skript „37143“ von Wolfgang, das ich in der IPS-Konsole angelegt hatte.
Wenn ich nun „php services-bild.php“ aufrufe, werden nichtlesbare Zeichen ausgegeben - es wird also nun ein Bild für das Grafikmenü erzeugt. Es gab aber auch noch einige Fehlermeldungen, dass die Fonts nicht gefunden werden. Diese habe ich dann irgendwo heruntergeladen und unter „/var/lib/symcon/webfront/user/fonts/“ gespeichert.

MIt diesen Änderungen kann ich das komplette Grafikmenü nun im Browser und Telefon sehen.

Vielleicht hilft’s Dir ja weiter.

@Wolfgang: Wie kann man IPS_RunScriptWait() aus dem Script services-bild.php bekannt machen und aufrufen?

Gruß
Peter

@Peter:
Die Scripts einfach unter ./Webfront/User legen. Der IPS Webserver führt diese dann aus und kennt seine Methoden/Funktionen.
Bei der Nutzung eines eigenen Webservers brauchst du die JSON Schnittstelle. Also die rpc_head aus den ersten Posts und dann die JSON calls mit rpc->IPS_RunScript().

Gesendet von meinem Nexus 5X mit Tapatalk

Hallo Wolfgang,
hmm, funktioniert nicht:

root@symcon:/var/lib/symcon/webfront/user# php services-bild.php
PHP Fatal error:  Call to undefined function IPS_RunScriptWait() in /var/lib/symcon/webfront/user/services-bild.php on line 3
root@symcon:/var/lib/symcon/webfront/user#

EDIT: doch, geht. Der Webserver macht es - also geht’s nicht von der Konsole.

Hm, bei mir geht das nach wie vor nur im Browser. Da kann ich machen, was ich will. Fonts, Anpassungen habe ich gemacht, bei den services.php nur die 3 Punkte rausgenommen und die SEP00000 so gelassen.

Ich habe ein Cisco 7965 - da steht kein G drauf, kann das daran liegen ? Wundert mich aber, da die befehl-execute schon geht, auch mit der Anzeige einer Grafik.

Ich nutze die FW cmterm-7945_7965-sip.8-5-4.zip - kann es an der CONF Datei liegen ?

Das ist die Ausgabe, wenn ich die services.php im Browser aufrufe:

<?xml version=„1.0“ encoding=„iso-8859-1“?><?xml-stylesheet version=„1.0“ href=„CiscoIPPhone.xslt“ type=„text/xsl“?><CiscoIPPhoneGraphicFileMenu appId=„Cisco/Unity“><Prompt>Du bist hier: unbekannt</Prompt><LocationX>-1</LocationX><LocationY>-1</LocationY><URL>http://chekow/cisco/services-bild.php</URL><MenuItem><Name>Licht</Name><URL>http://chekow/cisco/menu.php?ID=42927&R=10</URL></MenuItem><MenuItem><Name>Strom</Name><URL>http://chekow/cisco/menu.php?ID=43964&R=60</URL></MenuItem><MenuItem><Name>Rolladen</Name><URL>http://chekow/cisco/menu.php?ID=22939&R=60</URL></MenuItem><MenuItem><Name>Heizung</Name><URL>http://chekow/cisco/menu.php?ID=42155&R=60</URL></MenuItem><MenuItem><Name>Modus</Name><URL>http://chekow/cisco/menu.php?ID=36903&R=60</URL></MenuItem><MenuItem><Name>Infos</Name><URL>http://chekow/cisco/infos.php</URL></MenuItem><MenuItem><Name>PiaCam</Name><URL>http://chekow/cisco/camera.php</URL></MenuItem><MenuItem><Name>-</Name><URL></URL></MenuItem><MenuItem><Name>-</Name><URL></URL></MenuItem><MenuItem><Name>Anrufliste</Name><URL>http://chekow/cisco/anrufliste.php</URL></MenuItem><MenuItem><Name>Intern</Name><URL>http://chekow/cisco/intern.php</URL></MenuItem><MenuItem><Name>Telefonbuch</Name><URL>http://chekow/cisco/directory.php</URL></MenuItem></CiscoIPPhoneGraphicFileMenu>

Fehlermöglichkeiten:
1 ) „http://chekow/cisco/services-bild.php“ wird nicht aufgelöst. Normalerweise müsste ein Bild angezeigt werden im Browser wenn du die XSLT nutzst:
Bildschirmfoto 2016-04-23 um 18.57.03.png
2 ) die Rückmeldung des Webservers für services.php ist kein XML Dokument --> muss unbedingt ein XML Header verwendet werden
3 ) Das Telefon kann „chekow“ nicht auflösen --> am besten IP Adresse nehmen
4 ) die SEP…CNF.XML ist fehlerhaft

achja: Habe übrigens so ganz zufällig rausgefunden, wie sich ohne extra dhcp die FW leicht hochladen lässt:

dazu trägt man einfach in die CONF die SIP-Datei ein:
<loadInformation>SIP45.9-4-2SR1-1S</loadInformation>

und startet das Teledon neu (Strom) - die Eingabe mit diesem 123456 braucht man dann auch nicht mehr. Ist ganz praktisch, wenn der DHCP z.B. auf der Fritze ist.

Danke für die Tips, aber:

  1. Das Bild wird angezeigt, es ist das Menü. Die Ausgabe war der Seitenquelltext.
  2. Wie gesagt, das SetValue (Main) wird aber korrekt ausgelöst. Die Services läuft, wenn ich die Weltkugel drücke - es zeigt nur nichts an außer nem leeren Fenster. Ich probiere das trotzdem mal…

EDIT:
hab jetzt überall die ip drin. Problem bleibt leider. Und außerdem habe ich mal die FW 9.4 versucht, löst das Problem auch nicht.

würde mir jemand mal seine CONF Datei geben ? Ich könnte mir vorstellen, dass da irgendwetwas falsch ist…

Ok. Check mal im Telefonmenü folgendes:
Settings --> Device Configuration --> HTTP Configuration
screenshot.jpg

check - da steht bei mit http://192.168.178.22/cisco/services.php

Ok, dann ich bin auch langsam am Ende mit meinem Wissen.
Kannst Du den Quelltext, den Du vorhin gepostet hast in eine SERVICES.XML Datei packen und das testen?

Nur ein kleiner Hinweis, für alle die mal auf IPS 4 wechseln wollen.
Dort dürfen Scripte welche der IPS-Webserver ausführt nur im Verzeichnis user liegen.
Michael

bei mir läuft IPS 3.4 - und das script wird ja ausgeführt.

wenn die datei fehlt, bekomme ich einen 404 Error auf dem Display, und bei Syntaxfehlern auch. Auch die services.xml erzeugt bei mir zwar keinen Fehler, aber eben ein leeres Displayfenster (select service…) selbst prompt etc. fehlen.

@wolfgang: Würdest du mir mal deine services.xml und ciscoipphone.xslt geben ? Oder eine CONF Datei zum Vergleichen ?

Hallo Tom,
kurz noch mal zum Verständnis:
Wenn Du die services.php im Browser aufrufst, dann siehst Du das Grafikmenü korrekt, nur im Telefon-Display wird es nicht angezeigt?
Tauchen bei Dir in den Server-Logs folgende Zeilen (sinngemäß) auf`?

192.168.100.11 - - [04/24/2016:07:46:28 +0200] "GET /user/cisco/services.php HTTP/1.1" 200 1516
192.168.100.11 - - [04/24/2016:07:46:28 +0200] "GET /user/cisco/services-bild.php HTTP/1.1" 200 

(dabei ist die 192.168.100.11 die IP-Adresse des Telefons, nicht die des PCs, auf dem der Browser läuft).
Gruß
Peter

Hallo Peter,

ja, es ist so: Im Browser sehe ich das Grafikmenü exakt so, wie Wolfgang es oben gepostet hat:
Unbenannt2.PNG
Alle Menüeinträge incl. Zahlen. Drücke ich F5 für die Quelltextanzeige, sehe ich auch das in meinen Augen korrekte xlm Dokument inkl. Header.

Auf dem Telefon wird beim Drücken der Weltkugeltaste die services.php korrekt aufgerufen, das merke ich, da ich in die Services einen SetValue Befehl aufgenommen habe. Die ändert sich dann sofort der Wert.

Die Ausgabe auf dem Telefon besteht aber aus einem leeren Fenster, Titel „Services“ und dort, wo wharscheinlich der Prompt hingehört, steht „Select Service…“. Der Rest ist grau.

Ich finde die Webserver logs nicht, habe sie im logs-Verzeichnis erwartet in der Form access_<InstanzID>, die sind dort aber nicht. Ich habe mir stattdessen in IPS das debugfenster angeschaut, da erscheint beim Druck auf die Weltkugel:

(derzeit die services.xml - probiere alternativ gerade, die xml Ausgabe direkt in einer xml-Datei anzubieten. Ansonsten steht da natürlich services.php)

Ich hoffe auf eine fehlerhafte CONF und würde mich riesig freuen, wenn mir einer eine CONF geben könnte, wo es klappt. Bin kurz davor, ein neues Telefon zu kaufen…

EDIT: Button „Logfile erstellen“ gefunden, da kommt:

192.168.178.60 - - [24/Apr/2016:19:06:06 +0200] „GET /cisco/services.php?locale=English_United_States&name=SEP00260BD7022C HTTP/1.1“ 200 0

also KEINE services-bild.php

rufe ich es vom Browser auf, kommt:

192.168.178.60 - - [24/Apr/2016:19:12:28 +0200] „GET /cisco/services.php?locale=English_United_States&name=SEP00260BD7022C HTTP/1.1“ 200 0
192.168.178.60 - - [24/Apr/2016:19:12:34 +0200] „GET /cisco/services.php?locale=English_United_States&name=SEP00260BD7022C HTTP/1.1“ 200 0
192.168.178.60 - - [24/Apr/2016:19:13:17 +0200] "GET /cisco/services.php?locale=English_United_States&name=SEP00260BD7022C HTTP/1

komisch: die letzte Zeile ist immer genau 127 Zeichen lang, hört nach dem HTTP/1 einfach auf.

also auch keine services-bild.php (obwohl es ja erscheint) aber dafür die xslt…

Hallo Tom,
läuft bei Dir Symcon unter Linux oder Windows? Das Logfile des Webservers liegt bei mir hier:
/var/log/symcon/access_53266.log

So wie es aussieht, ruft Dein Telefon die services.php auf, will dann aber nicht mehr die services-bild.php aufrufen. Das könnte also mit der Firmware zusammenhängen, oder die URL in der services.php ist falsch. Kannst Du auf dem Server tracen (Wireshark oder tcpdump)?

Gruß
Peter

Hallo Peter,

habe mittlerweile IPS 3.4 unter Windows und auch ein frisches IPS 4 unter Linux getestet - beides will nicht. Und herzlichen Dank für dein CONF-File, leider führ es auch zu dem gleichen Effekt. Mir ist nur aufgefallen, dass du ein SIP70… FW hast, meine fängt mit SIP45… an - aber wahrscheinlich ahst du kein 7965G, oder?

Also die services-bild wird vom Browser garantiert aufgerufen - denn ich habe in dem Skrip ebenfalls Tracepunkte gesetzt und sehe in IPS, wie die gesetzt werden. Vom Telefon aus funktionieren die Tracepunkte in der services-bild.php nicht mehr, irgendwie scheint der include da gar nicht zu funktionieren.

Boah, ist das ne Nummer. :banghead:

Eben noch ein Factoryreset gemacht und alles neu aufgespielt - hat auch nix gebracht. Ich suche jetzt im Netz nach einer minimalistischen xml für das servicemenü - werde aber nicht so recht fündig. Defekt am Telefon mag ich auch kaum glauben, aber wer weiß das schon mit Sicherheit?

Diese Ciscoipphone.xslt http://www.minded.ca/2011-01-10/browser-rendering-of-cisco-services-with-xslt/ ist doch auch richtig, oder?

Hallo Tom,
ich vermute, dass das Telefon das Script „services.php“ zwar aufruft, dann aber die XML-Antwort nicht darstellen kann. Hier eine mini services.php

<?php
header("Content-type: text/xml; charset=ISO-8859-1");
echo '<?xml version="1.0" encoding="iso-8859-1"?>';

echo '<CiscoIPPhoneMenu>';
echo '<Title>Hallo Hallo</Title>';
echo '<Prompt>Ich bin ein Prompt.</Prompt>';
echo '<MenuItem>';
echo '<Name>Hallo World</Name>';
echo '<URL>http://192.168.100.70/user/cisco/test.php</URL>';
echo '</MenuItem>';
echo '</CiscoIPPhoneMenu>';
?>

Die IP-Adresse in der URL ist erstmal egal. Schau mal, ob das Telefon irgendwas davon auf dem Display darstellt (ich konnte die Datei leider jetzt nicht testen, da ich das Telefon nicht in der Nähe habe).
Du hattest weiter oben mal die Logausgabe

"GET /cisco/services.php?locale=English_United_States&name=SEP 00260BD7022C HTTP/1.1" 

gepostet. Deine Locales stehen demnach noch auf Englisch, bei mir auf deutsch - vielleicht passt das dann nicht zu den „ISO-8859-1“ Angaben in den PHP-Skripten.
Hast Du die Skripte unter MS Windows zusammengebaut? Vielleicht hat das Telefon Probleme mit CRLF (LInux: LF).

Mir ist nur aufgefallen, dass du ein SIP70… FW hast, meine fängt mit SIP45… an - aber wahrscheinlich ahst du kein 7965G, oder?

Ja, ich habe das 7970G. Die SIP45… bei Dir sollte passen, da man für das 7945 und das 7965 dieselbe FW verwendet.

Noch mal zum Tracen? Kannst Du sowas machen? Auf einem Linux-System kannst Du dies erreichen mit:

apt-get install tcpdump
tcpdump -i eth0 -s 65535 host <ip-adresse des telefons> -w trace.pcap

dann auf dem Telefon das Service-Menü aufrufen
am Ende mit Cntrl-C tcpdump abbrechen. Dann kannst Du dir das File mit Wireshark ansehen oder es mir schicken.

Gruß
Peter

Peter, du bist Klasse !

Auf dem Telefon steht nun Hallo Hallo, Hallo World und ich bin ein Prompt. :smiley:

Jetzt teste ich mal Zeile für Zeil, wo der Fehler liegt. Wahrscheinlich oder möglicherweise hat es mit den locales zu tun - aber wie schalte ich das Tel eigtl. auf deutsch ? Der Menüeintrag ist blockiert, irgendwelche locales finde ich auf ciso erstmal nicht.

Ich suche mal weiter, vielen herzlichen Dank erst mal !

Tom

Das sieht ja schon mal gut aus :slight_smile:

Ich bin nach dieser Anleitung vorgegangen.
Gruß
Peter