Node-RED Sonos ノードについて調べてみた。


はじめに

こんにちは。野良ハックチーム ざっきー と申します。
この記事は 2019 年 11 月 29 日に開催された「Node-RED UG 勉強会 2019 年末 LT パーティ」で LT 登壇した Node-RED Sonos ノードに関する詳細メモです。

※ LT 登壇資料はこちら

Sonos とは?

米国サンタバーバラ生まれのワイヤレスホームサウンドシステムです。
https://www.sonos.com/ja-jp/home

Wi-Fi (有線接続も可) でネットワークに接続され、自由な組み合わせが可能なスピーカーシステムです。

UPnP 対応で API が公開されていますので、ハックすることが可能です。
Sonos Labs

Sonos ノードの追加

※ 画面は enebular editor を使用して操作方法の説明をしますが、Node-RED での操作も同様です。

Node-RED の「メニュー」から「パレットの管理」を選択すると「ユーザ設定」画面が表示される。

「ノードを追加」タブを選択し、検索フォームで「Sonos」と入力して検索するといくつかリストアップされます。

node-red-contrib-sonos

リストアップされた中から「ノードを追加」を選択するとパレットに新しいノードが追加されます。



ホームページにサンプルフローが掲載されていますので、ホームページからフローをコピーして Node-RED の「メニュー」→「読み込み」→「クリップボード」に貼り付けてフローを追加します。






次に Control Sonos ノードの設定を行います。Control Sonos ノードをダブルクリックして「Control ノードを編集」メニューを表示します。


「SONOS Play Node」の編集ボタンを押して Sonos システムの設定を追加します。

「sonos-config ノードを編集」メニューでネットワークに接続された Sonos システムの IP アドレスを入力して更新ボタンを押します。

inject ノードの左側のボタンを押して Sonos を操作します。

node-red-contrib-sonos-http-api

まず、node-sonos-http-api を導入する必要があります。コマンドラインで行います。

$ git clone https://github.com/jishi/node-sonos-http-api
$ cd node-sonos-http-api
$ npm install --production
$ npm start

ブラウザから http://localhost:5005 へアクセスして下記の画面が表示されれば正常です。

次に Node-RED の「メニュー」から「パレットの管理」→「ノードを追加」タブ→検索フォームで「Sonos」と入力して検索します。リストアップされた中から「ノードを追加」を選択するとパレットに新しいノードが追加されます。


ホームページからサンプルフローをコピーして Node-RED の「メニュー」→「読み込み」→「クリップボード」に貼り付けてフローを追加します。

Control Sonos ノードの設定を行います。Control Sonos ノードをダブルクリックして「Control ノードを編集」メニューを表示します。「Sonos Config Node」の編集ボタンを押して Sonos システムの設定を変更します。


「sonos-http-api-config ノードを編集」メニューで「「IP Address / hostname of SONOS HTTP Api」項目に http://localhost:5005 を入力して更新ボタンを押します。

「Player」項目に「ルーム名」を入力して完了ボタンを押します。
「ルーム名」は node-sonos-http-api のブラウザ表示画面から確認することができます。
「Info」欄の「GET /zones」項目をクリックして「roomName」項目の値を確認します。



inject ノードの左側のボタンを押して Sonos を操作します。

まとめ

Sonos One 1 台でも Node-RED Sonos ノードを試すことができますが、2 台を組み合わせてステレオペアとして設定すると高音質な音楽スピーカーに変身します。
音質は然ることながら、拡張性 (1 台〜複数台 )、柔軟性 (組み合わせ自由) に優れ、オープン (UPnP 対応)、ハッカブル (API 公開) な Sonos を是非試してみてください。
Listen Better!
みなさまにも良き音を!