Homematic – SONOS steuern – Teil 02 – WebUI und Skripte

Aufgrund der Tatsache, das der erste Artikel zu diesem Thema „Homematic – SONOS steuern – Teil 01 – Hardware / Software“ bereits sehr umfangreich geworden ist, hier nun der zweite Teil. Nachdem wir uns im ersten Teil ausführlich um die Einrichtung der Hardware und Software Voraussetzungen gekümmert haben, komme ich im zweiten Teil zu HomeMatic selbst. Hier erfahrt ihr detailliert, wie ihr über WebUI Programme die SONOS Komponenten steuern könnt.

Was ist alles möglich

  • Jeden SONOS Lautsprecher einzeln, als Gruppe oder alle gemeinsam steuern
  • Gruppen bilden und auflösen
  • Playlisten abspielen
  • Favoriten abspielen
  • Radio Sender abspielen
  • Durchsagen oder MP3-Sounds abspielen
  • Musik aus Internetdiensten (Deezer, Spotify, usw.) abspielen
  • Interpreten in Playlisten oder Internetdiensten suchen und abspielen
  • Playbar Parameter einstellen

In diesem Artikel werde ich alle diese Möglichkeiten anhand von Programm Beispielen erklären und ein paar konkrete Anwendungsbeispiele (Use Cases) aufzeigen.

Was benötigen wir alles für dieses Tutorial?

AmazoneBayELV
Raspberry Pi3LinkLinkLink
Bausatz-FunkmodulLinkLinkLink
microSD KarteLinkLinkLink
GehäuseLinkLinkLink
Gehäuse für HSLinkLinkLink
Netzteil für HSLinkLinkLink
USB für Netzteil HSLinkLinkLink
externe AntenneLinkLink

Da die Steuerung der SONOS Komponenten über HTTP Befehle durchgeführt wird, spielt es keine Rolle auf welcher Plattform ihr eure HomeMatic Zentrale laufen habt. Egal ob CCU2, RaspberryMatic oder auch ipVCCU, es funktioniert auf allen Plattformen in der gleichen Art und Weise.

Voraussetzung CUx-Daemon

Da zur Steuerung der SONOS Komponenten viele Scripte durchgeführt werden, empfehle ich das AddOn CUx-Daemon (CUxD) zu verwenden. Es ist die deutlich bessere Methode um Systembefehle aufzurufen. Weil die Methode über „system.exec“ bei so etwas sehr schnell zu Problemen führt. Wie ihr das AddOn CUxD installiert und ein virtuelles Gerät einrichten könnt, habe ich im Artikel „AddOn CUx-Daemon (CUxD) – system.exec ersetzen“ beschrieben. Keine Sorge, das ist recht einfach.


Bitte beachten das es für RaspberryMatic eine spezielle Version dieses AddOns gibt. Da piVCCU auf der Original CCU2 Firmware basiert, nutzen diese beiden die CCU2 Version.

HTTP via Script absetzen

Im ersten Teil dieser Serie haben wir ja bereits einen Funktionstest durchgeführt, indem wir HTTP Befehle im Browser abgesetzt haben. Da das Absetzen solcher Befehle mit HomeMatic möglich ist, wird auch klar wie die Steuerung funktioniert.

Voraussetzung

Voraussetzung ist das ihr die Räume in eurer Sonos Installation entsprechend definiert habt. Dabei sollte ihr bitte auf Umlaute verzichten.  Macht aus „Küche“ bitte „Kueche“.

SONOS – Beispiel Raum Definitionen

Zweitens sollte im Sonos System die aufgerufene Playlist vorhanden sein.

SONOS – Beispiel Definition Playlisten

Die Groß- und Kleinschreibung spielt weder bei den Räumen als auch bei den Playlisten ein Rolle.

Beispiel 1

Als Beispiel zeige ich euch hier ein Skript, mit dem wir in der Kueche die Playlist „top100″ abspielen“.

Erklärung HTTP Befehl

  • 192.168.1.54   =   hier müsst ihr die IP Adresse eurer Sonos Raspberry eintragen
  • 5005   =   dies ist der Port auf dem die SONOS API auf die Befehle „wartet“
  • kueche   =   Raumname innerhalb des Sonos Systems
  • playlist   =   Aktion
  • top100   =   Name der Playlist im Sonos System

Anmerkung

Der Part mit „wget –no check certificate …“ musste ich einbauen, weil sonst nur der erste Aufruf einer Playliste funktioniert hat. Ich bekam ohne keinen weiteren Befehl durch.

Beispiel 2

In meinem zweiten Beispiel bilde ich aus dem Wohnzimmer und der Kueche eine Gruppe, um dann einen meiner favorisierten Radiosender abzuspielen, in einer Lautstärke, welche für die gesamt Gruppe gilt.

In diesem Skript könnt ihr sehen, das wir hintereinander verschiedene Befehle übergeben können. Mit „join“ bilde ich aus dem Wohnzimmer und der Küche eine Gruppe. Mit dem zweiten Befehl spiele ich den Favoriten „swr3“ auf kueche (Member der Gruppe) ab. Mit „groupvolume“ lege ich die Lautstärke für alle Boxen der Gruppe fest.


Hier könnt ihr schon sehen welches Potenzial in der SONOS API steckt. Wir können fast alles damit über Homematic steuern, was mit der SONOS App auch möglich ist. Ihr müsst lediglich im SONOS System selbst die Favoriten bzw. Playlisten definieren.

Beispiel 3

Das dritte Beispiel zeigt wie man im Internet Musik Dienst Deezer (Account erforderlich) nach Songs von Ed Sheeran suchen kann und diese im Wohnzimmer mit einer Lautstärke von 30 abspielen kann.

Auch in diesem Skript werden mehrere Befehle hintereinander verschiedene an die SONOS API übergeben. Zuerst lege ich für das Wohnzimmer die Lautstärke von 30 fest. Anschließend suche ich mit „musicsearch“ im Internet Musikdienst Deezer nach Songs von Ed Sheeran und diese werden dann automatisch abgespielt. Ihr könnt auch hier keine Leerzeichen eingeben, weder beim „Raum“, noch im Namen der „Playlist“ oder „Favoriten“ und auch nicht im Suchbegriff. In all diesen Fällen muss das Leerzeichen durch %20 ersetzt werden.

Voraussetzung ist hier natürlich ein Account bei Deezer. Es werden auch noch weitere Musikdienste unterstützt (Spotify, Apple Music, Amazon Music = Test Phase). Mit dem Befehl „musicsearch“ kann man ebenfalls innerahlb von „playlisten“ oder „libraries“ suchen.

Anwendungsbeispiele (use cases)

Hier möchte ich euch jetzt ein paar Programmbeispiele beschreiben, wie ihr die Sonos Steuerung in eurem Smart Home einbinden könnt.

Beispiel 1 – Weckfunktion im Schlafzimmer

Ich lasse mich in der Woche über HomeMatic / Sonos wecken. Nachfolgend seht ihr das entsprechende Programm:

Erklärung:

Auslösung findet über die Zeitfunktion an den Tagen Montag bis Freitag um 6:00 Uhr statt. Weitere Abfragen erfolgen auf die Variable „Feiertag“ bzw. die Steuerungsvariable „X Wecker“. Dadurch bleibt der Wecker an Feiertagen stumm. Über die Steuerungvariable kann ich die gesamte Weckfunktion deaktivieren.

Beispiel 2 – Radio über Bewegungsmelder starten

Wenn morgens in einer bestimmten Zeit die Küche betreten wird, schaltet sich die Sonos Box in der Küche automatisch an und spielt in einer vorgegebenen Lautstärke einen Radio Sender ab.

Erklärung:

Auslösung findet durch eine erkannte Bewegung innerhalb der Zeitspanne von 05:55 bis 09:00 Uhr täglich statt. Zusätzlich frage ich die Variable „Radio Küche“ ab. Diese Variable wird am Ende des Programmes auf „aktiv“ gesetzt. Damit verhindere ich eine erneute Auslösung durch den Bewegungsmelder innerhalb der Zeitspanne. In einem zweiten kleinen Programm wird die Variable um 09:01 Uhr wieder auf „inaktiv“ gesetzt. Somit sind die Bedingungen für den nächsten Tag wieder gesetzt.

Beispiel 3 – Sonos Box mit HomeMatic Fernbedienung steuern

Mit dem hier beschriebenen Beispiel ist es möglich eine Sonos Box über eine 8-Tasten Fernbedienung von HomeMatic zu steuern. Damit erreicht man einen großen zusätzlichen Bedienungskomfort.

  • Mit dem ersten Tasten Paar schalte ich die Box (Radio) ein bzw. aus:

Erklärung:

Über die Taste 1 der Fernbedienung wird bei kurzen oder langem Tastendruck die Lautstärke eingestellt und ein Radio Favorit abgespielt. Mit der Taste 2 der Fernbedienung wird bei kurzen oder langem Tastendruck die Box auf „Pause“ gesetzt, was im Sonos gleichbedeutend mit „stop“ ist.

  • Mit dem zweiten Tasten Paar reduziere bzw. erhöhe ich die Lautstärke jeweils um den Wert 5:

Erklärung:

Über die Taste 3 der Fernbedienung wird bei kurzen oder langem Tastendruck die Lautstärke mit jedem Tastendruck um den Wert -5 reduziert. Mit der Taste 4 der Fernbedienung wird bei kurzen oder langem Tastendruck die Lautstärke mit jedem Tastendruck um den Wert +5 erhöht.

  • Mit dem dritten Tasten Paar spiele ich zwei meiner Playlisten ab

Erklärung:

Über die Taste 5 der Fernbedienung wird bei kurzen oder langem Tastendruck die Playlist „lieblingssongs“ gestartet. Mit der Taste 6 der Fernbedienung wird bei kurzen oder langem Tastendruck die Playlist „top100“ gestartet.

  • Mit dem vierten Tasten Paar wähle ich den vorherigen bzw. den nächsten Song der Playlist

Erklärung:

Über die Taste 7 der Fernbedienung wird bei kurzen oder langem Tastendruck der vorherige Song der aktiven Playlist abgespielt. Mit der Taste 8 der Fernbedienung wird bei kurzen oder langem Tastendruck der nächste Song der aktiven Playlist abgespielt.

Damit soll es dann mal genug sein mit den Beispielen und ich denke mit diesen Informationen könnt ihr selbst weitere Anwendungen einrichten.

Befehlsübersicht

Zum Schluss möchte ich euch noch eine Übersicht über alle möglichen Befehle der SONOS API an die Hand geben. Damit werdet ihr sehen wie vielfältig die Möglichkeiten sind.

Wenn ihr einen SUB euer Eigen nennt, achtet bitte auf die Warnungen in „rot“

Beispiele – localhost = eure IP Adresse eurer SONOS Raspberry

http://localhost:5005/kueche/volume/15Lautstärke für Raum Kueche auf 15% einstellen
http://localhost:5005/kueche/volume/+1Lautstärke um 1% erhöhen
http://localhost:5005/kueche/nextZum nächsten Titel in Kueche springen
http://localhost:5005/kueche/pauseAbspielen Kueche pausieren
http://localhost:5005/kueche/playlist/top100Playlist „top100“ in Kueche abspielen
http://localhost:5005/kueche/favorite/swr3Favorit (Radio srw3) in Kueche abspielen
http://localhost:5005/kueche/repeat/onWiederholungsmodus für Kueche aktivieren

Die unterstützten Aktionen

play 
pause 
playpauseschaltet den Spielstatus um
volume 
groupVolume 
mute / unmute 
groupMute / groupUnmute 
togglemuteschaltet den Stumm-Zustand um
next 
previous 
stateDarstellung des aktuellen Boxen Status
favorite 
playlist 
lockvolumes / unlockvolumesText – Volume fixieren
repeat (on/off) 
shuffle (on/off) 
crossfade (on/off) 
pausealloptionale Zeitüberschreitung in Minuten
resumeall 
queue 
clearqueue 
sleepWert in Sekunden
lineinnur analoge linein, noch nicht für PLAYBAR
join / leaveGruppierungs Aktionen
sub (on/off/gain/crossover/polarity)Weitere Informationen im Abschnitt SUB
nightmode (on/off)nur Playbar
speechenhancement (on/off)nur Playbar
bass/trebleverwende -10 bis 10 als Wert. 0 ist neutral

SUB Aktionen

  • /Wohnzimmer/sub/off

SUB ausschalten

  • /Wohnzimmer/sub/on

SUB anschalten

  • /Wohnzimmer/sub/gain/3

Die Verstärkung anpassen, -15 bis 15. Es können größere Anpassungen vorgenommen werden. Aber es wurde in der API begrenzt, weil es den SUB beschädigen könnte.

  • /Wohnzimmer/sub/crossover/90

Übergangsfrequenz in Hz einstellen. Offizielle Werte sind 50 bis 110 in 10er Schritten. Andere Werte auf eigene Gefahr verwenden!

  • /Wohnzimmer/sub/polarity/1

Schaltet „Placement-Anpassung“ oder besser bekannt als Phase. 0 = 0°, 1 = 180°

Fazit

Ich hoffe das es bei euch genauso gut funktioniert wie bei mir. Ich bin mit dieser Lösung wirklich sehr zufrieden. Sicher hat der ein oder andere Anwender noch weitere Anwendungs Möglichkeiten.


Im Dritten und letzten Teil dieser SONOS Serie werde ich euch noch eine zusätzliche Funktion vorstellen und beschreiben wie ihr auf euren SONOS Boxen Sprachausgaben machen könnt, oder eigene MP3 Dateien (z.B. Alarmsound) abspielen könnt.

Passende Beiträge


9 Kommentare

  • Niels

    21. Mai 2018

    Moin, leider bekomme ich das nicht ans laufen per homematic script…
    per browser gehen alle befehle woran kann das liegen?

    Antworten
  • Marcel

    8. März 2018

    Hi,
    danke für deine tolle Anleitung,

    weißt du zufällig ob man damit auch ein Line-In Signal, in das Sonos System einbinden könnte.

    Vielen Dank
    Marcel

    Antworten
    • Werner

      Werner

      8. März 2018

      Hallo Marcel,

      es sollte über den Befehl „linein“ funktionieren.

      Habe ich selbst noch nicht ausprobiert, aber die Parameter solten die gleichen sein.

      Das mit dem „linein“ funktioniert noch nicht mit der PLAYBAR und nur mit folgenden SONOS Komponenten. Diese Sonos-Produkte besitzen auf der Rückseite einen Eingang:

      PLAY:5 (gen1); PLAY:5 (gen2); CONNECT; CONNECT:AMP

      Bitte beachten, dass der Eingang am PLAY:5 (gen2) und am CONNECT:AMP deaktiviert ist, wenn diese als Surround-Lautsprecher für die PLAYBAR oder PLAYBASE verwendet werden.

      Weitere Informationen zum analogen Eingang direkt von Sonos: https://sonos-de.custhelp.com/app/answers/detail/a_id/3594/~/verwenden-des-audioeingangs-von-sonos

      Grüsse
      Werner

      Antworten
      • Marcel

        9. März 2018

        Danke für die schnelle Antwort, aber ich meinte ein Audio Gerät an den Raspberry über TV Grabber anschließen und dieses Signal dann an ein Sonos Gerät schicken. Als z.B. Fernseh – Klinkenstecker auf Cinch – Tv Grabber über USB an Raspberry. Sämtliche Anleitungen sonst über Icecast bringe ich nicht zum laufen, hätte ja sein können das es zufällig bei deiner Anleitung geht.

        Antworten
  • Stefan

    5. Februar 2018

    Hallo Werner,
    weisst du zufällig wie man mit den State abfragen kann? – Ich würde gerne mit dem State (also wenn Sonos läuft) eine Systemvariable setzen. Dies könnte ich dann weiter verwenden.
    Vielen Dank vorab
    Gruss Stefan

    Antworten
    • Werner

      Werner

      6. Februar 2018

      Hallo Stefan,

      es existiert die Möglichkeit den jeweiligen Status jeder einzelnen Box abzufragen. Dieser Befehl lautet wie folgt:
      local IP:5005/bad/state

      Als Ausgabe wird dann allerdings nicht nur ausgegeben ob die Box gerade läuft oder nicht, sondern ALLE Informationen zu den Box Einstellungen:

      {„volume“:20,“mute“:false,“equalizer“:{„bass“:-4,“treble“:5,“loudness“:false},“currentTrack“:{„artist“:“NE-WS 89.4″,“title“:“x-sonosapi-stream:s47781?sid=254&flags=32&sn=0″,“albumArtUri“:“/getaa?s=1&u=x-sonosapi-stream%3as47781%3fsid%3d254%26amp%3bflags%3d32%26amp%3bsn%3d0″,“duration“:0,“uri“:“x-sonosapi-stream:s47781?sid=254&flags=32&sn=0″,“type“:“radio“,“stationName“:“NE-WS 89.4″,“absoluteAlbumArtUri“:“http://192.168.1.69:1400/getaa?s=1&u=x-sonosapi-stream%3as47781%3fsid%3d254%26amp%3bflags%3d32%26amp%3bsn%3d0″},“nextTrack“:{„artist“:““,“title“:““,“album“:““,“albumArtUri“:““,“duration“:0,“uri“:““},“trackNo“:1,“elapsedTime“:0,“elapsedTimeFormatted“:“00:00:00″,„playbackState“:“STOPPED“,“playMode“:{„repeat“:“none“,“shuffle“:false,“crossfade“:false}}

      Unter „playbackState“:“STOPPED“ findest du die Info, das die Box gestoppt ist.

      Wenn die Box aktiv ist und du die „State“ Abfrage machst, bekommst die wieder alle Informationen und die Info, das die Box aktiv ist erscheint wie folgt:

      „playbackState“:“PLAYING“

      Du müsstest also die Ausgabe filtern um den für dich interessanten Status in eine Variable zu bekommen, aber es sollte eigentlich funktionieren.

      Viele Grüße
      Werner

      Antworten
  • Mathias

    29. Januar 2018

    Hi Werner,
    ich habe noch eine Frage dazu:
    nutzt Du die Sonos-App der CCU2 oder hast Du alles so programmiert?
    Ich bin beim Überlegen, ob ich mir Sonos zulegen soll.
    Gruß,
    Mathias

    Antworten
    • Werner

      Werner

      29. Januar 2018

      Hallo Mathias,

      eine der Lösungen die ich getestet habe, war dieses Sonos AddOn. Leider ist die letzte Version vom 05.01.2016. Es wird an diesem Addon nichts mehr aktualisiert und einige Dinge funktionieren nicht so wie bei dem von mir beschriebenen Github Projekt von Jishi.
      Aus diesem Grund und weil es mich echt überzeugt hat, habe ich dieses Projekt zur Steuerung meiner Sonos Komponenten beschrieben.

      Gruß und schönen Abend noch

      Werner

      PS Nutze Sonos seit Jahren und bin echt zufrieden damit, auch ohne HomeMatic Einbindung. Aber mit dieser ist es für mich perfekt.

      Antworten
  • Stefan

    25. Januar 2018

    Sensationell Werner! Vielen Lieben Dank für die beiden Super Berichte! Läuft bereits !!

    Antworten

Schreibe einen Kommentar

* Die Checkbox für die Zustimmung zur Speicherung ist nach DSGVO zwingend.

Ich stimme zu.