Symfoware

Symfowareについての考察blog

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

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2018/07/02(月) 22:12:01|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Amazon FreeRTOS Windows SimulatorをVisual Studio 2017 Communityで動かす | ホーム | Node.js MySQLへのバルクインサートと、AUTO_INCREMENTで振られた値>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
https://symfoware.blog.fc2.com/tb.php/2224-3763771d
この記事にトラックバックする(FC2ブログユーザー)