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

Aus FHEMWiki
(Hinweis auf das iTunes und AppleTV Modul eingefügt.)
Zeile 3: Zeile 3:
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.
 
Eine weitere möglichkeit iTunes und AppleTV Geräte Gen.1 und Gen.2 von FHEM aus zu steuern wird [http://forum.fhem.de/index.php?t=msg&th=11830&goto=69868&rid=430#msg_69868 hier] vorgstellt.
== 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 :)
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 :)

Version vom 18. Juni 2013, 19:24 Uhr

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-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.

Eine weitere möglichkeit iTunes und AppleTV Geräte Gen.1 und Gen.2 von FHEM aus zu steuern wird hier vorgstellt.

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 :)

1. In Systemeinstellungen den Webserver aktiviert (Häkchen setzen :)


2. 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

    3. Schliesslich webserver neu starten, dazu in terminal absetzen: sudo apachectl graceful

    php-Script auf dem Mac anlegen

    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:

    <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:// http://]<mac-ip>:<port>/~<mac-username>/control.php?q=<command>


    also zB

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

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

    Routine in 99_myUtils anlegen

    In die o.g. Datei (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) muss natürlich angepasst werden.


    devices und notifies in fhem.cfg anlegen

    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.

    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 fernsteuern. Auch können Schaltvorgänge in scripts eingebunden werden. In meinem ich-verlasse-die-Wohnung-Script steht zB

    set macmini sleep
    

    Viel Erfolg beim Einrichten!