Sonos Integration 2.0

Bastian

Moin, ich heiße Bastian und bin Autor dieser kleinen bescheidenen Seite. Zwanghaft, ja fast schon neurotisch beschäftige ich mich seit Jahren mit jedem erdenklichen technischen Schnick-Schnack. Nichts, was einen Stecker hat ist vor mir sicher. So war es klar, dass ich eines Tages das Haus auf den Kopf stellen und alles vernetzen würde.Da ich bei meinem Vorhaben sehr viel Hilfe und Unterstützung in diversen Foren, Blogs und Boards erfahren habe, möchte ich diesen Blog zum sammeln meiner Smarthome- und Technikerrungenschaften nutzen um der Community zumindest ein klein wenig was zurückgeben zu können.

Das könnte Dich auch interessieren...

39 Antworten

  1. Coole Sache,
    Spannend ist das TTS.
    Ist das „say“ ein Sonos Dienst bzw wie wird aus dem Text Sprache?
    Ist die umgewandelte Stimme eher Roboter oder etwas „angenehmes“?

    • Bastian sagt:

      Hallo Christopher, die say Funktion wird durch die Skripte zur Verfügung gestellt. Die Stimmen kannst Du Dir unter http://www.voicerss.org anhören. Ist ein kostenloser Dienst und die Umsetzung ist wirklich verdammt schnell im Gegensatz zu den üblichen. Auch werden die fertigen MP3s lokal gespeichert.
      Gruß
      Bastian

  2. Danke.
    VoiceRSS nutze ich mit dem HC2, finde aber die Startzeit recht lang.

  3. Ok, habe gerade durch die Doku (https://github.com/jishi/node-sonos-http-api) gescrollt……
    Nicht ganz ohne!

  4. Dann wäre das doch eine spannende Alternative!

  5. Bastian sagt:

    Hallo Christopher,
    ich habe zur Verdeutlichung ein kurzes Video der Sprachausgabe erstellt und in den Artikel integriert.
    Gruß
    Bastian

  6. Christopher sagt:

    Überzeugt!
    Cool.
    Dann wäre die Einrichtungs-Anleitung doch interessant.

  7. campos sagt:

    Hört sich gut an. Aber auch kompliziert.
    Wie oder womit lässt du dir deine Termine vorlesen ? Habe es bisher mit IFFFT und Google Kalender gemacht. Termin wird mir als Pop im Homecenter angezeigt. Vorlesen wäre natürlich super.. Gruß

    • Bastian sagt:

      Hallo campos,
      das Vorlesen der Termine habe ich mit einem kleinen PHP Skript realisiert. Dies macht nichts anderes, als ein JSON File zur Verfügung zu stellen welches ich dann mit Lua abhole und auswerte. Allerdings nutze ich Microsoft Exchange als Backend.
      Gruß
      Bastian

  8. campos sagt:

    Hallo Bastion. Hast du zufällig den Stream Befehl für die Tagesschau? Oder einen Tipp ? Bekomme es nicht hin . Wie Radiosender in das VD und Sonos eingebunden werden ist mir klar und bekomme ich auch hin. Nur bei den Nachrichten klappt es irgendwie nicht… Gruß

    • Bastian sagt:

      Hallo campos,
      leider habe ich keinen direkten Stream gefunden der immer die aktuelle Version wiedergibt, daher habe ich mir ein Shell Script erstellt welches die mp4 Datei jede Stunde herunterlädt und auf meinem Server ablegt. Bei Bedarf kann ich Dir das gern zur Verfügung stellen.
      Gruß
      Bastian

  9. campos sagt:

    Wäre super wenn du mir das Script mal zur Verfügung stellst. Habe das zwar noch nicht gemacht, würde es aber gerne mal ausprobieren. Gruß

    • Bastian sagt:

      Ich bin erst am Freitag wieder Zuhause, aber dann lasse ich es Dir gern zukommen.

      • Bastian sagt:

        Hallo campos,

        wie versprochen hier das PHP Skript. DOWNLOAD
        Du brauchst dafür einen Webserver mit aktiviertem PHP. Das Skript speichert die Datei in dem Pfad in dem sie ausgeführt wird. Entweder Du rufst das Skript im Browser auf oder Du erstellst Dir einen Cronjob mit dem Befehl php get100.php
        Wenn Du Hilfe brauchst, lass es mich wissen.
        Gruß
        Bastian

        • Mr.Coffee sagt:

          Hi Bastian,

          kannst Du hierzu bitte noch ein paar Sätze mehr verlieren?:-) Ich finde, dass genau dieses Feature einen unglaublichen Mehrwert bietet.
          Das Skript habe ich grob verstanden. Wo muss ich es jedoch speichern und wo speichert es die Audio-File?

          Ich danke Dir.

          • Bastian sagt:

            Hallo Mr. Coffee,

            wenn Du hier Support brauchst, dann schicke mir bitte eine kurze E-Mail.
            Es gibt einfach zu viele mögliche Fehlerquellen und Optionen.

            Gruß
            Bastian

        • Mr.Coffee sagt:

          Hi Bastian,

          ich habe es inzwischen hinbekommen. Das PHP-Script wird von der HC2 gestartet und die Tagesschau als Mp4 heruntergeladen. Klasse.
          Wie kann ich diese Datei aber in das sonos node einbinden? Direkt aufrufen bekomme ich nicht hin. Auch schaffe ich es nicht den Raspberry als Bibliothek bei meinem Sonos zu hinterlegen.

          Allgemein bekomme ich das direkte Aufrufen von mp3-Dateien auch nur hin, wenn ich sie vorher als Favoriten gespeichert habe. Muss das so sein?

          Danke.
          Gruß Mr.Coffee

          • Bastian sagt:

            Hallo Mr. Coffee,

            ich habe die Datei auf meinem Webserver mit einem Samba Server freigegeben und diesen als Favorit in meine Sonos App integriert. Damit ist ein Aufruf dann recht einfach.

            Gruß
            Bastian

            • Mr.Coffee sagt:

              Hach, ist das Leben schön:-)
              Es funktioniert. Samba war das Stichwort. Vielen Dank.
              Ganz hin und wieder rauscht es ein wenig. Ist das mein Wlan oder ist der Raspberry 3 etwas überfordert?
              Ich habe inzwischen node, Apache, Samba und Airsonos am Laufen.

              Kann ich eigentlich einzelne Audiofiles aufrufen, ohne sie einzeln als Favorite zu adden? Ich habe noch ein paar ereignisgesteuerte Audiofiles, die ich ungern alle einzeln hinterlegen möchte. Über den Ordner bekomme ich es irgendwie nicht hin.

              Gruß
              Mr.Coffee

  10. campos sagt:

    Super. Vielen Dank. Werde mich am WE mal mit auseinander setzten. Bin mal gespannt 🙂
    Ein bißchen hoffe ich ja auch auf Amazons Alexa. Evtl. kann sie einen großen Tag der TTS ja übernehmen. Gruß

  11. Hoggle sagt:

    Hi Bastian,

    ich bin mal wieder zum Spielen gekommen….

    Cool ist, dass er nach der TTS das vorherige Programm genau so wieder fortsetzt….

    Allerdings von der ersten Unterbrechung bis zur Textansage braucht er ca 5 Sekunden und nach Beendigung der Ansage braucht er auch wieder ca 5 Sekunden bis es weitergeht.
    Hast Du eine Idee, wie man diese Zeitspanne reduzieren kann?
    Liegt das am kostenlosen VoiceRSS-Account?

    VG Hoggle

    • Bastian sagt:

      Hi Hoggle,

      das Verhalten kann ich bei mir gar nicht nachvollziehen. Hab es gerade nochmal probiert und höchstens 1,5 Sekunden Verzögerung in beide Richtungen. Ist die Verzögerung auch da, wenn Du die „say“-URL aus einem Browser heraus aufrufst?

      Gruß
      Bastian

  12. Hoggle sagt:

    Wie setzt du variablen text um?
    zB: http:request(‚http://192.168.178.40:5005/b%C3%BCro/say/Dies%20ist%20eine%20TTS%20Ausgabe%20im%20Büro./de-de/51‘,
    funktioniert aus dem HC2.

    Er mag auch noch
    local message = tostring(„Dies%20ist%20eine%20TTS%20Ausgabe%20im%20Büro./de-de/51“)
    http:request(‚http://192.168.178.40:5005/b%C3%BCro/say/‘..message,

    Das „Message“ zwischendrin mochte er nicht
    (http:request(‚http://192.168.178.40:5005/b%C3%BCro/say/“..message..“/de-de/51‘,)

    Das schaut aber noch ganz schön Aufwand aus, den Text zB aus einer Globalen Variable jeweils um „%20“ sowie die Sprache und Lautstärke zu ergänzen.
    Gibt es dazu einen Trick?

    VG Hoggle

    • Bastian sagt:

      Hi Hoogle,

      das mit den Texten ist ein wenig fummelig, das stimmt. Ich habe die URLs vollständig in Variablen gespeichert:
      local msgUrlDisarmed = „http://10.10.10.3:5005/kueche/say/Alarm%20system%20deactivated.%20Welcome%20back/en-gb/10“

      Das „bauen“ der URLs lässt sich auch verskripten. So kannst Du beispielsweise mit name = name:gsub(" ", "%20") die Leerzeichen gegen %20 ersetzen.

      Gruß
      Bastian

  13. Hoggle sagt:

    Ja, richtig. Über den Browser ist es in 1-2 Sekunden abgespielt.
    Über das HC2 dauert es bei mir länger.

  14. Hoggle sagt:

    Danke.
    Allerdings stört sich das HC am %

    Bei „message = string.gsub(message2, “ „, „20“)“ ersetzt er die Leerzeichen
    Bei „message = string.gsub(message2, “ „, „%20″)“ mit „invalid capture index“

  15. Hoggle sagt:

    So etas kann ja recht nervig sein….
    Habe im Fbaro-Forum etwas gefunden.
    Jetzt geht es:

    local message = fibaro:getGlobalValue(„Fenster_OG“)

    fibaro:debug(„original message = “ .. message)
    function urlencode(str)
    if (str) then
    str = string.gsub (str, „([^%w])“,
    function (c) return string.format („%%%02X“, string.byte(c)) end)
    end
    return str
    end
    message = urlencode(message)
    fibaro:debug(„encoded message = “ .. message)
    local message = tostring(message..“/de-de/51″)

    Was da rauskommt sieht zwar seltsam aus, aber der Text passt!

  16. Jeff sagt:

    Hallo Bastian,
    erstmal Dankeschön für die tolle Anleitung.
    Es läuft fast alles… Aber ich habe doch noch ein paar Fragen:
    1. Gruppe auflösen funktioniert nur von dem Raum, in dem sie erstellt wurde. Als wenn ich im Wohnzimmer die Kueche hinzugefügt habe, dann kann ich die Gruppe nicht von dem VD Kueche auflösen, sondern nur vom VD Wohnzimmer.
    2. Ich weiss, Umlaute machen Probleme. Es ist leicht, die Küche in Kueche umzubenennen. Aber was kann ich mit Radiosendern machen, welche im Namen „Baden-Württemberg“ enthalten? Die gehen leider nicht.
    3. Hast du noch das Sonos-Icon für das VD?
    Gruß
    Jeff

    • Bastian sagt:

      Hallo Jeff,

      freut mich, dass es soweit läuft und meine Anleitung Dir geholfen hat.
      Zu Deinen Fragen:
      1. Das ist Sonos-bedingt. Wenn Du zwei oder mehr Player zusammenschaltest, dann fungiert der erste immer als Master der die Audioquelle an die anderen Player verteilt. Entfernst Du über die Sonos App den Master aus der Gruppierung wird der nächste Player in der Reihenfolge automatisch zum Master.
      2. Umlaute und Leerzeichen müssen codiert werden, damit sie als Favorit benutzt werden können. Wenn Du beispielsweise SWR1 Baden-Württemberg einrichten möchtest, dann muss der Name des Favoriten beispielsweise so aussehen: SWR1%20Baden-W%C3%BCrttemberg. Du kannst Dir die Namen Deiner Favoriten unter der Adresse http://meyerweb.com/eric/tools/dencoder/ codieren lassen.
      3. Die Icons die ich verwende hänge ich gleich an den Artikel.

      Wenn Du noch weitere Fragen hast, dann gern her damit.

      Gruß
      Bastian

  17. Stefan sagt:

    Hallo Bastian,

    Daumen hoch für deine super Anleitung. Welches VD soll man jetzt am besten nehmen? Das aus diesem Artikel oder aus der Installations Anleitung?

    Gruß..
    Stefan

  1. 5. Oktober 2016

    […] eines seperaten Rechners zur Steuerung gegenüber nicht abgeneigt ist, dem empfehle ich meinen Artikel zur Sonos-NODE-HTTP-API zu […]

  2. 9. Oktober 2016

    […] Artikel Sonos Integration 2.0 hat doch mehr Anklang gefunden als ich dachte. Auf Wunsch einiger Leser nun dieser Artikel: […]

Kommentar verfassen