質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

SDK

SDK(software development kit)は特定のハードウェアのプラットフォーム、開発環境又はソフトウェアパッケージでソフトウェアをつくるのに必要な開発ツールのセットです。SDKはAPI、IDE又は他の開発ツールとフレームワークを組み合わせたもので構成されていることがあります。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

MQTT

MQTT(Message Queue Telemetry Transport)とは、TCP/IPネットワークで利用可能な通信プロトコルの一つで、IoT/M2M向けに開発された軽量なプロトコルです。ヘッダ部分は最小2バイトと小さく、通信量・CPU負荷・電力消費量などを抑えることができます。

Q&A

0回答

1030閲覧

AWS MQTTの実装について

raspypy

総合スコア247

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

SDK

SDK(software development kit)は特定のハードウェアのプラットフォーム、開発環境又はソフトウェアパッケージでソフトウェアをつくるのに必要な開発ツールのセットです。SDKはAPI、IDE又は他の開発ツールとフレームワークを組み合わせたもので構成されていることがあります。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

MQTT

MQTT(Message Queue Telemetry Transport)とは、TCP/IPネットワークで利用可能な通信プロトコルの一つで、IoT/M2M向けに開発された軽量なプロトコルです。ヘッダ部分は最小2バイトと小さく、通信量・CPU負荷・電力消費量などを抑えることができます。

0グッド

2クリップ

投稿2020/01/20 06:23

編集2022/01/12 10:55

##やろうとしていること

AWSに公開されている、次の記事の内容を試しています。
https://aws.amazon.com/jp/blogs/news/how-to-implement-mqtt-with-tls-client-authentication-on-port-443-from-client-devices-python/

サンプルプログラムを使って、MQTT Publishテストを行いたいです。

##試したこと

①前提条件のチェック
OpenSSL 1.1.1d 10 Sep 2019
Python version 2.7.16

②証明書作成
rootCA.pem
hogehoge-certificate.pem.crt
hogehoge-private.pem.key
③証明書の有効化
④ポリシーをアタッチ

④動作確認(MQTTのPublish)
プログラムを実行すると、次のエラーが発生してしまいます。
connect successが表示されないので、接続エラーが発生していると思うのですが、
原因が分からず困っております。

text

1pi@raspberrypi:~/dev/aws/pub $ python alpn_mqtt.py 22020-01-21 11:11:30,045 - root - INFO - open ssl version:OpenSSL 1.1.1d 10 Sep 2019 32020-01-21 11:11:30,051 - root - INFO - start connect 42020-01-21 11:14:30,351 - root - ERROR - exception main() 52020-01-21 11:14:30,351 - root - ERROR - e obj:{} 62020-01-21 11:14:30,352 - root - ERROR - message: 7Traceback (most recent call last): 8 File "alpn_mqtt.py", line 45, in <module> 9 mqttc.connect(aws_iot_endpoint, port=443) 10 File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 937, in connect 11 return self.reconnect() 12 File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 1071, in reconnect 13 sock = self._create_socket_connection() 14 File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 3522, in _create_socket_connection 15 return socket.create_connection(addr, source_address=source, timeout=self._keepalive) 16 File "/usr/lib/python2.7/socket.py", line 575, in create_connection 17 raise err 18error: [Errno 101] Network is unreachable

##プログラムコード

python

1from __future__ import print_function 2import sys 3import ssl 4import time 5import datetime 6import logging, traceback 7import paho.mqtt.client as mqtt 8 9IoT_protocol_name = "x-amzn-mqtt-ca" 10aws_iot_endpoint = "hogehoge" # <random>.iot.<region>.amazonaws.com 11url = "https://{}".format(aws_iot_endpoint) 12 13ca = "YOUR/ROOT/CA/PATH" 14cert = "YOUR/DEVICE/CERT/PATH" 15private = "YOUR/DEVICE/KEY/PATH" 16 17logger = logging.getLogger() 18logger.setLevel(logging.DEBUG) 19handler = logging.StreamHandler(sys.stdout) 20log_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 21handler.setFormatter(log_format) 22logger.addHandler(handler) 23 24def ssl_alpn(): 25 try: 26 #debug print opnessl version 27 logger.info("open ssl version:{}".format(ssl.OPENSSL_VERSION)) 28 ssl_context = ssl.create_default_context() 29 ssl_context.set_alpn_protocols([IoT_protocol_name]) 30 ssl_context.load_verify_locations(cafile=ca) 31 ssl_context.load_cert_chain(certfile=cert, keyfile=private) 32 33 return ssl_context 34 except Exception as e: 35 print("exception ssl_alpn()") 36 raise e 37 38if __name__ == '__main__': 39 topic = "test/date" 40 try: 41 mqttc = mqtt.Client() 42 ssl_context= ssl_alpn() 43 mqttc.tls_set_context(context=ssl_context) 44 logger.info("start connect") 45 mqttc.connect(aws_iot_endpoint, port=443) 46 logger.info("connect success") 47 mqttc.loop_start() 48 49 while True: 50 now = datetime.datetime.now().strftime('%Y-%m-%dT%H:%M:%S') 51 logger.info("try to publish:{}".format(now)) 52 mqttc.publish(topic, now) 53 time.sleep(1) 54 55 except Exception as e: 56 logger.error("exception main()") 57 logger.error("e obj:{}".format(vars(e))) 58 logger.error("message:{}".format(e.message)) 59 traceback.print_exc(file=sys.stdout)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2020/01/21 02:37

ca = "YOUR/ROOT/CA/PATH" cert = "YOUR/DEVICE/CERT/PATH" private = "YOUR/DEVICE/KEY/PATH" の部分は実際に動かしてるコードと同じですか?
raspypy

2020/01/21 03:41

この部分は、フルパス+ファイル名を指定しております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問