Kamerabild (Türklingel) am Mitel SIP Telefon anzeigen (in Verbindung mit MiVoice 400,OIP)
Ursprüngliches HowTo Kamerabild (Türklingel) am Mitel SIP Telefon anzeigen
Im Gegensatz zu meinem anderen HowTo geht es hier um die Anzeige eines Kamerabildes am Mitel SIP Telefon (6800/6900) in Verbindung mit einer Mitel Telefonanlage der 400er Serie.
Sofern das Telefon alleine, z.B. an einer Fritz!Box, betrieben wird, lässt sich die Anzeige der Kamera über Action URIs aufrufen (Pull). In einer Mitel-Umgebung sind diese aber belegt. Die Aufforderung zur Anzeige muss daher über einen Server erfolgen (Push).
Einleitung und Voraussetzungen:
- Mitel SIP Telefon der Serie 6800i bzw. 6900i (6867i, 6869i, 6873i, 6920i, 6930i, 6940i, teilw. auch 67xx Serie, hier aber nicht berücksichtigt)
- Mitel 400 CallServer (z.B. SMBC) inkl. OIP und entsprechenden Lizenzen
- IP Kamera
- Linux Server mit Webserver (z.B. nginx), ggf. ffmpeg, falls die Kamera nicht das benötige Bildmaterial liefert.
- Gewisses Grundwissen in Linux/Web (wie installiere ich was, wie editiere ich was, Zuordnung Webpfad→lokaler Pfad)
Ich gehe davon aus, dass in der Telefonanlage die Telefone und auch die TFE fertig eingerichtet sind.
Die Telefone sind in der Lage einzelne Bilder im Vollbild darzustellen. Es gelten folgende Größen:
- 6867i/6920i: 320×184 Pixel
- 6869i/6930i: 480×192 Pixel
- 6873i/6940i: 800×372 Pixel
jew. als JPEG. PNG soll auch funktionieren, hab ich aber nicht getestet. Die Bildschirme sind eigentlich größer, aber mit den Abmessungen bleibt Platz für eine Titelzeile sowie eine Beschriftungszeile am Boden für die Softkeys.
Wichtige Hinweise: die Geräte sind Telefone und dahingehend optimiert. Bildwechsel oder Bilder allgemein gehören nicht zu ihren Stärken. Die JPEG Dateien sollten daher so klein wie möglich sein. Faustregel: ein 40kB großes Bild benötigt fast eine Sekunde, bis es geladen ist.
Das Telefon hat nach diesem HowTo die Funktion eines Servers. Es ist daher sinnvoll dem Telefon eine feste IP Adresse zuzuweisen.
Es ist sinnvoll, beide HowTo durchzulesen.
Erläuterungen:
Werte in eckigen Klammern [] sind Platzhalter und müssen durch eigene, sinnvolle Werte ersetzt werden. Das betrifft insbesondere IP Adressen bzw. URL.
Durchführung:
1. XML PushServer im Telefon hinzufügen
Im Webinterface des Telefons einloggen (Standardzugangsdaten admin/22222) und unter
Erweiterte Einstellungen → Konfigurations-Server → Liste der XML Push-Server (geprüfte IP-Adressen)
die IP des Webservers eintragen und auf „Einstellung speichern“ klicken. Das ist notwendig, damit der Webserver XML zum Telefon senden darf.
Das lässt sich auch über die entsprechenden Konfigurationsdaten in der MiVoice erledigen, allerdings muss diese Änderung nach jedem Softwareupdate erneut vorgenommen werden. Direkt im Telefon eingestellt, wird die Einstellung nur beim Werksreset des Telefons gelöscht.
2. Konfiguration des OIP
In die Weboberfläche des OIP einloggen und von dort den I/O Manager über die Toolbox starten.
Rechtsklick auf „OIP IO-System“ und „Aktion hinzufügen“ wählen
Unter Details:
Namen vergeben: z.B. Anruf von Tür Aktionstyp: PBXCallState
Unter Parameter:
Tree event selector: Indicator event Subscriber: Nebenstelle des betroffenen Telefons (z.B. 10) Call state: Ringing Clip filter: Nebenstelle der Tür (z.B. 50)
Rechtsklick auf das neue Element „Anruf von Tür“ und „Aktion hinzufügen“ wählen
Unter Details:
Namen vergeben: z.B. Webcam Aktionstyp: Execute
Unter Parameter:
Command line on: curl http://[url-des-webservers]/kamera.php
Hier wurde nun ein Wenn-Dann Szenario erstellt: Wenn die Nebenstelle des Telefons 10 von der Tür (50) angerufen wird, dann öffne über den Befehl curl die URL mit einem Script, welches XML zum Telefon sendet.
Abspeichern nicht vergessen!
Wichtig: Nach Anpassung des Aktionstyp bitte zwischenspeichern, damit die Parameterseite für den neuen Aktionstyp angepasst wird!
3. XML Datei auf Webserver erstellen
Auf dem Webserver folgende Datei erstellen:
<?php function push2phone($server,$phone,$data) { $xml = "xml=".$data; $post = "POST / HTTP/1.1\r\n"; $post .= "Host: $phone\r\n"; $post .= "Referer: $server\r\n"; $post .= "Connection: Keep-Alive\r\n"; $post .= "Content-Type: text/xml\r\n"; $post .= "Content-Length: ".strlen($xml)."\r\n\r\n"; $fp = @fsockopen ( $phone, 80, $errno, $errstr, 5); if($fp) { fputs($fp, $post.$xml); flush(); fclose($fp); } } $xml = "<AastraIPPhoneImageScreen CallProtection=\"yes\" destroyOnExit=\"yes\" Timeout=\"10\">\n"; $xml .= "<TopTitle icon=\"1\" Color=\"yellow\">Türklingel</TopTitle>\n"; $xml .= " <IconList>\n"; $xml .= " <Icon index=\"1\">Icon:Home</Icon>\n"; $xml .= " </IconList>\n"; $xml .= " <Image height=\"800\" width=\"372\">http://[url-zum-webserver]/image6940.jpg</Image>\n"; $xml .= "<SoftKey index=\"1\">\n"; $xml .= " <Label>Beenden</Label>\n"; $xml .= " <URI>SoftKey:Exit</URI>\n"; $xml .= " </SoftKey>\n"; $xml .= " <SoftKey index=\"2\">\n"; $xml .= " <Label>Neu laden</Label>\n"; $xml .= " <URI>http://[url-zum-webserver]/50.xml</URI>\n"; $xml .= "</SoftKey>\n"; $xml .= " </AastraIPPhoneImageScreen>\n"; push2phone("[ip-webserver]","[ip-telefon]",$xml); ?>
Diese Datei unter dem Namen kamera.php (siehe Punkt 2) auf dem Webserver abspeichern.
Erläuterungen:
<Image height=\"800\" width=\"372\">http://[url-zum-webserver]/image6940.jpg</Image>
Hier wird das Kamerabild image6940.jpg aufgerufen. Es kann auch direkt auf die Kamera zugegriffen werden, sofern diese ein mit dem Telefon kompatibles Format ausliefert. In meinem Fall ist das nicht so, daher läuft im Hintergrund ein ffmpeg Prozess, der das Kamerabild in das benötigte Format umwandelt und auf dem Webserver unter image6940.jpg ablegt. Die Werte für Höhe und Breite sind je nach Telefon entsprechend der weiter oben angegebenen Werte anzupassen.
<Label>Neu laden</Label> <URI>http://[url-zum-webserver]/50.xml</URI> </SoftKey>
Auf dem Webserver existiert eine zweite Datei: 50.xml. Diese hat den gleichen XML Inhalt und dient dazu über die Taste „Neu laden“ das Bild erneut abzufragen. Z.B. dann, wenn die Person an der Tür nicht deutlich genug zu erkennen ist.
4. Stream der Kamera auf gewünschtes Format anpassen
Das möchte ich hier nicht ausführlich erklären, dafür gibt es Google. Aber ein guter Startpunkt für die Suche ist ffmpeg. Ein Beispiel, falls die Kamera nur einen rtsp Stream liefert und daraus ständig ein neues Bild generiert werden soll:
/usr/bin/ffmpeg -y -i rtsp://[benutzer]:[passwort]@[ip-der-ipcam]:554/[pfad-zum-stream] -vf scale=[bildbreite]:[bildhöhe] -update 1 /var/www/html/[bildname].jpg