RasPiなどをデバイスとしてAWS IoT CoreにMQTTでpublish、subscribeさせたい場合、
aws-iot-device-sdk-python のサンプルが手軽なのでインストール方法および使い方のメモです。
必要要件
- Python 2.7+ or Python 3.3+ via port 8883
- Python 2.7.10+ or Python 3.5+ via port 443
- OpenSSL version 1.0.1+ (TLS version 1.2)
古いRasPi B (Raspbian 7 Jessie)で試してみました。
pi@raspi ~ $ uname -a Linux raspi 4.1.19+ #858 Tue Mar 15 15:52:03 GMT 2016 armv6l GNU/Linux pi@raspi ~ $ cat /etc/os-release PRETTY_NAME="Raspbian GNU/Linux 7 (wheezy)" ... pi@raspi ~ $ python Python 2.7.3 (default, Nov 24 2017, 21:13:24) [GCC 4.6.3] on linux2 >> import ssl >>> ssl.OPENSSL_VERSION 'OpenSSL 1.0.1t 3 May 2016' >>>
大丈夫な様です。
インストール
$ sudo pip install AWSIoTPythonSDK
サンプルをダウンロード
https://github.com/aws/aws-iot-device-sdk-python/blob/master/samples/basicPubSub/basicPubSub.py
AWS IoT Coreに対して接続するには次の情報と証明書ファイルが必要です。ファイルもbasicPubSub.pyと同じフォルダへコピーします。
例:
AWS IoT Coreのエンドポイント: xxxxxxxxxxxx.iot.us-west-1.amazonaws.com
ルート証明書ファイル: rootCA.pem
証明書ファイル: xxxxxxxx-certificate.pem.crt
プライベートKey: xxxxxxxx-private.pem.key
実行
以下のコマンドでデフォルトの自身でpublic、subscribeを実行し続けるbothモードで起動されます。
$python basicPubSub.py --endpoint xxxxxxxxxxxx.iot.us-west-1.amazonaws.com --rootCA ./rootCA.pem --cert ./xxxxxxxx.cert --key ./xxxxxxxx.private.key
実行例
... Produced [message] event 2018-11-10 20:58:25,047 - AWSIoTPythonSDK.core.protocol.internal.workers - DEBUG - Dispatching [message] event Received a new message: {"message": "Hello World!", "sequence": 5} from topic: sdk/test/Python --------------
特定のtopicをsubscribeのみ行う場合は一方だけ指定する場合は –topic [topic] –mode subscribe を追加して起動します。
例:
$python basicPubSub.py --endpoint ...<省略>... --topic 'mytopic/+' --mode subscribe
無事subscribeできました。