はじめに
以前、Node-REDのモバイル版(iOS版はNode-PAD、Android版はRedMobile)を使用して車のIoTデータを地図上に表示することを試してみました。
今回は持ち運び可能なSonos Roamを車の中に持ち込んで、ドライブ中の曲(音楽データ)を取得して地図上に表示することを試してみます。
Sonosって何?!という方はこちらを参照してください。
Node-REDフロー
最初にNode-REDフローの全体像を示します。(今回はiOS版Node-PADを例に説明します)
必要なモジュール
メニュー → パレットの管理から以下のモジュールを追加します。
- node-red-contrib-better-sonos ‥Sonos Roamから再生している音楽情報を取得
- node-red-contrib-web-worldmap ‥地図データを表示しピンを立てる
locationノード
毎秒に緯度・軽度の情報を出力します。
delayノード
locationノードの出力頻度が多いため、10秒に1回へ削減します。
changeノード (1つ目)
緯度・軽度の情報をmsg.payloadから取得し、msg.latとmsg.lonへ設定します。
後続のSonos Statusノードでmsg.payloadの内容が曲(音楽データ)に上書きされてしまうためです。
Sonos Statusノード
Sonos RoamのSerial Number (Macアドレス)を検索(虫眼鏡のマークを押す)、または、IPアドレスを入力します。
changeノード (2つ目)
緯度・軽度、曲(音楽データ)を取得し、JSONata形式でmsg.payloadに設定します。
曲名はnameキーに設定します。
worldmapノード
スタート地点(Start項目)の緯度(Latitude)・軽度(Longitude)、地図の縮尺(Zoom)を指定します。
サンプルのフロー
[{"id":"b017b8c4.bbce28","type":"tab","label":"フロー 1","disabled":false,"info":""},{"id":"ba301ca9.d8d5b8","type":"debug","z":"b017b8c4.bbce28","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":670,"y":60,"wires":[]},{"id":"daaa5a65.a21ac8","type":"worldmap","z":"b017b8c4.bbce28","name":"","lat":"35.62245","lon":"139.474715","zoom":"14","layer":"","cluster":"","maxage":"","usermenu":"show","layers":"show","panit":"false","panlock":"false","zoomlock":"false","hiderightclick":"false","coords":"none","showgrid":"false","allowFileDrop":"false","path":"/worldmap","overlist":"DR,CO,RA,DN,HM","maplist":"OSMC,EsriC,EsriS,EsriT,EsriDG,UKOS,SW","mapname":"","mapurl":"","mapopt":"","mapwms":false,"x":680,"y":140,"wires":[]},{"id":"8768cdbd.20d918","type":"better-sonos-status","z":"b017b8c4.bbce28","confignode":"aab5929f.1e2fe","name":"","x":300,"y":140,"wires":[["84ab4e7d.45fa58","e469c7b0.e4b798"]]},{"id":"7bcc1549.adebec","type":"location","z":"b017b8c4.bbce28","name":"","x":90,"y":60,"wires":[["e407f8fe.285de"]]},{"id":"e407f8fe.285de","type":"delay","z":"b017b8c4.bbce28","name":"","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"10","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":260,"y":60,"wires":[["3286777e.291538"]]},{"id":"3286777e.291538","type":"change","z":"b017b8c4.bbce28","name":"","rules":[{"t":"set","p":"lat","pt":"msg","to":"payload.location.latitude","tot":"msg"},{"t":"set","p":"lon","pt":"msg","to":"payload.location.longitude","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":460,"y":60,"wires":[["ba301ca9.d8d5b8","8768cdbd.20d918"]]},{"id":"84ab4e7d.45fa58","type":"change","z":"b017b8c4.bbce28","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\t \"lat\": msg.lat,\t \"lon\": msg.lon,\t \"name\": \"Now Playing.. \" & msg.payload\t}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":140,"wires":[["daaa5a65.a21ac8","3b40e9e.b398596"]]},{"id":"3b40e9e.b398596","type":"debug","z":"b017b8c4.bbce28","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":670,"y":200,"wires":[]},{"id":"e469c7b0.e4b798","type":"debug","z":"b017b8c4.bbce28","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":450,"y":200,"wires":[]},{"id":"aab5929f.1e2fe","type":"better-sonos-config","z":"","name":"Sonos Roam","serialnum":"54-2A-1B-49-8B-9C:4","ipaddress":"192.168.3.5"}]
GitHubにもフローを公開しています。
地図上に表示する
さいごに
車の中でもSonosで最高の音楽を聴きたいですね!
Listen Better in Car!
良き車IoTライフを!
参考
Sonosがカーオーディオに標準実装された事例
(引用元 2021.5.7 SonosがAudiのサウンドパートナーに)