ITunes-Fernsteuerung aus FHEM (FHEM auf FritzBox, iTunes auf Mac): Unterschied zwischen den Versionen
(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-…“) |
|||
Zeile 139: | Zeile 139: | ||
<nowiki>set macmini sleep</nowiki> | <nowiki>set macmini sleep</nowiki> | ||
Viel Erfolg beim Einrichten! | Viel Erfolg beim Einrichten! | ||
[[Kategorie:Code Snippets]] |
Version vom 12. Mai 2013, 00:28 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:
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
- 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!