0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

sonosをMQTTで扱えるようにする

sonosとは

なんかめっちゃいいスピーカーである
image.png

複数台置いて部屋の環境に合わせて音量を調整してくれたり、
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

繋がりました!!
スクリーンショット 2019-12-24 23.34.35.png

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)

を追加してみた

とれた!!!
スクリーンショット 2019-12-25 0.40.21.png

まとめ

mqttサーバーを通すとデバイス通すのが楽なのでこの方式をたてました。
ESPでこれらのトピックをサブスクしたりして色々できるぞ〜!

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?