Sonos und Fibaro HC2


Es gibt ja einige Beiträge im Internet zu diesen Themen, was mir aber aufgefallen ist, es gibt wenige abschliessende Lösungen zu diesem Thema.

Ich habe mich nun einmal daran gesetzt und habe versucht eine Lösung zusammenzutragen, die für viele Bedürfnisse nützlich ist.

Was soll damit erreicht werden?

Fibaro bietet heute ein Plugin für die Integration von SONOS. Nun stellt sich die Frage, was man damit anstellen kann…
…aus meiner Sicht nicht sehr viel. Es ist möglich die einzelnen SONOS Komponenten zu steuern. Play, Paus, Lautstärke, … alles kein Thema, aber das bietet nur einen kleinen Teil von Steuerungsmöglichkeiten.

Sobald ich z.B. einen Bewegungsmelder platziere, welcher eine Person beim Betreten eines Raumes erfasst und ich anschliessend Musik abspielen möchte, komme ich damit schon ziemlich an die Grenzen des Machbaren!

Eine möglich Lösung hier mehr Flexibilität zu erlangen, möchte ich euch hier aufführen.

Dabei soll offiziell erwähnt sein, dass die Scripts auf den Grundlagen von Jean-Christophe Vermandé basieren. –> Herzlichen Dank für die toll Arbeit!

Anleitung

Bevor ihr starten könnt müsst ihr zwingen die IP des SONOS Gerätes kennen, welches ihr ansteuern wollt. (Wird wohl bei den meisten irgendetwas mit 192.168.100.xxx oder 192.168.1.xxx sein).


A.) Es müssen „globale“ Variabeln erstellt werden. Dies ermöglicht uns anschliessen eine dynamischere Verwendung des Virtuellen Moduls.

A.1) Die erste Vordefinierte Variabel soll „SONOS_RADIO“ heissen.
Die Werte setzt ihr anhand der Radiosender, welche ihr streamen möchtet. In meinem Fall z.B. „radiopilatus.ice.infomaniak.ch/pilatus128.mp3
stream.srg-ssr.ch/m/drs3/mp3_128
(Natürlich könnt ihr hier noch weitere Werte erfassen, mindestens einer sollte aber gesetzt sein.)

1.) Um den richtigen Radiostream zu finden, müsst ihr z.B. über euer Smartphone auf das aktuelle SONOS Gerät connecten und in dieser Zone den gewünschten Radiosender abspielen.

2.) Anschliessend die IP des Gerätes in einen Webbrowser eingeben und mit folgendem Zusatz ergänzen „:1400/status/radiolog“

3.) Die Adresse würde dann also ungefähr so aussehen –> http://192.168.100.999:1400/status/radiolog

4.) Sobald ihr diesen Request im Webbrowser abgesetzt habt, wird euch der aktuelle Radiostream angezeigt. Dies sieht dann etwa so aus…
Radiolog_SONOS

Hier findet ihr die benötigte Information für euren Radiostream.

A.2) Die zweite Vordefinierte Variabel soll „SONOS_MUSIC“ heissen.
Die Werte hierzu sind Pfade zu Songs die in eurem Netzwerk z.B. auf einem NAS liegen. Hier also ein Beispiel:
//DEIN_NAS/Music/ACDC/track1.mp3
//192.168.100.999/Sound/Music/ich_bin_ein_clown.m4a
(Natürlich könnt ihr hier noch weitere Werte erfassen, mindestens einer sollte aber gesetzt sein.)

A.3) Die dritte Vordefinierte Variabel soll „SONOS_TTS“ heissen.
Die Werte hierzu können individuell gewählt und wie alle anderen Werte jederzeit geändert oder erweitert werden. Die Idee hinter dieser Variabel ist es, Textbausteine zu haben, welche dann in Szenarien verwendet werden können. Also z.B. etwa folgende:
Willkommen zu Hause.
Viel Spass mit dem folgenden Film.
Alarm aktiviert.
Alarm deaktiviert.
Guten Morgen doonic, du bist der Beste.“ 🙂

Hier einmal ein Beispiel zu A.1, damit man sich das besser vorstellen kann.
Vordefinierte Variabel (A.1)

Und so sollte das dann ungefähr aussehen:
Variabeln Überblick


B.) Der nächste Schritt ist ist relativ einfach. Um ein Steuerbares Objekt zu erhalten gehen wir zu den Modulen und fügen ein neues Gerät hinzu. Wir möchten ein virtuelles Gerät hinzufügen, nämlich das folgende:

–> Hier könnt ihr es herunterladen. Download

Die Datei unter „Importiere virtuelles Gerät“ auswählen und importieren. Anschliessend findet ihr unter den „nicht zugeordneten“ Modulen den „SONOS – Commander

Das sollte so aussehen:
SONOS - Commander
Mit dem Klicken auf die Einstellungen Einstellungen kann das Modul konfiguriert werden. Hierbei müsst ihr lediglich die IP Adresse des SONOS Gerätes eintragen, so wie den Port „1400„.


SONOS - Commander (Konfiguration)(Ob ihr das Modul einem Raum zuordnet, spielt keine Rolle).

Nach dem Konfigurieren nicht vergessen die Einstellungen zu speichern!


C) So nun haben wir alles vorbereitet um das SONOS Gerät in einem Szenario zu nutzen. Hier könnt ihr eigentlich damit machen, was ihr wollt. Um meine eingangs angesprochene Lösung zu komplettieren, hier zwei Anwendungsbeispiel.

C.1) Ich möchte gerne dass auf meinem SONOS Gerät, unter der Woche, Radio (Radio Pilatus) gespielt wird, sobald die Sonne aufgeht. Sofern es allerdings regnet soll keine Musik abgespielt werden, da ich dann so oder so liegen bleibe… 🙂
Fibaro Szenario

oder ein Szenario mit LUA…

C.2) Ich möchte gerne, dass beim Betreten der Küche mein SONOS Gerät Radio abspielt und nach einer gewissen Zeit aufhört, sofern sich z.B. seit 10 Minuten niemand mehr in dem Raum bewegt hat.

——————————————————————————————-
——————————————————————————————-
— SONOS Radio aktivieren bei Bewegung
— Version 1.0
— Copyright (c) 2015 Nicolas Dörig
https://doonic.wordpress.com
——————————————————————————————-
——————————————————————————————-

–[[
%% properties
56 value
51 value
%% globals
–]]
— MOTION-Sensor muss unter %% properties aufgeführt sein

— Definitionen
local scene = 29; — ID dieser Szene
local sonosCommander = 56; — ID des SONOS Commanders
local motion = 51; — ID des Bewegungssensors
local volume = 20; — Lautstärke festlegen
local time = 0;
local timereset = 600; — Verzögerung (in Sekunden) nach der letzten Bewegung, bevor der Radio ausschaltet.

fibaro:setGlobal(„SONOS_RADIO“, „radiopilatus.ice.infomaniak.ch/pilatus128.mp3„); — Radio Sender der globalen Variabel zuweisen

— Lösche vorhandene Szenen
if (fibaro:countScenes()>1) then
fibaro:abort();
end

— Bewegung erkannt & Radio einschalten
if tonumber(fibaro:getValue(motion, „value“)) > 0 then
fibaro:call(sonosCommander, „setSlider“, „7“, volume); — Lautstärke festlegen
fibaro:call(sonosCommander, „pressButton“, „1“); — Radio starten
fibaro:debug(„1: Starte Radio“);

— Schleife die prüft ob in der Zwischenzeit wieder eine Bewegung erkannt wurde. (Falls ja, wird der Timer zurückgesetzt)
repeat
if tonumber(fibaro:getValue(motion, „value“)) > 0 then
time = 0;
else
time = time + 1;
end

fibaro:sleep(999);

fibaro:debug(„2: Zeit ohne Bewegung“ .. time ..“ von “ .. timereset);

until time > timereset

— Schalte Radio aus, da Timer abgelaufen
fibaro:call(sonosCommander, „pressButton“, „4“); — Radio anhalten
fibaro:debug(„3: Timer abgelaufen, Radio ausgeschalten.“);
fibaro:killScenes(scene);
end

Ihr solltet alle roten Werte ersetzen. Die IDs findet ihr jeweils in den Modulen, bzw. im Szenario in der Konfiguration.
Element ID finden –> Bei dem Beispiel hier hat die Szene die ID 29.

Um die ID des SONOS Commander zu finden müsst ihr einen kleinen Trick anwenden, da diese nicht direkt in der Konfiguration des virtuellen Moduls sichtbar ist. Geht dazu wie oben unter (B) beschrieben auf die Einstellungen des SONOS Commander. Sobald die Seite geladen ist, klickt auf die Adresszeile des Webbrowsers und ihr findet dort die ID. Bei dem aktuellen Beispiel stand folgendes in der Adresszeile „http://192.168.100.999/fibaro/de/devices/virtual_edit.html?id=56

Die grünen Werte könnt ihr nach Bedarf anpassen. (600 entspricht 60 Sekunden x 10 also = 10 Minuten)


D) Nun gibt es im SONOS Commander noch einen speziellen Button, nämlich den „Good Morning (DE)“ Button. Dieser muss allerdings speziell konfiguriert werden. In den Einstellungen des SONOS Commander, könnt ihr unter „Fortgeschritten“ jeden Button und den hinterlegten Code anschauen. Bei diesem Button müsst ihr auf der Zeile 327 und 329 die IP eures Fibaro HC2 eintragen und einen HC2 User + Passwort.
SONOS Commander Konfiguration anpassenWenn ihr das gemacht habt und diesen Button klickt oder über ein Szenario aufruft, dann habt ihr einen netten TTS Effekt. Ihr werdet nämlich begrüsst und es wird euch gesagt welcher Tag ist und wie das Wetter ist. Anschliessend wird Radio abgespielt.

(Ihr könnt natürlich auch das Script unter C.2) anpassen und…

fibaro:call(sonosCommander, „pressButton“, „1“); — Radio starten

mit..

fibaro:call(sonosCommander, „pressButton“, „7“); — TTS Ansprache und Radio starten

ersetzen. So löst ihr bei Bewegung die TTS Ansage aus und anschliessend wird Radio abgespielt.


Hier noch eine kurze Beschreibung des „SONOS Commander“:

SONOS_Commander_Info


So ich hoffe das hilft euch weiter…

Viel Spass.

Cheers

doonic