このトピックでは、Python 用 Link SDK を使用して、MQTT(Message Queuing Telemetry Transport)経由でデバイスを IoT Platform に接続し、メッセージングを有効にする方法について説明します。
前提条件
IoT Platform がアクティブ化されていること。
背景情報
SDK を構成して、シミュレートされたデバイスを MQTT 経由で IoT Platform に接続できます。この例では、LightSwitch という名前のデバイスを使用します。デバイスは、カスタムトピックを使用して IoT Platform にデータを送信できます。
詳細については、「IoT Platform とは」をご参照ください。
プロダクトとデバイスの作成
IoT Platform コンソール にログインします。次に、[パブリックインスタンス] のカードをクリックします。
左側のナビゲーションウィンドウで、 を選択します。[プロダクト] ページで、[プロダクトの作成] をクリックします。
[プロダクトの作成] ページで、[プロダクト名] パラメーターを NightLightSwitch に、[カテゴリ] パラメーターをカスタムカテゴリに設定します。その他のパラメーターにはデフォルト値を使用します。次に、[OK] をクリックします。

[製品の作成] ページで、[デバイスの追加] セクションの [追加] をクリックします。
[デバイス] ページで、[デバイスの追加] をクリックします。
[デバイスの追加] ダイアログボックスで、デバイス名を入力します。例:LightSwitch。次に、[OK] をクリックします。

[デバイスが追加されました。] ダイアログボックスで、[デバイス証明書のコピー] をクリックします。次に、デバイス証明書情報をオンプレミスサーバーに保存します。詳細については、「デバイス証明書」をご参照ください。
開発環境の準備
この例では、Python 3.6 を開発環境として、PIP 3.6 を開発ツールとして使用します。詳細については、「プロジェクト構成」をご参照ください。
Python 開発環境をインストールします。
詳細については、「Python」を参照してください。
オプション。 Python パッケージの管理に使用する pip ツールをインストールします。
詳細については、「pip」を参照してください。
サンプルコードの実行に必要な依存関係をインストールします。
pip ツールがインストールされている場合
ディレクトリに移動し、次のコマンドを実行します。
pip install aliyun-iot-linkkit pip install paho-mqtt==1.6.1pip ツールがインストールされていない場合
次のオープンソースライブラリをサーバーにダウンロードし、パッケージを解凍してから、解凍した各ディレクトリで python setup.py install コマンドを実行します。
SDK の構成
デモファイル からデモパッケージを開発環境にダウンロードし、パッケージを解凍します。
./mqtt_quick_start.py ファイルを開き、次のパラメーターを構成します。
デバイス接続情報を指定するために使用されるパラメーターを構成します。これにより、デバイスを IoT Platform に接続できます。次の表にパラメーターを示します。サンプルコード:
lk = linkkit.LinkKit( host_name="cn-shanghai", product_key="a18wP******", device_name="LightSwitch", device_secret="uwMTmVAMnGGHaAkqmeDY6cHxxB******") # lk.config_mqtt(endpoint="iot-cn-6ja******.mqtt.iothub.aliyuncs.com")パラメーター
例
説明
host_name
cn-shanghai
デバイスが IoT Platform に接続されているリージョンの ID。詳細については、「リージョンとゾーン」をご参照ください。
product_key
a18wP******
デバイス証明書情報。デバイス証明書は、デバイスの作成後にオンプレミスサーバーに保存されます。
IoT Platform コンソールの [デバイスの詳細] ページでデバイス証明書を表示できます。詳細については、「デバイス検証情報の取得」をご参照ください。
device_name
LightSwitch
device_secret
uwMTmVAMnGGHaAkqmeDY6cHxxB******
IoT Platform からメッセージを受信するためのトピックを指定します。例:
elif msg == "3": rc, mid = lk.subscribe_topic(lk.to_full_topic("user/get")) if rc == 0: print("subscribe topic success:%r, mid:%r" % (rc, mid)) else: print("subscribe topic fail:%d" % rc)パラメーター
例
説明
subscribe_topic
lk.to_full_topic("user/get")
デバイスが Subscribe 権限を持つトピック。デバイスはこのトピックを使用して IoT Platform からメッセージを受信できます。
例:
lk.to_full_topic("user/get")または/a18wP******/LightSwitch/user/get。lk.to_full_topic("user/get")は、トピックを自動的に生成するために呼び出すことができる関数です。この関数は、設定したパラメーター(product_key、device_name など)の値を取得し、それらの値に基づいて文字列を返します。この文字列は/a18wP******/LightSwitch/user/getと同等です。デバイスがメッセージを送信するために使用できるトピックを指定します。例:
/a18wP******/LightSwitch/user/update。次に、送信するメッセージのコンテンツを指定します。例:elif msg == "5": rc, mid = lk.publish_topic(lk.to_full_topic("user/update"), "{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}") if rc == 0: print("publish topic success:%r, mid:%r" % (rc, mid)) else: print("publish topic fail:%d" % rc)パラメーター
例
説明
publish_topic
lk.to_full_topic("user/update"), "{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}"
送信先のトピックと送信するメッセージ。上記の式で指定された条件を使用します。
例にある user/get セクションは、トピックの接尾辞です。このセクションを指定することで、トピックにメッセージを送信できます。デバイスは、トピックに対する Publish 権限を持っている必要があります。
IoT Platform コンソールでカスタムトピックを表示できます。[プロダクトの詳細] ページで、[トピックカテゴリ] タブをクリックします。このタブで、[トピックカテゴリ] をクリックします。詳細については、「トピック」をご参照ください。
この例では、送信先のトピックは
/a18wP******/LightSwitch/user/updateです。a1oGs******は、デバイスが属するプロダクトの ProductKey を示します。LightSwitchは、デバイスの DeviceName を示します。
{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}は、IoT Platform に送信するメッセージのコンテンツを示します。この例では、カスタムトピックを使用しています。カスタムメッセージ形式を指定できます。
パラメーターを構成した後、ファイルを保存します。
結果
実行可能なサンプルコードファイルがあるディレクトリに移動し、次のコマンドを実行します。
python mqtt_quick_start.pyサンプルコードが実行されると、次のログデータが表示されます。ログデータは、LightSwitch デバイスが IoT Platform に接続されていることを示しています。
2021-05-07 15:27:10,725-6508-14504 - linkkit:linkkit:info - INFO - config_mqtt enter 2021-05-07 15:27:10,725-6508-14504 - linkkit:linkkit:debug - DEBUG - connect_async 2021-05-07 15:27:10,727-6508-4408 - linkkit:linkkit:debug - DEBUG - LoopThread thread enter 2021-05-07 15:27:10,727-6508-4408 - linkkit:linkkit:debug - DEBUG - enter 2021-05-07 15:27:10,727-6508-4408 - linkkit:linkkit:info - INFO - start connect 2021-05-07 15:27:10,729-6508-4408 - linkkit:linkkit:debug - DEBUG - current working directory:D:\****** 2021-05-07 15:27:10,799-6508-4408 - Paho:client:_easy_log - DEBUG - Sending CONNECT (u1, p1, wr0, wq0, wf0, c1, k60) client_id=b'a18wP******&LightSwitch|securemode=2,signmethod=hmacsha1,ext=1,lan=Python,_v=1.2.0,sii=Eth|03ACDEFF0032|Eth|03ACDEFF0031,timestamp=1620372430|' 2021-05-07 15:27:10,831-6508-4408 - Paho:client:_easy_log - DEBUG - Received CONNACK (0, 0) 2021-05-07 15:27:10,831-6508-4408 - linkkit:linkkit:info - INFO - __on_internal_connectサンプルコードで、3 を入力して /a18wP******/LightSwitch/user/get トピックをサブスクライブします。
2021-05-07 16:03:52,423-25352-26452 - Paho:client:_easy_log - DEBUG - Sending SUBSCRIBE (d0, m2) [(b'/a18wP******/LightSwitch/user/get', 1)] subscribe topic success:0, mid:2 2021-05-07 16:03:52,440-25352-24916 - Paho:client:_easy_log - DEBUG - Received SUBACK 2021-05-07 16:03:52,440-25352-24916 - linkkit:linkkit:debug - DEBUG - post_message :'on_subscribe' 2021-05-07 16:03:52,440-25352-24916 - linkkit:linkkit:debug - DEBUG - post_message success 2021-05-07 16:03:52,441-25352-25544 - linkkit:linkkit:debug - DEBUG - thread runnable pop cmd:'on_subscribe' 2021-05-07 16:03:52,441-25352-25544 - linkkit:linkkit:debug - DEBUG - __on_internal_subscribe mid:2 granted_qos:1 on_subscribe_topic mid:2, granted_qos:1トピックをサブスクライブした後、IoT Platform に戻ることができます。[トピック] タブの [デバイスの詳細] ページで、トピックを見つけて、[アクション] 列の [通知の発行] をクリックします。[通知の発行] ダイアログボックスで、This is a test message from Alibaba IoT Platform. などのメッセージを入力します。次に、IoT Platform からデバイスにメッセージを送信します。

サンプルコードで、5 を入力して、
/a18wP******/LightSwitch/user/updateトピックを使用して IoT Platform にメッセージを送信します。2021-05-07 16:06:23,786-30364-20372 - Paho:client:_easy_log - DEBUG - Sending PUBLISH (d0, q1, r0, m3), 'b'/a18wP******/LightSwitch/user/update'', ... (53 bytes) publish topic success:0, mid:3 2021-05-07 16:06:23,799-30364-27344 - Paho:client:_easy_log - DEBUG - Received PUBACK (Mid: 3) 2021-05-07 16:06:23,799-30364-27344 - linkkit:linkkit:debug - DEBUG - post_message :'on_publish' 2021-05-07 16:06:23,806-30364-27344 - linkkit:linkkit:debug - DEBUG - post_message success 2021-05-07 16:06:23,806-30364-11596 - linkkit:linkkit:debug - DEBUG - thread runnable pop cmd:'on_publish' 2021-05-07 16:06:23,808-30364-11596 - linkkit:linkkit:debug - DEBUG - __on_internal_publish message:3 on_publish_topic mid:3
IoT Platform コンソール にログインして、デバイスのステータスと操作ログを表示できます。
左側のナビゲーションウィンドウで、 を選択します。次に、デバイスを見つけてステータスを表示します。[状態/有効] 列の値が [オンライン] の場合、デバイスは IoT Platform に接続されています。
左側のナビゲーションウィンドウで、[メンテナンス] > [デバイスログ] を選択します。LightSwitch プロダクトを選択して、デバイスがオンラインになったとき、トピックをサブスクライブしたとき、および IoT Platform にデータを送信したときに生成されたデバイスのログを表示します。
説明/sys/a18wP******/LightSwitch/thing/deviceinfo/update_reply トピックのログデータは無視してかまいません。デフォルトでは、SDK を構成するときにこのトピックがサブスクライブされます。
デバッグ中にエラーが発生した場合は、プロンプトに従ってエラーを修正します。詳細については、「デバイスのエラーコード」をご参照ください。
次のステップ
デバイスが IoT Platform に接続された後、デバイスを管理および監視できます。IoT Platform の機能の詳細については、「機能」をご参照ください。
Python 用 Link SDK を使用して高度な機能を構成する方法の詳細については、「プロジェクト構成」をご参照ください。