[LOESUNG] Upnp Nachricht an Samsung TV Senden

pt-1

Mitglied
Mitglied seit
5 Sep 2005
Beiträge
236
Punkte für Reaktionen
0
Punkte
0
Hallo,

angespornt bei:

https://sourceforge.net/apps/phpbb/samygo/viewtopic.php?f=1&t=602
und
http://www.ip-phone-forum.de/showthread.php?t=197700

suche ich nach einer Loesung die mit meinem Asterisk und meiner Analogen Leitung (ohne CLIP!!) einfach ankommended Anrufe auf dem TV signalisiert.

Lt. them Sourceforge post sollte ein ankomender Anruf via:

Code:
POST /PMR/control/MessageBoxService HTTP/1.0
Content-Type: text/xml; charset="utf-8"
HOST: 192.168.1.113
Content-Length: 795
SOAPACTION: "urn:samsung.com:service:MessageBoxService:1#AddMessage"
Connection: close

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" >
<s:Body>
<u:AddMessage xmlns:u="urn:samsung.com:service:MessageBoxService:1\">
<MessageType>text/xml</MessageType>
<MessageID>444</MessageID>
<Message>
&lt;Category&gt;Incoming Call&lt;/Category&gt;
&lt;DisplayType&gt;Maximum&lt;/DisplayType&gt;
&lt;CallTime&gt;
&lt;Date&gt;2010-05-04&lt;/Date&gt;
&lt;Time&gt;01:02:03&lt;/Time&gt;
&lt;/CallTime&gt;
&lt;Callee&gt;
&lt;Number&gt;555-555-5555&lt;/Number&gt;
&lt;Name&gt;Jim&lt;/Name&gt;
&lt;/Callee&gt;
&lt;Caller&gt;
&lt;Number&gt;777-777-7777&lt;/Number&gt;
&lt;Name&gt;Mike&lt;/Name&gt;
&lt;/Caller&gt;
</Message>
</u:AddMessage>
</s:Body>
</s:Envelope>

funktionieren ..

Ich habe so etwas aehnliches mal fuer Google Weather (mit vorlage dem Forum!!) gemacht:

Code:
exten => 86328,1,Answer
exten => 86328,2,Wait(1)
exten => 86328,3,Set(TIMEOUT(digit)=7)
exten => 86328,4,Set(TIMEOUT(response)=10)
exten => 86328,5,Flite(Please stand bye while we retrieve:: Google Weather.);Speaks this text
exten => 86328,6,System(rm -rf /tmp/weather.txt);clears the old data
exten => 86328,7,System(rm -rf /tmp/weather.wav);clears the old data
exten => 86328,8,System(/usr/local/share/asterisk/./weather.php > /tmp/weather.txt);runs the weather.pho script to convert the XML and stores his into a txt file
exten => 86328,9,System(flite /tmp/weather.txt -o /tmp/weather.wav);converts the text into a wave file
exten => 86328,n,Playback(/tmp/weather);plays back the wave file
exten => 86328,n,Wait(1)
exten => 86328,n,Hangup

Wuerde jetzt eben gerne alle Anrufe auf dem TV via Pop Up signalisieren ...
 
Zuletzt bearbeitet:
OK,

bin ein wenig weiter und wurde nun gerne noch das ganze ein wenig optimieren ...

habe zum testen in meiner Extension.conf das folgende eingetragen:
Code:
exten => _888,1,Set(CALLERID(number)=123456)
exten => _888,2,system(rm -rf /var/www/data.xml); loescht das alte file
exten => _888,3,system(echo ${CALLERID} > /var/www/./samsung.pl);ruft das Perl script auf welches ein neues data.xml baut
exten => _888,4,System(php /var/www/soaper.php http://192.168.178.123:52235  < /var/www/data.xml);ruft soaper.php auf und sendet via SOAP die data.xml TV Datei an den Fernseher
exten => _888,5,Playback(vm-and);einfach nur eine Audio bestaetigung das dies funktioniert hat

sprich wenn ich 888 intern anrufe wollte ich die callerID 123456 als variable and das samsung.pl script uebergeben.


Sprich wuerde gerne samung.pl + einkommende CallerID absetzen.

das samsung.pl (BIN KEIN CODER!!!!!!!!!!!! ;-)):
Code:
#!/usr/bin/perl -w

use strict ;
use warnings ;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime;
$year += 1900;
$mon++;
$mon = "0$mon" if $mon < 10;
$mday = "0$mday" if $mday < 10;
$hour = "0$hour" if $hour < 10;
$min = "0$min" if $min < 10;
$sec = "0$sec" if $sec < 10;
my $callerID = $ARGV[0];

print "callerID 			= $ARGV[0]\n";#only used for Visual Display in the Command Line


open OUT, ">data.xml";
#we use this section to write the content into the generated file
print OUT 
'<?xml version=\"1.0\" encoding=\"utf-8\"?>
<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" >
<s:Body>
<u:AddMessage xmlns:u=\"urn:samsung.com:service:MessageBoxService:1\\\">
<MessageType>text/xml</MessageType>
<MessageID>';
print OUT "$mday$mon$year$hour$min$sec";
print OUT
'</MessageID>
<Message>
&lt;Category&gt;Incoming Call&lt;/Category&gt;
&lt;DisplayType&gt;Maximum&lt;/DisplayType&gt;
&lt;CallTime&gt;
&lt;Date&gt;';
print OUT "$year-$mon-$mday";
print OUT '&lt;/Date&gt;
&lt;Time&gt;';
print OUT "$hour:$min:$sec";
print OUT '&lt;/Time&gt;
&lt;/CallTime&gt;
&lt;Callee&gt;
&lt;Number&gt;';
print OUT "$ARGV[0]";
print OUT
'&lt;/Number&gt;
&lt;Name&gt;SamsungTV&lt;/Name&gt;
&lt;/Callee&gt;
&lt;Caller&gt;
&lt;Number&gt;Unknown&lt;/Number&gt;
&lt;Name&gt;Unknown&lt;/Name&gt;
&lt;/Caller&gt;
&lt;Body&gt;Incoming Call!!!&lt;/Body&gt;
</Message>
</u:AddMessage>
</s:Body>
</s:Envelope>';
close OUT;

und soaper.php (idee von hier :
Code:
<?php
ini_set('display_errors', "1");

$url= $argv[1];

echo "url\n$url\n";

preg_match("/http?:\/\/([^\/]*)(.*)/", $url, $matches);
$host=$matches[1];
;$request=$matches[2];

$mxml=fread(STDIN,65536);
$yt =curl_init();
$header =  "POST /PMR/control/MessageBoxService HTTP/1.0\r\n";
$header .=  "Host: $host\r\n";
$header .=  "Content-Type: text/xml; charset=\"utf-8\r\n";
$header .=  "Content-Length: ".strlen($mxml)."\r\n";
$header .=  "SOAPACTION: \"uuid:samsung.com:service:MessageBoxService:1#AddMessage\"\r\n";
$header .=  "Connection-Close: close\r\n\r\n";

echo "header\n$header\n";

$header .=  $mxml;

curl_setopt($yt, CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($yt, CURLOPT_URL, $url);
curl_setopt($yt, CURLOPT_CUSTOMREQUEST, $header);
curl_setopt($yt, CURLOPT_RETURNTRANSFER, true);

$rxml=curl_exec($yt);
echo "sent\n$mxml\n";
echo "received\n$rxml\n";

echo curl_error($yt);
?>



EDIT: 14:53

bekomme wenn ich es wie oben einrichte einfach nicht die CallerID ...

Code:
    -- Executing [888@local:1] Set("SIP/708-00000018", "CALLERID(number)=123456") in new stack
    -- Executing [888@local:2] System("SIP/708-00000018", "rm -rf /var/www/data.xml") in new stack
    -- Executing [888@local:3] System("SIP/708-00000018", "echo  > /var/www/./samsung.pl ") in new stack
    -- Executing [888@local:4] Playback("SIP/708-00000018", "vm-and") in new stack
    -- <SIP/708-00000018> Playing 'vm-and.gsm' (language 'en')
    -- Auto fallthrough, channel 'SIP/708-00000018' status is 'UNKNOWN'
 
Zuletzt bearbeitet:
OK, habe die Extensions.conf nun hoffentlich richtig veraendert:

Code:
exten => _888,1,Set(CALLERID(number)=123456)
exten => _888,2,system(rm -rf /var/www/data.xml)
exten => _888,3,system(/var/www/./samsung.pl ${CALLERID(num)})
exten => _888,4,Playback(vm-and)

jetzt funktioniert die CallerID auch hinter dem Commando:

Code:
 -- Executing [888@local:1] Set("SIP/708-00000020", "CALLERID(number)=123456") in new stack
    -- Executing [888@local:2] System("SIP/708-00000020", "rm -rf /var/www/data.xml") in new stack
    -- Executing [888@local:3] System("SIP/708-00000020", "/var/www/./samsung.pl 123456") in new stack
    -- Executing [888@local:4] Playback("SIP/708-00000020", "vm-and") in new stack

funktionierendes samsung.pl:

Code:
use strict ;
use warnings ;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime;
$year += 1900;
$mon++;
$mon = "0$mon" if $mon < 10;
$mday = "0$mday" if $mday < 10;
$hour = "0$hour" if $hour < 10;
$min = "0$min" if $min < 10;
$sec = "0$sec" if $sec < 10;
#we use below to parse the CallerID of the incoming call and include this into the generated XML Message
my $callerID = $ARGV[0];

open OUT, ">/var/www/data.xml";
#we use this section to write the content into the generated file
print OUT
'<?xml version=\"1.0\" encoding=\"utf-8\"?>
<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" >
<s:Body>
<u:AddMessage xmlns:u=\"urn:samsung.com:service:MessageBoxService:1\\\">
<MessageType>text/xml</MessageType>
<MessageID>';
print OUT "$mday$mon$year$hour$min$sec";
print OUT
'</MessageID>
<Message>
&lt;Category&gt;Incoming Call&lt;/Category&gt;
&lt;DisplayType&gt;Maximum&lt;/DisplayType&gt;
&lt;CallTime&gt;
&lt;Date&gt;';
print OUT "$year-$mon-$mday";
print OUT '&lt;/Date&gt;
&lt;Time&gt;';
print OUT "$hour:$min:$sec";
print OUT '&lt;/Time&gt;
&lt;/CallTime&gt;
&lt;Callee&gt;
&lt;Number&gt;';
print OUT "$ARGV[0]";
print OUT
'&lt;/Number&gt;
&lt;Name&gt;SamsungTV&lt;/Name&gt;
&lt;/Callee&gt;
&lt;Caller&gt;
&lt;Number&gt;Unknown&lt;/Number&gt;
&lt;Name&gt;Unknown&lt;/Name&gt;
&lt;/Caller&gt;
&lt;Body&gt;Incoming Call!!!&lt;/Body&gt;
</Message>
</u:AddMessage>
</s:Body>
</s:Envelope>';
close OUT;

samsung.pl, soaper.pho und data.xml liegen alle in /var/www/
 
CALLERID alleine ist leer, Du brauchst CALLERID(number).

exten => _888,3,system(echo ${CALLERID(number)} > /var/www/./samsung.pl)
 
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.