Re: BOSE SoundTouch über Homematic CCU steuern
Verfasst: 31.07.2016, 13:54
Gibt es vielleicht auch eine Möglichkeit, per Script die Soundtouch auf den Multiroombetrieb zu schalten?
Heimautomation mit ELV HomeMatic und FHZ Funk-Hauszentralen
https://homematic-forum.de/forum/
Code: Alles auswählen
!erstelle eine Systemvariable string ST.NP.itemName
!erstelle eine Systemvariable string ST.NP.track
!erstelle eine Systemvariable string ST.NP.artist
!erstelle eine Systemvariable string ST.NP.album
!Soundtouch IP setzen (Liegt hier in der variable ST.IP.Kueche)
var ST_IP_Kueche_tmp = dom.GetObject("ST.IP.Kueche");
string ST_Ip= ST_IP_Kueche_tmp .Variable();
!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();
integer foo = v.Find("encoding");
if (foo <> -1) {
!ST.NP.itemName finden
string word = "itemName";
integer word_laenge = word.Length();
integer word_position = v.Find(word);
string daten = v.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
dom.GetObject("ST.NP.itemName").State(daten);
!ST.NP.track finden
string word = "track";
integer word_laenge = word.Length();
integer word_position = v.Find(word);
string daten = v.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
dom.GetObject("ST.NP.track").State(daten);
!ST.NP.artist finden
string word = "artist";
integer word_laenge = word.Length();
integer word_position = v.Find(word);
string daten = v.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
dom.GetObject("ST.NP.artist").State(daten);
!ST.NP.album finden
string word = "album";
integer word_laenge = word.Length();
integer word_position = v.Find(word);
string daten = v.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
dom.GetObject("ST.NP.album").State(daten);
}
else {
!Wenn Soundtouch nicht erreichbar
var STtempIP = dom.GetObject("ST.NP.itemName"); STtempIP.Variable("NotFound");
var STtempIP = dom.GetObject("ST.NP.track"); STtempIP.Variable("NotFound");
var STtempIP = dom.GetObject("ST.NP.artist"); STtempIP.Variable("NotFound");
var STtempIP = dom.GetObject("ST.NP.album"); STtempIP.Variable("NotFound");
}
Im ersten Post dieses Threads ist der Code doch enthalten, um das aktuelle Volumen einer bestimmten ST-Quelle einzulesen...was genau brauchst du-bzw. wie kann ich dir weiterhelfen?Ulli@volles-haus.de hat geschrieben:Hallöchen zusammen
Habe noch eine Frage an die Freaks hier bezüglich der BOSE Steuerung.
Gibt es eine Möglichkeit die aktuell eingestellte Lautstärke auszulesen und in einer Variablen zu speichern?
LG Ulli
Die API habe ich dir mal angehängt, vielleicht ist das schon ein erster Schritt...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();
Code: Alles auswählen
!*******************************************************************************
!** Bose Soundtouch HomeMatic-Script V1.1 **
!** by TobiNedo **
!** 23.03.2017 **
!** **
!** Verwendete Homematic Systemvariablen: **
!** ST.Preset (Werteliste) **
!** - 0;1;2;3;4;5;6 **
!** **
!** Voraussetzungen: **
!** - Feste IP-Adressen für Soundtouch-Geräte **
!** - Definierte Presets **
!** - CUxD muss auf der CCU installiert sein **
!** - CUxD Adresse von Soundtouch **
!** **
!** Changelog: **
!** v1.1 **
!** - prüfen ob Soundtouch vorher schon an war, **
!** dann alle einstellungen (Lautstärke, Slaves) beibehalten **
!** - Durch Preset 0 Soundtouch ausschalten **
!** - SystemVariable von String zu Werteliste geändert **
!** **
!*******************************************************************************
!Master und Slaves definieren
!Die Device ID findet man unter
!http://<<SoundtouchIP>>:8090/now_playing
!Master bestimmen - Küche
var ST_Master_IP = "123.123.123.123";
var ST_Master_DeviceID = "EC1234567890";
var ST_Master_Volume = "30";
!Slaves besteimmen
!Slave 1 - Schlafzimmer
var ST_Slave1_IP = "123.123.123.123";
var ST_Slave1_DeviceID = "EC1234567890";
var ST_Slave1_Volume = "30";
!Slave 2 - Badezimmer
var ST_Slave2_IP = "123.123.123.123";
var ST_Slave2_DeviceID = "EC1234567890";
var ST_Slave2_Volume = "30";
!Slave 3 - Büro
var ST_Slave3_IP = "123.123.123.123";
var ST_Slave3_DeviceID = "EC1234567890";
var ST_Slave3_Volume = "30";
!Soundtouch Preset holen und setzen
var tmp_preset = dom.GetObject("ST.Preset");
var ST_Preset = web.webGetValueFromList(tmp_preset.ValueList(), tmp_preset.Value());
!Überprüfung ob Master Bereits eingeschlatet war
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("/usr/local/addons/cuxd/curl -s -k -L http://" # ST_Master_IP #":8090/now_playing");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var v = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
integer tmp_standby = v.Find("STANDBY"); ! Wenn Soundtouch in Standby dann = -1
!Wenn Preset = 0, dann soll Master Soundtouch
!(und mit ihm alle Slaves) ausgeshlatet werden
if (ST_Preset == "0") {
if (tmp_standby == -1) {
!Power-Butten in SoundTouch-Key Wandeln
var tmp_Key = "POWER";
!Soundtouch-Key auf ST_Master ausführen
string CurlCmd='/usr/local/addons/cuxd/curl --data "<key state="press" sender="Gabbo">' # tmp_Key # '</key>" http://' # ST_Master_IP # ':8090/key';
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(CurlCmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
!SoundTouchKey auf ST_Master beenden
string CurlCmd='/usr/local/addons/cuxd/curl --data "<key state="release" sender="Gabbo">' # tmp_Key # '</key>" http://' # ST_Master_IP # ':8090/key';
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(CurlCmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
}
}
else {
!ST_Master mit Preset einschalten Einschlaten
!Preset in SoundTouch-Key Wandeln
var tmp_Key = "PRESET_" + ST_Preset;
!Soundtouch-Key auf ST_Master ausführen
string CurlCmd='/usr/local/addons/cuxd/curl --data "<key state="press" sender="Gabbo">' # tmp_Key # '</key>" http://' # ST_Master_IP # ':8090/key';
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(CurlCmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
!SoundTouchKey auf ST_Master beenden
string CurlCmd='/usr/local/addons/cuxd/curl --data "<key state="release" sender="Gabbo">' # tmp_Key # '</key>" http://' # ST_Master_IP # ':8090/key';
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(CurlCmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
!Wenn Master vorher aus war, dann Slaves KOppeln und Lautstärke setzen.
!Ansonsten einstellungen lassen
if (tmp_standby <> -1) {
!ST_Master Lautstärke setzen
string CurlCmd='/usr/local/addons/cuxd/curl --data "<volume>' # ST_Master_Volume # '</volume>" http://' # ST_Master_IP # ':8090/volume';
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(CurlCmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
!Slaves mit ST_Master koppeln
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -d '<zone master='" # ST_Master_DeviceID # "'>
<member ipaddress='" # ST_Slave1_IP # "'>" # ST_Slave1_DeviceID # "</member>
<member ipaddress='" # ST_Slave2_IP # "'>" # ST_Slave2_DeviceID # "</member>
<member ipaddress='" # ST_Slave3_IP # "'>" # ST_Slave3_DeviceID # "</member>
</zone>' http://" # ST_Master_IP # ":8090/setZone");
!Laustärke für Slaves setzen
!Slave1
string CurlCmd='/usr/local/addons/cuxd/curl --data "<volume>' # ST_Slave1_Volume # '</volume>" http://' # ST_Slave1_IP # ':8090/volume';
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(CurlCmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
!Slave2
string CurlCmd='/usr/local/addons/cuxd/curl --data "<volume>' # ST_Slave2_Volume # '</volume>" http://' # ST_Slave2_IP # ':8090/volume';
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(CurlCmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
!Slave3
string CurlCmd='/usr/local/addons/cuxd/curl --data "<volume>' # ST_Slave3_Volume # '</volume>" http://' # ST_Slave3_IP # ':8090/volume';
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(CurlCmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
}
!ST_Master auf SHUFFLE_ON und REPEAT_ALL setzen
!SoundTouch-Key für SHUFFLE_ON
var tmp_Key = "SHUFFLE_ON";
!Soundtouch-Key auf ST_Master ausführen
string CurlCmd='/usr/local/addons/cuxd/curl --data "<key state="press" sender="Gabbo">' # tmp_Key # '</key>" http://' # ST_Master_IP # ':8090/key';
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(CurlCmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
!SoundTouchKey auf ST_Master beenden
string CurlCmd='/usr/local/addons/cuxd/curl --data "<key state="release" sender="Gabbo">' # tmp_Key # '</key>" http://' # ST_Master_IP # ':8090/key';
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(CurlCmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
!SoundTouch-Key für REPEAT_ALL
var tmp_Key = "REPEAT_ALL";
!Soundtouch-Key auf ST_Master ausführen
string CurlCmd='/usr/local/addons/cuxd/curl --data "<key state="press" sender="Gabbo">' # tmp_Key # '</key>" http://' # ST_Master_IP # ':8090/key';
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(CurlCmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
!SoundTouchKey auf ST_Master beenden
string CurlCmd='/usr/local/addons/cuxd/curl --data "<key state="release" sender="Gabbo">' # tmp_Key # '</key>" http://' # ST_Master_IP # ':8090/key';
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(CurlCmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
}