MQTTめも

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

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

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

AWS IoTの設定

モノの登録

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

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

ポリシーの作成

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

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

ルールの作成

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

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

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

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

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

AWS_IoT.png

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

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

IAMロールへのポリシーのアタッチ

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

MQTT.fxの設定

接続設定

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タブにて接続していることを確認します。

動作確認

Subscribe

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

Publish

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}

考察

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

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


添付ファイル: fileAWS_IoT.png 1095件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-09-19 (日) 19:09:15