Cisco IP Phone und Symcon

Problem ist eingegrenzt, schon minimale Änderungen lassen nur ein leeres Menü erscheinen:

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

echo '<CiscoIPPhoneGraphicFileMenu>'; 
echo '<Title>Hallo Hallo</Title>'; 
echo '<Prompt>Ich bin ein Prompt.</Prompt>'; 
echo '<LocationX>-1</LocationX><LocationY>-1</LocationY>';
echo '<URL>http://192.168.178.22/user/cisco/test.png</URL>';
echo '<MenuItem>'; 
echo '<Name>Hallo World</Name>'; 
echo '<URL>http://192.168.100.70/user/cisco/test.php</URL>'; 
echo '</MenuItem>'; 
echo '</CiscoIPPhoneGraphicFileMenu>'; 
?>

erzeugt bei mir schon wieder ein leeres Display. Irgendwie funktioniert das CiscoIPPhoneGraphicFileMenu bei mir nicht, laut server-log wird das Bild auch gar nicht abgerufen.

Hallo Tom,
das Objekt CiscoIPPhoneGraphicFileMenu wurde meines Wissens eingeführt, um auch Touch-Displays zu unterstützen. XML-Beispiele haben meistens eine Zeile im Code, die die Touch Area definiert. Vielleicht stört sich dein Telefon (zusammen mit der Firmware) daran, dass diese Zeile bei Dir fehlt (auch wenn das 7965 wohl kein Touch-Display hat, oder?). Einen Versuch ist es wert:

Ergänze die services.php testweise mal um die Zeile

echo '<TouchArea X1="1" Y1="1" X2="5" Y2="5"/>';

direkt vor dem schließenden echo ‚</MenuItem>‘;

Weitere Ideen:

  • Auch wenn das test.png scheinbar nicht geladen wird: ist das Bild evt. zu groß?
  • Wenn du per Browser die Seite „http://<IP des Telefons>“ aufrufst, kannst Du dort auf verschiedene Logdateien zugreifen. Einfach mal schauen, ob dort etwas auf den Fehler hinweist.
  • Evt. kannst Du mal ergänzen
  • <CiscoIPPhoneGraphicFileMenu „WindowMode=Wide“>
    Ändert sich etwas?
  • Oder mal andere Firmware-Versionen ausprobieren (hattest Du dieselbe wie Wolgang verwendet?)

Mehr fällt mir momentan (leider) nicht mehr ein.
Gruß
Peter

ja, das hatte ich auch schon mal probiert - bringt leider nix mit den TouchAreas.

hatte ich auch schon mal in Verdacht und nun auf 277x30 reduziert, 1k Bildgröße …

habe ich gemacht, hier die logs einiger Aufrufe - erkennst du da etwas ?

Wolfgang schrieb etwa von der 8.5(4) - die hatte ich auch. Inzwischen bin ich auf 9.4 - der Fehler blieb immer.

Vielen Dank für Helfen. Ich habe mal im Cisco-Forum einen Thread aufgemacht, mal schauen …

Hallo zusammen,
ich habe die 7965 mit SIP 8.5.4 im Einsatz. Kein Touchpanel.

SEP…CNF.XML:

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- ESSZIMMER -->
<!-- FIXME: Change to your own phone number (or another unique ID) -->
<device xsi:type="axl:XIPPhone" ctiid="12345">
<deviceProtocol>SIP</deviceProtocol>
<sshUserId>default</sshUserId>
<sshPassword>user</sshPassword>
<devicePool>
 <dateTimeSetting>
    <!-- FIXME: Set your preferred date format and timezone here -->
    <dateTemplate>D.M.Y</dateTemplate>
    <timeZone>W. Europe Standard/Daylight Time</timeZone>
    <ntps>
         <!-- NTP might not actually work, but the phone can set the
              date/time from the SIP response headers -->
         <ntp>
             <name>10.10.10.1</name>
             <ntpMode>Unicast</ntpMode>
         </ntp>
    </ntps>
 </dateTimeSetting>

 <!-- This section probably does not do anything useful. -->
 <callManagerGroup>
    <members>
       <member priority="0">
          <callManager>
             <ports>
                <ethernetPhonePort>2000</ethernetPhonePort>
                <sipPort>5060</sipPort>
                <securedSipPort>5061</securedSipPort>
             </ports>
             <processNodeName>127.0.0.1</processNodeName>
          </callManager>
       </member>
    </members>
 </callManagerGroup>
</devicePool>
<sipProfile>
<sipProxies>
   <registerWithProxy>true</registerWithProxy>
 </sipProxies>
 <sipCallFeatures>
    <cnfJoinEnabled>true</cnfJoinEnabled>
    <callForwardURI>x--serviceuri-cfwdall</callForwardURI>
    <callPickupURI>x-cisco-serviceuri-pickup</callPickupURI>
    <callPickupListURI>x-cisco-serviceuri-opickup</callPickupListURI>
    <callPickupGroupURI>x-cisco-serviceuri-gpickup</callPickupGroupURI>
    <meetMeServiceURI>x-cisco-serviceuri-meetme</meetMeServiceURI>
    <abbreviatedDialURI>x-cisco-serviceuri-abbrdial</abbreviatedDialURI>
    <rfc2543Hold>false</rfc2543Hold>
    <callHoldRingback>2</callHoldRingback>
    <localCfwdEnable>true</localCfwdEnable>
    <semiAttendedTransfer>true</semiAttendedTransfer>
    <anonymousCallBlock>2</anonymousCallBlock>
    <callerIdBlocking>2</callerIdBlocking>
    <dndControl>0</dndControl>
    <remoteCcEnable>true</remoteCcEnable>
 </sipCallFeatures>
 <sipStack>
    <sipInviteRetx>6</sipInviteRetx>
    <sipRetx>10</sipRetx>
    <timerInviteExpires>180</timerInviteExpires>
    <!-- Force short registration timeout to keep NAT connection alive -->
    <timerRegisterExpires>180</timerRegisterExpires>
    <timerRegisterDelta>5</timerRegisterDelta>
    <timerKeepAliveExpires>120</timerKeepAliveExpires>
    <timerSubscribeExpires>120</timerSubscribeExpires>
    <timerSubscribeDelta>5</timerSubscribeDelta>
    <timerT1>500</timerT1>
    <timerT2>4000</timerT2>
    <maxRedirects>70</maxRedirects>
    <remotePartyID>false</remotePartyID>
    <userInfo>None</userInfo>
 </sipStack>
 <autoAnswerTimer>1</autoAnswerTimer>
 <autoAnswerAltBehavior>false</autoAnswerAltBehavior>
 <autoAnswerOverride>true</autoAnswerOverride>
 <transferOnhookEnabled>false</transferOnhookEnabled>
 <enableVad>false</enableVad>
 <preferredCodec>none</preferredCodec>
 <dtmfAvtPayload>101</dtmfAvtPayload>
 <dtmfDbLevel>3</dtmfDbLevel>
 <dtmfOutofBand>avt</dtmfOutofBand>
 <alwaysUsePrimeLine>false</alwaysUsePrimeLine>
 <alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail>
 <kpml>3</kpml>
 <natEnabled>false</natEnabled>
 <natAddress></natAddress>
 <!-- FIXME: This will appear in the upper right corner of the display -->
 <phoneLabel>Esszimmer</phoneLabel>
 <stutterMsgWaiting>1</stutterMsgWaiting>
 <callStats>false</callStats>
 <silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
 <disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig>
 <startMediaPort>16384</startMediaPort>
 <stopMediaPort>16391</stopMediaPort>
 <sipLines>
    <line button="1">
       <featureID>9</featureID>
       <!-- FIXME: Text to display next to line button #1 -->
       <featureLabel>620</featureLabel>
       <!-- FIXME: FQDN or IP of your SIP proxy -->
       <proxy>10.10.10.1</proxy>
       <port>5060</port>
       <!-- FIXME: SIP username -->
       <name>620</name>
       <!-- FIXME: Name to display on outbound caller ID -->
       <displayName>Telefonnummer</displayName>
       <autoAnswer>
          <autoAnswerEnabled>2</autoAnswerEnabled>
       </autoAnswer>
       <callWaiting>1</callWaiting>
       <!-- FIXME: SIP authorization name (often matches username) -->
       <authName>620</authName>
       <!-- FIXME: SIP authorization password -->
       <authPassword>XXX</authPassword>
       <sharedLine>true</sharedLine>
       <messageWaitingLampPolicy>1</messageWaitingLampPolicy>
       <!-- FIXME: "Messages" key will autodial this number -->
       <messagesNumber>**600</messagesNumber>
       <ringSettingIdle>4</ringSettingIdle>
       <ringSettingActive>5</ringSettingActive>
       <contact></contact>
       <forwardCallInfoDisplay>
          <callerName>true</callerName>
          <callerNumber>false</callerNumber>
          <redirectedNumber>false</redirectedNumber>
          <dialedNumber>true</dialedNumber>
       </forwardCallInfoDisplay>
    </line>
  
    <line button="2"> <!-- Service auf Kurzwahltaste -->
			<featureID>20</featureID>
			<featureLabel>Licht Barbereich</featureLabel>
			<serviceURI>http://10.10.10.3/user/cisco/befehl-execute.php?ID=21099</serviceURI>
	</line>

	<line button="3"> <!-- Service auf Kurzwahltaste -->
 			<featureID>20</featureID>
 			<featureLabel>Licht Mitte</featureLabel>
			<serviceURI>http://10.10.10.3/user/cisco/befehl-execute.php?ID=40155</serviceURI>
	</line>

			

    <!-- FIXME: Add more line buttons or speed dial entries here -->
   </sipLines>
 <voipControlPort>5060</voipControlPort>
 <dscpForAudio>184</dscpForAudio>
 <ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
 <dialTemplate>dialplan.xml</dialTemplate>
</sipProfile>
<commonProfile>
 <phonePassword></phonePassword>
 <backgroundImageAccess>true</backgroundImageAccess>
 <callLogBlfEnabled>2</callLogBlfEnabled>
</commonProfile>
<!-- FIXME: Change this to upgrade the firmware -->
<loadInformation>SIP45.8-5-4S</loadInformation>
<vendorConfig>
 <disableSpeaker>false</disableSpeaker>
 <disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>
 <pcPort>0</pcPort>
 <settingsAccess>1</settingsAccess>
 <garp>0</garp>
 <voiceVlanAccess>1</voiceVlanAccess>
 <videoCapability>0</videoCapability>
 <autoSelectLineEnable>0</autoSelectLineEnable>
 <webAccess>0</webAccess>
 <!-- For Sunday (1) and Saturday (7):
   <daysDisplayNotActive>1,2,3,4,5,6,7</daysDisplayNotActive>
   Current default is to enable the display 24/7.
 -->
 <daysDisplayNotActive></daysDisplayNotActive>
 <displayOnTime>00:00</displayOnTime>
 <displayOnDuration>00:00</displayOnDuration>
 <displayIdleTimeout>00:00</displayIdleTimeout>
 <spanToPCPort>1</spanToPCPort>
 <loggingDisplay>1</loggingDisplay>
 <loadServer></loadServer>
</vendorConfig>
<versionStamp></versionStamp>
<userLocale>
 <name>English_United_States</name>
<uid>1</uid>
 <langCode>en_US</langCode>
<version>1.0.0.0-1</version>
 <winCharSet>iso-8859-1</winCharSet>
</userLocale>
<networkLocale>United_States</networkLocale>
<networkLocaleInfo>
 <name>United_States</name>
<uid>64</uid>
 <version>1.0.0.0-1</version>
</networkLocaleInfo>
<deviceSecurityMode>0</deviceSecurityMode>
<!--
<authenticationURL>http://yourwebserver/authenticate.php</authenticationURL>
<directoryURL>http://yourwebserver/directory.xml</directoryURL>
-->
<authenticationURL>http://10.10.10.3/user/cisco/auth.php</authenticationURL>
<directoryURL>http://10.10.10.3/user/cisco/directory.php</directoryURL>
<!--
<idleURL>http://10.10.10.3/idle2.php</idleURL>
<idleTimeout>10</idleTimeout>
-->

<phonePersonalization>1</phonePersonalization>
<informationURL></informationURL>
<messagesURL></messagesURL>
<proxyServerURL></proxyServerURL>
<servicesURL>http://10.10.10.3/user/cisco/services.php</servicesURL>
<dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
<dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
<dscpForCm2Dvce>96</dscpForCm2Dvce>
<transportLayerProtocol>4</transportLayerProtocol>
<capfAuthMode>0</capfAuthMode>
<capfList>
 <capf>
    <phonePort>3804</phonePort>
 </capf>
</capfList>
<certHash></certHash>
<encrConfig>false</encrConfig>
</device>
<?php
$data = base64_decode(IPS_RunScriptWait(37143)); 
$im = imagecreatefromstring($data);
if ($im !== false) {
    header('Content-Type: image/png');
    imagepng($im);
    imagedestroy($im);
} else {
    echo 'An error occurred.';
}
?>

und in IPS Objekt 37143:



$im = @imagecreatetruecolor(298, 156);

...die ganzen Grafikbefehle...

header('Content-Type: image/png');
ob_start();
imagepng ($im);
$output = ob_get_contents();
ob_end_clean();

echo base64_encode( $output);
imagedestroy($im);





@wolfgang

Tausend Dank ! Es lag tatsächlich wohl an der CONF-Datei - Nachdem ich die von dir eingespielt habe, ging es sofort. Allerdings hat diese sich auch gleich wieder die 8.5.4 gezogen (sie stand ja bei Loadinformation und lag in meinem tftp) und installiert, also könnte es natürlich auch damit zusammen hängen.

LG,
Tom

Hm, habe da noch 2 Fragen…

  1. wie genau muss ich denn vorgehen, damit beim Druck auf eine Kurzwahltaste lediglich ein request abgesendet wird, ohne ein Fenster auf dem Display zu öffnen ?

  2. weiß jemand vielleicht, wie man mittels http post das Telefon auf stumm schalten kann ?

Danke soweit,
Tom

Hallo Tom,

Schau mal hier. Dort wird als eine der Key URIs „Key:Mute“ erwähnt. Diese URI kannst Du dann vermutlich mit diesem Skriptauf das Telefon pushen.

Gruß
Peter

Hi Du - auch Tom :wink:

die Vorgehensweise ist etwas diffiziler und benötigt von meiner Seite etwas Doku-Zeit.
Ich schreib Dir da mal etwas zusammen - ich habe es selbst erst die Tage zum Laufen bekommen.

LG Tom

Einträge in der SEPxxxxxx.cnf.xml im Bereich:

<sipLines> hier gehört der nachfolgendeText hin </sipLines>:

<line button=„3“>
<featureID>20</featureID>
<featureLabel>Label 1</featureLabel>
<serviceURI>http://DEINE IPS-IP : DEIN IPS-WEB-PORT/befehl-execute.php?KEY=3</serviceURI>
</line>

PS: line button ist von deinem Telefon abhängig

Bei mir läuft unter IPS ein separater IPS-Webserver - der u.g. Pfad ist somit vorgegeben:

WebServer.PNG

und genau dort ! liegt ein IPS-Script namens befehl-execute.php mit folgendem Inhalt:

<?
header(„Content-type: text/xml; charset=ISO-8859-1“);
echo ‚<?xml version=„1.0“ encoding=„iso-8859-1“?>‘;
$ID = $_GET[‚KEY‘];
setvaluestring(23116 , $ID);
?>

Die Variable 23116 ist eine einfache String-Variable. Deren Änderung wird ganz trivial per Script auf Änderung (Ereignis) abgefragt und entsprechend - per switch o.ä. - ausgewertet.

PS: ich bin auch noch recht frisch in der Thematik CISCO-IP-TELEFON dabei. Von daher kann es durchaus sein, dass es anders besser / einfacher möglich ist. Wie dem auch sei: es funktioniert.
Anbei mein Test-Szenario:

Stay tuned …
LG Tom

Hi Tom,

danke für deine Beschreibung - auch ich übe derzeit sehr intensiv und … das Ding ist schon recht mühsam, aber es wird langsam.

Zu meinem Problem:
So wie du es beschreibst, funktioniert es - ABER: laut deinem Screenshot wird ja auch hier auf dem Telefon ein Fenster auf dem Display geöffnet, was dann ein Menü darstellt.

Ich hätte aber gerne einfach eine Funktion auf der Kurzwahltaste, OHNE dass sich ein Fenster auf dem Telefon öffnet. Es soll einfach nur der Request ausgeführt werden - ohne jegliche Anzeige.

Grüße,
Tom

Upps - Sorry,

das ist ein Screenshot von meinem 9951 - Extension Modul (mit 18 x 2 Tasten und dem o.g. Display).
Ich versuche es am kommenden, langen WE mal auf meinem 7965 nachzustellen und melde mich dann noch mal.

PS: braucht noch jemand ein 7965 mit Firmware und Netzteil - in super Zusatnd ?

PPS: jaaaaaa - wenn ich die Zeit, die ich hierfür schon verballert habe, hinten dran an meine Lebenserwartung gehängt bekomme … und fertig bin ich auch noch lange nicht :slight_smile: aber es ist schon irgendwie geil … stay tuned

LG Tom

habe es hinbekommen - durch einen header(„Expires: 1“); zumindest so, dass sich das (leere) Fenster nach 1s wieder schließt !

Ich sende euch heute Nacht die Lösung für die direkt Taste ohne Fenster.

Moin jetzt stecke ich in dem Dashboardteil fest … Die Script habe ich installiert und die Pfade angepasst, wenn ich das Hauptskript starte, wird der POST auch abgesetzt. Aber schon die auth oder das background-$version wird gar nicht mehr vom Telefon aufgerufen, fehlt da noch eine Information ? Leider ist im Log des Telefons auch gähnende Leere.

Wenn ich die Skripte im Browser aufrufe, bekomme ich die richtigen Ergebnisse.

Muss ich im Telefon noch irgendetwas einstellen ? Unter Backgrounds habe ich nach wie vor nur die Hintergründe, die ich per tftp zur Verfügung stelle.

Grüße,
Tom

Ich habe das Servicemenü mittlerweile zum laufen bekommen :slight_smile:

Ich habe aber das Problem, dass direkt nach dem Abarbeiten des Menüeintrags an der Stelle des Menüeintrags der Hinweis „XML-Fehler [4] Analysefehler“ kommt. Der verschwindet aber auch nach dem nächsten Refresh.

Ich habe als menu-php diese version:

<?php
if (isset($_GET['R']) ) {
	$refresh = $_GET['R'];
} else {
    $refresh = 0;
}

include '_header_xml.inc';

if ( isset($_GET["ID"]) ) {
	echo IPS_RunScriptWaitEx(18210, $_GET); 
} else {
	echo "kein Objekt angegeben";
}
?>

also fast identisch zur Version vom Wolfgang, jedoch wird immer das Script 18210 in IPS mit Paramtere für den Knopf (ID) direkt aufgerufen:

<?
IPSUtils_Include('IPSShadowing.inc.php', 'IPSLibrary::app::modules::IPSShadowing');
$raum=array("WZS","WZN","WZK","SZS","SZN","WC","BAD","GZ","AZT","AZS");

switch ($ID){
case "RolloUp":
	if ($DevID=IPSUtil_ObjectIDByPath('Program.IPSLibrary.data.modules.IPSShadowing.Devices.Device'.(array_search("AZT",$raum)+1))){
	   $device = new IPSShadowing_Device($DevID);
	   $deviceActive = $device->MoveByControl(c_MovementId_Opened);
	}
	break;
case "RolloDown":
	if ($DevID=IPSUtil_ObjectIDByPath('Program.IPSLibrary.data.modules.IPSShadowing.Devices.Device'.(array_search("AZT",$raum)+1))){
	   $device = new IPSShadowing_Device($DevID);
	   $deviceActive = $device->MoveByControl(c_MovementId_Closed);
	}
	break;
case "RolloStop":
	if ($DevID=IPSUtil_ObjectIDByPath('Program.IPSLibrary.data.modules.IPSShadowing.Devices.Device'.(array_search("AZT",$raum)+1))){
	   $device = new IPSShadowing_Device($DevID);
	   $deviceActive = $device->MoveByControl(c_MovementId_Stop);
	}
	break;
case "RolloPos80":
	if ($DevID=IPSUtil_ObjectIDByPath('Program.IPSLibrary.data.modules.IPSShadowing.Devices.Device'.(array_search("AZT",$raum)+1))){
	   $device = new IPSShadowing_Device($DevID);
	   $deviceActive = $device->MoveByControl(5);
	}
	break;
case "Tueroeffner":
	//
	// Haustür + Fahrstuhl
	//
	CSCK_SendText("...".chr(10));
	break;
default:
	SetValue(13099 /*[cisco\Menu\Debug]*/,'ID: '.$ID);
	echo utf8_encode('Ende');
	break;
}

?>

jede Funktion (auch die unter default mit dem echo) liefert den xml-Error. Entferne ich den xml-header in der menu.php, bekomme ich den ‚Ende‘-String in einem neuen Dienste-Fenster…

Gibt es eine Möglichkeit, dass dieser Fehler nicht angezeigt wird ? Vielleicht sogar so, dass das Service-Fenster nach der Funktion geschlossen wird ?

Danke,
Tom

Vielen Dank für die tolle Arbeit! :slight_smile:

Hab es jetzt auch zum laufen bekommen :smiley:

Könntest du vielleicht noch deine Scripte für die PiCam posten?

Guten Abend zusammen,

ich verfolge mit Interesse diesen Post und bin gerade dabei, dies in meiner IPS/Asterisk Umgebung unter SCCP zu implementieren.

Leider scheitere ich gerade an dem Problem, eine zweite IPS-Websever Instanz zu erstellen.
Hintergrund ist, die IPS PHP-Funktionen, wie hier in den Scripten gezeigt, direkt zu verwenden und dadurch z. Bsp. ein

PHP Fatal error:  Call to undefined function IPS_RunScriptWait() ...

zu vermeiden.

Wie wird diese Instanz erstellt, die dann auf Port 80 zusätzlich zu 3777 hört?

OS ist ein aktuelles Raspian Jessie.

Gruss aus EU,

Jörg