Dieser Artikel ist der 16. Tagesartikel von Home Hack Adventskalender 2015.
Ich habe viele Dinge angesammelt und war etwas spät dran für den Adventskalender ... Es ist also der 16. Tag. Es gibt dieses Jahr nicht viele Tage ... Rückblickend gab es dieses Jahr verschiedene Veränderungen, und ich zog in einen größeren Raum, und es war ein Jahr, in dem ich verschiedene Dinge spielte und sagte: "Die Umgebung für meinen Haushack ist bereit!"
Bisher können Sie Geräte wie IRKit und Hue manuell steuern, indem Sie das Gefühl haben, die Statusbestätigung und den Betrieb von IRKit und Philips Hue mit MQTT zu aggregieren. Ich spielte herum, aber als ich es manuell machen konnte, wollte ich als nächstes Menschen.
Aus diesem Grund spiele ich mit Dingen wie dem Synchronisieren des Geräts mit Anwendungen herum, insbesondere mit dem Verhalten von iTunes. Notieren Sie sich dies.
Ich nutzte den Umzug, kaufte einen Sammelkoffer und kaufte Super Alloy Soul Hero King Gaogaigar, um ihn zu dekorieren. Ich wollte den sehr großen und gut gemachten Spielzeugen etwas hinzufügen und sie nicht nur dekorieren.
Obwohl es einfach ist, habe ich versucht, den überschüssigen Farbton entsprechend anzubringen.
Wenn Sie nur mit den Farben und der Helligkeit der Hue-App herumspielen, ändert sich die Atmosphäre und die Spannung. Wenn dieses Licht jedoch durch eine Änderung in Ihrem Haus automatisch aktiviert wird, steigt die Spannung noch weiter an.
Auf der anderen Seite ist unser Heim-Audio mit iTunes vereinheitlicht und so konfiguriert, dass es mit einem Lautsprecher genossen werden kann, der über AirPlay von Mac an Apple TV angeschlossen ist.
Natürlich mag ich auch heiße Songs wie "Die Geburt des Heldenkönigs!" In dieser Umgebung, aber ** Steigt nicht die Spannung, wenn sich die Beleuchtung des Sammlungsgehäuses synchron mit iTunes ändert? **ist geworden.
Ich habe es bereits im vorherigen Artikel möglich gemacht, Hue über MQTT zu überwachen und zu steuern. ** Die in iTunes abgespielten Songinformationen werden an MQTT übertragen, und die an MQTT gesendete Nachricht bewirkt, dass der Song in iTunes abgespielt wird * Ich dachte, dass die Form von * gut sein würde, also begann ich darüber nachzudenken.
Als ich darüber nachdachte, iTunes mit anderen Apps zu verknüpfen, kam mir sofort die Idee, DAAP zur Fernüberwachung und -steuerung des Wiedergabestatus von iTunes zu verwenden. Früher hatte ich das Gefühl, dass die streunende DAAP-Bibliothek auch mit iTunes verbunden war, aber nach einer kleinen Testversion stieß ich auf einen Fall, in dem sie in den letzten Versionen nicht funktionierte und aufgab.
So habe ich nach Apple Script gesucht und bin zu ihm gekommen. Unter dem Leuchtturm ist es dunkel. Mit AppleScript können Sie ganz einfach ein Skript schreiben, das mit anderen Mac-Anwendungen funktioniert ...
Ich wollte mit Python mit MQTT kommunizieren, aber da es py-apple script für die Zusammenarbeit mit Python gibt, installieren Sie dieses In diesem Fall können Sie Apple Script auch über Python ausführen. Es sieht wie folgt aus.
import applescript
...
script = applescript.AppleScript('''
on current_state()
tell application "iTunes"
try
set c to container of current track
on error
return {}
end try
set cinfo to {playlist_name:name of c}
set tinfo to {track_name:name of current track, track_artist:artist of current track, track_album:album of current track}
return cinfo & tinfo
end tell
end current_state
''')
...
state = script.call('current_state')
Jetzt können Sie die Informationen zum aktuellen Titel von iTunes von Python abrufen. Nett.
Das habe ich geschrieben.
Wenn Sie dies installieren, wird der Befehl ** mqtt-itunes ** installiert. Wenn dieser Befehl ausgeführt wird, können Sie Informationen zu dem in iTunes abgespielten Titel abrufen, indem Sie das Thema mit dem Namen "angegeben in der auf dem MQTT-Server angegebenen Option / iTunes Distinguished Name / Current" abonnieren. Ich kann es schaffen
Die Daten zu diesem Thema sehen so aus.
{"state": "playing", "track_name": "Geburt des Heldenkönigs!", "playlist_name": "Musik",
"track_album": "Brave King Gaogaigar-Original Soundtrack 1",
"track_artist": "Masaaki Endo"}
Umgekehrt können Sie durch Veröffentlichen eines JSON im gleichen Format für dieses Thema den Song auch abspielen, anhalten und stoppen.
Zusätzlich zur bestehenden Hue-MQTT-Integration ist jetzt auch die iTunes-MQTT-Integration möglich. Jetzt müssen Sie nur noch Code mit den folgenden Funktionen schreiben und ausführen:
Das ist der Code.
GGG.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import paho.mqtt.client as mqtt
import json
TOPIC_BASE = 'xxxx'
MQTT_HOST = 'xxxx'
MQTT_PORT = xxxx
MQTT_USERNAME = 'xxxx'
MQTT_PASSWORD = 'xxxx'
HUE_BRIDGE_ID = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
HUE_LIGHT_ID = x
def on_connect(client, userdata, flags, rc):
client.subscribe('{}/itunes/+/current'.format(TOPIC_BASE))
def on_message(client, userdata, msg):
song = json.loads(msg.payload)
print('Changed(iTunes): {}'.format(msg.payload.decode('unicode_escape').encode('utf8')))
color = get_hue_color_for_itunes(song)
print('Change(Hue): {}'.format(color))
client.publish('{base}/hue/{bridge}/light/{light}/status'.format(base=TOPIC_BASE, bridge=HUE_BRIDGE_ID, light=HUE_LIGHT_ID), payload=json.dumps(color))
def get_hue_color_for_itunes(song):
if song['state'] == 'playing':
if 'track_album' in song and u'Heldenkönig' in song['track_album']:
return {"on": True, "saturation": 253, "brightness": 218, "hue": 47125}
if 'track_name' in song and u'Heldenkönig' in song['track_name']:
return {"on": True, "saturation": 253, "brightness": 218, "hue": 47125}
if 'track_artist' in song and u'Endo' in song['track_artist'] and u'Masaaki' in song['track_artist']:
return {"on": True, "saturation": 253, "brightness": 218, "hue": 47125}
return {"on": False, "saturation": 253, "brightness": 95, "hue": 47125}
mqtt_client = mqtt.Client()
mqtt_client.on_connect = on_connect
mqtt_client.on_message = on_message
mqtt_client.username_pw_set(MQTT_USERNAME, MQTT_PASSWORD)
mqtt_client.connect(MQTT_HOST, MQTT_PORT)
mqtt_client.loop_forever()
Wenn das Lied abgespielt wird und der Album- oder Titelname "Brave King" oder der Künstlername "Endo" und "Masaaki" enthält, leuchtet Hue. Davon abgesehen ist es aus.
Ein Ausgabebeispiel, wenn dies verschoben wird.
Changed(iTunes): {"state": "playing", "track_name": "Geburt des Heldenkönigs!", "playlist_name": "Musik", "track_album": "Brave King Gaogaigar-Original Soundtrack 1", "track_artist": "Masaaki Endo"}
Change(Hue): {'on': True, 'saturation': 253, 'hue': 47125, 'brightness': 218}
Changed(iTunes): {"state": "playing", "track_name": "Kakushin-artig ☆ Metamarufo ~!", "playlist_name": "Musik", "track_album": "Kakushin-artig ☆ Metamarufo ~! - EP", "track_artist": "Umaru Doma(CV:Aimi Tanaka)"}
Change(Hue): {'on': False, 'saturation': 253, 'hue': 47125, 'brightness': 95}
Der Heldenkönig ist geboren! Der Farbton wird nur aktiviert, wenn mit dem Spielen begonnen wird. Aus, wenn die Wiedergabe von einer anderen Person als dem Hero King gestartet wird oder wenn die Wiedergabe selbst gestoppt wird.
Mit dieser Art von Gefühl ** habe ich das Gefühl, dass das Gerät automatisch gesteuert wird, indem MQTT-Nachrichten abonniert und Nachrichten ausgegeben werden **, ohne sich um die Details der einzelnen Protokolle zu kümmern. Ich versuche es zu entwickeln. Das war's.