ITunes-Fernsteuerung aus FHEM (FHEM auf FritzBox, iTunes auf Mac): Unterschied zwischen den Versionen

Aus FHEMWiki
(Die Seite wurde neu angelegt: „Hier eine Lösung, um iTunes, das auf einem Mac läuft, aus fhem fernsteuern zu können. Auf dem mac wird dazu der webserver aktiviert und auf diesem ein php-…“)
 
 
(7 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Hier eine Lösung, um iTunes, das auf einem Mac läuft, aus fhem fernsteuern zu können.
{{Randnotiz|RNText=Seit Mitte 2013 gibt es das Modul [[ITunes-Modul - Installation und pairing|33_iTunes.pm]], das anstelle der unten gezeigten Lösung verwendet werden kann und mit dem sich eine iTunes-Steuerung aus fhem heraus realisieren lässt (incl. Cover-Anzeige und Airplay-Speaker-Steuerung). Dabei ist es egal, auf welchem Rechner fhem und auf welchem iTunes läuft. Das Modul erlaubt es iTunes und AppleTV Geräte Gen.1 und Gen.2 von FHEM aus zu steuern.}}
__TOC__
Hier eine Lösung, um iTunes, das auf einem Mac läuft, aus FHEM heraus fernsteuern zu können.<br>
<br>


Auf dem mac wird dazu der webserver aktiviert und auf diesem ein php-script realisiert, das seinerseits applescript-Befehle absetzt. fhem setzt dann php-Befehle an den webserver des mac ab.
Auf dem Mac wird dazu der Webserver aktiviert und auf diesem ein php-script realisiert, das seinerseits applescript-Befehle absetzt. FHEM setzt dann php-Befehle an den webserver des Mac ab.
 
Der Ansatz stammt von dieser Seite: [http://www.whatsmyip.org/lib/itunes-web-remote/ Implementation-Guide] und umfasst Schritte 1 und 2 dieser Anleitung.


Der Ansatz stammt von dieser Seite: [http://www.whatsmyip.org/lib/itunes-web-remote/ Implementation-Guide] und umfasst Schritte 1 und 2 dieser Anleitung:
== Webserver auf dem Mac aktivieren ==
== Webserver auf dem Mac aktivieren ==
Habe ich nach dem o.g. Implementation Guide gemacht. Obwohl ich 'Respekt' vor diesem Schritt hatte, hat alles auf Anhieb funktioniert. In neueren OS X-releases gibt es evtl einige Parameter nicht mehr, dann einfach ifgnorieren. Wenn das nicht klappt: Bitte googeln, welche Schritte zur Einrichtung des Servers erforderlich sind und dieses Wiki aktualisieren&#160;:)
Habe ich nach dem o.g. Implementation Guide gemacht. Obwohl ich 'Respekt' vor diesem Schritt hatte, hat alles auf Anhieb funktioniert. In neueren OS X-releases gibt es evtl einige Parameter nicht mehr, dann einfach ignorieren. Wenn das nicht klappt: bitte googeln, welche Schritte zur Einrichtung des Servers erforderlich sind und dieses Wiki aktualisieren&#160;:)
 
1. In Systemeinstellungen den Webserver aktiviert (Häkchen setzen&#160;:)
 
 
2. Bearbeiten von /etc/apache2/httpd.conf in terminal mit
 
<nowiki>sudo pico /etc/apache2/httpd.conf</nowiki>
* uncommented LoadModule php5_module libexec/apache2/libphp5.so
 
 
 
* changed
** User _www
** Group _www
</li><li> to
* User Uli
* Group staff
</li></ul>
 


* Extended
*In Systemeinstellungen den Webserver aktiviert (Häkchen setzen&#160;:)
  <nowiki>&lt;IfModule dir_module&gt;
*Bearbeiten von /etc/apache2/httpd.conf in terminal mit
  DirectoryIndex index.html
sudo pico /etc/apache2/httpd.conf
&lt;/IfModule&gt;</nowiki>
*uncommented LoadModule php5_module libexec/apache2/libphp5.so
* ** to
*changed
</li></ul>
** User _www
  <nowiki>&lt;IfModule dir_module&gt;
** Group _www
  DirectoryIndex index.html index.php
to
&lt;/IfModule&gt;</nowiki>
User Uli
* Speichern mit Control o
Group staff
* Beenden mit Control X
*Extended
  &lt;IfModule dir_module&gt;DirectoryIndex index.html&lt;/IfModule&gt;
to
  &lt;IfModule dir_module&gt;DirectoryIndex index.html index.php&lt;/IfModule&gt;
*Speichern mit Control o
*Beenden mit Control X


3. Schliesslich webserver neu starten, dazu in terminal absetzen: sudo apachectl graceful
*Schließlich Webserver neu starten mit folgendem Befehl (in einem Terminalfenster):
sudo apachectl graceful


== php-Script auf dem Mac anlegen ==
== php-Script auf dem Mac anlegen ==
Ebenfalls gemäß o.g. Implementation-Guide Datei angelegt: /Users/Uli/Sites/control.php
Ebenfalls gemäß o.g. Implementation-Guide Datei angelegt: /Users/Uli/Sites/control.php


Als Vorlage hat mir das script im o.g. Implementation-Guide gedient. Da ich den Befehl mute nicht benötige, dafür aber shutdown, habe ich das script etwas angepasst. Dadurch fallen auch im o.g. Implementation-Guide die Schritte weg, die sich auf volume.txt beziehen, denn das wird nur für mute benötigt. Hier also die angepasste Version des applescripts:
Als Vorlage dient dazu Script aus dem Implementation-Guide gedient. Da ich den Befehl mute nicht benötige, dafür aber shutdown, habe ich das script etwas angepasst. Dadurch fallen auch die Schritte weg, die sich auf volume.txt beziehen, denn das wird nur für mute benötigt. Hier also die angepasste Version des applescripts:


  <nowiki>&lt;head&gt;
  <nowiki>&lt;head&gt;
&lt;/head&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;body&gt;
&lt;?
&lt;?
$q = $_GET['q'];
$q = $_GET['q'];
switch ($q)
switch ($q)
{
{
case &quot;&quot;:
case &quot;&quot;:
Zeile 99: Zeile 90:
         break;
         break;
}
}
?&gt;
?&gt;
&lt;/body&gt;</nowiki>
&lt;/body&gt;
Zum Testen einfach von irgendeinem Rechner im Heimnetzwerk versuchen, das script zu triggern. Dazu im Browser des Rechners (nicht des Mac) eine URL nach folgendem Schema eingeben:
</nowiki>
 
[http:// http://]&lt;mac-ip&gt;:&lt;port&gt;/~&lt;mac-username&gt;/control.php?q=&lt;command&gt;


 
Zum Testen, einfach von irgendeinem Rechner im Heimnetzwerk versuchen, das Script zu triggern. Dazu im Browser des Rechners (nicht des Mac) eine URL nach folgendem Schema eingeben:
also zB
[http://]&lt;mac-ip&gt;:&lt;port&gt;/~&lt;mac-username&gt;/control.php?q=&lt;command&gt;
also z.B.
  <nowiki>http://192.168.0.20:80/~Uli/control.php?q=playpause</nowiki>
  <nowiki>http://192.168.0.20:80/~Uli/control.php?q=playpause</nowiki>


Wenn das problemlos funktioniert, kann nun das Abesenden dieser URL aus fhem heraus in Angriff genommen werden.
Wenn das problemlos funktioniert, kann nun das Absenden dieser URL aus FHEM heraus in Angriff genommen werden.


== Routine in 99_myUtils anlegen ==
== Routine in 99_myUtils anlegen ==
In die o.g. Datei (angelegt nach Wiki [http://fhemwiki.de/wiki/99_myUtils_anlegen 99_myUtils anlegen]) habe ich folgende Routine eingefügt:
In die Datei 99_myUtils (angelegt nach Wiki [http://fhemwiki.de/wiki/99_myUtils_anlegen 99_myUtils anlegen]) habe ich folgende Routine eingefügt:


  <nowiki>######## doiTunes ###############
  <nowiki>######## doiTunes ###############
sub
sub
doiTunes($) {
doiTunes($) {
my $dev = shift;
my $dev = shift;
my $cmd = Value(&quot;$dev&quot;);
my $cmd = Value(&quot;$dev&quot;);
my $xml = GetHttpFile(&quot;macmini.fritz.box:80&quot;, &quot;/~Uli/control.php?q=&quot; . $cmd);
my $xml = GetHttpFile(&quot;macmini.fritz.box:80&quot;, &quot;/~Uli/control.php?q=&quot; . $cmd);
fhem &quot;setstate $dev &gt;&quot;;
fhem &quot;setstate $dev &gt;&quot;;
}</nowiki>
}
Adresse und Pfad (username) muss natürlich angepasst werden.
</nowiki>


Adresse und Pfad (username) müssen natürlich angepasst werden.


== Device(s) und Notify(s) in fhem.cfg anlegen ==
Das o.g. Script bietet 8 Befehle. Damit das auf dem fhem-screen später nicht allzu wild aussieht, habe ich die Befehle auf zwei virtuelle Geräte namens iTunes bzw. macmini mit jeweils vier Befehlen verteilt.


== devices und notifies in fhem.cfg anlegen ==
<nowiki>define iTunes dummy
Das o.g. Script bietet 8 Befehle. Damit das auf dem fhem-screen später nicht allzu wild aussieht, hab ich die Befehle auf zwei virtuelle Geräte namens iTunes bzw. macmini mit jeweils vier Befehlen verteilt.
attr iTunes webCmd play:pause:next:prev
define n_iTunes notify iTunes {doiTunes(&quot;@&quot;);;}
define macmini dummy
attr macmini webCmd louder:quieter:sleep:shutdown
define n_macmini notify macmini {doiTunes(&quot;@&quot;);;}</nowiki>


<nowiki>define iTunes dummy
Damit lassen sich iTunes und der Mac aus FHEM heraus fernsteuern. Es können auch Schaltvorgänge in Scripts eingebunden werden. In meinem '''ich-verlasse-die-Wohnung-Script'' steht z.B.
attr iTunes webCmd play:pause:next:prev
 
define n_iTunes notify iTunes {doiTunes(&quot;@&quot;);;}
set macmini sleep
define macmini dummy
attr macmini webCmd louder:quieter:sleep:shutdown
define n_macmini notify macmini {doiTunes(&quot;@&quot;);;}</nowiki>
Damit lassen sich iTunes und der Mac aus fhem fernsteuern. Auch können Schaltvorgänge in scripts eingebunden werden. In meinem ich-verlasse-die-Wohnung-Script steht zB


<nowiki>set macmini sleep</nowiki>
Viel Erfolg beim Einrichten!
Viel Erfolg beim Einrichten!
[[Kategorie:Code Snippets]]
[[Kategorie:Unterhaltungselektronik]]

Aktuelle Version vom 20. Januar 2017, 12:17 Uhr

Info green.pngSeit Mitte 2013 gibt es das Modul 33_iTunes.pm, das anstelle der unten gezeigten Lösung verwendet werden kann und mit dem sich eine iTunes-Steuerung aus fhem heraus realisieren lässt (incl. Cover-Anzeige und Airplay-Speaker-Steuerung). Dabei ist es egal, auf welchem Rechner fhem und auf welchem iTunes läuft. Das Modul erlaubt es iTunes und AppleTV Geräte Gen.1 und Gen.2 von FHEM aus zu steuern.

Hier eine Lösung, um iTunes, das auf einem Mac läuft, aus FHEM heraus fernsteuern zu können.

Auf dem Mac wird dazu der Webserver aktiviert und auf diesem ein php-script realisiert, das seinerseits applescript-Befehle absetzt. FHEM setzt dann php-Befehle an den webserver des Mac ab.

Der Ansatz stammt von dieser Seite: Implementation-Guide und umfasst Schritte 1 und 2 dieser Anleitung.

Webserver auf dem Mac aktivieren

Habe ich nach dem o.g. Implementation Guide gemacht. Obwohl ich 'Respekt' vor diesem Schritt hatte, hat alles auf Anhieb funktioniert. In neueren OS X-releases gibt es evtl einige Parameter nicht mehr, dann einfach ignorieren. Wenn das nicht klappt: bitte googeln, welche Schritte zur Einrichtung des Servers erforderlich sind und dieses Wiki aktualisieren :)

  • In Systemeinstellungen den Webserver aktiviert (Häkchen setzen :)
  • Bearbeiten von /etc/apache2/httpd.conf in terminal mit
sudo pico /etc/apache2/httpd.conf
  • uncommented LoadModule php5_module libexec/apache2/libphp5.so
  • changed
** User _www
** Group _www

to

User Uli
Group staff
  • Extended
<IfModule dir_module>DirectoryIndex index.html</IfModule>

to

<IfModule dir_module>DirectoryIndex index.html index.php</IfModule>
  • Speichern mit Control o
  • Beenden mit Control X
  • Schließlich Webserver neu starten mit folgendem Befehl (in einem Terminalfenster):
sudo apachectl graceful

php-Script auf dem Mac anlegen

Ebenfalls gemäß o.g. Implementation-Guide Datei angelegt: /Users/Uli/Sites/control.php

Als Vorlage dient dazu Script aus dem Implementation-Guide gedient. Da ich den Befehl mute nicht benötige, dafür aber shutdown, habe ich das script etwas angepasst. Dadurch fallen auch die Schritte weg, die sich auf volume.txt beziehen, denn das wird nur für mute benötigt. Hier also die angepasste Version des applescripts:

<head>
 </head>
 <body>
 <?
 $q = $_GET['q'];
 switch ($q)
	{
	case "":
		echo "You need to send me a command, then I shall execute it";
		break;
	
	case "play":
		exec("osascript -e 'tell app \"iTunes\" to play'");
		echo "Playing";
		break;
	
	case "pause":
		exec("osascript -e 'tell app \"iTunes\" to pause'");
		echo "Pausing";
		break;
	
	case "playpause":
		exec("osascript -e 'tell app \"iTunes\" to playpause'");
		echo "Toggling Play";
		break;
	
	case "next":
		exec("osascript -e 'tell app \"iTunes\" to next track'");
		echo "Next Track";
		break;
	
	case "prev":
		exec("osascript -e 'tell app \"iTunes\" to previous track'");
		echo "Previous Track";
		break;
	
	case "louder":
		exec("osascript -e 'tell app \"iTunes\" to set sound volume to sound volume + 5'");
		echo "Turning Up the Volume";
		break;
	
	case "quieter":
		exec("osascript -e 'tell app \"iTunes\" to set sound volume to sound volume - 5'");
		echo "Turning Down the Volume";
		break;
    case "shutdown":
        exec("osascript -e 'tell app \"System Events\"' -e 'shut down' -e 'end tell'");
        echo "Shutting down...";
        break;
    case "sleep":
        exec("osascript -e 'tell app \"System Events\"' -e 'sleep' -e 'end tell'");              
        echo "Sending to sleep...";
        break;
	}
 ?>
 </body>

Zum Testen, einfach von irgendeinem Rechner im Heimnetzwerk versuchen, das Script zu triggern. Dazu im Browser des Rechners (nicht des Mac) eine URL nach folgendem Schema eingeben:

[http://]<mac-ip>:<port>/~<mac-username>/control.php?q=<command>

also z.B.

http://192.168.0.20:80/~Uli/control.php?q=playpause

Wenn das problemlos funktioniert, kann nun das Absenden dieser URL aus FHEM heraus in Angriff genommen werden.

Routine in 99_myUtils anlegen

In die Datei 99_myUtils (angelegt nach Wiki 99_myUtils anlegen) habe ich folgende Routine eingefügt:

######## doiTunes ###############
 sub
 doiTunes($) {
	my $dev = shift;
	my $cmd = Value("$dev");
	my $xml = GetHttpFile("macmini.fritz.box:80", "/~Uli/control.php?q=" . $cmd);
	fhem "setstate $dev >";
 }
 

Adresse und Pfad (username) müssen natürlich angepasst werden.

Device(s) und Notify(s) in fhem.cfg anlegen

Das o.g. Script bietet 8 Befehle. Damit das auf dem fhem-screen später nicht allzu wild aussieht, habe ich die Befehle auf zwei virtuelle Geräte namens iTunes bzw. macmini mit jeweils vier Befehlen verteilt.

define iTunes dummy
 attr iTunes webCmd play:pause:next:prev
 define n_iTunes notify iTunes {doiTunes("@");;}
 define macmini dummy
 attr macmini webCmd louder:quieter:sleep:shutdown
 define n_macmini notify macmini {doiTunes("@");;}

Damit lassen sich iTunes und der Mac aus FHEM heraus fernsteuern. Es können auch Schaltvorgänge in Scripts eingebunden werden. In meinem 'ich-verlasse-die-Wohnung-Script steht z.B.

set macmini sleep

Viel Erfolg beim Einrichten!