sonosとは
複数台置いて部屋の環境に合わせて音量を調整してくれたり、
Alexaとかgoogleアシスタントが入っていたりする最高なやつなのである。そして色々APIとかが出ててHackもできちゃう。
IoTしやすくするためにMQTTで扱えるようにしちゃいます。
サーバーを立てる
本来ならばdockerとかAWSとか使うのが正しいのですが、面倒なのでローカルに立ててしまいます。
$brew install mosquitto
でmosquittoというmqttプロトコルを扱うための環境をインストールします
sudo nano ~./bash_profile
でbash_profileを開き、以下の記述を追加してパスを通します
export PATH=$PATH:/usr/local/opt/mosquitto/sbin
bash_profileの再読み込みをし
source ~/.bash_profile
$mosquitto
1577197240: mosquitto version 1.6.4 starting
1577197240: Using default config.
1577197240: Opening ipv6 listen socket on port 1883.
1577197240: Opening ipv4 listen socket on port 1883.
サーバーが立ちました!
sonosとmqttサーバーをつなげる
sonos2mqtt
https://github.com/svrooij/sonos2mqtt
これを使います
インストールしてサーバーを指定して起動するだけです。
$sudo npm install -g sonos2mqtt
$sonos2mqtt --mqtt mqtt:/127.0.0.1:1883
$sonos2mqtt
subscribeしてみる
sonos/status/{部屋の名前}/{購読したいtopic}
をsubscribeしちゃえば色々取得できるみたいです。
/title
/artist
/album
/albumart
/trackUri
/volume
/muted
/volume
/muted
/state
が取得できます
$mosquito_sub -h 127.0.0.1 -t sonos/status/Bedroom/title
{"ts":1577200749792,"name":"Bedroom","val":"雪が降る町 -UC30 若返る勤労 Remastered-"}
{"ts":1577200751754,"name":"Bedroom","val":"星降る夜のクリスマス"}
subscribeできました!!
曲の時刻がほしい・・・・
https://github.com/svrooij/sonos2mqtt/blob/master/src/bridge.js
の中の
function publishCurrentTrack (device, track)
という関数を見てみると、trackのデータ取得してるからとれんじゃねと思い
publishData(`${config.name}/status/${cleanName(device.Name)}/duration`, track.Duration, device.Name)
を追加してみた
まとめ
mqttサーバーを通すとデバイス通すのが楽なのでこの方式をたてました。
ESPでこれらのトピックをサブスクしたりして色々できるぞ〜!