[PYTHON] Versuchen Sie, iTunes und Hue of Collection Case mit MQTT zu verknüpfen

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.

Farbton als Sammelkoffer ... aber wie steuern Sie ihn?

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.

image

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.

ITunes und Hue verknüpfen?

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.

ITunes und MQTT verknüpfen?

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.

Schreiben Sie einen Mann, der iTunes und MQTT verbindet

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.

Verknüpfung von iTunes und Hue über MQTT

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.

Recommended Posts

Versuchen Sie, iTunes und Hue of Collection Case mit MQTT zu verknüpfen
Probieren Sie die DB-Operation mit Python aus und visualisieren Sie sie mit d3
Versuchen Sie, den Boden durch Rekursion herauszufordern
Versuchen Sie, ein Unterfenster mit PyQt5 und Python zu öffnen
Versuchen Sie, Google Map und Geography Map mit Python anzuzeigen
[Python] Versuchen Sie, Zeichen aus Bildern mit OpenCV und pyocr zu erkennen
Link, um mit Python zu beginnen
Versuchen Sie, sich mit ONNX Runtime zu profilieren
Versuchen Sie, Audio mit M5 STACK auszugeben
Setzen Sie Cabocha 0.68 in Windows ein und versuchen Sie, die Abhängigkeit mit Python zu analysieren
Versuchen Sie, Breiten- / Längen- und Weltkoordinaten mit Python ineinander umzuwandeln
Versuchen Sie, Foldl und Foldr mit Python: Lambda zu machen. Auch Zeitmessung
Versuchen Sie, den Hintergrund und das sich bewegende Objekt des Videos mit OpenCV zu trennen
Versuchen Sie, Farbfilme mit Python zu reproduzieren
Versuchen Sie, sich mit Python bei qiita anzumelden
Fraktal zum Erstellen und Spielen mit Python
Versuchen wir es mit gRPC mit Go und Docker
Versuchen Sie, Kirschblüten mit xg Boost vorherzusagen
Versuchen Sie, mit Pandas in ordentliche Daten umzuwandeln
Versuchen Sie schnell, Ihren Datensatz mit Pandas zu visualisieren
[AWS] Verknüpfen Sie Lambda und S3 mit boto3
Erster Versuch von YDK mit Cisco IOS-XE
Versuchen Sie, ein Bild mit Entfremdung zu erzeugen
WEB Scraping mit Python und versuchen, aus Bewertungen eine Wortwolke zu machen