S・S・D・P!
Sonosのスピーカーを見つけるよー
ひょんなことから我が家にやってきたSonosのスピーカー「One」。
この前のポキオ・カープールでもお伝えしましたが、
こんな感じの、エンジニアリングし甲斐がありそうなガジェットでもあるわけです。今回はNode.jsのSSDPライブラリを使って、まずはSonosのスピーカーを見つけてみようと思います。
いざコーディング
今回は、node-ssdp
というライブラリを使ってみました。
まずは、愚直にプロジェクトを作って、モジュールをインストールしていきます。
$ mkdir ssdp-test $ cd ssdp-test/ $ npm init -y $ npm install node-ssdp
おもむろに、index.js
と名付けた本体のスクリプトをこんな感じで作っていきます。
var ssdp = require('node-ssdp').Client var client = new ssdp({}) client.on('response', function inResponse(headers, code, rinfo) { console.log('%d\n%s\n%s', code, JSON.stringify(headers, null, ' '), JSON.stringify(rinfo, null, ' ')) }) setInterval(function () { client.search('upnp:rootdevice') }, 5000)
5秒おきにSSDPの機器探索のコマンドを投げていますが、対象はupnp:rootdevice
として、ルートデバイスのみを探索します。
実行!
実行してみますー。
$ node index.js
すると・・・
200 { "CACHE-CONTROL": "max-age = 1800", "EXT": "", "LOCATION": "http://xx.xx.xx.xx:1400/xml/device_description.xml", "SERVER": "Linux UPnP/1.0 Sonos/54.2-72031 (ZPS13)", "ST": "upnp:rootdevice", "USN": "uuid:RINCON_xxxxx::upnp:rootdevice", "X-RINCON-HOUSEHOLD": "Sonos_xxxxx", "X-RINCON-BOOTSEQ": "2", "X-RINCON-WIFIMODE": "1", "X-RINCON-VARIANT": "2", "HOUSEHOLD.SMARTSPEAKER.AUDIO": "Sonos_xxxxxx" } { "address": "xx.xx.xx.xx", "family": "IPv4", "port": xxxxx, "size": 445 }
おー!Sonosっぽいのが見つかりましたー。
ちゃんとSSDPできてるっぽいですねー。