,

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?

Amazon eBay ELV
Raspberry Pi3 Link Link Link
Bausatz-Funkmodul Link Link Link
microSD Karte Link Link Link
Gehäuse Link Link Link
Gehäuse für HS Link Link Link
Netzteil für HS Link Link Link
USB für Netzteil HS Link Link Link
externe Antenne Link Link

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/15 Lautstärke für Raum Kueche auf 15% einstellen
http://localhost:5005/kueche/volume/+1 Lautstärke um 1% erhöhen
http://localhost:5005/kueche/next Zum nächsten Titel in Kueche springen
http://localhost:5005/kueche/pause Abspielen Kueche pausieren
http://localhost:5005/kueche/playlist/top100 Playlist „top100“ in Kueche abspielen
http://localhost:5005/kueche/favorite/swr3 Favorit (Radio srw3) in Kueche abspielen
http://localhost:5005/kueche/repeat/on Wiederholungsmodus für Kueche aktivieren

Die unterstützten Aktionen

play  
pause  
playpause schaltet den Spielstatus um
volume  
groupVolume  
mute / unmute  
groupMute / groupUnmute  
togglemute schaltet den Stumm-Zustand um
next  
previous  
state Darstellung des aktuellen Boxen Status
favorite  
playlist  
lockvolumes / unlockvolumes Text – Volume fixieren
repeat (on/off)  
shuffle (on/off)  
crossfade (on/off)  
pauseall optionale Zeitüberschreitung in Minuten
resumeall  
queue  
clearqueue  
sleep Wert in Sekunden
linein nur analoge linein, noch nicht für PLAYBAR
join / leave Gruppierungs Aktionen
sub (on/off/gain/crossover/polarity) Weitere Informationen im Abschnitt SUB
nightmode (on/off) nur Playbar
speechenhancement (on/off) nur Playbar
bass/treble verwende -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.

14 Kommentare
  1. Christoph
    Christoph sagte:

    Hallo,

    ich habe die ersten gehversuche mit Sonos und den http befehlen hinter mir und es hat sehr gut funktioniert.
    Nun möchte ich gerne meine Sonos Beam weiter einbinden.
    In der Beam ist Alexa integriert (die möchte ich jedoch nicht nutzen! Daher habe ich Sie deaktiviert)
    Ich konnte vorher mit Alexa über einen Sprachbefehl meinen Fernseher aus und einschalten. Das ganze gibt über HDMI-CEC den Befehl an meinen Fernseher weiter.

    Nun zu meiner Frage:
    Ist es möglich diesen HDMI-CEC Einschalten und Ausschalten Befehl an meinen Fernseher auch über einen HTTP Befehl an meine Sonos Beam weiter zu geben? (die beam ist mit 2 Play:1 und Sub in einem 5.1 Gruppiert)

    Beispiel:
    http://localhost:5005/BEAM/TV-Einschalten
    http://localhost:5005/BEAM/TV-Ausschalten
    http://localhost:5005/Wohnzimmer5.1/TV-Einschalten
    http://localhost:5005/Wohnzimmer5.1/TV-Ausschalten

    So könnte ich dann später ein Programm über Siri starten.

    Siri Fernseh an:
    Fernseher und Surround wird eingeschaltet
    Rollo hinterm sofa fährt runter je nach tageszeit
    oder licht mit Hue wird eingeschaltet und gedimmt je nach tageszeit
    Sofa Liegefläche fährt elektrisch aus
    laufende Musik in der Küche und im Esszimmer wird über sonos ausgeschaltet

    Top wäre dann wenn sogar irgendwann im Smart TV auch netflix gestartet wird oder ggf. sogar direkt die aktuelle serie gestartet werden kann (ist aber aktuell mit dem Fernseher leider nicht möglich.)

    Ich hoffe ihr könnt mir hier weiterhelfen.

    Danke und Gruß

    Antworten
  2. Patrick
    Patrick sagte:

    Hallo Werner,

    ich habe alles exat so eingerichtet wie beschrieben.
    Der Steuerung über die URL funktioniert, nur leider beim Skipt im HM-Programm wirft bei der Fehlerprüfung einen Fehler aus:

    Skript:
    string url = „wget –no-check-certifikate –quit -0 /dev/null \“http://192.x.x.x:5005/gaestebad/play/gaestebad\““;
    dom.GetObjekt („CUxD.CUX2801001:9.CMD_EXEC“).State (url);

    Fehlermeldung:

    Error 1 at row 2 col 18 near ^ („CUxD.CUX2801001:9.CMD_EXEC“).State (url);

    Parse following code failed:
    string url = „wget –no-check-certifikate –quit -0 /dev/null \“http://192.168.178.88:5005/gaestebad/play/gaestebad\““;
    dom.GetObjekt („CUxD.CUX2801001:9.CMD_EXEC“).State (url);

    Hast Du eine Idee, woran es liegen könnt?

    Danke und Gruß
    Patrick

    Antworten
  3. Michael
    Michael sagte:

    Hi. Tolle Anleitung und alles Beschriebene funktioniert bei mir auf Anhieb.
    Leider fehlt mir die Anleitung zum Abspielen von Playlisten/Lieder/Alben aus Spotify (spotify/deine musik/…) und aus Amazon Musik (amazon music/playlists) Kannst Du mir hier bitte helfen? DANKE!
    LG Michael

    Antworten
  4. Niels
    Niels sagte:

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

    Antworten
    • Michael
      Michael sagte:

      string url=“http://192.168.xxx.xx:5005/Terrasse/playlist/Eagles“;
      dom.GetObject(„CUxD.CUX2801004:1.CMD_EXEC“).State(„wget –no-check-certificate -q -O – „#url);

      geht bei mir im HM-Script

      Antworten
  5. Marcel
    Marcel sagte:

    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 sagte:

      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
        Marcel sagte:

        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
  6. Stefan
    Stefan sagte:

    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 sagte:

      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
  7. Mathias
    Mathias sagte:

    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 sagte:

      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

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert