導電布 nüno と ワイヤレススピーカーシステム Sonos をノンコーディングで連携させてみた。

リビングのソファーに腰掛けると音楽が聴こえてくる体験を試してみます。
ソファーの肘置きに導電布 <a href="https://github.com/tendots/nuno">nüno</a> を仕込んでワイヤレススピーカーシステム <a href="https://www.sonos.com/ja-jp/home">Sonos</a> をノンコーディングで連携させてみました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/031abb3d-b8cf-0980-5402-e762ab548204.jpeg" width=50%">

<A HREF="https://sonos-com.amebaownd.com/">SONOS Japan User Group</A> に他の記事もあるので参考になります。

# 必要なもの

- nüno + M5StickC
- Sonos スピーカー (Sonos アカウント)
- <a href="https://ifttt.com/">IFTTT</a> アカウント
- <a href="https://shiftr.io/">shiftr.io</a> アカウント (MQTTブローカーサービス)
- <a href="https://www.enebular.com/ja/">enebular</a> アカウント (Node-RED) 

# 構成
ソファーの肘置き (nüno) に触れたら M5StickC から MQTT でデータを送信 (Publish) します。
enebular (Node-RED) は MQTT からデータを受信 (Subscribe) したら Sonos で音楽を再生することを IFTTT へ要求します。
M5StickC から直接 IFTTT へ要求することも可能ですが、連携部分をノンコーディングで実装する目的で、間に enebular (Node-RED) を配置しています。
<img width="75%" alt="スクリーンショット 2020-01-10 13.48.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/1cbeee61-ad07-f7a7-2c2f-f7de23b84f35.png">

# 実装
<img width="50%" alt="スクリーンショット 2020-01-10 13.48.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/d00eb838-94ea-80bd-ecff-07a9540471f5.png">

# nüno + M5StickC、shiftr.io 部分
<a href="https://enebular.connpass.com/event/158479/">導電布とM5StickCを繋いで動かしてみるハンズオン</a>のイベント資料の方法で実装します。

# IFTTT 部分
Webhooks と Sonos のサービスを連携させる設定を行います。
最初にExplore から検索してサービスを登録します。
<img width="45%" alt="IFTTT_webhook連携_01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/18b2e77a-3c81-d9ba-b409-bd3c9285feeb.png"> <img width="45%" alt="IFTTT_Sonos連携_01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/609b273b-0127-8cc9-30e5-610622f8ec40.png">
<img width="45%" alt="IFTTT_00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/22058fbf-4818-52d1-53af-408e53dfd845.png">

次にアプレットを作成します。
This に Webhooks を選択し、Event Name (イベント名) を登録します。
<img width="45%" alt="applet.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/53b4b027-0106-57da-751a-a595363ce3a1.png"> <img width="45%" alt="IFTTT_00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/908e674a-f00e-a1e4-357c-55be8ed76a3b.png">

That に Sonos の Play Stream サービスを選択し、Event Name (イベント名) 、Play Stream (再生する音楽 (mp3 ファイルの URL) とルーム名 (Sonos スピーカー)) を登録します。
<img width="45%" alt="IFTTT_02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/a61abf51-cd0d-aa2a-ea10-527ec441153d.png"> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/1a86e4fb-87f4-21da-dab5-e7e15e71fca1.png" width="45%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/a8e7f129-fe03-bd74-f72f-98275e7de83a.png" width="75%">

同様に That に Sonos の Pause サービス (音楽再生を一時停止する) を選択したアプレットを登録します。

最後に My Applets 画面で作成したアプレットがすべて登録されていることを確認します。
<img width="75%" alt="IFTTT_05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/6f0e8f26-b931-d5ad-1f89-7fb6c290e153.png">

# enebular (Node-RED) 部分
enebular (Node-RED) で nüno + M5StickC、shiftr.io と IFTTT を連携させます。
最初に enebular (Node-RED) で パレットの管理から IFTTT ノードを追加します。
<img width="75%" alt="スクリーンショット 2020-01-11 17.01.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/091dff8f-d375-6cd5-561c-609af5afdfc1.png">
<img width="75%" alt="スクリーンショット 2020-01-11 16.58.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/f00403b1-407b-7e0d-3ab6-ca0c87d30604.png">

MQTT in ノードと IFTTT ノードをつなげます。
MQTT in ノードと IFTTT ノードの間に switch ノードを挿入し、例えば nüno に手を触れている間は音楽を再生し、 nüno から手を離したら音楽再生を一時停止するフローです。
<img width="75%" alt="スクリーンショット 2020-01-11 17.35.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/8c03b87e-4b4f-f069-1e3d-f0a61a84e95b.png">

# まとめ
普段の生活の中で普段と変わらない所作に豊かな体験が加わるといいですね。
Listen Better!
みなさまにも良き音を！