10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

myThingsをはじめよう - Part3: MQTTブローカーを使う

Last updated at Posted at 2015-08-27

Mesubluは複数のトランポートプロトコルに対応しています。HTTP POSTしたメッセージをMQTTでsubscribeして受信することもできます。”Part2: IDCFクラウドに「IDCF」チャンネルをセットアップする”で構築したサーバをブローカーとして、メッセージングとデータ保存のテストをしてみます。

MQTTブローカーを使ったメッセージング

MQTTの基本的なメッセージングをテストします。trigger-1とaction-1のuuidを使います。

  • メッセージ送信: trigger-1
  • メッセージ受信: action-1

スクリーンショット 2015-09-09 14.15.21.png

MQTTをpublish,subscribeするためのclientとして、mosquitto-clientsのインストールされたホストを準備し、MQTTブローカーと通信させます。

MQTTクライアントのインストール

MQTTでのメッセージを送信(publish),受信(subscribe)をするためにクライアントとして、mosquitto-clientsをインストールします。今回は便宜上、送受信のクライアントとブローカーを同じホスト上で構築します。

$ apt-get install mosquitto-clients

action-1でMQTT subscribe

action-1のuuidを使いメッセージを送信します。「IDCF」チャンネルをインストールしたディレクトリに移動して、コマンドラインツールからtokenとuuidを確認します。

$ cd ~/iot_apps/meshblu-compose
$ docker-compose run --rm iotutil show -- -k action-1

> iotutil@0.0.1 start /app
> node app.js "show" "-k" "action-1"

┌──────────┬──────────┬──────────────────────────────────────┐
│ keyword  │ token    │ uuid                                 │
├──────────┼──────────┼──────────────────────────────────────┤
│ action-1 │ 8a83d71f │ b61d3398-ac99-4694-9dc4-dd632faf6f6a │
└──────────┴──────────┴──────────────────────────────────────┘

action-1からMQTTのメッセージをsubscribeします。Meshbluではsubscribeするトピック名は、メッセージを受信するデバイスのuuidになります。この例ではaction-1のuuidになります。またusernameとpasswordも必須項目です。それぞれデバイスのuuidとtokenを指定します。

  • ホスト: 「IDCF」チャンネルのIPアドレス
  • ポート: 1883

トピック: action-1のuuid

  • username: action-1のuuid
  • password: action-1のtoken
$ mosquitto_sub \
    -h 210.140.162.58  \
    -p 1883  \
    -t b61d3398-ac99-4694-9dc4-dd632faf6f6a  \
    -u b61d3398-ac99-4694-9dc4-dd632faf6f6a  \
    -P 8a83d71f \
    -d

出力結果

Received CONNACK
Received SUBACK
Subscribed (mid: 1): 0

上記のとおり出力され、該当のメッセージがpublishされるのを待つ状態になります。
作業を続けるため、新しいシェルを開きます。

trigger-1からMQTT publish message

trigger-1のuuidを使いメッセージを送信します。tokenとuuidを確認します。

$ docker-compose run --rm iotutil show -- -k trigger-1

> iotutil@0.0.1 start /app
> node app.js "show" "-k" "trigger-1"

┌───────────┬──────────┬──────────────────────────────────────┐
│ keyword   │ token    │ uuid                                 │
├───────────┼──────────┼──────────────────────────────────────┤
│ trigger-1 │ d286ba8d │ ffa6934d-f1b3-467f-98b3-766b330d436d │
└───────────┴──────────┴──────────────────────────────────────┘

Meshbluにメッセージを送信する場合は以下の仕様になります。

トピック名: message

  • 送信先uuid: メッセージのdevicesキーの値
  • メッセージ本文: メッセージのpayloadキーの値(JSON、文字列)

mosquitto_pubコマンドを使ってpublishします。

$ mosquitto_pub \
  -h 210.140.162.58  \
  -p 1883 \
  -t message \
  -m '{"devices": ["b61d3398-ac99-4694-9dc4-dd632faf6f6a"], "payload": {"led":"on"}}' \
  -u ffa6934d-f1b3-467f-98b3-766b330d436d \
  -P d286ba8d \
  -d

出力結果

Received CONNACK
Sending PUBLISH (d0, q0, r0, m1, 'message', ... (78 bytes))

mosquitto_subコマンドを実行しているもう一つのシェルにメッセージが届きます。

{"data":{"led":"on"}}

trigger-1からHTTP POST /messages

MQTT subscriberにHTTP POSTからメッセージを送信することもできます。trigger-1のuuidとtokenは認証情報としてHTTPヘッダに記述します。

  • URL: /messages
  • Content-Type: application/json
  • meshblu_auth_uuid: trigger-1のuuid
  • meshblu_auth_token: trigger-1のtoken

先ほどのmosquitto_subコマンドが起動している状態で新しいシェルを開きます。curlでメッセージをPOSTします。

$ curl -X POST \
  http://210.140.162.58/messages \
  -H "Content-Type: application/json" \
  -d '{"devices": "4dbe71d3-ad32-45e5-99fc-88c225bf11b8", "payload": {"led":"off"}}' \
  --header "meshblu_auth_uuid: ffa6934d-f1b3-467f-98b3-766b330d436d"  \
  --header "meshblu_auth_token: d286ba8d"

出力結果

{"devices":"4dbe71d3-ad32-45e5-99fc-88c225bf11b8","payload":{"led":"off"}}

mosquitto_subコマンドを実行しているシェルにメッセージが届きます。

{"data":{"led":"on"}}
10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?