RaspberryPiとGoogle AssistantのIFTTTを使った連携(1/2)
やりたいこと
RaspberryPiとGoogle AssistantをIFTTTを使って連携させる。
「音楽かけて」といったらRaspberryPiから音楽がながれるような感じ。
参考URL
ToDo
以下の順で指示が経由されるようにする。
GoogleAssistant → IFTTT → beebotte → RaspberryPi
今回は
「beebotte → RaspberryPi 」
を構築していく。
前提
・RaspberryPiの「/home/pi」に再生したい音楽を置く(今回はsample.mp3)
・↑を再生するアプリが入っている(今回はmpg321)
1. beebotteのセットアップ
1.1. 新しいChannelの作成
左のメニューバー上部にあるChannelsをクリックし、表示された画面で右上部にある「Create New」をクリックする。
1.2. Channel名、Resource名を登録
ここでは
Channel名:MySmartHome
Resource名:PlayMusic
入力ができたら、「Create Now」をクリックする。
1.3. トークン取得
「Create Now」をした直後にホーム画面でChannel名が表示される。
Channel名「MySmartHome」をクリックする。
アクセストークンが取得することができる。
1.4. beebotteの動作確認
左のメニューバーで「Account Settings」を選択し、表示された画面で「Access Management」タブをクリックする。
Secret keyをコピーする。
左のメニューバーで「Console」を選択し、先ほどコピーしたSecret KeyをこのページのSercret Key入力エリアに入力する。 されに SubscribeのChannelとResourceに、先ほど登録した"MySmartHome"と"PlayMusic"を入力し、Subscribeボタンを押下する。
以下のコマンドをPC上のコンソールで入力する。
curl -i -H "Content-Type: application/json" -X POST -d '{"data":"Hello World"}' http://api.beebotte.com/v1/data/publish/MySmartHome/PlayMusic?token=[Channelのトークン]
Messageエリアに指定したペイロードが表示される。
2 RaspberryPiの準備
2.1. RaspberryPiの受信プログラムの作成
指令を受けると音楽を再生するプログラム(sample.py)は以下の通り。
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import paho.mqtt.client as mqtt import json import subprocess import os _TOKEN = 'Your Token' #IFTTTに設定したものと同じChannel Tokenを設定 HOSTNAME = 'api.beebotte.com' PORT = 1883 #SSLの場合は8883 TOPIC = 'smart_home/music' #トピック名/リソース名 の形で設定 # 接続中の処理を記載→subscribeする def on_connect(client, userdata, flags, respons_code): print('status {0}'.format(respons_code)) client.subscribe(TOPIC) # メッセージ受信時の処理を記載 def on_message(client, userdata, msg): print(msg.topic + ' ' + str(msg.payload)) data = json.loads(msg.payload.decode("utf-8"))["data"][0] # Google Assistantの側でTextFiledの前後に半角スペースが入ることがあるのでstripして削除 #data = {key:value.strip() for key, value in data.items()} if "room" in data.keys(): # 「証明を」と言ってしまった際に「を」が入ってTextFieldに入ってくることがあるので削除 #if data["device"].endswith("を"): #data["device"] = data["device"][:-1] # 日本語の表記ゆれに併せて、IFTTTのTextFieldをlightに修正 if data["device"] != "music": print("unkown device") return subprocess.call(['mpg321', '/home/pi/sample.mp3']) if __name__ == '__main__': client = mqtt.Client() #トークンを使って認証 client.username_pw_set("token:%s"%_TOKEN) client.on_connect = on_connect client.on_message = on_message client.connect(HOSTNAME, port=PORT, keepalive=60) # 待ち受け状態にする client.loop_forever()
2.2. RaspberryPiの動作確認
RaspberryPiで指令がきたら音楽を再生するプログラムを実行する。
python sample.py
次に、以下のコマンドをRaspberryPiのコンソールで実行して、音楽が再生か確認。
curl -i -H "Content-Type: application/json" -X POST -d '{ "data": [{"room":"living","device": "music"}]}' http://api.beebotte.com/v1/data/publish/MySmartHome/PlayMusic?token=[Channelのトークン]
実行し音楽が流れ始めたらOK!