- 追加された行はこの色です。
- 削除された行はこの色です。
[[MQTTめも]]
AWS IoTにてPublish, Subscribeのテストについては[[AWS IoT]]を参照して下さい。
#contents
ここでは実際にデバイスを登録してIoT側にてSubscribeした内容をRepublishするまでを行ってみます。
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へ挿入することになりそうです。