Node-RED x Sonos で MINI LED BADGE に再生している曲名を表示させてみた

## はじめに

Node-RED と Sonos を組み合わせて MINI LED BADGE に再生している曲名を表示させてみました。
<a href="https://youtu.be/X7532tNja40"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/bad8aaa9-d53a-f34a-2cfa-0a59a1ab1d4b.png" width="75%"></a>

通常、Sonos は PC、または、スマホの Sonos S2 アプリから操作しますが、API が公開されていますので、Node-RED などのプログラムからも操作することが可能です。

Sonos と Node-RED を組み合わせた例は他にも記事にしていますので、参考にしてみてください。

<a href="https://qiita.com/kitazaki/items/a22af844ee83e7922352">Raspberry Pi Desktop へ enebular agent をインストールして sonospollytts ノードを使ってみた。</a>
<a href="https://qiita.com/kitazaki/items/928b132a71dc27a405ef">Node-RED と Sonos で学校チャイムシステムを作ってみた。</a>
<a href="https://qiita.com/kitazaki/items/c344d057a34783b869ac">導電布 nüno と ワイヤレススピーカーシステム Sonos をノンコーディングで連携させてみた。</a>
<a href="https://qiita.com/kitazaki/items/28783115a0f5ca2d9277">Node-RED Sonos ノードについて調べてみた。</a>
<a href="https://qiita.com/kitazaki/items/ccde18e10f49fcbb9437">Sonosを操作するツールを調べてみた。</a>

## MINI LED BADGE とは
2020年9月に行われた M5Stack Japan Creativity Contest 2020 に応募した作品で、M5Atom lite、または、M5Atom matrix に装着して使用する LED バッジです。
<a href="https://info.switch-science.com/m5stack-creativity-contest"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/95d381d9-a6d6-1d08-7844-4caffcb5c333.png" width="75%"></a>

PC、スマホ、ラズパイ等から BLE (Bluetooth Low Energy)、または、Wi-Fi 経由で文字データを送って LED マトリクスにスクロール表示することが可能です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/a2bd89fa-3698-d097-5c98-9d865807d0cb.png" width="75%">

技術的な詳細については <a href="https://protopedia.net/prototype/1904">ProtoPedia</a> に記載していますので、参考にしてみてください。
Booth で頒布していますので、もし興味があれば使ってみてください。

<a href="https://norahack-led.booth.pm
"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/328ce7ab-ad16-9eb7-7b22-c0033a4e5aaa.png" width="75%"></a>

## 構成
Sonos で再生している曲名の情報を Node-RED で取得し、MQTT Broker (今回は <a href="https://cloud.shiftr.io/">Shiftr.io cloud</a> のサービスを使用) 経由で MINI LED BADGE へ送信しています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/5189b619-5d70-a20b-d47c-94317658aae1.png">

### Node-RED フロー
<a href="https://qiita.com/pokiiio">ポキオさん</a>が作成した sonos-notify ノードを使用して Sonos で再生している曲名の情報を取得しています。

<a href="https://flows.nodered.org/node/node-red-contrib-sonos-notify">node-red-contrib-sonos-notify</a>

delay ノードを使用している理由は MQTT Send ノードが MQTT Broker へ接続するのに少し時間を要するためです。デプロイ直後の曲名表示に対応しています。
change ノードは sonos-notify ノードが出力した情報の中から曲名の情報を取得します。
MQTT Send ノードは曲名の情報を MQTT Broker へ送信します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/b73f4e94-4ad3-6b96-9e78-121323db51cc.png">


### ノードの追加
sonos-notify ノードの追加方法はメニューを表示して「パレットの管理」→「ノードを追加」→「ノードを追加」→「node-red-contrib-sonos-notifyを入力」→「追加ボタンを押下」で追加することができます。

![スクリーンショット 2020-11-23 9.57.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/fdbf1756-920e-7829-2155-b818cd4fe81b.png)

### MQTT
shiftr.io のサービスを使用しました。今回は新サービスの shiftr.io Cloud (自分専用のドメイン名、インスタンスを持つことができます) を使用してみましたが、旧サービスの shiftr.io でも動作上は問題ありません。 

![スクリーンショット 2020-11-23 10.00.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/0fa1ccf6-0854-8fa2-225d-6a4d34a362fa.png)

## まとめ
フローはシンプルだけどノードを組み合わせて機能をパワフルに実装できるのが Node-RED の良いところだと思います。
次回 (12/9) は Jetson Nano とラズパイの両方で使用可能なハードウェア (Jetson & Pi 電力測定ボード) を制御するノードを作成した話を執筆する予定です。

では、良き Node-RED ライフを！