speak (tts) für alle UPnP fähigen Audiogeräte

Begonnen von mumpitzstuff, 01 Februar 2018, 12:00:51

Vorheriges Thema - Nächstes Thema

mumpitzstuff

Nachdem ich für das SIRD Modul (Radios mit frontier silicon chipset) auf der Suche nach einer einfachen Möglichkeit über UPnP Sprachnachrichten auszugeben fast gescheitert bin, habe ich eine sehr einfache Möglichkeit gefunden, die im Prinzip mit standard FHEM Hilfsmitteln in allen Modulen einzubauen ist. Benötigt wird lediglich httputils und keine der total verbuggten UPnP Bibliotheken für Perl.

Um zu testen ob es grundsätzlich funktioniert kann man folgendes verwenden:

1.) Hiermit wird nur der Stream gesetzt, aber noch nicht abgespielt.
curl -H 'Content-Type: text/xml; charset=utf-8' -H 'SOAPAction: "urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI"' -d '<?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:SetAVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><CurrentURI>http://translate.google.com/translate_tts?tl=de&client=tw-ob&q=Das%20ist%20ein%20Test!</CurrentURI><CurrentURIMetaData></CurrentURIMetaData></u:SetAVTransportURI></s:Body></s:Envelope>' 'http://192.168.1.100:8080/AVTransport/control'

2.) Hiermit wird der Stream abgespielt.
curl -H 'Content-Type: text/xml; charset=utf-8' -H 'SOAPAction: "urn:schemas-upnp-org:service:AVTransport:1#Play"' -d '<?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:Play xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><Speed>1</Speed></u:Play></s:Body></s:Envelope>' 'http://192.168.1.100:8080/AVTransport/control'

Wichtig ist lediglich Folgendes:

Die IP muss durch die IP des Radios/Receivers ersetzt werden und der Control Pfad, in meinem Fall "/AVTransport/control" muss bei euch entsprechend angepasst werden. Dieser Pfad ist Bestandteil der Device Description, die man Normalerweise beim Scannen nach UPnP Geräten im Netzwerk erhält und kann mit gängigen Tools ermittelt werden.

Im Modul einbauen geht dann z.B. so:

my $uri_text = uri_escape($text);
  my $url = 'http://translate.google.com/translate_tts?ie=UTF-8&tl='.$language.'&client=tw-ob&q='.$uri_text;

  $param = {
              url        => 'http://'.$ip.':8080/AVTransport/control',
              timeout    => 10,
              header     => { 'Content-Type' => 'text/xml; charset=utf-8',
                              'SOAPAction' => '"urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI"' },
              data       => '<?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:SetAVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1">'.
                            '<InstanceID>0</InstanceID><CurrentURI>'.$url.'</CurrentURI><CurrentURIMetaData>'.
                            '</CurrentURIMetaData></u:SetAVTransportURI></s:Body></s:Envelope>',
              #loglevel   => 3,
              method     => 'POST'
            };

($err, $data) = HttpUtils_BlockingGet($param);


$param = {
              url        => 'http://'.$ip.':8080/AVTransport/control',
              timeout    => 10,
              header     => { 'Content-Type' => 'text/xml; charset=utf-8',
                              'SOAPAction' => '"urn:schemas-upnp-org:service:AVTransport:1#Play"' },
              data       => '<?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:Play xmlns:u="urn:schemas-upnp-org:service:AVTransport:1">'.
                            '<InstanceID>0</InstanceID><Speed>1</Speed></u:Play></s:Body></s:Envelope>',
              #loglevel   => 3,
              method     => 'POST'
           };

  ($err, $data) = HttpUtils_BlockingGet($param);



Fhemotto

Hallo
Kannst du den Beitrag eventuell nach
FHEM Forum » FHEM - Anwendungen » Multimedia
verschieben.
Dort gibt es diverse Leute die zu dieser Problematik mit lesen
und ähnliche Probleme mit den  " verbuggten UPnP Bibliotheken für Perl "    :'(    haben,
wie auch ich.

Leider hatte ich im moment noch keine Zeit dies zu testen.

Danke