iTunes Airplay Multiroom Steuerung

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

Benutzeravatar
eiGelbGeek
Beiträge: 979
Registriert: 24.07.2014, 17:46
Wohnort: Ruhrpottrandgebiet
Hat sich bedankt: 105 Mal
Danksagung erhalten: 19 Mal

Re: iTunes Airplay Multiroom Steuerung per CCU

Beitrag von eiGelbGeek » 25.09.2015, 02:57

stoffi hat geschrieben: Drückt man die Taste aber lange im Wohnzimmer, schaltet sich das Wohnzimmer an und die anderen Räume ab. So eine Art follow me.
Ein umschalten wäre dann auch mit Bewegungsmeldern und automatisch denkbar ;)

Da ist die Lösung :) Irgendwie komplizierter als gedacht ... Code kann vielleicht noch etwas optimiert werden z.b. durch Repeatschleifen. Aber das ist erstmal die Quick & Dirty Funktioniert Lösung ;)

Code: Alles auswählen

--Multiroom Scripte für Airplay, zur Steuerung über SSH von der Homematic CCU2!
--Version 0.9 (Server Version)
--Copyright by eiGelbGeek / Kontakt: geekmatic (at) icloud.com


#Räume an den Namen der Airplay Devices anpassen!
set Raum1 to "Wohnzimmer"
set Raum2 to "Schlafzimmer"
set Raum3 to "Büro"
set Raum4 to "Küche"
set Raum5 to "Badezimmer"

# CCU IP und ise ID von den CCU Systemvaribalen für AN/AUS und Volume Anzeige der Airplay Lautsprecher!
set ccu_ip to "192.168.20.100"
set ise_ID_OnOff_Raum1 to "00000"
set ise_ID_Vol_Raum1 to "00000"
set ise_ID_OnOff_Raum2 to "00000"
set ise_ID_Vol_Raum2 to "00000"
set ise_ID_OnOff_Raum3 to "00000"
set ise_ID_Vol_Raum3 to "00000"
set ise_ID_OnOff_Raum4 to "00000"
set ise_ID_Vol_Raum4 to "00000"
set ise_ID_OnOff_Raum5 to "00000"
set ise_ID_Vol_Raum5 to "00000"

#################################
#        Ab hier keine Änderungen vornehmen !!!      #
#################################

#Sound Ausgang des Mac auf Mute setzen
set volume with output muted

tell application "iTunes"
	
	#Sound Volume vom Computer auf 100 setzen, sonst kommt es zu Problemen in der Lautstärkeregelung einzelner Airplay Lautsprecher!
	set sound volume of AirPlay device "Computer" to 100
	
	#Abfragen der ausgewählten Airplay Lautsprecher
	set apSpeakersSelected to (get name of every AirPlay device whose selected is true)
	
	#Definition des einzuschaltenden Airplay Lautsprecher
	set apOn to Raum1
	
	#Neue Auswahl der Airplay Lautsprecher zusammen setzen
	#CCU Status setzen wenn Raum 1 vorhanden, sonst Script beenden!
	set apSpeakersAvailable to (get name of every AirPlay device whose available is true)
end tell
if apSpeakersAvailable contains Raum1 then
	set apSpeakersNewSelected to apSpeakersSelected
	set end of apSpeakersSelected to apOn
	set aURL to "curl /dev/null 'http://"
	set bURL to "/config/xmlapi/statechange.cgi?ise_id="
	set cURL to "&new_value=1'"
	set dURL to aURL & ccu_ip & bURL & ise_ID_OnOff_Raum1 & cURL
	do shell script dURL
else
	set aURL to "curl /dev/null 'http://"
	set bURL to "/config/xmlapi/statechange.cgi?ise_id="
	set cURL to "&new_value=0'"
	set dURL to aURL & ccu_ip & bURL & ise_ID_OnOff_Raum1 & cURL
	do shell script dURL
	return
end if

tell application "iTunes"
	
	#Airplay Lautsprecher Name zur Airplay Device ID umwandeln
	set apNEW to {}
	set speakerComputer to (first AirPlay device whose name = "Computer")
	set end of apNEW to speakerComputer
	if apSpeakersNewSelected contains Raum1 then
		set speakerRaum1 to (first AirPlay device whose name = Raum1)
		set end of apNEW to speakerRaum1
	end if
	if apSpeakersNewSelected contains Raum2 then
		set speakerRaum2 to (first AirPlay device whose name = Raum2)
		set end of apNEW to speakerRaum2
	end if
	if apSpeakersNewSelected contains Raum3 then
		set speakerRaum3 to (first AirPlay device whose name = Raum3)
		set end of apNEW to speakerRaum3
	end if
	if apSpeakersNewSelected contains Raum4 then
		set speakerRaum4 to (first AirPlay device whose name = Raum4)
		set end of apNEW to speakerRaum4
	end if
	if apSpeakersNewSelected contains Raum5 then
		set speakerRaum5 to (first AirPlay device whose name = Raum5)
		set end of apNEW to speakerRaum5
	end if
	
	#Hier werden der Airplay Lautsprecher mit einen Fade In und die abzuschaltenden mit einen Fade Out übergeben!
	set initialvolume to 50 #Wenn hier geändert wird, dann im unteren Abschnitt das setvolume anpassen!
	set tickerdelay to 0.1
	
	set current AirPlay devices to apNEW
	if apSpeakersNewSelected contains Raum1 then
		if sound volume of AirPlay device Raum1 is equal to initialvolume then
			set sound volume of AirPlay device Raum1 to initialvolume
			set ccuVOL_Raum1 to initialvolume
		else if sound volume of AirPlay device Raum1 is greater than initialvolume then
			set ccuVOL_Raum1 to (get sound volume of AirPlay device Raum1)
		else
			delay 2
			repeat
				set newVolume to ((sound volume of AirPlay device Raum1) + 2)
				if newVolume is greater than initialvolume then
					set sound volume of AirPlay device Raum1 to initialvolume
					exit repeat
				else
					set sound volume of AirPlay device Raum1 to newVolume
					delay tickerdelay
				end if
			end repeat
			set ccuVOL_Raum1 to initialvolume
		end if
	end if
end tell
#Volume Status in der CCU setzen
if apSpeakersNewSelected contains Raum1 then
	set aURL to "curl /dev/null 'http://"
	set bURL to "/config/xmlapi/statechange.cgi?ise_id="
	set cURL to "&new_value="
	set dURL to "'"
	set eURL to aURL & ccu_ip & bURL & ise_ID_Vol_Raum1 & cURL & ccuVOL_Raum1 & dURL
	do shell script eURL
end if

tell application "iTunes"
	#Raum2 aktiv? Wenn ja dann Fade Out auf 0! CCU Variable AN/AUS auf AUS und CCU Variable für Volume auf 0 setzen!
	if apSpeakersSelected contains Raum2 then
		repeat
			if (get sound volume of AirPlay device Raum2) is equal to 0 then
				exit repeat
			end if
			set sound volume of AirPlay device Raum2 to ((sound volume of AirPlay device Raum2) - 2)
			delay 0.1
		end repeat
		set ccuVOL_Raum2 to 0
	end if
end tell
if apSpeakersSelected contains Raum2 then
	set aURL1 to "curl /dev/null 'http://"
	set bURL1 to "/config/xmlapi/statechange.cgi?ise_id="
	set cURL1 to "&new_value=0'"
	set dURL1 to aURL1 & ccu_ip & bURL1 & ise_ID_OnOff_Raum2 & cURL1
	do shell script dURL1
	set aURL2 to "curl /dev/null 'http://"
	set bURL2 to "/config/xmlapi/statechange.cgi?ise_id="
	set cURL2 to "&new_value=0'"
	set dURL2 to aURL2 & ccu_ip & bURL2 & ise_ID_Vol_Raum2 & cURL2
	do shell script dURL2
end if

tell application "iTunes"
	#Raum3 aktiv? Wenn ja dann Fade Out auf 0! und CCU Variable AN/AUS auf AUS setzen!
	if apSpeakersSelected contains Raum3 then
		repeat
			if (get sound volume of AirPlay device Raum3) is equal to 0 then
				exit repeat
			end if
			set sound volume of AirPlay device Raum3 to ((sound volume of AirPlay device Raum3) - 2)
			delay 0.1
		end repeat
		set ccuVOL_Raum3 to 0
	end if
end tell
if apSpeakersSelected contains Raum3 then
	set aURL1 to "curl /dev/null 'http://"
	set bURL1 to "/config/xmlapi/statechange.cgi?ise_id="
	set cURL1 to "&new_value=0'"
	set dURL1 to aURL1 & ccu_ip & bURL1 & ise_ID_OnOff_Raum3 & cURL1
	do shell script dURL1
	set aURL2 to "curl /dev/null 'http://"
	set bURL2 to "/config/xmlapi/statechange.cgi?ise_id="
	set cURL2 to "&new_value=0'"
	set dURL2 to aURL2 & ccu_ip & bURL2 & ise_ID_Vol_Raum3 & cURL2
	do shell script dURL2
end if

tell application "iTunes"
	#Raum4 aktiv? Wenn ja dann Fade Out auf 0! und CCU Variable AN/AUS auf AUS setzen!
	if apSpeakersSelected contains Raum4 then
		repeat
			if (get sound volume of AirPlay device Raum4) is equal to 0 then
				exit repeat
			end if
			set sound volume of AirPlay device Raum4 to ((sound volume of AirPlay device Raum4) - 2)
			delay 0.1
		end repeat
		set ccuVOL_Raum4 to 0
	end if
end tell
if apSpeakersSelected contains Raum4 then
	set aURL1 to "curl /dev/null 'http://"
	set bURL1 to "/config/xmlapi/statechange.cgi?ise_id="
	set cURL1 to "&new_value=0'"
	set dURL1 to aURL1 & ccu_ip & bURL1 & ise_ID_OnOff_Raum4 & cURL1
	do shell script dURL1
	set aURL2 to "curl /dev/null 'http://"
	set bURL2 to "/config/xmlapi/statechange.cgi?ise_id="
	set cURL2 to "&new_value=0'"
	set dURL2 to aURL2 & ccu_ip & bURL2 & ise_ID_Vol_Raum4 & cURL2
	do shell script dURL2
end if

tell application "iTunes"
	#Raum5 aktiv? Wenn ja dann Fade Out auf 0! und CCU Variable AN/AUS auf AUS setzen!
	if apSpeakersSelected contains Raum5 then
		repeat
			if (get sound volume of AirPlay device Raum5) is equal to 0 then
				exit repeat
			end if
			set sound volume of AirPlay device Raum5 to ((sound volume of AirPlay device Raum5) - 2)
			delay 0.1
		end repeat
		set ccuVOL_Raum5 to 0
	end if
end tell
if apSpeakersSelected contains Raum5 then
	set aURL1 to "curl /dev/null 'http://"
	set bURL1 to "/config/xmlapi/statechange.cgi?ise_id="
	set cURL1 to "&new_value=0'"
	set dURL1 to aURL1 & ccu_ip & bURL1 & ise_ID_OnOff_Raum5 & cURL1
	do shell script dURL1
	set aURL2 to "curl /dev/null 'http://"
	set bURL2 to "/config/xmlapi/statechange.cgi?ise_id="
	set cURL2 to "&new_value=0'"
	set dURL2 to aURL2 & ccu_ip & bURL2 & ise_ID_Vol_Raum5 & cURL2
	do shell script dURL2
end if

#Airplay Lautsprecher Disconnect
tell application "iTunes"
	set apNEW_Follow to {}
	set speakerComputer to (first AirPlay device whose name = "Computer")
	set end of apNEW_Follow to speakerComputer
	if apSpeakersNewSelected contains Raum1 then
		set speakerRaum1 to (first AirPlay device whose name = Raum1)
		set end of apNEW_Follow to speakerRaum1
	end if
	
	set current AirPlay devices to apNEW_Follow
end tell
Nur weil es nicht geht, muss es nicht kaputt sein ^^

Apple for Work, Linux for Network, iOS for Mobility and still Windows for Solitaire

Bulldog33
Beiträge: 133
Registriert: 25.01.2015, 13:05
Hat sich bedankt: 1 Mal

Re: iTunes Airplay Multiroom Steuerung per CCU

Beitrag von Bulldog33 » 25.09.2015, 20:10

Kann man damit auf Itunes auf dem NAS steuern, oder brauche ich dafür einen MAC?
Raspberrymatic mit neuster Firmware auf CCU3 Charly

Benutzeravatar
eiGelbGeek
Beiträge: 979
Registriert: 24.07.2014, 17:46
Wohnort: Ruhrpottrandgebiet
Hat sich bedankt: 105 Mal
Danksagung erhalten: 19 Mal

Re: iTunes Airplay Multiroom Steuerung per CCU

Beitrag von eiGelbGeek » 26.09.2015, 17:09

Bulldog33 hat geschrieben:Kann man damit auf Itunes auf dem NAS steuern, oder brauche ich dafür einen MAC?
Nein das geht nicht. Da die Steuerung über AppleScript läuft, zumal auf einen NAS kein iTunes läuft.

Das einzige was mit einen NAS geht, wenn es ein hochwertiges ist und Virtualisierung kann, dort ein MAC OS X aufsetzen und dieses dann mit meinen Scripts zu steuern. Anleitung habe ich dafür nicht... denn ich habe kein NAS ... der Mac Mini ist mein "NAS" :!:

POST 4 http://forum.qnap.com/viewtopic.php?t=97252

Alternative natürlich ein Hackingtosh .... aber auch dazu habe ich keine Anleitung ... google hilft da bestimmt .....
Nur weil es nicht geht, muss es nicht kaputt sein ^^

Apple for Work, Linux for Network, iOS for Mobility and still Windows for Solitaire

Benutzeravatar
eiGelbGeek
Beiträge: 979
Registriert: 24.07.2014, 17:46
Wohnort: Ruhrpottrandgebiet
Hat sich bedankt: 105 Mal
Danksagung erhalten: 19 Mal

Re: iTunes Airplay Multiroom Steuerung per CCU

Beitrag von eiGelbGeek » 02.10.2015, 23:46

Update gerade hochgeladen :) Alles was bis dato fertig ist ist in Version 1.0 nun eingearbeitet :)

Tutorial für 1.0 kommt heute Nacht noch nach ... Mit den alten Tutorial bekommt man es aber auch eingerichtet ;)

Update siehe Seite 1 Post 1 :mrgreen:
Nur weil es nicht geht, muss es nicht kaputt sein ^^

Apple for Work, Linux for Network, iOS for Mobility and still Windows for Solitaire

Benutzeravatar
eiGelbGeek
Beiträge: 979
Registriert: 24.07.2014, 17:46
Wohnort: Ruhrpottrandgebiet
Hat sich bedankt: 105 Mal
Danksagung erhalten: 19 Mal

Re: iTunes Airplay Multiroom Steuerung per CCU

Beitrag von eiGelbGeek » 03.10.2015, 05:39

Bin bei den Metadaten weiter gekommen :) Es werden nun sämtliche Daten ausgelesen und Zeilenweise in ein TXT File geschrieben! Das CCU Programm holt sich über SCP die Datei liesst es Zeilenweise (sed -ne '1p' /pfad/zum/textfile/ ) und schreibt die jeweilige Zeile in die passende Systemvariable. Der Trackwechsel wird über die App EventScripts getriggert! Also ohne 3,99 auszugeben gibt es keine Metadaten ;)
Aber bis diese Version veröffentlicht wird dauert es bestimmt noch paar Tage.... muss da noch auf einige viele Eventualitäten eingehen :mrgreen: z.b. im Mp3 / M4a / ... ist kein Album Name hinterlegt, dann setze "--Nix da--" , damit das Script nicht Crash oder evt. nachher Zeilen im Textfile fehlen und das Auslesen durcheinander kommt ;) Es muss sichergestellt sein, das der Album Name immer in Zeile 3 steht.
Ich gehe zwar davon aus das ne Mediathek gut gepflegt wird, aber auch ich kann mich nicht davon frei sprechen, das nicht doch irgendwo in den 40000 Liedern was fehlt ;)

In Screenshot ist nicht das ganze Automator Programm zu sehen, den Webaufruf habe ich zum testen kurzzeitig entfernt ;)
Bildschirmfoto 2015-10-03 um 05.29.16.png

Zur Steuerung habe ich mir auch noch Gedanken gemacht. Ursprünglich wollte ich die 6Fach Taster einsetzen... aber ich bräuchte eig. viel mehr Tasten ;) 19 tasten Fernbedienung sieht scheisse aus und ist teuer ....

Ich denke ich werde einfach für jeden Raum ein Interface mit den neuen Mediola erstellen .... das iPhone ist doch eh immer am Mann ... und das Rudimentäre wie z.b. Play/Pause/Stop/Lautsärke evt. noch über eine Hardware Lösung ... aber die wohl erst später ... andere Hardware ist derzeit wichtiger ;)
Nur weil es nicht geht, muss es nicht kaputt sein ^^

Apple for Work, Linux for Network, iOS for Mobility and still Windows for Solitaire

Benutzeravatar
eiGelbGeek
Beiträge: 979
Registriert: 24.07.2014, 17:46
Wohnort: Ruhrpottrandgebiet
Hat sich bedankt: 105 Mal
Danksagung erhalten: 19 Mal

Re: iTunes Airplay Multiroom Steuerung per CCU

Beitrag von eiGelbGeek » 03.10.2015, 19:32

Ging doch schneller als ich dachte mit den Metadaten. AppleMusic Metadaten kann man leider immer noch nicht auslesen, wenn sie nur als Stream kommen, aber auch damit kommt das Script klar und erzeugt keine Fehler :)

Heute Nacht werde ich wohl noch schnell die CCU Anbindung fertig machen und dann das Tutorial dafür anpassen :magreren:

so sieht es bei einer Lokalen und einer in der iCloud Mediathek importierten Datei aus!
Bildschirmfoto 2015-10-03 um 19.25.35.png
und so es bei einen reinen AppleMusic Stream aus! Wenn auch dort Metadaten übertragen werden sollen, einfach die Datei der iCloud Mediathek hinzufügen :)
Bildschirmfoto 2015-10-03 um 19.26.50.png
Nur weil es nicht geht, muss es nicht kaputt sein ^^

Apple for Work, Linux for Network, iOS for Mobility and still Windows for Solitaire

Benutzeravatar
joni-blue
Beiträge: 1171
Registriert: 04.01.2012, 12:20
System: CCU
Wohnort: Hannover
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: iTunes Airplay Multiroom Steuerung per CCU

Beitrag von joni-blue » 06.10.2015, 13:13

eiGelbGeek hat geschrieben:die App EventScripts getriggert
Hi, kannst du mir mal die zur verfügung stellen. ich würde die gerne für Spotify anpassen
Reboot tut gut ! ! !

Benutzeravatar
eiGelbGeek
Beiträge: 979
Registriert: 24.07.2014, 17:46
Wohnort: Ruhrpottrandgebiet
Hat sich bedankt: 105 Mal
Danksagung erhalten: 19 Mal

Re: iTunes Airplay Multiroom Steuerung per CCU

Beitrag von eiGelbGeek » 09.10.2015, 20:51

joni-blue hat geschrieben:
eiGelbGeek hat geschrieben:die App EventScripts getriggert
Hi, kannst du mir mal die zur verfügung stellen. ich würde die gerne für Spotify anpassen
Ich denke das wird nicht gehen... EventScripts ist ja aus dem MacAppstore und nicht von mir ;) die App lauscht ja auf iTunes Events .... und nicht Spotify ;)
Nur weil es nicht geht, muss es nicht kaputt sein ^^

Apple for Work, Linux for Network, iOS for Mobility and still Windows for Solitaire

Benutzeravatar
eiGelbGeek
Beiträge: 979
Registriert: 24.07.2014, 17:46
Wohnort: Ruhrpottrandgebiet
Hat sich bedankt: 105 Mal
Danksagung erhalten: 19 Mal

Re: iTunes Airplay Multiroom Steuerung per CCU

Beitrag von eiGelbGeek » 11.10.2015, 15:47

Falls sich irgendwer fragt, warum ich die App als "Nur Ausführbar" exportiert habe. Ich will nicht mein Scriptcode schützen, sondern verhindern das das die App kaputt geht, denn eine Zeile ändern und nix mehr funktioniert so wie es soll ;)

PS: Die Zahlen auf dem Bild sind die Anzeige der Codezeilen!
Bildschirmfoto 2015-10-11 um 15.25.06.png
Nur weil es nicht geht, muss es nicht kaputt sein ^^

Apple for Work, Linux for Network, iOS for Mobility and still Windows for Solitaire

Benutzeravatar
eiGelbGeek
Beiträge: 979
Registriert: 24.07.2014, 17:46
Wohnort: Ruhrpottrandgebiet
Hat sich bedankt: 105 Mal
Danksagung erhalten: 19 Mal

Re: iTunes Airplay Multiroom Steuerung per CCU

Beitrag von eiGelbGeek » 12.10.2015, 03:55

Der Ruhezustand macht großen Ärger :( Leider habe ich das jetzt erst festgestellt! Beim Testen war ich immer über die Bildschirmfreigabe am Mac eingeloggt, daher konnte das Problem nie auftauchen!

Das Problem ist, wenn der Mac im Ruhezustand ist, dann wird er von der CCU durch den SSH LogIn zwar geweckt, aber AppleScript kann erst ausgeführt werden, wenn der Monitor einmal an war .... bzw. der Mac pennt nach dem SSH LogIn sofort wieder ein, weil kein GUI LogIn kam und auf der Konsole auch nix mehr passiert ... weckt man die GUI einmal per Bildschirmfreigabe, dann ist alles gut und alles funktioniert, bis er das nächste mal einschläft ...


Ätzendes Verhalten .... ich kann auch nicht sagen ob das nun ein 10.11 El Captain Bug ist oder es schon immer so war ... habe gerade keinen 10.10 Rechner mehr .... ;)

Für mich persönlich wird das kein Problem darstellen, weil der Mac Mini wieder als OS X Server laufen wird ... dann ist er eh 24/7 an .... aber das ja sicherlich keine Lösung für jeden .... und einmal am Mac einloggen um dann das iTunes über CCU steuern zu können, ist auch ziemlich doof .... dann benötigt man ja wieder 2 Apps am iPhone .... ;)


Problem Lokalisiert, aber keine wirkliche Lösung .... Es hängt damit zusammen das der Mac nur in den DarkWake Modus der mit PowerNAP eingeführt wurde versetzt wird nach einen WOL oder SSH Zugriff. Spart natürlich schon Energie, aber verhindert eben das ausführen von AppleScript :twisted:
Zuletzt geändert von eiGelbGeek am 15.10.2015, 14:06, insgesamt 1-mal geändert.
Nur weil es nicht geht, muss es nicht kaputt sein ^^

Apple for Work, Linux for Network, iOS for Mobility and still Windows for Solitaire

Antworten

Zurück zu „Projektvorstellungen“