Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. [unGelöst] Sonos Mp3 Sound abspielen

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    481

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.6k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.6k

[unGelöst] Sonos Mp3 Sound abspielen

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
48 Beiträge 14 Kommentatoren 14.1k Aufrufe 9 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • N Offline
    N Offline
    Nabla
    schrieb am zuletzt editiert von
    #9

    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 Antwort Letzte Antwort
    0
    • Z Offline
      Z Offline
      Zycho
      schrieb am zuletzt editiert von
      #10

      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?~~

      Chaos ist, wenn ADHS mich kontrolliert.

      Kontrolle ist, wenn ich ADHS kontrolliere.

      1 Antwort Letzte Antwort
      0
      • M Offline
        M Offline
        Marty56
        schrieb am zuletzt editiert von
        #11

        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.

        HW:NUC (16 GB Ram)
        OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

        1 Antwort Letzte Antwort
        0
        • T Offline
          T Offline
          tempestas
          schrieb am zuletzt editiert von
          #12

          dublette

          <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

          1 Antwort Letzte Antwort
          0
          • T Offline
            T Offline
            tempestas
            schrieb am zuletzt editiert von
            #13

            @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)
            ````~~

            <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

            1 Antwort Letzte Antwort
            0
            • Z Offline
              Z Offline
              Zycho
              schrieb am zuletzt editiert von
              #14

              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?

              Chaos ist, wenn ADHS mich kontrolliert.

              Kontrolle ist, wenn ich ADHS kontrolliere.

              1 Antwort Letzte Antwort
              0
              • T Offline
                T Offline
                tempestas
                schrieb am zuletzt editiert von
                #15

                @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

                <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                1 Antwort Letzte Antwort
                0
                • H Offline
                  H Offline
                  HoffmannOs
                  schrieb am zuletzt editiert von
                  #16

                  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 Antwort Letzte Antwort
                  0
                  • S Offline
                    S Offline
                    speedy
                    schrieb am zuletzt editiert von
                    #17

                    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


                    ioBroker - Neuling ;)

                    1 Antwort Letzte Antwort
                    0
                    • M Offline
                      M Offline
                      Marty56
                      schrieb am zuletzt editiert von
                      #18

                      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.

                      HW:NUC (16 GB Ram)
                      OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

                      1 Antwort Letzte Antwort
                      0
                      • G Offline
                        G Offline
                        gemuesepudding
                        Developer
                        schrieb am zuletzt editiert von
                        #19

                        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 Antwort Letzte Antwort
                        0
                        • G Offline
                          G Offline
                          gemuesepudding
                          Developer
                          schrieb am zuletzt editiert von
                          #20

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

                          1 Antwort Letzte Antwort
                          0
                          • S Offline
                            S Offline
                            speedy
                            schrieb am zuletzt editiert von
                            #21

                            @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


                            ioBroker - Neuling ;)

                            1 Antwort Letzte Antwort
                            0
                            • M Offline
                              M Offline
                              Marty56
                              schrieb am zuletzt editiert von
                              #22

                              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);
                              }
                              
                              

                              HW:NUC (16 GB Ram)
                              OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

                              1 Antwort Letzte Antwort
                              0
                              • S Offline
                                S Offline
                                speedy
                                schrieb am zuletzt editiert von
                                #23

                                Danke, werde ich mal testen.

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


                                ioBroker - Neuling ;)

                                1 Antwort Letzte Antwort
                                0
                                • M Offline
                                  M Offline
                                  Marty56
                                  schrieb am zuletzt editiert von
                                  #24

                                  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);
                                  
                                  

                                  HW:NUC (16 GB Ram)
                                  OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

                                  1 Antwort Letzte Antwort
                                  0
                                  • S Offline
                                    S Offline
                                    speedy
                                    schrieb am zuletzt editiert von
                                    #25

                                    Hallo Marty56,

                                    das werde ich bei Gelegenheit mal so testen.

                                    Ich könnte ja die meisten "Ansagen" auch als mp3 hinterlegen, damit würde ich vieles einfach abdecken.

                                    Werde es auf jedenfalls mal so testen und wenn's klappt umsetzen.

                                    Besten Dank für deine Hilfe.


                                    ioBroker - Neuling ;)

                                    1 Antwort Letzte Antwort
                                    0
                                    • S Offline
                                      S Offline
                                      speedy
                                      schrieb am zuletzt editiert von
                                      #26

                                      So, konnte nun doch gleich mal testen.

                                      Habe es nun genauso versucht, aber das Problem ist, dass in der Wiedergabeliste (lt. Sonos App am Rechner) einige Lieder hinterlegt sind.

                                      Diese werden nun erstmals abgespielt und somit hat mein Eintrag unter tts keinen Sinn (wird nicht abgespielt).

                                      Wenn die Liste leer ist, funktioniert es. Aber ich konnte keine Möglichkeit finden, wie ich die Liste aus ioBroker leeren könnte.

                                      Die Liste wird aber bei Verwendung der Sonos mal mehr mal weniger Einträge aufweisen…

                                      Dann kommt noch dazu, dass die Lautstärke sich von alleine erhöht. Ich habe im ioBroker eine MaxLautstärke eingestellt :D .

                                      Diese hält mir die Lautstärke dann auf 20%.

                                      Meiner Meinung macht dieser Adapter nur wenig Sinn... er ist einfach unausgereift...

                                      Schade


                                      ioBroker - Neuling ;)

                                      1 Antwort Letzte Antwort
                                      0
                                      • M Offline
                                        M Offline
                                        Marty56
                                        schrieb am zuletzt editiert von
                                        #27

                                        Ja der Adapter ist ziemlicher Schrott!

                                        Ich hatte mit meiner Lösung nach ca. 2 Wochen auch wieder so einen "PSI- Effekt", dass ich plötzlich kein Mp3 File mehr abspielen konnte.

                                        Statt dessen hat er das Mp3 File der letzten Ansage immer wieder abgespielt.

                                        Ich habe jetzt in meiner Sound Routine noch ein Dummy Abspielen eines Favoriten eingefügt.

                                        Damit ist zunächst mal das Symtom weg. Aber ob das eine langfristig, stabile Lösung ist, weiß ich auch nicht.

                                        function sonosmp3play(sound,vol) {
                                            var harmony = getState(Harmony_currentStatus).val;
                                            if ( ((harmony === 2) || (harmony === 0))) {
                                                setState("sonos.0.root.192_168_10_32.favorites_set","");
                                                if (vol === undefined) vol = sonosWZdefaultvol;
                                                setStateDelayed(sonosWZtts,vol+";"+soundserverurl + sound,1000);
                                            } else {
                                               log("Sonos speaker busy.");
                                            }
                                        }
                                        

                                        Update: Funktioniert auch nicht.

                                        I give up. Schrott bleibt Schrott, da hilft auch kein Lippenstift.

                                        HW:NUC (16 GB Ram)
                                        OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

                                        1 Antwort Letzte Antwort
                                        0
                                        • M Offline
                                          M Offline
                                          Marty56
                                          schrieb am zuletzt editiert von Marty56
                                          #28

                                          Ich habe jetzt die gesamte Soundausgabe auf Sonos auf den "node-sonos-http-api" Server umgestellt und den Sonos Adapter gelöscht.
                                          Außerdem habe ich mein "Sound API" vereinheitlich, so dass ich es auch für die 5 Alexa Lautsprecher verwenden kann. Dieses Script habe ich seit 14 Tage ohne Problem im Einsatz.

                                          
                                          /* ------------------------ node-sonos-http-api --------------------------------
                                            1. Master von https://github.com/jishi/node-sonos-http-api herunterladen
                                            
                                            2. Das Repro unter /opt/iobroker/node_sonos_http_api-master entpacken
                                            
                                            3. und dort mit npm install --production installieren.
                                            
                                            4. Der 'node-sonos-http' Server starten mit 
                                          
                                            cd /opt/iobroker/node_sonos_http_api-master
                                            nohup npm start &
                                          
                                            
                                            Kommandos:
                                            
                                            Queue löschen
                                            node_sonos_http_api("Wohnzimmer","clearqueue");
                                            
                                            Play/Stop
                                            node_sonos_http_api("Wohnzimmer","pause");
                                            
                                            Mp3-file abspielen
                                            Das mp3-file muss unter static/clip abgelegt sein.
                                            Nach Beendigung wird die vorige Lautstärke wiederhergestellt
                                            Beispiel mit Lautstärke 40%
                                            node_sonos_http_api("Wohnzimmer","clip/"+ "gong.mp3/40");
                                          
                                            
                                            Text to speech
                                            Es ist eine sayit instanz instanziert, die ein Mp3- file erzeugt und als 
                                            Ausgabe Browser verwendet. 
                                            Dazu wird das vom Adapter sayit erzeugte Mp3- file nach static/clip
                                            kopiert. Achtung: Das Cachen des sayit Adapters muss dafür ausgeschaltet sein.
                                            
                                            Beispiel: Sayit abspielen mit Lautstärke 50
                                            node_sonos_http_api("Wohnzimmer","clip/"+ "sayit.mp3/50");
                                            
                                            
                                          */
                                          
                                          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');
                                                  // Ausgabe 1 Sekunde verzögern, 
                                                  // damit das Kopieren von sayit.1.say.mp3 abgeschlossen werden kann.
                                                  delay = 1000;
                                              }
                                              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);
                                          }
                                          /*
                                          ----- 5 Alexa Lautsprecher und 1 Sonos Playbar -------------------------------
                                          Die Funktion text_to_wlan speaker funktioniert sowohl für Alexa Lautsprecher
                                          als auch für eine Playbar (WZ).
                                          
                                          */
                                          var alexa = {
                                              "Bad":          'alexa2.0.Echo-Devices.G090LV037324007K',
                                              "Kinderzimmer": 'alexa2.0.Echo-Devices.90F00818720400KN',
                                              "Küche":        'alexa2.0.Echo-Devices.G090LV03717501KP',
                                              "Diele" :       'alexa2.0.Echo-Devices.G090LF09650418PG',
                                              "Obergeschoss": 'alexa2.0.Echo-Devices.G2A0P308844308UB',
                                              "WZ":           ''
                                          };
                                          var alarmvol = 100;
                                          var klingelvol = 80;
                                          
                                          function text_to_wlan_speacher(txt,vol,night,device) {
                                              var delay = 0;
                                              if ((new Date() >= getDateObject("6:59"))  && 
                                                  (new Date() <= getDateObject("22:30")) ||
                                                  (night === true)) {
                                                  if(alexa[device] !== undefined)
                                                      if(alexa[device].substr(0,5) == "alexa") {
                                                          if (vol !== undefined) {
                                                              delay = 500;
                                                              setState(alexa[device] + ".Commands.speak-volume",parseInt(vol));
                                                          }
                                                          setTimeout(function(){setState(alexa[device] + ".Commands.speak",txt);},delay);
                                                      } else {
                                                           
                                                      // Aufruf der Routine 3 Sek verzögert, damit sayit Adapter Zeit hat
                                                      // das mp3 file zu erzeugen.
                                                          setTimeout(function () {
                                                              if (vol === undefined) vol = ''; else vol = "/" + vol;
                                                              node_sonos_http_api("Wohnzimmer","clip/sayit.mp3"+vol);
                                                          },3000);
                                                          //delay  = (txt.length/3)*1000 + 3000;
                                                          //setTimeout(function () { node_sonos_http_api("Wohnzimmer","clearqueue");},delay);
                                                      } 
                                                  else log("unbekannter Lautsprecher");    
                                              } else {
                                                  log("Die unterdrückte Sprachausgabe um " + formatDate(new Date(),'h') + 
                                                      " Uhr " + formatDate(new Date(),'m') + ' lautete ' + txt + '!');
                                              }
                                          }
                                          /*
                                          Aufruf von Text to Speech durch Schreiben auf Datenpunkt "speechout2". Z.B. 
                                          
                                          setState("speechout2",JSON.stringify(
                                              {   text:   "Hallo Martin",
                                                  vol:21,
                                                  device: "WZ",
                                                  night:  false
                                              }));
                                              
                                          text: Der Ausgabetext
                                          vol:  Die Ausgabelautstärke (optional)
                                          device: Die Lautsprecherbezeichnung (optional), falls nicht angegeben dann nur
                                                  Ausgabe auf Browser
                                                  Bad: Ausgabe im Bad
                                                  Obergeschoss: Ausgabe im Obergeschoss,
                                                  Küche: Ausgabe in der Küche
                                                  Kinderzimmer: Augabe im Kinderzimmer
                                                  WZ: Ausgabe im Wohnzimmer
                                                  ALL oder Haus: Ausgabe auf allen Lautsprecher
                                                  HausohneKZ: Ausgabe auf allen Lautsprecher bis auf Kinderzimmer
                                                  HausohneWZ: Ausgabe auf allen Lautsprechern bis auf Wohnzimmer
                                                  
                                          night: optional. bei false(default) wird Sprachausgabe in der Nacht unterdrückt
                                          
                                          */
                                          
                                          on({id: "speechout2", change: "any"}, function (obj) {
                                              var parameter = JSON.parse(obj.state.val);
                                              console.log("speechout2: " + parameter.text + " auf " + ((parameter.device === undefined) ? "Tablet":parameter.device));
                                              setState('sayit.1.tts.text','<speak><break time="2s"/>' + parameter.text + '</speak>');
                                              if (parameter.night  === undefined) parameter.night = false;
                                              if (parameter.device !== undefined) {
                                                  if ((parameter.device === "ALL") || (parameter.device === "Haus")){
                                                      text_to_wlan_speacher(parameter.text,parameter.vol,parameter.night,'WZ');
                                                      text_to_wlan_speacher(parameter.text,parameter.vol,parameter.night,'Bad');
                                                      text_to_wlan_speacher(parameter.text,parameter.vol,parameter.night,'Obergeschoss');
                                                      text_to_wlan_speacher(parameter.text,parameter.vol,parameter.night,'Küche');
                                                      text_to_wlan_speacher(parameter.text,parameter.vol,parameter.night,'Kinderzimmer');
                                                  } else
                                                  if (parameter.device === "HausohneKZ") {
                                                      text_to_wlan_speacher(parameter.text,parameter.vol,parameter.night,'WZ');
                                                      text_to_wlan_speacher(parameter.text,parameter.vol,parameter.night,'Bad');
                                                      text_to_wlan_speacher(parameter.text,parameter.vol,parameter.night,'Obergeschoss');
                                                      text_to_wlan_speacher(parameter.text,parameter.vol,parameter.night,'Küche');
                                                  } 
                                                  else
                                                  if (parameter.device === "HausohneWZ") {
                                                      text_to_wlan_speacher(parameter.text,parameter.vol,parameter.night,'Bad');
                                                      text_to_wlan_speacher(parameter.text,parameter.vol,parameter.night,'Obergeschoss');
                                                      text_to_wlan_speacher(parameter.text,parameter.vol,parameter.night,'Küche');
                                                      text_to_wlan_speacher(parameter.text,parameter.vol,parameter.night,'Kinderzimmer');
                                                  } else
                                                      text_to_wlan_speacher(parameter.text,parameter.vol,parameter.night,parameter.device);
                                              }
                                          });
                                          /* Soundausgabe
                                          Es gibt zwei Soundausgaben
                                          1. Alarmierung mit Hundegebell über die Playbar im Wohnzimmer
                                          2. Türklingel mit Sound "doorbell.mp3" im Wohnzimmer und einem freien Sound von
                                             der Amazon Musiklibrary namens: "spiele Turmuhr schlägt 12 - Geisterstunde".
                                          */
                                          
                                          //----------------- Hundebellen als zusätzliches Alarmsignal  ------------------
                                          createState("Hunde",false);
                                          on({id: "Hunde", change: "gt"}, function(obj) {
                                              node_sonos_http_api("Wohnzimmer","clip/"+ "hunde.mp3/" + alarmvol);
                                              });
                                          on({id: "Hunde", change: "lt"},function(obj) {
                                              node_sonos_http_api("Wohnzimmer","pause");
                                              setTimeout(function () {node_sonos_http_api("Wohnzimmer","clearqueue");},3000);
                                          });
                                          
                                          //-- Türklingeln über Lautsprecher "verstärken" -------------------------------
                                          var lock = false;
                                          on({id: getIdByName('Doorbell.PRESS_SHORT'), val: true}, function (obj) {
                                             if (lock === false) {
                                                  lock = true;
                                                  if(getState("Presence").val === true)
                                                      setStateDelayed(alexa.Obergeschoss + ".Music-Provider.Amazon-Music","spiele Turmuhr schlägt 12 - Geisterstunde",0);
                                                      setStateDelayed(alexa.Obergeschoss + ".Player.controlPause",true,10000);
                                                      node_sonos_http_api("Wohnzimmer","clip/"+ "doorbell.mp3/"+klingelvol);
                                                      setTimeout(function () {node_sonos_http_api("Wohnzimmer","clearqueue");},10000);
                                                  //setState('Botschaft', "Am " + formatDate(new Date(), "W") + ' um ' + formatDate(new Date(), "hh:mm") + " hat es geklingelt");
                                                  setTimeout(function () { lock = false},30000);
                                             } 
                                          });
                                          
                                          

                                          HW:NUC (16 GB Ram)
                                          OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

                                          K 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

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

                                          333

                                          Online

                                          32.5k

                                          Benutzer

                                          81.8k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe