beebotteの使い方メモ.md
BeebotteはMQTTブローカ+REST API+Web Socketを提供するサービス。 無料アカウントでは50000メッセージ/日まで使える。
開発者向けドキュメントはこちら
MQTTでは、Publish-Subscribe通信モデルが採用されている。 Publish-Subscribe通信モデルとはグループチャットのような通信形式。
具体的には次のような手順でメッセージの送受信を行う。
- (1) メッセージを送受信したいクライアントは、まずブローカに接続する
- (2) クライアントは、ブローカに接続したとき、subscribeするtopicを指定する
- topicはチャットでいうところの、チャンネルみたいな感じ
- (3) クライアントは、メッセージを送信するtopicを指定してpublishする
- (4) ブローカはtopicをsubscribeしているクライアントにメッセージを送信する
Pub-Subを採用している例:MQTT, ROS, ZeroMQ, Apache Kafka, Google Cloud Pub/Sub, ...などなど。
- ユーザ登録する
- チャンネルを作る
- コンソールからメッセージを送受信してみる
- Web APIからメッセージを送信してみる
- MQTTを使ってメッセージを送受信してみる
Beebotteでは、メッセージの送受信を行う際、まずはじめに送受信用の「チャンネル」を作成する必要がある。 次の手順でチャンネルを作成する。
なお、作成していないチャンネルに対してはメッセージを送受信できないので要注意…
- 「チャンネル名/リソース名」 = 「トピック」
- 例の場合、"test_channel_name/test_resource_name"がMQTTのトピック名に対応する
チャンネルトークンとは、外部プログラムからメッセージを送受信する際に必要になる認証情報。 確認方法は次の通り。
現在アカウントに設定されているシークレットキーを確認する。
Subscribeの操作を行った後に、次の手順でメッセージをPublishしてみる。
以下のようにcurlを実行すると、REST APIを使ってメッセージをPublishすることができる。
$ curl -i -H "Content-Type: application/json" -H "X-Auth-Token: チャンネルトークン" -X POST -d '{"data":"データ"}' http://api.beebotte.com/v1/data/publish/チャンネル名/リソース名
※チャンネル名、リソース名、チャンネルトークン、-dで指定するリクエストボディは適切に書き換えること。
curlを実行する際、コンソールでSubscribeしている状態にしていると、Publishされたメッセージを見ることができる。
- トピック名は「チャンネル名/リソース名」を使用すること
- 存在しないチャンネルには送信できない
- 存在しないリソースに送信するのはアリ
- MQTTでワイルドカードを指す「#」をsubscribeすることはできないっぽい
- 「チャンネル名/#」でsubscribeするのはOK
- outboundのメッセージも1にカウントされるので、クライアント数が多いときは要注意
- (無料利用枠は50000通/日なので…)
- Eclipse Mosquitto
- https://mosquitto.org/
Ubuntuなどの場合は、apt install mosquitto-clientでインストール可能。
mosquitto_subはmosquittoに付属しているsubscribe用プログラム。 Beebotteで使う場合は、以下の要領で実行する。
$ mosquitto_sub -v -h mqtt.beebotte.com -p 1883 -u チャンネルトークン -P "" -t "チャンネル名/リソース名"
Subscribe中に別ターミナルから先のcurlを実行し、メッセージを受信できることを確認する。
$ mosquitto_sub -v -h mqtt.beebotte.com -p 1883 -u チャンネルトークン -P "" -t "test_channel_name/test_resource_name"
※mosquitto_subがメッセージを受信すると、以下の内容が表示される
test_channel_name/test_resource_name {"data":"データ","ispublic":true,"ts":1553254109767}
mosquitto_pubはmosquittoに付属しているpublish用プログラム。 Beebotteで使う場合は、以下の要領で実行する。
$ mosquitto_pub -v -h mqtt.beebotte.com -p 1883 -u チャンネルトークン -P "" -t "チャンネル名/リソース名" -m 'メッセージ'
以下は実行例。チャンネル/リソースはあらかじめ作成済みのものを使用すること。
※先に別ターミナルでmosquitto_subを起動しておく
$ mosquitto_sub -v -h mqtt.beebotte.com -p 1883 -u チャンネルトークン -P "" -t "test_channel_name/#"
※
$ mosquitto_pub -h mqtt.beebotte.com -p 1883 -u チャンネルトークン -P "" -t "test_channel_name/test_resource_name" -m '{"data":"データ"}'
※mosquitto_subがメッセージを受信すると、以下の内容が表示される
test_channel_name/test_resource_name {"data":"データ"}