Bose Soundtouch in IPS einbinden

Ein frohes, neues Jahr!

Schön, dass meine „Arbeit“ anklang findet :wink:

Ich selber bin auch kein Programmierer, meist gilt try and error :eek:

Zum Thema Presets schalten:

Nimm mal das Script aus Post #4 und ersetzte die Zeile

// Key
$keyname = „POWER“;

durch

// Key
$keyname = „PRESET_1“;

dann sollte er genau das tun, was du auf der Taste gespeichert hast.

PRESET_2 ist dann die Preset Taste 2 auf dem Soundtouch usw.

Ich selber nutze die Presets nur für Internetradio.

Mit DLNA habe ich mich noch nicht beschäftigt… ist in meiner Prioliste auch dann hinten dran.

Ich bin gerade dabei die Script zu erweitern und zu modifizieren für’s WebFront,

denn ich will meinen Ausschalttimer nutzen, dass sich der Soundtouch nach x Minuten von selber ausschaltet.

Und ich will noch einen Weg finden, um den Status des Soundtouch’s abzufragen. Wenn ich zum Beispiel manuell den Soundtouch ausschalte und ich zuvor den Timer aktiviert habe, dann braucht der Timer den Soundtouch nicht mehr ausschalten, denn er ist ja aus, ansonsten schaltet das Timerscript den Soundtouch wieder ein und ich stehe dann senkrecht im Bett :smiley:

Ausserdem muss ich noch die Volume Buttons einbinden…

Timer + Fadeout Volume könnte ich mir vorstellen. :slight_smile:

Ziel wäre es, ein IPSSoundtouch (Modul) zu kreieren (analog zu IPSSonos), aber ich glaube da fehlen mir die „professionellen“ php-Kenntnisse… mal sehen.

Vielleicht hat ja Jemand Lust mich / uns zu unterstützen?

So einige Variablen und Scripte für WebFront zusammengestellt.

Am Design muss noch etwas getan werden. Ebenfalls die Auswertung vom Bose Soundtouch (Rückkanal, sofern das geht :confused:)

Hier mal ein Screenshot:

Guten Morgen,

das mit den Presets hatte ich schon erfolgreich mit dem Power Script umgesetzt. Bei deinem ersten Script aber, kam einer deiner Sender hoch! Das fand ich interessant, denn dann ist man ja nicht mehr auf die 6 Preset Tasten beschränkt. Man könnte also alle seine Wunschsender mehr oder weniger direkt aufrufen.

Ich hab mir mal kurz auf die schnelle das zusammen gebastelt. Aktuell noch ohne Sendernamen.

Baue auch gerade um :eek:

Und habe mir nochmal 6 Presets spendiert :smiley:

Warum nennst du die Stationen Preset ? Hat das einen bestimmten Grund ? Ich hab mir jetzt die genutzten Sender raus gesucht und rufe die mit eingetragenem Stationsnamen direkt auf. Ist doch viel übersichtlicher.

Wie hast du denn den Volume Slider umgesetzt ?

Hallo Gosef,

habe meine Preset Tasten auch mit den Sendernamen versehen. Mein IPSSoundtouch Projekt ist ja gerade am Anfang, wird ständig verändert und wächst. Danke für deine Idee :o

Volumeslider:

Zunächst eine Integervariable neu anlegen und benennen.

Dann ein neues Variablenprofil zuweisen:

und der Variable nachfolgendes Script zuweisen:


<?
/*
Bose Soundtouch Volume Control-Script
Bose Soundtouch Systeme in IPS einbinden und schalten

Änderungen / Versionhistorie
01.01.2015 Version 1.0.0 Initialscript
*/

// Variablendefinitionen holen
include("bose_VarDefinitions.ips.php");

// Schaltvorgang WebFront
SetValue($_IPS['VARIABLE'], $IPS_VALUE);

$volume = GetValue($BoseSoundtouchVolume);

// XML Data
$xml_data01 = '<volume>'.$volume.'</volume>';

// Bose Systeme, IP Adresse festlegen
if (GetValueFormatted($BoseSoundtouchSystem) == "Soundtouch 20")
{
$ip = ($BoseSoundtouch20IP);
}
if (GetValueFormatted($BoseSoundtouchSystem) == "Soundtouch Portable")
{
$ip = ($BoseSoundtouchPortableIP);
}
if (GetValueFormatted($BoseSoundtouchSystem) == "Soundtouch CineMate")
{
$ip = ($BoseSoundtouchCineMateIP);
}

// cURL Press Key Button
$curl = curl_init();
curl_setopt_array($curl,
		  array(CURLOPT_URL => 'http://'.$ip.':8090/volume',
			CURLOPT_HEADER => 0,
			CURLOPT_RETURNTRANSFER => 1,
			CURLOPT_POST => 1,
			CURLOPT_POSTFIELDS => $xml_data01,
			CURLOPT_HTTPHEADER => array('Content-type: text/xml')
			));
$resp = curl_exec($curl);
curl_close($curl);
?>

Der Wert wird erst bei loslassen des Sliders gesetzt.

Werde mich jetzt erstmal meinem Volume Fadeout widmen.

So siehts im Moment aus:

Weitere To Do’s:

  1. Now Playing auswerten und in IPS Variable schreiben, parsen und auswerten einer XML-Datei :eek:
  2. Volume vom Gerät auslesen, sofern das geht
  3. WakeUpSoundtoch Funktion
  4. Design Webfront

Now Playing ist doch da !?

Ich hol mir das so:

SetValue (42221 /[Smarthome\W27\Scripte\Variablen\Bose\aktueller Sender]/, $itemName);

Danke für das Volume Script!

Kannst du mir noch die bose_VarDefinitions.ips.php posten bitte ?

Ja, das ist auch einfach, weil du den Namen der Variablen definiert hast :rolleyes:

Ich will bei Schaltvorgängen, oder in einem zyklischen Ereignis den Status des System abfragen (Query).

Dafür muss ich eine XML Datei auswerten (now_playing). Da steht dann nochmals der Sendername und andere Informationen drin. Ebenfalls werte wie „STANDBY“. Dies kann ich dann wieder für Abfragen nutzen, ein Script soll nur ausgeführt werden, wenn z.B. das System nicht im STANDBY ist.

XML Parsen mit Zuweisung hab eich nicht nicht gemacht… mal sehen vermutlich erst am nächsten Wochenende.

Ich baue gerade mal wieder um :eek:

In der bose_VarDefinitions.ips.php habe ich den Objektivs nur sprechende Namen gegeben.

Beispiel:
$BoseSoundtouchPowerSwitch = (12345); …usw.

Update:

  • Design geändert

  • Volume Fade Out überarbeitet

  • Systemstatus wird abgefragt und ausgegeben
    (es sind noch nicht alle Statusmeldungen integriert)

  • Now Playing
    (Sendername wird angezeigt, Artist und Titel, sowie sonstige Infos fehlen noch)

  • Senderlogo wird angezeigt

Screenshot:

Gib mir mal einen Tip wie du die XML Variablen weiter verarbeitest.
Simple XML ?

Hier ein Script um verschiedene Zustände des Systems per CURL GET abzufragen.

Am Anfang die Werte für euer System anpassen, ebenfalls die benötigte Abfrage auswählen.

Im Script Ausgabefenster der Konsole erscheinen die Ergebnisse.

Viel Spaß! :smiley:


<?
/*
Dateiname: bose_SoundTouchSystemQueryCurlGet

Bose SoundTouch Systeme in IPS einbinden

Bose SoundTouch Script, Curl Get Systemstatusabfrage
Version 1.0.0 vom 06.01.2015

Änderungen / Versionhistorie
06.01.2015 Version 1.0.0 Initialscript
*/

// Start, Query Script

// Start, Config

// Bose SoundTouch IP-Adresse
$BoseSoundTouchSystemIP = "192.168.1.2";

// Abfrage auswählen

// Volume
//$URLString = "volume";

// Now Playing
$URLString = "now_playing";

// Sources
//$URLString = "sources";

// Presets
//$URLString = "presets";

// Get Zone
//$URLString = "getZone";

// Ende, Config
	
// Bose System verfügbar
$SystemAvailable = false;
$SystemAvailable = (boolean)Sys_Ping($BoseSoundTouchSystemIP, 1000);
if ($SystemAvailable == false)
	{
	echo "Bose SoundTouch System ist nicht verfügbar!";
	}
else
	{
	// Curl Get
	$Curl = curl_init();

	curl_setopt_array($Curl, array(
				       	CURLOPT_URL => 'http://'.$BoseSoundTouchSystemIP.':8090/'.$URLString,
			   	    	CURLOPT_HEADER => 0,
			      	 	CURLOPT_RETURNTRANSFER => 1
			       		));

	$Response = curl_exec($Curl);

	$ResponseUTF8 = utf8_decode($Response);
	echo "Response: ".$ResponseUTF8."

";

	$XMLData = new SimpleXMLElement ($Response);

	$XMLDataJson = json_encode($XMLData);
	echo "XML Data Json: ".($XMLDataJson)."

";

	if ($URLString == "volume")
	   {
	   // Ziellautstärke
		$TargetVolume	=	$XMLData->targetvolume;
		// aktuelle Lautstärke
		$ActualVolume 	= 	$XMLData->actualvolume;
		// Lautsprecher stumm
		$MutedVolume 	= 	$XMLData->muteenabled;
		// Werte ausgeben
		echo "Target Volume: ".$TargetVolume."
";
		echo "Actual Volume: ".$ActualVolume."
";
		echo "Mute enabled: ".$MutedVolume."
";
      }
	if ($URLString == "now_playing")
		{
		// Systemstatus
		$SystemStatus = utf8_decode($XMLData->playStatus);
		// Sendername
		$StationName = utf8_decode($XMLData->stationName);
		// Senderlogo
		$SenderLogo = utf8_decode($XMLData->art);
		$SenderLogoURL = (string)'<center><embed src="'.$SenderLogo.'"></embed></center>';
		// Werte ausgeben
		echo "Play Status: ".$SystemStatus."
";
		echo "Station Name: ".$StationName."
";
		echo "Art: ".$SenderLogo."
";
		}
}
// Ende, Query Script
?>

Hallo ubittner ,
ich versuche auch gerade das Bose ST System zu impelmentieren, jedoch für FHEM.
Wie bist Du an die Informationen über die ST gekommen?
Habe weder eine FTP noch Telnet Verbindung hin bekommen:-(
Gruß der Freibeuter

…das bleibt mein Geheimnis :smiley:

Im Prinzip habe ich aus meiner Sicht alle URLs ermittelt, welche man zur Einbindung braucht.

Wenn du z.B. im Internet Explorer folgende URL eingibst, dann kommen Ergebnisse als xml.

http://IP.Adresse.Bose.System:8090/info

bekommst du Info’s zum System. Zwar nett, aber ich hatte noch keinen Gebrauch dafür.

http://http://IP.Adresse.Bose.System:8090/now_playing

bekommst du angezeigt, was gerade läuft.

Es gibt noch…

/volume
/presets
/sources
/getZone

Mit den entsprechenden Skripten kannst du dann per CURL GET, bzw POST Informationen auslesen, bzw. an das System senden.

Fallst du Daten an den ST sendest musst, dann heisst der Sender „Gabbo“, gucke einfach mal in den Thread hier, habe ja Beispiele aufgeführt.

Die sind in php, ich weis jetzt nicht, was FHEM braucht?! Die Logik ist aber die gleiche und mit den URL Springs sollte das auch in anderen Sprachen machbar sein.

Hallo, habe jetzt die 2. Soundtouch bei mir aufgebaut und würde sie auch gern synchronisieren, hast Du dazu auch schon was gefunden ?
Der Freibeuter

Hallo, habe ich noch nicht im Einsatz. Kann mal bei Gelegenheit nachsehen, ob ich dazu etwas finde. Wird aber dauern, da ich momentan andere Projekte habe.

So, endlich bin ich dazu gekommen, um die Zonen Steuerung von mehreren ST Systemen zu steuern.
Somit wird in allen Räumen / Systemen die Musik synchron wiedergegeben.

Da ich es jetzt auf die schnelle zusammengestellt habe sind ein paar Vorbereitungen notwendig.

Als erstes muss die Device ID der Systeme ermittelt werden. Diese erhält man mit:

http://IPAdresseDesSystems:8090/info

und sieht dann so aus (Abschnitt):

<info deviceID=„000SSSSSSSSS“>

Dies ermittelt man für alle Systeme, welche an der Zonensteuerung teilnehmen wollen.

Hier das Script zum Steuern:

<?
// Bose Soundtouch ZoneControlScript

// Bose Soundtouch System 1
$ZoneSourceSystemIP = "192.168.1.100";

// Bose Soundtouch System 2
$ZoneDestinationSystemIP = "192.168.1.101";


// XML Data
$xml_data = '<zone master="000SSSSSSSSS"><member ipaddress="192.168.1.100">000SSSSSSSSS</member><member ipaddress="192.168.1.101">000DDDDDDDDD</member></zone>';

//echo $xml_data;

// cURL
$curl = curl_init();
curl_setopt_array($curl,
		  	array(CURLOPT_URL => 'http://'.$ZoneSourceSystemIP.':8090/setZone',
			CURLOPT_HEADER => 0,
			CURLOPT_RETURNTRANSFER => 1,
			CURLOPT_POST => 1,
			CURLOPT_POSTFIELDS => $xml_data,
			CURLOPT_HTTPHEADER => array('Content-type: text/xml')
			));
$resp = curl_exec($curl);
curl_close($curl);
?>

Die IP-Adressen und Device ID müssen im Script für euere Umgebung angepasst werden, ist aber denke ich klar.

Es fehlt jetzt noch die Änderung / Auflösung der Zone… Mache ich aber später…

Viel Spaß, Rückmeldungen gerne erwünscht.

Ein schönes Wochenende :cool:

Mittlerweile habe ich ein Modul geschrieben.

Bose SoundTouch Modul für IPS

https://www.symcon.de/forum/threads/29922-Bose-SoundTouch-Modul

Hallo Leute der Community,
Hab gerade meine erste Bose angeschlossen und bin begeistert. :slight_smile: :):):):):slight_smile:
echt geile Sache.
Ihr seid die Besten.
Gruß
Stephan