BOSE SoundTouch über Homematic CCU steuern

Anbindung von FS20-Komponenten, ELV-Wetterstationen, EnOcean und DMX an HomeMatic

Moderator: Co-Administratoren

fraat
Beiträge: 25
Registriert: 23.02.2014, 20:56

BOSE SoundTouch über Homematic CCU steuern

Beitrag von fraat » 22.01.2016, 21:02

Hallo,
ich habe ein par Scripts für die Ansteuerung der BOSE SoundTouch geschrieben die ich euch zur Verfügung stellen möchte.

Vorbereitungen:
* CUxD muss auf der CCU installiert sein
* Ihr müst die Adresse von CUxD wissen
* Ihr müsst die IP Adresse des BOSE SoundTouch wissen

Hier nun die Scripts zur BOSE SoundTouch Ansteuerung:

1. SoundTouch Ausschalten/Standby

Code: Alles auswählen

!Soundtouch IP setzen 
string ST_Ip ="192.168.1.100";

!Überprüfung ob Soundtuch bereits in STANDBY ist
var url="http://" # ST_Ip #":8090/now_playing";
var cmd = "/usr/local/addons/cuxd/curl -s -k -L " # url ;

dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var v = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
WriteLine("Ret>:" # v);

integer foo = v.Find("STANDBY"); ! World = 6
WriteLine("Find STANDBY at Position>: " # foo);

if (foo <> -1) 
{ 	WriteLine("Soundtouch>: STANDBY");} 
else 
{ 
  	WriteLine("Soundtouch>: ON");
  
	!Press Power Button (down)
	string ST_Method = "key";
	string ST_Post='<key state="press" sender="Gabbo">POWER</key>';
	string CurlCmd='/usr/local/addons/cuxd/curl --data "' # ST_Post # '" http://'# ST_Ip #':8090/' + ST_Method;
	dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(CurlCmd);

	!Press Power Button (release)
	string ST_Method = "key";
	string ST_Post='<key state="release" sender="Gabbo">POWER</key>';
	string CurlCmd='/usr/local/addons/cuxd/curl --data "' # ST_Post # '" http://'# ST_Ip #':8090/' + ST_Method;
	dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(CurlCmd)
} 
2. SoundTouch Radio Sender setzen

Code: Alles auswählen

!Soundtouch Sender setzen 
string ST_Location ="530"; !SWR3
!string ST_Location ="7297"; !Die Neue 107.7

!Soundtouch IP setzen 
string ST_Ip ="192.168.1.100";

	!Set volume
	string ST_Method = "select";
    string ST_Post='<ContentItem source="INTERNET_RADIO" location="' # ST_Location # '"></ContentItem>';
	string CurlCmd='/usr/local/addons/cuxd/curl --data "' # ST_Post # '" http://'# ST_Ip #':8090/' + ST_Method;
	WriteLine("CurlCmd:" # CurlCmd);
	!dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(CurlCmd)
    
    dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(CurlCmd);
	dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
	var v = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
	WriteLine("SetLocationRet>:" # v);

	!get volume
	var url="http://" # ST_Ip #":8090/volume";
	var cmd = "/usr/local/addons/cuxd/curl -s -k -L " # url ;

	dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
	dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
	var v = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
	WriteLine("GetVolumeRet>:" # v);
3. SoundTouch Einen Button der Fernbedienung simulieren

Code: Alles auswählen

!Soundtouch Key setzen 
string ST_Key ="PRESET_2";

!Soundtouch IP setzen
string ST_Ip ="192.168.1.100";

    !Press Power Button (down)
	string ST_Method = "key";
	string ST_Post='<key state="press" sender="Gabbo">' # ST_Key #'</key>';
	string CurlCmd='/usr/local/addons/cuxd/curl --data "' # ST_Post # '" http://'# ST_Ip #':8090/' + ST_Method;
	WriteLine("CurlCmd:" # CurlCmd);
	!dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(CurlCmd);

  	dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(CurlCmd);
	dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
	var v = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
	WriteLine("Ret>:" # v);

	!Press Power Button (release wichtig!)
	string ST_Method = "key";
	string ST_Post='<key state="release" sender="Gabbo">' # ST_Key #'</key>';
	string CurlCmd='/usr/local/addons/cuxd/curl --data "' # ST_Post # '" http://'# ST_Ip #':8090/' + ST_Method;
	WriteLine("CurlCmd:" # CurlCmd);
	!dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(CurlCmd)
    
    dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(CurlCmd);
	dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
	var v = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
	WriteLine("Ret>:" # v);
Mögliche Tasten:
PLAY
PAUSE
STOP
PREV_TRACK
NEXT_TRACK
THUMBS_UP
THUMBS_DOWN
POWER
MUTE
VOLUME_UP
VOLUME_DOWN
PRESET_1
PRESET_2
PRESET_3
PRESET_4
PRESET_5
PRESET_6
AUX_INPUT
SHUFFLE_OFF
SHUFFLE_ON
REPEAT_OFF
REPEAT_ONE
REPEAT_ALL
PLAY_PAUSE
ADD_FAVORITE
REMOVE_FAVORITE

4. SoundTouch Lautstärke einstellen

Code: Alles auswählen

!Soundtouch Lautsterke setzen 0-100
string ST_Value ="40";

!Soundtouch IP setzen 
string ST_Ip ="192.168.1.100";

	!Set volume
	string ST_Method = "volume";
	string ST_Post='<volume>' # ST_Value #'</volume>';
	string CurlCmd='/usr/local/addons/cuxd/curl --data "' # ST_Post # '" http://'# ST_Ip #':8090/' + ST_Method;
	WriteLine("CurlCmd:" # CurlCmd);
	!dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(CurlCmd)
    
        dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(CurlCmd);
	dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
	var v = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
	WriteLine("SetvolumeRet>:" # v);

	!get volume (Optional)
	var url="http://" # ST_Ip #":8090/volume";
	var cmd = "/usr/local/addons/cuxd/curl -s -k -L " # url ;

	dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
	dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
	var v = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
	WriteLine("GetVolumeRet>:" # v);
Hinzugefügt 18.03.2016

5. SoundTouch Lautstärke auslesen
+ erstelle eine Systemvariable string SoundTouch_NowPlayingVolume

Code: Alles auswählen

!"Soundtouch_IP" auslesen falls als SystemVariable vorhanden
!var STtempIP = dom.GetObject("Soundtouch_IP"); string ST_Ip= STtempIP .Variable();

!Soundtouch IP setzen (optional wenn nicht Systemvariable)
string ST_Ip ="xx.xx.xx.xx";
WriteLine("Soundtouch IP>: " # ST_Ip);

!get voluume
var url="http://" # ST_Ip #":8090/volume";
var cmd = "/usr/local/addons/cuxd/curl -s -k -L " # url ;

dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var v = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
WriteLine("GetVolumeRet>:" # v);

integer foo = v.Find("encoding"); 
WriteLine("Find >encoding< at Position>: " # foo);


if (foo <> -1) 
{


!"SoundTouch_NowPlayingSID" 	
string foo4 = v.StrValueByIndex('="',3);
string deviceID = foo4.StrValueByIndex('"',1);
WriteLine("SoundTouch_NowPlayingSID>: " # deviceID);
!var STtempIP = dom.GetObject("SoundTouch_NowPlayingSID"); STtempIP.Variable(deviceID);	
  
!"SoundTouch_NowPlayingTargetVolume"
string targetvolume = foo4.StrValueByIndex(' ',3);
WriteLine("SoundTouch_NowPlayingTargetVolume>: " # targetvolume);
!var STtempIP = dom.GetObject("SoundTouch_NowPlayingTargetVolume"); STtempIP.Variable(targetvolume);

!"SoundTouch_NowPlayingActualVolume"
string actualvolume = foo4.StrValueByIndex(' ',7);
WriteLine("SoundTouch_NowPlayingActualVolume>: " # actualvolume);
var STtempIP = dom.GetObject("SoundTouch_NowPlayingVolume"); STtempIP.Variable(actualvolume);
  

} 
else 
{ 

!"SoundTouch_NowPlayingSID" 	
string foo4 = v.StrValueByIndex('="',3);
string deviceID = foo4.StrValueByIndex('"',1);
WriteLine("SoundTouch_NowPlayi-ngSID>: NotFound");
!var STtempIP = dom.GetObject("SoundTouch_NowPlayingSID"); STtempIP.Variable("NotFound");	
  
!"SoundTouch_NowPlayingTargetVolume"
string targetvolume = foo4.StrValueByIndex(' ',3);
WriteLine("SoundTouch_NowPlayingTargetVolume>: 0");
!var STtempIP = dom.GetObject("SoundTouch_NowPlayingTargetVolume"); STtempIP.Variable("0");

!"SoundTouch_NowPlayingActualVolume"
string actualvolume = foo4.StrValueByIndex(' ',7);
WriteLine("SoundTouch_NowPlayingActualVolume>: 0");
var STtempIP = dom.GetObject("SoundTouch_NowPlayingVolume"); STtempIP.Variable("0");


}
6. SoundTouch NowPlaying auslesen (Sender, Standby status, Quelle,....)
+ erstelle eine Systemvariable string SoundTouch_NowPlayingSID
+ erstelle eine Systemvariable string SoundTouch_NowPlayingSource
+ erstelle eine Systemvariable string SoundTouch_NowPlayingContentItemSource
+ erstelle eine Systemvariable string SoundTouch_NowPlayingLocation

Code: Alles auswählen

!"Soundtouch_IP" auslesen wenn Systemvariable
!var STtempIP = dom.GetObject("Soundtouch_IP"); string ST_Ip= STtempIP .Variable();
!WriteLine("Soundtouch IP>: " # ST_Ip);

!Soundtouch IP setzen (optional wenn nicht Systemvariable)
string ST_Ip ="xx.xx.xx.xx";

!now_playing auslesen
var url="http://" # ST_Ip #":8090/now_playing";
var cmd = "/usr/local/addons/cuxd/curl -s -k -L " # url ;

dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var v = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
WriteLine("Ret>:" # v);

integer foo = v.Find("encoding"); 
WriteLine("Find >encoding< at Position>: " # foo);


if (foo <> -1) 
{


!"SoundTouch_NowPlayingSID" 	
string foo4 = v.StrValueByIndex('="',3);
string deviceID = foo4.StrValueByIndex('"',1);
WriteLine("SoundTouch_NowPlayingSID>: " # deviceID);
var STtempIP = dom.GetObject("SoundTouch_NowPlayingSID"); STtempIP.Variable(deviceID);	
  
!"SoundTouch_NowPlayingSource"
string foo4 = v.StrValueByIndex('="',4);
string Source = foo4.StrValueByIndex('"',1);
WriteLine("SoundTouch_NowPlayingSource>: " # Source);
var STtempIP = dom.GetObject("SoundTouch_NowPlayingSource"); STtempIP.Variable(Source);
  
string foo4 = v.StrValueByIndex('="',5);
string ContentItemSource = foo4.StrValueByIndex('"',1);
WriteLine("SoundTouch_NowPlayingContentItemSource>: " # ContentItemSource);
var STtempIP = dom.GetObject("SoundTouch_NowPlayingContentItemSource"); STtempIP.Variable(ContentItemSource);
  
!string ST_Location ="530"; !SWR3
!string ST_Location ="7297"; !Die Neue 107.7
string foo4 = v.StrValueByIndex('="',6);
string isPresetable = foo4.StrValueByIndex('"',1);
WriteLine("SoundTouch_NowPlayingLocation>: " # isPresetable);
var STtempIP = dom.GetObject("SoundTouch_NowPlayingLocation"); STtempIP.Variable(isPresetable);
  
} 
else 
{ 

!"SoundTouch_NowPlayingSID" 	
WriteLine("SoundTouch_NowPlayingSID>: NotFound");
var STtempIP = dom.GetObject("SoundTouch_NowPlayingSID"); STtempIP.Variable("NotFound");	
  
!"SoundTouch_NowPlayingSource"
WriteLine("SoundTouch_NowPlayingSource>: STANDBY");
var STtempIP = dom.GetObject("SoundTouch_NowPlayingSource"); STtempIP.Variable("STANDBY");
  
WriteLine("SoundTouch_NowPlayingContentItemSource>: NotFound");
var STtempIP = dom.GetObject("SoundTouch_NowPlayingContentItemSource"); STtempIP.Variable("NotFound");
  
WriteLine("SoundTouch_NowPlayingLocation>: NotFound");
var STtempIP = dom.GetObject("SoundTouch_NowPlayingLocation"); STtempIP.Variable("NotFound");
  

}
Mit diesen Beispielen kann man schon fast alle Funktionen der SoundTouch via CCU steuern. Abspielen von DEEZER, .. kommt irgendwann später.

Fraat
Zuletzt geändert von fraat am 18.03.2016, 20:45, insgesamt 5-mal geändert.

grissli1
Beiträge: 2268
Registriert: 22.06.2012, 17:46
System: Alternative CCU (auf Basis OCCU)
Wohnort: Tirol/Austria
Hat sich bedankt: 13 Mal
Danksagung erhalten: 2 Mal

Re: BOSE SoundTouch steuern

Beitrag von grissli1 » 22.01.2016, 22:15

Suuuuper. Vielen Dank.
Jetzt muss ich mich nur noch entscheiden ob ich Sonos oder Bose nehme.

Viele Grüße
Chris

Unterwegs @ G-Pad
System: RaspberryMatic 3.41.11.20190126 auf RPi3, ReverseProxy auf RPi3

fraat
Beiträge: 25
Registriert: 23.02.2014, 20:56

Re: BOSE SoundTouch steuern

Beitrag von fraat » 23.01.2016, 09:10

Ick kann BOSE empfählen habe selber 5 Soundtouch und Cinemate mit Sountouch und wird über ccu gesteuert.


Gesendet von iPhone mit Tapatalk

ger.isi
Beiträge: 105
Registriert: 22.11.2015, 14:00
Wohnort: Österreich
Hat sich bedankt: 1 Mal

Re: BOSE SoundTouch steuern

Beitrag von ger.isi » 23.01.2016, 19:05

Perfekt!
Genau das was ich brauche.
Werde es gleich ausprobieren, wenn ich dazukomme.


Gesendet von iPhone mit Tapatalk
--------------------------------------------
CCU3 mit 2x LAN Gateway, LAN Wired Gateway, Wired Komponenten, Redmatic für Homekit, CUxD, HmIP
--------------------------------------------

ger.isi
Beiträge: 105
Registriert: 22.11.2015, 14:00
Wohnort: Österreich
Hat sich bedankt: 1 Mal

Re: BOSE SoundTouch steuern

Beitrag von ger.isi » 16.02.2016, 18:57

Funktioniert ja perfekt!
Vielen Dank!

Natürlich noch eine weitere Frage:
Gibt es auch die Möglichkeit auf eine andere Source umzuschalten?
Apple TV z.B. oder meinen angeschlossenen Fernseher?
--------------------------------------------
CCU3 mit 2x LAN Gateway, LAN Wired Gateway, Wired Komponenten, Redmatic für Homekit, CUxD, HmIP
--------------------------------------------

fraat
Beiträge: 25
Registriert: 23.02.2014, 20:56

BOSE SoundTouch steuern

Beitrag von fraat » 16.02.2016, 19:11

Leider nein. Diese Funktionen sind in der original APP auch nicht vorhanden.

ger.isi
Beiträge: 105
Registriert: 22.11.2015, 14:00
Wohnort: Österreich
Hat sich bedankt: 1 Mal

Re: BOSE SoundTouch steuern

Beitrag von ger.isi » 16.02.2016, 19:22

sehr schade - das fehlt mir eben auch in der original App :cry:
Ev. über die source Taste der Lifestyle Anlage - aber die lässt sich nicht so einfach steuern, oder?
--------------------------------------------
CCU3 mit 2x LAN Gateway, LAN Wired Gateway, Wired Komponenten, Redmatic für Homekit, CUxD, HmIP
--------------------------------------------

fraat
Beiträge: 25
Registriert: 23.02.2014, 20:56

BOSE SoundTouch steuern

Beitrag von fraat » 17.02.2016, 00:10

Ich würde gerne die Quellen auch CCU steuern. Diese Funktion/Taste wird in der Soundtouch api nicht abgebildet

fraat
Beiträge: 25
Registriert: 23.02.2014, 20:56

Re: BOSE SoundTouch über Homematic CCU steuern

Beitrag von fraat » 18.03.2016, 20:46

Hallo,
heute habe ich neue Scripte zum auslesen von SoundTouch hinzugefügt. Ihr findet sie unter Punkt 5 und 6.

SuoundTouch NowPlaying auslesen (Sender, Standby status, Quelle,....
SoundTouch Lautstärke auslesen

Fraat

grissli1
Beiträge: 2268
Registriert: 22.06.2012, 17:46
System: Alternative CCU (auf Basis OCCU)
Wohnort: Tirol/Austria
Hat sich bedankt: 13 Mal
Danksagung erhalten: 2 Mal

Re: BOSE SoundTouch über Homematic CCU steuern

Beitrag von grissli1 » 25.04.2016, 12:10

So, habe mir letzte Woche mal eine Soundtouch 10 zum Probieren geholt. Soll ja nur für kleine Räume sein :shock: :shock: :shock: .
Also wenn ich die im Bad aufdrehe, fliegen mir die Fliesen runter :lol: :lol: :lol: . Musste erstmal den Bass runter drehen.
Habe sie jetzt im Esszimmer stehen und beschalle bei geöffneter Türe schön meine Wohnung. Ich habe eine 130qm Altbauwohnung.
Werde jetzt aber doch eine 20er für Wohn-/ Esszimmer und noch zwei 10er für die anderen Räume bestellen. Dann muss ich nicht so aufdrehen :mrgreen: .

Eigentlich bin ich ja BOSE Gegner aber hier bin ich froh, dass ich mal diese Marke genommen habe.

Genug abgeschweift, aber dieses System begeistert. Vor allem mit einem hohen WAF durch die FB.
Und am WE werde ich alles in die HM integrieren.

Viele Dank für die Arbeit und das zur Verfügung stellen der Scripte!!!!

Viele Grüße
Chris
System: RaspberryMatic 3.41.11.20190126 auf RPi3, ReverseProxy auf RPi3

Antworten

Zurück zu „CUxD“