[Frage] Auerswald Türsprech an Fritzbox ruft freePBX mit Ciscos 7975 > Webcam Aufruf

stindl

Neuer User
Mitglied seit
14 Feb 2009
Beiträge
58
Punkte für Reaktionen
0
Punkte
6
Habe freePBX (Asterisk 1.8 ) mit Ciscos 7975 im Einsatz.
Möchte ein Auerswald Türsprechmodul (301) an eine Fritzbox anschließen und dann mit Asterisk verbinden.
So weit so gut. Entsprechende Anleitungen gibt es ja.

Würde aber auch noch eine Webcam bei der Eingangstüre gerne an meinen Ciscos darstellen.
Über einen Softbutton kann ich das entsprechende Script schon ansteuern.
Wie hier beschrieben:
http://hq.ipas.nl/?p=43

Jetzt wäre es aber noch toll, wenn bei jedem Besucher an der Tür das Klingeln die Aktivierung des Kamerabildes am Display der Ciscos auslösen könnte.
Bei den Snom Telefonen gibt es eine ActionUrl (man hinterlegt die jeweilige Rufnummer im Telefonbuch inkl. ActionURL), bei den Ciscos scheint es das nicht zu geben.

Habe versucht es über einen CustomDialplan zu machen...das Bild wird bei Anruf auch am Cisco angezeigt, aber der Anruf bricht danach ab.

Hat jemand eine Idee?

Danke
Reinhard
 
Hab mir jetzt anhand von (im www gefundenen) Skripten eine etwas komplizierte Skriptkette gebastelt, die sich über den Terminal auf dem freePBX Server starten lässt. Es wird auf allen Cisco 7975 Telefonen das aktuelle Kamerabild angezeigt und dann nach einiger Zeit wieder geschlossen. (Kamera ist eine Trivision NC-326PW) Die php-pecl-imagick Module müssen (Apache Server) installiert werden.Problem ist nur, ich weiß nicht, wie ich das für eingehende Anrufe in freePBX einbauen kann bzw. ob sowas überhaupt möglich ist, ohne Asterisk aus dem Tritt zu bringen. Asterisk sollte die Skripts nur anstoßen und nicht auf irgendwelche Meldungen warten.

In /var/lib/asterisk/agi-bin liegt showcam.agi
PHP:
#!/bin/sh
cd /var/www/html/xmlservices/
php cam-start-11.php;
sleep 1
php cam-start-12.php;
php cam-start-13.php;
php cam-start-14.php;
php cam-start-15.php;
php cam-start-17.php;
sleep 25
php cam-stop-11.php;
php cam-stop-12.php;
php cam-stop-13.php;
php cam-stop-14.php;
php cam-stop-15.php;
php cam-stop-17.php;

die cam-start u. stop Skripte liegen in /var/www/html/xmlservices/
Hier die cam-start.php für das erste Telefon
PHP:
<?php
$ip = "192.168.0.211";
$uri = "http://192.168.0.34/xmlservices/cam.php";
$uid = "admin";
$pwd = "cisco";

function push2phone($ip, $uri, $uid, $pwd)
{
$auth = base64_encode($uid.":".$pwd);
$xml = "<CiscoIPPhoneExecute><ExecuteItem Priority=\"0\"URL=\"".$uri."\"/></CiscoIPPhoneExecute>";
$xml = "XML=".urlencode($xml);

$post = "POST /CGI/Execute HTTP/1.0\r\n";
$post .= "Host: $ip\r\n";
$post .= "Authorization: Basic $auth\r\n";
$post .= "Connection: close\r\n";
$post .= "Content-Type: application/x-www-form-urlencoded\r\n";
$post .= "Content-Length: ".strlen($xml)."\r\n\r\n";

$fp = fsockopen ( $ip, 80, $errno, $errstr, 30);
if(!$fp){ echo "$errstr ($errno)<br>\n"; }
else
{
fputs($fp, $post.$xml);
flush();
while (!feof($fp))
{
$response .= fgets($fp, 128);
flush();
}
}

return $response;
}

echo push2phone($ip, $uri, $uid, $pwd);
?>

Da ich nicht weiß, ob es ein Problem ist, wenn gleichzeitig mehrere Skripte versuchen eine Image Datei anzulegen, hab ich bei den anderen Telefonen die cam-start nur auf die Bildanzeige beschränkt (denke ich zumindest)

PHP:
<?php
$ip = "192.168.0.212";
$uri = "http://192.168.0.34/xmlservices/image.php";
$uid = "admin";
$pwd = "cisco";

function push2phone($ip, $uri, $uid, $pwd)
{
$auth = base64_encode($uid.":".$pwd);
$xml = "<CiscoIPPhoneExecute><ExecuteItem Priority=\"0\"URL=\"".$uri."\"/></CiscoIPPhoneExecute>";
$xml = "XML=".urlencode($xml);

$post = "POST /CGI/Execute HTTP/1.0\r\n";
$post .= "Host: $ip\r\n";
$post .= "Authorization: Basic $auth\r\n";
$post .= "Connection: close\r\n";
$post .= "Content-Type: application/x-www-form-urlencoded\r\n";
$post .= "Content-Length: ".strlen($xml)."\r\n\r\n";

$fp = fsockopen ( $ip, 80, $errno, $errstr, 30);
if(!$fp){ echo "$errstr ($errno)<br>\n"; }
else
{
fputs($fp, $post.$xml);
flush();
while (!feof($fp))
{
$response .= fgets($fp, 128);
flush();
}
}

return $response;
}

echo push2phone($ip, $uri, $uid, $pwd);
?>

Es war etwas schwierig den richten Befehl zu finden, um das Camera-Fenster zu schließen, egal ob Hörer abgehoben oder ob das Fenster schon manuell geschlossen. Mit "Init:Services" bin ich dann fündig geworden.
Die cam-stop Skripte schauen so aus:

PHP:
<?php
$ip = "192.168.0.211";
$uri = "Init:Services";
$uid = "admin";
$pwd = "cisco";

function push2phone($ip, $uri, $uid, $pwd)
{
$auth = base64_encode($uid.":".$pwd);
$xml = "<CiscoIPPhoneExecute><ExecuteItem Priority=\"0\"URL=\"".$uri."\"/></CiscoIPPhoneExecute>";
$xml = "XML=".urlencode($xml);

$post = "POST /CGI/Execute HTTP/1.0\r\n";
$post .= "Host: $ip\r\n";
$post .= "Authorization: Basic $auth\r\n";
$post .= "Connection: close\r\n";
$post .= "Content-Type: application/x-www-form-urlencoded\r\n";
$post .= "Content-Length: ".strlen($xml)."\r\n\r\n";

$fp = fsockopen ( $ip, 80, $errno, $errstr, 30);
if(!$fp){ echo "$errstr ($errno)<br>\n"; }
else
{
fputs($fp, $post.$xml);
flush();
while (!feof($fp))
{
$response .= fgets($fp, 128);
flush();
}
}

return $response;
}

echo push2phone($ip, $uri, $uid, $pwd);
?>

und nicht zu vergessen, die image.php

PHP:
<?php
////////////////////////////////////////////////////////////////////////
// IP-Camera image on your Cisco 7970G IP-phone 
////////////////////////////////////////////////////////////////////////
// This simple script downloads an image from your ip-camera (Axis) and 
// convert the image to a 7970G browser format. 
// Script by ipas 27-10-2012
////////////////////////////////////////////////////////////////////////
// You need php-pecl-imagick installed on your apache-server 
////////////////////////////////////////////////////////////////////////

$camurl="http://192.168.0.37/live/1/jpeg.jpg";
$camtext="Haustor";
$buttontext="Haustor";
//the path to the imagefile. must be world-writable! chmod 777
$imagepath="/var/www/html/xmlservices/cam-image/jpeg.png";
$imageurl="http://192.168.0.34/xmlservices/cam-image/jpeg.png";
$camscripturl="http://192.168.0.34/xmlservices/cam.php";

$output= "
<CiscoIPPhoneImageFile>
  <Prompt>" . $camtext . "</Prompt>
  <URL>" . $imageurl . "</URL>
</CiscoIPPhoneImageFile>
";

header("Content-type: text/xml");
header("Connection: close");
header("Expires: -1");
echo $output;

?>
Die image.php ist nur verkürzt von hier http://hq.ipas.nl/?p=43

und die angepasste cam.php, die das Jpeg-Image der Camera in ein png-Image umwandelt und abspeichert:
PHP:
<?php
////////////////////////////////////////////////////////////////////////
// IP-Camera image on your Cisco 7970G IP-phone 
////////////////////////////////////////////////////////////////////////
// This simple script downloads an image from your ip-camera (Axis) and 
// convert the image to a 7970G browser format. 
// Script by ipas 27-10-2012
////////////////////////////////////////////////////////////////////////
// You need php-pecl-imagick installed on your apache-server 
////////////////////////////////////////////////////////////////////////

$camurl="http://192.168.0.37/live/1/jpeg.jpg";
$camtext="Haustor";
$buttontext="Haustor";
//the path to the imagefile. must be world-writable! chmod 777
$imagepath="/var/www/html/xmlservices/cam-image/jpeg.png";
$imageurl="http://192.168.0.34/xmlservices/cam-image/jpeg.png";
$camscripturl="http://192.168.0.34/xmlservices/cam.php";

  // Get the image from the camera
  $image = file_get_contents($camurl);

// Create Imagick object
  $im = new Imagick();

  // Convert image into Imagick
  $im->readimageblob($image);

  // Resize image to match a cisco 7970 browser
  $im->resizeImage(296,166,Imagick::FILTER_LANCZOS,1);

  // Add a subtle border
  $color=new ImagickPixel();
  $color->setColor("rgb(220,220,220)");
  $im->borderImage($color,1,1);
  $im->setImageChannelDepth(imagick::CHANNEL_RED, 5);
  $im->setImageChannelDepth(imagick::CHANNEL_GREEN, 12);
  $im->setImageChannelDepth(imagick::CHANNEL_BLUE, 12);

  $im->setImageFormat("png");
  // Output the image
  $output = $im->getimageblob();
  $outputtype = $im->getFormat();

// output to file
  $fp = fopen($imagepath, 'w');
  fwrite($fp, $im);
  fclose($fp);

$output= "
<CiscoIPPhoneImageFile>
  <Prompt>" . $camtext . "</Prompt>
  <URL>" . $imageurl . "</URL>
</CiscoIPPhoneImageFile>
";

header("Content-type: text/xml");
header("Connection: close");
header("Expires: -1");
echo $output;

?>

WAS muss nun in extensions_custom.conf rein, um die Sache über Asterisk zu starten...? Geht das überhaupt? Bei mir hängt ein Auerswald 301 Türsprechmodul an einer Fritzbox 7390 (Nebenstelle **1), an der Fritzbox ist Asterisk (freePBX) als SIP-Telefon registriert. In freePBX geht diese Verbindung als Trunk Fritzbox in Asterisk rein. Dort hab ich eine Incoming Rule mit CID **1 die auf Ringgroup Haustor umleitet.

cisco_cam.jpg

Ciao
Reinhard
 
Zuletzt bearbeitet:
Für die extension_custom.conf am freePBX-Asterisk-Server bräuchte ich den richtigen Code.

Irgendwas in der Art:

[from-trunk-sip-fritzbox]
exten => .,1,System(/var/lib/asterisk/agi-bin/showcam.agi)
exten => .,n,Goto(from-trunk,${EXTEN},1)

...aber ohne dass Asterisk dann komplett abkackt ;-)

Niemand eine Idee???

Ciao
Reinhard
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.