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 Marty56

      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);
         } 
      });
      
      
      K 1 Reply Last reply Reply Quote 0
      • K
        Karatekid @Marty56 last edited by

        @Marty56

        Nachdem ich die selben Probleme mit dem Adapter hatte, habe ich dein Script ausprobiert und mit ein wenig Anpassung funktioniert es echt super.

        Das einzige Problem was ich noch habe ist, dass es nicht mit Airplay funktioniert.
        Da hier die Gruppe aufgelöst wird und nicht wieder verbunden werden kann.
        Aber dies wird wohl ein Problem der Sonos API sein oder?

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

          @Karatekid
          Keine Ahnung. Ich habe kein Airplay.

          1 Reply Last reply Reply Quote 0
          • Q
            Qlink last edited by

            @Marty56 said in [unGelöst] Sonos Mp3 Sound abspielen:

            node_sonos_http_api("Wohnzimmer","clearqueue");

            Hi Marty,
            ich hätte mich heute auch an deinem Vorschlag probiert.
            Leider läuft bei mir scheinbar der sonos server schon gar nicht weg.
            Hier ein Screenshot:
            sonos.PNG

            Oder ist das "listening an 0.0.0.0 .." normal ?

            Wird der api Server bei einem Restart des Hosts automatisch gestartet ?

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

              @Qlink Er scheint die settings.json nicht zu finden und listening on 0.0.0.0 ist nicht normal.
              Ich habe die settings.json nicht verändert. Die war in dem entpackten Verzeichnis vorhanden.
              Ich würde vermuten, dass Du einen Fehler beim Entpacken der Files gemacht hast.

              S 1 Reply Last reply Reply Quote 0
              • B
                Baerny last edited by

                @Marty56 Da ich auch nur Probleme mit Sonos und Sayit hatte würde ich gerne mal den "node-sonos-http-api" Server probieren. Gibt es irgendwo eine Anleitung wie ich den in iobroker installieren kann.
                Baerny

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

                  Der Server läuft unabhängig von iobroker.
                  Installation wird unter https://github.com/jishi/node-sonos-http-api beschrieben.

                  Ansonsten in dem Beispielscript reinschauen. Da steht alles drin.

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

                    Moin,
                    bin jetzt mit im Boot, habe 4 Sonos One und kriege keinen Ton raus,
                    was ein Mist. 🙃

                    Und Marty, Du hast natürlich recht..... anstatt einem Ton kommt ein "mute".

                    Das ist zum ....

                    leider bin ich mir nicht sicher ob ich Deine Workaround - Lösung hinbekomme.

                    1 Reply Last reply Reply Quote 0
                    • smile
                      smile last edited by

                      Hi zusammen,
                      ich schließe mich @skokarl an, würde auch sehr gerne sayit Ausgaben über Sonos zum Laufen bekommen. Hat es mit der Workaround Lösung nun nachhaltig geklappt? Gibt es ggf. eine genaue Beschreibung wie die Installation und Einrichtung gemacht werden kann?

                      Es wäre so klasse wenn das wieder läuft, ich denke das würde vielen entgegenkommen da Sonos ja recht verbreitet ist?

                      M 1 Reply Last reply Reply Quote 0
                      • S
                        skokarl last edited by

                        vielleicht nimmt sich eines Tages nochmal jemand den Adapter und
                        sieht sich die Fehler an

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

                          @smile Mein Workarround läuft seit Januar stabil und ohne Probleme. Ich habe eine Sonos Playbar, die am TV angeschlossen ist.
                          Auch das Umschalten zwischen Fernsehbetrieb und Durchsage funktioniert wie gewünscht. Die Mischung zwischen Soundausgabe und Text funktioniert auch fehlerfrei.

                          S 1 Reply Last reply Reply Quote 0
                          • S
                            skokarl @Marty56 last edited by

                            @Marty56
                            das freut uns ....

                            Kannst Du mal bei Gelegenheit ein Howto für Dummies machen ? Muss ja nicht gerade am Vatertag sein ☺

                            M 1 Reply Last reply Reply Quote 1
                            • M
                              Marty56 @skokarl last edited by

                              @skokarl Ich weiß wirklich nicht, was ich mehr machen kann, als oben im Beitrag schon beschrieben. Hast Du dieses Posting schon angeschaut.

                              S 1 Reply Last reply Reply Quote 0
                              • S
                                skokarl @Marty56 last edited by

                                @Marty56 sagte in [unGelöst] Sonos Mp3 Sound abspielen:

                                @skokarl Ich weiß wirklich nicht, was ich mehr machen kann, als oben im Beitrag schon beschrieben. Hast Du dieses Posting schon angeschaut.

                                wenn ich es richtig verstanden habe startet der Server beim Neustart nicht automatisch, richtig ?
                                Wie kriege ich das hin ?
                                Und hättest Du ein ganz kleines Blockly für eine Beispiel Ausgabe ?
                                mit Ausgabe auf unterschiedliche Sonos ?

                                .... nur wenn es Dir nix ausmacht.

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

                                  Ich habe null Ahnung von Blocky. Habe ich noch nie benutzt.

                                  Zum automatischen Start habe ich ein Startscript, startsonosserver.sh, erstellt, das den Sonos Api Server automatisch beim booten startet.

                                  Das Script liegt unter /etc/init.d/.

                                  Es beinhaltet:

                                  #!/bin/bash
                                  cd /opt/iobroker/node-sonos-http-api-master
                                  nohup npm start &

                                  Danach executable Rechte setzen.

                                  chmod +x /etc/init.d/startsonosserver.sh

                                  Und beim Booten starten mit

                                  sudo update-rc.d /etc/init.d/startsonosserver.sh defaults

                                  1 Reply Last reply Reply Quote 0
                                  • smile
                                    smile last edited by

                                    @skokarl geht mir ähnlich, das ist leider das Problem dass iobroker eine große Bandbreite von Menschen nutzen - angefangen von solchen, für die Script-Programmierung nichts neues ist, und die sich mit diversen IT-spezifischen Mechanismen und Kniffen auskennen bis hin zu solchen, die natürlich auch ein Interesse daran haben aber eben nicht denselben Weg gehen können wie andere ihn als selbstverständlich ansehen.

                                    @Marty56 Danke für deine Erläuterungen, ich bekomme es so jedoch leider auch nicht hin.

                                    Wenn iobroker noch mehr Erfolg in der breiteren Masse haben soll, dann ist es von entscheidender Bedeutung dass nicht nur Profis damit umgehen können.

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

                                      Das kann ich verstehen. Das Beste wäre es natürlich den Sonsos Adapter zu reparieren, aber dazu reicht mein Know How leider auch nicht.

                                      1 Reply Last reply Reply Quote 1
                                      • S
                                        skokarl @smile last edited by

                                        @smile

                                        Wir müssen tapfer bleiben.... 😀

                                        lesen

                                        M 1 Reply Last reply Reply Quote 1
                                        • M
                                          Marty56 @skokarl last edited by Marty56

                                          @smile Da hast Du ja die perfekte Dokumentation gefunden. Besser geht es gar nicht.

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

                                            So,

                                            ich hab mich heute morgen mal dran getraut.
                                            Gemacht habe ich folgendes :

                                            über Putty, in meinem Homeverzeichnis :

                                            wget https://github.com/jishi/node-sonos-http-api/archive/master.zip
                                            unzip master.zip
                                            cd node-sonos-http-api-master
                                            npm install --production

                                            npm start

                                            dann im Browser
                                            http://IpAdresseServer:5005/

                                            Ergebnis :
                                            1.PNG

                                            das sieht schonmal gut aus.

                                            Wenn ich weiß wie es weitergeht.....melde ich mich. 😀

                                            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

                                            728
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            14
                                            48
                                            11419
                                            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