ども、cloudpack の かっぱ(@inokara)です。
はじめに
前回、RabbitMQ に mqtt プラグインをぶっこんでメッセージのやりとりをしつつ Raspberry Pi に繋いだ LED をチカチカさせてみましたが、mqtt のブローカーとして sango というサービスがあるので RabbitMQ with mqtt の部分を sango に置き換えて改めて試してみたいと思います。
what is sango?
概要
時雨堂という IT っぽくないオシャレな名前な会社が提供している MQTT サーバーで無償で利用出来るライトプランと月額 500 円で冗長構成あったりや同時接続数が多めのスタンダードプランがあるようです。
github アカウントですぐに始められるのが個人的には嬉しかったです。
ダッシュボード
github アカウントを使ってログインすると以下のような画面が表示されます。
コネクション数や累計のメッセージ数等のステータスが表示されています。
チカチカさせる
前回で利用したスクリプトをほぼそのまま流用です。
リモコン
リモコンとなるスクリプト配下の通りです。
#!/usr/bin/env ruby require 'mqtt' require 'json' host = 'xxxx.mqtt.xxxxxxx.jp' port = 1883 client = MQTT::Client.connect(:remote_host => host, :remote_port => port, :username => 'xxxxxxxx@github', :password => 'xxxxxxxxxxx') json = {type: "test", value: ARGV[0] }.to_json client.publish("xxxxxxxx@github/test/raspi", json , retain=false)
前回と異なる点としては…
- host は sango のダッシュボードにある接続先を指定
- username はダッシュボードにあるユーザー名を指定
- password はダッシュボードにあるパスワードの鍵マークをクリックして表示されるパスワードを指定
- Topic にはユーザー名に続けて任意のパスを指定
MQTT における Topic についてはこちらやこちらに日本語で簡潔に解りやすく書かれています。こちらを参考にさせて頂いてまとめると…
- メッセージには Topic を保持している
- Subscriber(今回は受信機)では購読する Topic を指定する
- Topic は
/
で区切られた階層構造を持っている - Topic の指定は完全一致ではなくても良い、Wildcard の指定が可能
- 1 バイトの文字コードにて構成出来る(
/
と+
と#
は除く) - 最大で 32767 文字まで利用出来る
指定の方法は以下のようなパターンがあるようです。
Topic パターン例 | 意味 |
---|---|
/test/atama/hage | 完全一致 |
/test/# | /test/ 以下のずべての Topic |
/test/+/hage/pika | /test/ 以下 hage の pika を得る |
参考サイトの受け売りになってしまいますが Topic を利用することでメッセージの送信範囲の指定が柔軟に行えるメリットがあると思います。
受信機
受信機となるスクリプトの前回との差分です。
--- reciever.rb.bk 2014-11-09 03:02:07.064293784 +0900 +++ reciever.rb 2014-11-09 03:02:13.734221357 +0900 @@ -13,7 +13,8 @@ end def mqtt_conn - MQTT::Client.connect(:remote_host => config[:host], :remote_port => config[:port], :username => 'user', :password => 'pass') + MQTT::Client.connect(:remote_host => config[:host], :remote_port => config[:port], :username => 'xxxxx@github', :password => 'xxxxxxxxxxxxxx') end def pin_init @@ -36,7 +37,10 @@ end end -mqtt_conn.get('record') do |topic,message| +mqtt_conn.get("xxxxxx@github/#") do |topic,message| record = JSON.load(message) action = record['value'] pin = pin_init
ホスト名や認証の情報は置いといて Topic には xxxxxx@github/#
とワイルドカードを意味する #
を指定しています。
チカチカさせている図
前回の画像の使い回しで恐縮ですが…
こんな感じでチカチカしたり出来ます。
ということで…
チカチカさせるのは…
とても簡単で sango を利用するまでも無いかもしれませんが、ちょっとしたネタとしては面白いと思います。
Topic を利用することで…
Raspberry Pi(というか MQTT Subsvriber)が複数ある場合には MQTT Subsvriber 毎に購読する Topic を分割することで任意の MQTT Subsvriber だけをコントロールしたりすることが出来るのが非常に面白いなあと思ったり。
Sango は…
お手軽に利用出来る MQTT ブローカーで個人利用であればライトプランで十分に楽しめると思います!
元記事はこちらです。
「MQTT ブローカーの Sango を使って Raspberry Pi に繋いだ LED を ON したり OFF したりする」