Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. [unGelöst] Sonos Mp3 Sound abspielen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [unGelöst] Sonos Mp3 Sound abspielen

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Marty56 last edited by

      Danke und Ok.

      Der Workarround wäre für jeden Songs Lautsprecher einen eigenen Adapter zu installieren.

      Ziemlicher Krampf, das wäre dann wohl ein Change Request.

      Ich habe das Cache Problem noch mit einem zusätzliche Befehl gelöst.

      setState("sayit.0.tts.mp3",'');          // Sound Cache löschen
      sendTo('sonos.0', 'send', '70;http://192.168.1.124:8082/sayit.0/tts.userfiles/doorbell.mp3');
      
      
      1 Reply Last reply Reply Quote 0
      • M
        Marty56 last edited by

        Leider funktioniert die Installation eines zweiten Sonos Adapters nicht.

        Damit gibt es keine direkte Lösung für Anwender, die mehr als einen Sonos Lautsprecher haben.

        Außerdem scheint meine Kommandosequenz oben irgendetwas in dem Sonos Adapter durcheinander zu bringen.

        Ich sehe den Effekt, dass die Lautstärke der Sonos Box unerklärlicherweise auf Null gesetzt wird.

        Meine Lautsprecher sind die Sonos Playbar und Play1.

        Der einzige Workaround, der geht, ist einen Favoriten in der Sonos App einzurichten, diesem Favoriten einen Soundfile zu zuordnen und dann das Soundfile über die Favoriten Abspielfunktion des Sonos Adapters abzuspielen.

        Ziemlich umständlich und hinten durch die Brust ins Auge.

        1 Reply Last reply Reply Quote 0
        • N
          Nabla last edited by

          @Marty56:

          Leider funktioniert die Installation eines zweiten Sonos Adapters nicht.

          Damit gibt es keine direkte Lösung für Anwender, die mehr als einen Sonos Lautsprecher haben.

          Meine Lautsprecher sind die Sonos Playbar und Play1. `
          Der zweite Adapter funktioniert, aber die Playbar funktioniert nicht. Hatte zuerst das gleiche Problem.

          Zwei unterschiedliche Play1 kann man mit 2 Instanzen ansprechen.

          EDIT: Die tts-Datei wird sogar in der Sonos-App angezeigt jedoch nicht abgespielt.

          1 Reply Last reply Reply Quote 0
          • Jey Cee
            Jey Cee Developer last edited by

            Die Korrekte Lösung sieht so aus:

            setState(sonos.0.root.192_168_0_241.tts, http://192.168.0.3:8082/web/klingel1.mp3)
            

            Damit lässt sich jede Sonos Box einzeln ansprechen.

            1 Reply Last reply Reply Quote 0
            • N
              Nabla last edited by

              Ich muss hier auch noch mal forschen. (Befinde mich bei Sonos aber auch gerade in der geschlossenen Beta, vielleicht ist die Software hier auch noch nicht rund).

              Wenn TTS auf die Playbar in einer Gruppe (3.1/5.1) gesendet wird, wird Group-Volume auf 0 gesetzt, weshalb man die TTS-Ansage dann wohl nicht hört.

              Eine manuelle Änderung von level.volume wird wiederum auch in group.volume nachgezogen.

              1 Reply Last reply Reply Quote 0
              • Z
                Zycho last edited by

                Moin Jungs und Mädels,

                ich habe es nun über das Script versucht, habe aber wohl noch irgendwo einen Denkfehler drinne.

                ~~![](</s><URL url=)https://abload.de/img/unbenannt14sp5h.jpg" />

                Habe meine Klingel über Blockly als Auslöser gesetzt.

                Um dann folgendes Script auszulösen:

                setState("sayit.0.tts.mp3",'');          // Sound Cache löschen
                sendTo('sonos.0', 'send', '70;http://192.168.1.2:8082/sayit.0/tts.userfiles/caracal2.mp3');
                

                Die "192.168.1.2" ist die IP meines Raspberry und unter "/opt/iobroker/iobroker-data/files/sayit.0/tts.userfiles" liegt die caracal2.mp3

                Was mache ich falsch, jemand einen Tip für mich?~~

                1 Reply Last reply Reply Quote 0
                • M
                  Marty56 last edited by

                  Ich habe schon Stunden (Tage) investiert, um eine Lösung zu bekommen, die Sound und Text bei Sonos mischt (natürlich nicht gleichzeitig, sondern hintereinander).

                  Leider bekomme ich das nicht stabil hin und die Randbedingungen dafür sind mir nicht klar.

                  Bei Sound gibt es ja noch nicht einmal eine verbindliche Dokumentation. Vielleicht ist dem Entwickler bewusst, dass es nicht funktioniert.

                  Es gibt immer Mal wieder Situationen, in denen mein Testsetup funktioniert.

                  Aber wenn ich die Einstellung dann "produktiv" schaltet, dann kommt es zu Ausfällen.

                  Die Symptome sind dann immer.

                  1. die Lautstärke ist auf 0 gesetzt.

                  2. die Playlist wird immer länger und alle "Befehle" werden angehängt und nicht mehr gespielt.

                  Nur mit der manuellen Löschung der Playlist mit Hilfe der Sonos App kann dann dieser Zustand verlassen werden.

                  Was funktioniert, ist die Aussage auf einen direkt angeschlossenen Lautsprecher.

                  Das hatte ich auch mal im Einsatz. Hat sich aber bei mir nicht richtig bewährt, weil mein Raspberry an einer Stelle installiert ist, an der der Sound nur bedingt wahrnehmbar ist.

                  Ich habe mittlerweile aufgegeben.

                  Jetzt benutze Telegram als verlässliches Benachrichtigungsmedium (natürlich ohne Sound).

                  Es könnte auch damit zusammenhängt, dass ich drei Sonos Lautsprecher habe und dazu noch unterschiedliche Typen (Playbar und zwei Play1). Man hört im Forum immer wieder, dass Leute, die keine Probleme habe, nur einen Sonos Lautsprecher haben.

                  PS: Ich verwende nur Javascript.

                  1 Reply Last reply Reply Quote 0
                  • T
                    tempestas last edited by

                    dublette

                    1 Reply Last reply Reply Quote 0
                    • T
                      tempestas last edited by

                      @Zycho:

                      Moin Jungs und Mädels,

                      ich habe es nun über das Script versucht, habe aber wohl noch irgendwo einen Denkfehler drinne.

                      ~~![](</s><URL url=)https://abload.de/img/unbenannt14sp5h.jpg" />

                      Habe meine Klingel über Blockly als Auslöser gesetzt.

                      Um dann folgendes Script auszulösen:

                      setState("sayit.0.tts.mp3",'');          // Sound Cache löschen
                      sendTo('sonos.0', 'send', '70;http://192.168.1.2:8082/sayit.0/tts.userfiles/caracal2.mp3');
                      

                      Die "192.168.1.2" ist die IP meines Raspberry und unter "/opt/iobroker/iobroker-data/files/sayit.0/tts.userfiles" liegt die caracal2.mp3

                      Was mache ich falsch, jemand einen Tip für mich?~~ ` ~~hast du denn schon CeeJeys Variante probiert?

                      setState(sonos.0.root.192_168_0_241.tts, http://192.168.0.3:8082/web/klingel1.mp3)
                      ````~~
                      1 Reply Last reply Reply Quote 0
                      • Z
                        Zycho last edited by

                        Kann mir jemand erklären, welche zwei IP-Adressen ich dort einsetzen muss? Die vom Raspberry leuchtet mir ein, aber warum eine zweite IP-Adresse?

                        1 Reply Last reply Reply Quote 0
                        • T
                          tempestas last edited by

                          @Jey Cee:

                          Die Korrekte Lösung sieht so aus:

                          setState(sonos.0.root.192_168_0_241.tts, http://192.168.0.3:8082/web/klingel1.mp3)
                          

                          Damit lässt sich jede Sonos Box einzeln ansprechen. `

                          Ich habe jetzt genau das mal gemacht. Ändert leider nichts daran, dass die jeweils angesprochene Box gemuted wird. Lautstärkebefehle werden ignoriert. Zudem wird die Lautstärke quasi dauerhaft auf 0 gesetzt. Ich kann weder per Sonos App noch per Objekte die Lautstärke anheben. Wird immer sofort wieder auf 0 gesetzt. Erst das ausschalten des Sonos Adapters korrigiert das

                          1 Reply Last reply Reply Quote 0
                          • H
                            HoffmannOs last edited by

                            Ich habe fast das gleiche Problem, wer kann mir Helfen?

                            //var vol ="sayit.0.tts.volume"; 
                            
                            function esklingelt() {
                                var idSonosfav = getState("sonos.0.root.192_168_181_41.favorites_set").val;                  //speichern des aktuellen Senders
                                var idSonosplay = getState ("sonos.0.root.192_168_181_41.state_simple").val;                 //Status des Speakers
                                if (idSonosplay) {                                                                           //Wenn Radio läuft
                                    sendTo('sonos', 'send', '15;http://192.168.181.35:8082/state/sayit.0.tts.mp3');  //Mp3 Ausgabe mit Lautstärke 60
                                    setState ("sonos.0.root.192_168_181_41.favorites_set", idSonosfav);                      //nach 10 Sekunden gespeicherten Favoriten Sender wieder stellen
                                    setStateDelayed ("sonos.0.root.192_168_181_41.state_simple", idSonosplay, 7000);        //nach 10 Sekunden wieder starten
                                } else {                                                                                     //Wenn Radio nicht läuft
                                    sendTo('sonos', 'send', '15;http://192.168.181.35:8082/state/sayit.0.tts.mp3');  //Mp3 Ausgabe mit Lautstärke 60
                                }
                            } 
                            
                            setState("sayit.0.tts.mp3",'es klingelt');          // Sound Cache löschen
                            
                            on({id: "hm-rpc.1.NEQ0955114.1.PRESS_SHORT"/*HM-Sen-DB-PCB NEQ0955114:1.PRESS_SHORT*/, change:  "any"}, esklingelt); //bei kurzem Tastendruck "esklingelt" aufrufen
                            
                            

                            bei mir werden die Boxen gemutet, es kommt die mp3 file auf allen Boxen.

                            1 Reply Last reply Reply Quote 0
                            • S
                              speedy last edited by

                              Ich habe das gleiche Problem, und wenn nicht gemutet, dann wird das file in der Playlist hinten angereist, was ja keinen Sinn ergibt….

                              Gesendet von meinem WAS-TL10 mit Tapatalk

                              1 Reply Last reply Reply Quote 0
                              • M
                                Marty56 last edited by

                                Ich habe mich fast ein Jahr versucht Workarounds für den fehlerhaften Sonos Adapter zu finden.

                                Außerdem habe ich Fehler im Issuetracker gemeldet, auf die nicht reagiert wurde.

                                Ich habe den Eindruck, dass der Sonos Adapter nicht mehr gepflegt wird.

                                Leider erlauben meine Kenntnisse es nicht, hier etwas zu ändern.

                                Ich benutze deshalb seit einem Monat das node-Sonos-http-api.

                                https://github.com/jishi/node-sonos-http-api

                                Von ioBroker spreche ich das API über http get Aufrufe an. Bisher habe ich keine Probleme damit.

                                1 Reply Last reply Reply Quote 0
                                • G
                                  gemuesepudding Developer last edited by

                                  Ich habe etwas gefunden. Der Adapter scheint die einzelnen TTS in einer Queue zu speichern, wenn diese zu oft kommen. < 30 sek.

                                  sonos.0 2018-12-16 17:50:18.670 debug redis pmessage io.sonos.0.* io.sonos.0.root.192_168_6_83.queue {"val":"undefined - sayit.0.tts.mp3, undefined - sayit.0.tts.mp3, undefined - sayit.0.tts.mp3, undefined - sayit.0.tts.mp3, undefined -….

                                  sonos.0 2018-12-16 17:50:18.664 debug queue for http://192.168.6.83:1400: undefined - sayit.0.tts.mp3, undefined - sayit.0.tts.mp3, undefined - sayit.0.tts.mp3, undefined - sayit.0.tts.mp3, undefined - sayit.0.tts.mp3, undefined - sayit.0

                                  sonos.0 2018-12-16 17:50:18.429 debug player.tts= volume=39 currentTrack.uri=http://192.168.120.248:8082/state/sayit.0.tts.mp3 tts.playbackState=STOPPED

                                  und dann in Redis abgelegt zu werden. Aber offensichtlich nicht mehr weiter abgearbeitet.

                                  1 Reply Last reply Reply Quote 0
                                  • G
                                    gemuesepudding Developer last edited by

                                    Ach ja, dabei scheint auch die Lautstärke auf "0" zu gehen.

                                    1 Reply Last reply Reply Quote 0
                                    • S
                                      speedy last edited by

                                      @Marty56:

                                      Ich habe mich fast ein Jahr versucht Workarounds für den fehlerhaften Sonos Adapter zu finden.

                                      Außerdem habe ich Fehler im Issuetracker gemeldet, auf die nicht reagiert wurde.

                                      Ich habe den Eindruck, dass der Sonos Adapter nicht mehr gepflegt wird.

                                      Leider erlauben meine Kenntnisse es nicht, hier etwas zu ändern.

                                      Ich benutze deshalb seit einem Monat das node-Sonos-http-api.

                                      https://github.com/jishi/node-sonos-http-api

                                      Von ioBroker spreche ich das API über http get Aufrufe an. Bisher habe ich keine Probleme damit. `

                                      Ich verwende den den Sonos Adapter auch nur, damit die Sonos über VIS gesteuert werden können.

                                      SayIt würde ich gerne benutzen, habe dies aber nie wirklich brauchbar ansteuern können. D.h. es wurde immer irgendetwas gemacht,

                                      aber nicht das abgespielt, was es sollte…

                                      Die node-Sonos-http-api ist aber kein Adapter für ioBroker, oder?

                                      Wie kann ich dies dann im ioBroker verwenden?

                                      Über eine Minianleitung wäre ich schon dankbar, ich denke, dass ich auch nicht alleine bin.

                                      LG speedy

                                      1 Reply Last reply Reply Quote 0
                                      • M
                                        Marty56 last edited by

                                        Installieren, wie im GItHub beschrieben und dann den Server starten.

                                        Ich habe mir noch ein Unterprogramm gemacht, um die Befehle etwas komfortabler absetzen zu können.

                                        Muss aber zugeben, dass auch dieser Ansatz nach einer Weile Schwächen gezeigt hat, so dass ich ihn nicht mehr benutze.

                                        Was die Probleme genau waren. weiß ich jetzt gar nicht mehr.

                                        Mittlerweile benutze ich Sonos überhaupt nicht mehr für ioBroker, sondern mache alles über die Alexa Lautsprecher.

                                        /* ------------------------ node-sonos-http-api --------------------------------
                                          Der Server muss laufen
                                          im Terminal  starten mit
                                        
                                          cd /opt/iobroker/node_sonos_http_api-master
                                          nohup npm start &
                                          exit
                                        
                                          Queue löschen
                                          node_sonos_http_api("Wohnzimmer","clearqueue");
                                        
                                          Lautstärker einstellen
                                          node_sonos_http_api("Wohnzimmer","volume/"+ "30");
                                        
                                          Play/Stop
                                          node_sonos_http_api("Wohnzimmer","pause");
                                        
                                          Mp3-file abspielen
                                          das mp3-file muss unter static/clip abgelegt sein
                                          node_sonos_http_api("Wohnzimmer","clip/"+ "gong.mp3");
                                        
                                          Sayit abspielen
                                          node_sonos_http_api("Wohnzimmer","clip/"+ "sayit.mp3"); oder
                                          node_sonos_http_api("Wohnzimmer","sayit");
                                        
                                          Voraussetzung, das ein sayit File vorher erzeugt wurde
                                        
                                        */
                                        // node_sonos_http_api("Wohnzimmer","volume/"+ "90"); 
                                        //----------------- file copy function -----------------------------------------
                                        function copyFile(source,destination) {
                                            exec("cp " + source + " " + destination, function (error, stdout, stderr) {
                                                if (!error) {
                                                    log("File kopiert");
                                                } else {log(stdout);log("Fehler beim Kopieren");}
                                            });
                                        }
                                        
                                        var http = require('http');
                                        function node_sonos_http_api(speaker,command) {
                                            log('node_sonos_http_api: ' + command + ' auf ' + speaker);
                                            var delay = 0;
                                            if (command.includes('sayit')) {
                                                //copyFile('/opt/iobroker/node_modules/iobroker.sayit/sayit.1.say.mp3', '/opt/iobroker/node-sonos-http-api-master/static/clips/sayit.mp3');
                                                // habe habe in dem Verzeichnig clip/static ein hardlink auf sayit.1.say.mp3
                                                // angelegt. Das geht mit dem Befehl
                                                // ln  /opt/iobroker/node_modules/iobroker.sayit/sayit.1.say.mp3
                                                // kopieren ist damit nicht mehr notwendig 
                                        
                                                delay = 1000;
                                                command = 'clip/sayit.1.say.mp3';
                                            }
                                            setTimeout( function() {
                                                var reqOptions = {
                                                    hostname: '192.168.10.78',
                                                    port:     5005,
                                                    path:     '/' + speaker + '/' + command,
                                                    method:   'GET'
                                                };
                                        
                                                var req = http.request(reqOptions, function (res) {
                                                    var data = '';
                                                    res.on('data',function (chunk) {data += chunk;});
                                                    res.on('end', function () {
                                                        log('Sonos ' + command + ' ok');
                                                    });
                                                });
                                                req.on('error', function (e) {
                                                    log("Fehler:" + e.message);
                                                });
                                                req.end();
                                            }, delay);
                                        }
                                        
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • S
                                          speedy last edited by

                                          Danke, werde ich mal testen.

                                          Alexa habe und will ich nicht haben, da bin ich etwas eigen…

                                          1 Reply Last reply Reply Quote 0
                                          • M
                                            Marty56 last edited by

                                            Ich habe nochmal herumexperimentiert und glaube einen Ansatz gefunden zu haben.

                                            Ich benutze von dem Sonos Adapter ausschließlich den "tts" State.

                                            Die Kombination mit anderen Funktionen führt bei mir immer wieder zu unerklärlichen Fehlfunktion.

                                            MIt dem State kann man von einem http Server Sound wiedergeben. Hat man einen sayit adapter Installiert, kann man iobroker selber dafür verwenden. Alle Mp3 Files liegen bei mir unter

                                            /opt/iobroker/iobroker-data/files/sayit.1/tts.userfiles/

                                            Diesen Ansatz benutze ich auch für text2speech.

                                            Dazu habe ich eine Text2speech Instanz (sayit.1) angelegt, die auf "Browser" ausgibt. (Nicht auf SONOS! wichtig!!).

                                            Diese Instanz erzeugt ein File unter dem Verzeichnis

                                            /opt/iobroker/node_modules/iobroker.sayit/sayit.1.say.mp3

                                            Um dieses File mit dem tts state auszugeben, habe ich einen symbolischen Link in mein Mp3 Verzeichnis gelegt mit

                                            cd /opt/iobroker/iobroker-data/files/sayit.1/tts.userfiles/
                                            ln  /opt/iobroker/node_modules/iobroker.sayit/sayit.1.say.mp3
                                            
                                            

                                            Damit kann dieses File (nachdem es erzeugt wurde) durch Setzen des tts States abgespielt werden.

                                            Außerdem sorge ich noch dafür, dass keine Sonos Commands von iobroker abgesetzt werden, wenn meine Harmony gleichzeitig versucht, den Sonos Lautsprecher zu bedienen.

                                            var soundserverurl      = 'http://192.168.108.78:8082/';
                                            var path_of_soundfiles  = 'sayit.1/tts.userfiles/';
                                            var sonosWZtts          = "sonos.0.root.192_168_108_32.tts";
                                            var sonosWZdefaultvol   = 40;
                                            var Harmony_currentStatus   = "harmony.0.Wohnzimmer.activities.currentStatus";
                                            
                                            function sonosmp3play(sound,vol) {
                                                var harmony = getState(Harmony_currentStatus).val;
                                                if ( ((harmony === 2) || (harmony === 0))) {
                                                    if (vol === undefined) vol = sonosWZdefaultvol;
                                                    setState(sonosWZtts,vol+";"+soundserverurl + sound);
                                                } else {
                                                   log("Sonos speaker busy.");
                                                }
                                            }
                                            // Beispiel: Abspielen eines Text2Speech Files.
                                            // Diser benötigt ca. 2 Sekunden Verzögerung nach dem Text2Speech Command auf Browser
                                            
                                            sonosmp3play(path_of_soundfiles + 'sayit.1.say.mp3',vol);
                                            
                                            //Beispiel: Abspielen eines Sound Files
                                            
                                            sonosmp3play(path_of_soundfiles + 'doorbell.mp3',vol);
                                            
                                            
                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            893
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            14
                                            48
                                            11417
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo