0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Alexa + IFTTT + Beebotte で "自分のパソコンで" 音楽を流した

Posted at

目的

Alexaから、"パソコンに入っている音楽"を、"パソコンにつながっているスピーカー"で流したい。

きっかけ

先日、Amazon Prime Dayが開催された。
普段Web会議の時に同僚のAlexaが会議のリマインドを教えてくれているのを聞いて、
密やかに羨ましがっていた私は一も二もなくAmazon echo show5を購入した。

到着するのを心待ちにしつつ、どんな事が実現できるのかをネットサーフィン。
よく聞くのは「音楽を流して」というやつだなぁ、などと思っていたのだが……。

現実

Alexaに「音楽を流して」と言っても、Amazon Musicの"よく知らない人"の、"よく知らない曲"を、
echoのそこまで良いわけでもないスピーカーが流すということしかできない。

それなら自分のパソコンの中に入っている音楽を、パソコンにつながっている高性能なスピーカーから流した方が断然良い。

ただ……まぁ……せっかくecho買ったんだし、なんとかしてみようと思う。

構成

image.png
Alexa -> IFTTT -> Beebotte -> Windows10(音楽ファイルが入っているパソコン)

IFTTT とは

サービスとサービスをつなげるサービス。
〇〇をしたら、□□をする、というように、いずれかのサービスをトリガーに別のサービスを発火
Twitterに投稿したら、同じことをインスタに投稿する、というようなことが実現できる。

Beebotte とは

MQTTブローカ + REST API + Web Socketサービス。
IoT向けのサービスで、メッセージのPub/Subが出来る。

実装

1.Beebotte でチャンネルを作る

(長くなるので、アカウント登録とかは割愛)
image.png
image.png
image.png
image.png

2.beebotteサーバのpemファイルを取得

↓にアクセスするとダウンロードできる。
https://beebotte.com/certs/mqtt.beebotte.com.pem

3.Subクライアントを実装する

言語はなんでも良いので、MQTTライブラリが便利そうなものを選ぶ。
今回はPythonを利用。

ライブラリをインストールする。

pip install paho-mqtt

コードを書く

sub.py
import paho.mqtt.client as mqtt
import subprocess
import json

# MQTT Broker
HOST = "mqtt.beebotte.com"
PORT = 8883
KEEP_ALIVE = 60
TOKEN = "token:token_hogehogefugafuga"
PEM_PATH = "mqtt.beebotte.com.pem"
CHANNEL = "yourChannnel/yourResource"

# winampのpath
WINAMP_PATH = "C:\Program Files (x86)\Winamp\winamp.exe"

# 接続時の処理
def on_connect(client, data, flags, rc):
    client.subscribe(CHANNEL, 1)

# メッセージ受信時の処理
def on_message(client, data, msg):
    # メッセージから、data部分を取得
    data = json.loads(msg.payload.decode("utf-8"))["data"]
    # 値によってコマンド実行
    if data == "play": # 再生する
        subprocess.call(["CMD", "/C", WINAMP_PATH, "/play"])
    elif data == "pause": # 一時停止
        subprocess.call(["CMD", "/C", WINAMP_PATH, "/pause"])
    elif data == "next": # 次の曲
        subprocess.call(["CMD", "/C", WINAMP_PATH, "/next"])

# MQTTクライアント作成
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.tls_set(PEM_PATH)
client.username_pw_set(TOKEN)

# 接続
client.connect(HOST, PORT, KEEP_ALIVE)
client.loop_forever()

このpythonファイルと同ディレクトリに、[2.beebotteサーバのpemファイルを取得](## 2.beebotteサーバのpemファイルを取得) でダウンロードしたpemファイルを配置する。
また、今回はコマンドラインから操作がしたかったため、音楽再生ソフトはwinampを利用。

他ソフトを利用する場合は、お好みにon_messageの中身を変更。
ここをいじくればなんでもできる。

プログラムを実行する

python sub.py

試しに、BeebotteにPubしてみる

↓URLにアクセスしてアクセスキーを取得する
https://beebotte.com/account#credentials
image.png

コンソールに移動し、アクセスキーとチャンネル、リソース、データを指定してリクエストを投げる。
コンソール
https://beebotte.com/dev/console
image.png

[3.Subクライアントを実装する](## 3.Subクライアントを実装する) で実装した通りの結果が得られるはず。

IFTTTでAlexaとBeebotteを繋ぎこむ

(例のごとく長くなるので、アカウント登録とかは割愛)

image.png
右上部「Create」をクリック

image.png
「If This」をクリック

image.png
「Alexa」で検索して、選択
たぶん、Amazonの認証に飛ばされるので、自分のアカウントで認証してください。

image.png
「Say a specific phrase」を選択

image.png
キーワードとなる単語を入力する

image.png
「Then That」をクリックする

image.png
「Webhooks」と検索して、選択

image.png
「Make a web request」を選択

image.png
URL:

https://api.beebotte.com/v1/data/publish/yourChannel/yourResource?token=token_hogehogefugafuga

Method: POST
Content Type: application/json
Body:

{"data":"play"}

image.png
「Continue」をクリック

image.png
「Finish」をクリックして終了!

alexaに再生してもらう

alexaに「alexa、"音楽の再生"をトリガー」と発言すればあなたのパソコンから音楽が再生されるはずである。
××をトリガーって言い方ダサいけど、制約だからしょうがない。Alexaのスキルを開発するしかない。

あとは、同様にIFTTTで"音楽の停止"で"pause"を、"次の曲"で"next"を作成すれば、一通りの操作をAlexaでできる。
(IFTTTの無料枠って3つまでなので、それ以上の事をさせたければ同様の代替サービスを利用するか、月額400円ぐらいを払ってね)

結論

IFTTTって便利だね。
今回はBeebotteを利用したけど、AWSやGCPでAPIをこしらえればAlexaからいろいろ出来そう。

結局Alexaが一番活躍してるのは部屋の電気をつけたり消したりすること

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?