[[MQTTめも]]

#contents

AWS IoTにてPublish, Subscribeするテスト方法については[[AWS IoT]]を参照して下さい。

ここでは実際にデバイスを登録してIoT側にてSubscribeした内容をRepublishするまでを行ってみます。~
MQTTクライアントとなるデバイスにはWindowsソフトの[[MQTT.fx]]を使用します。

最終的にはSubscribeした内容に応じてPublishしたり、その内容をRDBに保存するまでを検討します。

*AWS IoTの設定 [#v3c81ead]
**モノの登録 [#w1d2e33b]

IoT Coreを選択し、管理メニューからモノを選択し、単一のモノを作成します。~
名前にTestDeviceを入力、タイプの名前もTestDeviceを入力し、タイプを作成します。~
推奨されている1-Click 証明書作成にて証明書を作成します。~
次の4種類の証明書をダウンロードし、有効化し、完了します。

-このモノの証明書 *.cert.pem
-パブリックキー *.public.key
-プライベートキー *.private.key
-AWS IoTのルートCA VeriSign-Class*.pem

**ポリシーの作成 [#o1ac9a22]

安全性メニューからポリシーを選択し、ポリシーを作成します。~
名前にTestDeviceを入力、アクションは「iot:*」、リソース ARNは「*」とし、許可にチェックを入れます。

安全性メニューから証明書を選択し、作成した証明書を選択します。~
アクションからポリシーのアタッチを選択。~
作成したTestDeviceポリシーをアタッチします。

**ルールの作成 [#b58c7feb]

ACTメニューからルールを作成します。~
名前はTestDeviceRule、属性は以下、トピックフィルターは test/pub を入力します。~
組み込み関数を使用してClient IDを取得することもできます。

 clientid() AS client_id, timestamp() AS timestamp, *

生成されるルールクエリステートメントは以下になります。

 SELECT clientid() AS client_id, timestamp() AS timestamp, * FROM 'test/pub'

条件は指定せずにアクションを追加します。~
選択できるアクションは以下の通りになります。

#ref(AWS_IoT.png)

「AWS IoT のトピックにメッセージを再パブリッシュする」を選択し、アクションを設定します。~
トピックは test/sub を入力します。~
IAMロール名は IoT_role とし、新しいロールを作成します。

アクションは複数登録が可能です。

**IAMロールへのポリシーのアタッチ [#bfff7666]

AWSのトップからIAM(Identity and Access Management)を選択します。~
ロールから作成したIoT_roleを選択します。~
ポリシーのアタッチからAWSIoTLogging, AWSIoTRuleActionsを選択し、アタッチします。

*MQTT.fxの設定 [#t3eab449]
**接続設定 [#e0cc6f2e]

[[MQTT.fx]]をインストールし、青い歯車をクリックし、接続設定を行います。

Broker Addressにはエンドポイント、Broker Portは8883になります。~
エンドポイントはAWS IoTの設定メニューにて確認できます。

同一画面でSSL/TLSを選択し、証明書の設定を行います。

Enable SSL/TLSにチェック
ProtocolはTLSv1.2を選択
Self signed certificatesをチェック

-CA File : root CAを選択
-Client Certificate File : 拡張子crt
-Client Key File : private.pem.key
-Client Key Password : 未入力
-PEM Formatted : チェック

OKでConnectにて接続します。
Logタブにて接続していることを確認します。

*動作確認 [#o66e5364]

**Subscribe [#z8091efe]
MQTT.fxのSubscribeメニューにてトピックに test/sub を入力し、Subscribeボタンを押下し、待ち受け状態にします。

**Publish [#ef0494eb]
MQTT.fxのPublishメニューにてトピックに test/pub を入力し、メッセージに以下を入力してAWS IoTに向けてPublishします。

 {"temp":25}

Publishで特に画面上では変化は起きませんが、再びSubscribeメニューを開くとclient_idとtimestampが付加され、以下のメッセージがAWS IoTからPublishされていることが確認できます。

 {"client_id":"AWS_IoT","timestamp":1529478275214,"temp":25}

*考察 [#i527405e]

Subscribeした内容に応じてPublishする内容を変えたい場合は、「メッセージデータを渡す Lambda 関数を呼び出す」アクションを追加し、Lambdaにてメッセージを解析してAWS IoTへPublishすることになりそうです。~
Lambdaで使用できる言語はNode.js, Java, C#, Go, Pythonなので、Pythonが選択肢になりそうです。

Subscribeしたメッセージをデータベースへ保存する場合は、KinesisやS3バケットを経由してRDBに保存したり、DynamoDBへ挿入することになりそうです。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS