HTTPMOD: Cisco IP-Telefone steuern

Begonnen von mwllgr, 09 Juni 2019, 22:22:01

Vorheriges Thema - Nächstes Thema

mwllgr

Hallo,

habe mich gerade ein wenig mit den Cisco 7940-Telefonen beschäftigt.
Diese haben auch sowas wie eine API mit HTTP POST-Requests.

Herausgekommen ist eine kleine HTTPMOD-Implementierung welche nicht nur Informationen ausliest, sondern auch einen Anruf oder RTP-Stream starten kann. Weiters ist es möglich, Buttons zu "drücken".
Hier der - etwas unübersichtliche - FHEM-Code.

Zu ersetzen ist natürlich die IP-Adresse (im folgenden 10.0.0.30) sowie USERNAME und PASSWORD für die HTTP-Basic-Auth.
define Sys.Cisco1 HTTPMOD none 60
attr Sys.Cisco1 get00Name deviceInformation
attr Sys.Cisco1 get00Poll 1
attr Sys.Cisco1 get00URL http://10.0.0.30/NetworkConfigurationX
attr Sys.Cisco1 get01Name networkConfiguration
attr Sys.Cisco1 get01Poll 1
attr Sys.Cisco1 get01URL http://10.0.0.30/NetworkConfigurationX
attr Sys.Cisco1 reading00Name mac
attr Sys.Cisco1 reading00XPath-Strict //DeviceInformation/MACAddress/text()
attr Sys.Cisco1 reading01Name hostname
attr Sys.Cisco1 reading01XPath-Strict //DeviceInformation/HostName/text()
attr Sys.Cisco1 reading02Name dn
attr Sys.Cisco1 reading02XPath-Strict //DeviceInformation/phoneDN/text()
attr Sys.Cisco1 reading03Name appLoadId
attr Sys.Cisco1 reading03XPath-Strict //DeviceInformation/appLoadID/text()
attr Sys.Cisco1 reading04Name bootLoadId
attr Sys.Cisco1 reading05XPath-Strict //DeviceInformation/bootLoadID/text()
attr Sys.Cisco1 reading06Name versionId
attr Sys.Cisco1 reading06XPath-Strict //DeviceInformation/versionID/text()
attr Sys.Cisco1 reading07Name dspLoadId
attr Sys.Cisco1 reading07XPath-Strict //DeviceInformation/DSPLoadID/text()
attr Sys.Cisco1 reading08Name hwRev
attr Sys.Cisco1 reading08XPath-Strict //DeviceInformation/hardwareRevision/text()
attr Sys.Cisco1 reading09Name serialNo
attr Sys.Cisco1 reading09XPath-Strict //DeviceInformation/serialNumber/text()
attr Sys.Cisco1 reading10Name modelNo
attr Sys.Cisco1 reading10XPath-Strict //DeviceInformation/modelNumber/text()
attr Sys.Cisco1 reading11Name codec
attr Sys.Cisco1 reading11XPath-Strict //DeviceInformation/Codec/text()
attr Sys.Cisco1 reading12Name amps
attr Sys.Cisco1 reading12XPath-Strict //DeviceInformation/Amps/text()
attr Sys.Cisco1 reading13Name messageWaiting
attr Sys.Cisco1 reading13XPath-Strict //DeviceInformation/MessageWaiting/text()
attr Sys.Cisco1 reading14Name dhcp
attr Sys.Cisco1 reading14XPath-Strict //NetworkConfiguration/DHCPServer/text()
attr Sys.Cisco1 reading15Name ip
attr Sys.Cisco1 reading15XPath-Strict //NetworkConfiguration/IPAddress/text()
attr Sys.Cisco1 reading16Name subnet
attr Sys.Cisco1 reading16XPath-Strict //NetworkConfiguration/SubNetMask/text()
attr Sys.Cisco1 reading17Name tftp1
attr Sys.Cisco1 reading17XPath-Strict //NetworkConfiguration/TFTPServer1/text()
attr Sys.Cisco1 reading18Name router1
attr Sys.Cisco1 reading18XPath-Strict //NetworkConfiguration/DefaultRouter1/text()
attr Sys.Cisco1 reading19Name dns1
attr Sys.Cisco1 reading19XPath-Strict //NetworkConfiguration/DNSServer1/text()
attr Sys.Cisco1 reading20Name callManager1
attr Sys.Cisco1 reading20XPath-Strict //NetworkConfiguration/CallManager1/text()
attr Sys.Cisco1 reading21Name URLinformation
attr Sys.Cisco1 reading21XPath-Strict //NetworkConfiguration/InformationURL/text()
attr Sys.Cisco1 reading22Name URLdirectories
attr Sys.Cisco1 reading22XPath-Strict //NetworkConfiguration/DirectoriesURL/text()
attr Sys.Cisco1 reading23Name URLmessages
attr Sys.Cisco1 reading23XPath-Strict //NetworkConfiguration/MessagesURL/text()
attr Sys.Cisco1 reading24Name URLservices
attr Sys.Cisco1 reading24XPath-Strict //NetworkConfiguration/ServicesURL/text()
attr Sys.Cisco1 reading25Name URLauth
attr Sys.Cisco1 reading25XPath-Strict //NetworkConfiguration/AuthenticationURL/text()
attr Sys.Cisco1 reading26Name URLidle
attr Sys.Cisco1 reading26XPath-Strict //NetworkConfiguration/IdleURL/text()
attr Sys.Cisco1 reading27Name idleTimeout
attr Sys.Cisco1 reading27XPath-Strict //NetworkConfiguration/IdleURLTime/text()
attr Sys.Cisco1 set01Data XML=<CiscoIPPhoneExecute><ExecuteItem URL="Play:r/$val"/></CiscoIPPhoneExecute>
attr Sys.Cisco1 set01Name ring
attr Sys.Cisco1 set01TextArg 1
attr Sys.Cisco1 set01URL http://USERNAME:PASSWORD@10.0.0.30/CGI/Execute
attr Sys.Cisco1 set02Data XML=<CiscoIPPhoneExecute><ExecuteItem URL="Key:$val"/></CiscoIPPhoneExecute>
attr Sys.Cisco1 set02Hint AppMenu,Directories,Headset,Hold,Info,KeyPad0,KeyPad1,KeyPad2,KeyPad3,KeyPad4,KeyPad5,KeyPad6,KeyPad7,KeyPad8,KeyPad9,KeyPadPound,KeyPadStar,Line1,Messages,Mute,NavBack,NavUp,Release,Services,Settings,Soft1,Soft2,Soft3,Soft4,Speaker,VolUp,VolDwn
attr Sys.Cisco1 set02Name keyPress
attr Sys.Cisco1 set02TextArg 1
attr Sys.Cisco1 set02URL http://USERNAME:PASSWORD@10.0.0.30/CGI/Execute
attr Sys.Cisco1 set03Data XML=<CiscoIPPhoneExecute><ExecuteItem URL="SoftKey:$val"/></CiscoIPPhoneExecute>
attr Sys.Cisco1 set03Hint Back,Cancel,Exit,Next,Search,Select,Submit,Update,Dial,EditDial,<<
attr Sys.Cisco1 set03Name softKey
attr Sys.Cisco1 set03TextArg 1
attr Sys.Cisco1 set03URL http://USERNAME:PASSWORD@10.0.0.30/CGI/Execute
attr Sys.Cisco1 set04Data XML=<CiscoIPPhoneExecute><ExecuteItem URL="RTPRx:$val"/></CiscoIPPhoneExecute>
attr Sys.Cisco1 set04Name rtpRx
attr Sys.Cisco1 set04TextArg 1
attr Sys.Cisco1 set04URL http://USERNAME:PASSWORD@10.0.0.30/CGI/Execute
attr Sys.Cisco1 set05Data XML=<CiscoIPPhoneExecute><ExecuteItem URL="RTPRx:Stop"/></CiscoIPPhoneExecute>
attr Sys.Cisco1 set05Name rtpRxStop
attr Sys.Cisco1 set05NoArg 1
attr Sys.Cisco1 set05URL http://USERNAME:PASSWORD@10.0.0.30/CGI/Execute
attr Sys.Cisco1 set06Data XML=<CiscoIPPhoneExecute><ExecuteItem URL="RTPTx:$val"/></CiscoIPPhoneExecute>
attr Sys.Cisco1 set06Name rtpTx
attr Sys.Cisco1 set06TextArg 1
attr Sys.Cisco1 set06URL http://USERNAME:PASSWORD@10.0.0.30/CGI/Execute
attr Sys.Cisco1 set07Data XML=<CiscoIPPhoneExecute><ExecuteItem URL="RTPTx:Stop"/></CiscoIPPhoneExecute>
attr Sys.Cisco1 set07Name rtpTxStop
attr Sys.Cisco1 set07NoArg 1
attr Sys.Cisco1 set07URL http://USERNAME:PASSWORD@10.0.0.30/CGI/Execute
attr Sys.Cisco1 set08Data XML=<CiscoIPPhoneExecute><ExecuteItem URL="RTPMTx:$val"/></CiscoIPPhoneExecute>
attr Sys.Cisco1 set08Name rtpMTx
attr Sys.Cisco1 set08TextArg 1
attr Sys.Cisco1 set08URL http://USERNAME:PASSWORD@10.0.0.30/CGI/Execute
attr Sys.Cisco1 set09Data XML=<CiscoIPPhoneExecute><ExecuteItem URL="RTPMRx:$val"/></CiscoIPPhoneExecute>
attr Sys.Cisco1 set09Name rtpMRx
attr Sys.Cisco1 set09TextArg 1
attr Sys.Cisco1 set09URL http://USERNAME:PASSWORD@10.0.0.30/CGI/Execute
attr Sys.Cisco1 set10Data XML=<CiscoIPPhoneExecute><ExecuteItem URL="Dial:$val"/></CiscoIPPhoneExecute>
attr Sys.Cisco1 set10Name dial
attr Sys.Cisco1 set10TextArg 1
attr Sys.Cisco1 set10URL http://USERNAME:PASSWORD@10.0.0.30/CGI/Execute
attr Sys.Cisco1 set11Data XML=<CiscoIPPhoneExecute><ExecuteItem URL="EditDial:$val"/></CiscoIPPhoneExecute>
attr Sys.Cisco1 set11Name editDial
attr Sys.Cisco1 set11TextArg 1
attr Sys.Cisco1 set11URL http://USERNAME:PASSWORD@10.0.0.30/CGI/Execute
attr Sys.Cisco1 set12Data XML=<CiscoIPPhoneExecute><ExecuteItem URL="SendDigits:$val"/></CiscoIPPhoneExecute>
attr Sys.Cisco1 set12Name sendDigits
attr Sys.Cisco1 set12TextArg 1
attr Sys.Cisco1 set12URL http://USERNAME:PASSWORD@10.0.0.30/CGI/Execute
attr Sys.Cisco1 set13Data XML=<CiscoIPPhoneExecute><ExecuteItem URL="Init:$val"/></CiscoIPPhoneExecute>
attr Sys.Cisco1 set13Hint CallHistory,Services,Messages,Directories
attr Sys.Cisco1 set13Name init
attr Sys.Cisco1 set13TextArg 1
attr Sys.Cisco1 set13URL http://USERNAME:PASSWORD@10.0.0.30/CGI/Execute
attr Sys.Cisco1 stateFormat hostname
attr Sys.Cisco1 verbose 1


Übrigens: Folgenden Codeabschnitt habe ich vom obigen entfernt.
attr Sys.Cisco1 set00Data XML=<CiscoIPPhoneExecute><ExecuteItem Priority="0" URL="http://10.0.0.31/cisco/notification.php?message=$val"/><ExecuteItem Priority="1" URL="Play:r/Ring1.raw"/></CiscoIPPhoneExecute>
attr Sys.Cisco1 set00Name message
attr Sys.Cisco1 set00TextArg 1
attr Sys.Cisco1 set00URL http://USERNAME:PASSWORD@10.0.0.30/CGI/Execute


Der sorgt dafür, dass man per set DEVICE message Nachrichtentext eine Art Pushnachricht ans Telefon mit Ton senden kann.
Wichtig: r/Ring1.raw muss mit einer vorhandenen Tondatei, die auf dem TFTP-Server liegt ersetzt werden.

Damit alles klappt muss unter dem Link (http://10.0.0.31/cisco/notification.php) das folgende PHP-Script eingebunden sein:
<?php
header
('Content-Type: text/xml');
header('Connection: close');
?>

<CiscoIPPhoneText>
<Title>FHEM</Title>
<Prompt>Schliessen mit OK.</Prompt>
<Text>
<?php echo $_GET["message"]; ?></Text>
<SoftKeyItem>
<Name>OK</Name>
<Position>1</Position><URL>SoftKey:Exit</URL>
</SoftKeyItem>
</CiscoIPPhoneText>