AWS IoTにPythonでMQTTイベントの送信、受信するまで

AWS IoTにPythonでメッセージのやり取りを行ってみます。

こちらがとても参考になりました。
AWS IoTをPythonで簡単に始めるまで


必要最低限の設定



AWSコンソールで「IoT Core」の設定画面を表示します。
[管理] - [モノ]を選択し、「モノの登録」をクリックします。

905_01.png

「モノ」を登録するウィザードが始まります。
「単一のモノを作成する」をクリック。

905_02.png

適当に「モノ」の名前を入力します。
「タイプ」や「グループ」の指定は未設定でもOKです。

905_03.png

名前を入力したら、画面下の「次へ」をクリックしてウィザードを進めます。

905_04.png

続いて証明書の追加です。
推奨となっている1-Click証明書を作成します。

905_05.png

証明書が作成されるのでダウンロードしておきます。

905_06.png

「AWS IoTのルートCA」のダウンロードをクリックすると、別ウインドウでテキストが表示されます。

905_07.png

表示された内容を「rootCA.pem」という名前で保存しておきます。(重要)

プログラムで使用するのは、前の画面でダウンロードした
「このモノの証明書」「プライベートキー」
そして、先程保存した「rootCA.pem」になります。

・XXXXXXXXXX-certificate.pem.crt
・XXXXXXXXXX-private.pem.key
・rootCA.pem

ここまでの操作で、
[管理] - [モノ]

905_08.png

[安全性] - [証明書]

905_09.png

にそれぞれ項目が追加されているはずです。



ポリシーのアタッチ



作成した証明書で何ができるか、ポリシーを作成して指定してやります。
[安全性] - [ポリシー]を選択し、「ポリシーの作成」をクリック。

905_10.png

ポリシーの名前は適当に「python-policy」としました。

とりあえずのテストなので、すべての権限を与えます。
アクションは「iot:*」
リソースARNは「*」
とし、効果は「許可」

この状態で作成します。

905_11.png


作成したポリシーを証明書にアタッチします。
証明書右上の「...」をクリックしてメニューを表示し、「ポリシーのアタッチ」を選択。

905_12.png

先程作成したポリシーを選択して「アタッチ」実行。

905_13.png

これで証明書が「アクティブ」になりました。

905_14.png




AWS IoT Device SDK for Python



ここからPythonのプログラムを作成していきます。
AWS IoT Device SDK for Python
こちらのライブラリをインストール。


$ pip3 install AWSIoTPythonSDK



バージョン1.4.0がインストールできました。

basicPubSub.py
こちらのサンプルを参考に、AWSコンソールから送信されたメッセージを受信する
プログラムを作成してみます。

configureEndpointで指定している接続ポイントは、
管理コンソールの「設定」で確認できます。

905_15.png

configureCredentialsは、ダウンロードしておいた
・rootCA.pem
・xxxxxxxxxxxx-private.pem.key
・xxxxxxxxxxxx-certificate.pem.crt
へのファイルパスを指定します。


  1. # -*- coding:utf8 -*-
  2. from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
  3. import time
  4. import json
  5. def customCallback(client, userdata, message):
  6.     print('Received a new message: ')
  7.     print(message.payload)
  8.     print('from topic: ')
  9.     print(message.topic)
  10.     print('--------------\n\n')
  11. # For certificate based connection
  12. myMQTTClient = AWSIoTMQTTClient('myClientID') # 適当な値でOK
  13. myMQTTClient.configureEndpoint('xxxxxxxxxxxx.iot.ap-northeast-1.amazonaws.com', 8883) # 管理画面で確認
  14. myMQTTClient.configureCredentials('rootCA.pem', 'xxxxxxxxxxxx-private.pem.key', 'xxxxxxxxxxxx-certificate.pem.crt')
  15. myMQTTClient.configureOfflinePublishQueueing(-1) # Infinite offline Publish queueing
  16. myMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz
  17. myMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec
  18. myMQTTClient.configureMQTTOperationTimeout(5) # 5 sec
  19. myMQTTClient.connect()
  20. while True:
  21.     myMQTTClient.subscribe("myTopic", 1, customCallback)
  22.     time.sleep(1)




作成したプログラムを動かしておきます。


$ python3 sample.py



AWSコンソールのテストから、待ち受けている「myTopic」に対してメッセージを送信してみます。

905_16.png


受信できました。

905_17.png



メッセージの送信



送信も試してみます。
subscribeをpublishに変更し、メッセージを送信。


  1. # -*- coding:utf8 -*-
  2. from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
  3. import time
  4. import json
  5. def customCallback(client, userdata, message):
  6.     print('Received a new message: ')
  7.     print(message.payload)
  8.     print('from topic: ')
  9.     print(message.topic)
  10.     print('--------------\n\n')
  11. # For certificate based connection
  12. myMQTTClient = AWSIoTMQTTClient('myClientID') # 適当な値でOK
  13. myMQTTClient.configureEndpoint('xxxxxxxxxxxx.iot.ap-northeast-1.amazonaws.com', 8883) # 管理画面で確認
  14. myMQTTClient.configureCredentials('rootCA.pem', 'xxxxxxxxxxxx-private.pem.key', 'xxxxxxxxxxxx-certificate.pem.crt')
  15. myMQTTClient.configureOfflinePublishQueueing(-1) # Infinite offline Publish queueing
  16. myMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz
  17. myMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec
  18. myMQTTClient.configureMQTTOperationTimeout(5) # 5 sec
  19. myMQTTClient.connect()
  20. while True:
  21.     #myMQTTClient.subscribe("myTopic", 1, customCallback)
  22.     myMQTTClient.publish("myTopic", json.dumps({'message' : 'from python!'}), 1)
  23.     time.sleep(1)



AWSコンソールで、「myTopic」をサブスクライブ。

905_18.png

待受状態となります。

905_19.png

プログラムを実行すると、もりもりメッセージが届きます。

905_20.png

関連記事

コメント

初めまして。
大学の研究で似たようなものを使用したいと思い、色々と調べる中でこちらのブログを拝見させて頂いております。
恐縮ですが、一点、質問させて頂きたくコメントさせて頂きました。
こちらの手順にのっとって操作を行っているのですが、証明書を作成した後、ルートCAをダウンロードをクリックすると、
開発者ガイドに飛ばされてしまい、ダウンロードすることが出来ません。
これは事前に何かほかの操作が必要なのでしょうか?
当方の知識不足で申し訳ありませんが、ご教示頂けますと幸甚に存じます。
よろしくお願い致します。

当時とリンク先が変わっているようです。

この記事で試したときの環境が残っていないので追試ができないのですが、
リンク先の「開発者ガイド」にある

Amazon Trust Services エンドポイント (推奨)
RSA 2048 ビットキー: Amazon ルート CA 1

こちらの証明書を使用すれば動作する気がします。

ご返信ありがとうございます。
そちらを使用して再度試してみようと思います。
ありがとうございました。

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
https://symfo.web.fc2.com/

PR

検索フォーム

月別アーカイブ