このトピックでは、Python 用 Link SDK を初期化し、デバイスを IoT Platform に接続する方法について説明します。
背景情報
Python 用 Link SDK は、[デバイス証明書] に基づくデバイス検証のみをサポートしています。次の表に、検証方法を示します。
検証方法 | 登録方法 | 説明 | 参照資料 |
デバイスごとの一意の証明書による検証 | 該当なし | ProductKey、DeviceName、および DeviceSecret を含むデバイス証明書が各デバイスに書き込まれます。 | |
プロダクトごとの一意の証明書による検証 | 事前登録 |
| 説明 事前登録によるプロダクトごとの一意の証明書検証と、事前登録不要のプロダクトごとの一意の証明書検証の違いについては、「検証方法の違い」をご参照ください。 |
事前登録不要 |
|
サンプルコード
デバイスごとの一意の証明書による検証
from linkkit import linkkit lk = linkkit.LinkKit( host_name="YourHostName", product_key="YourProductKey", device_name="YourDeviceName", device_secret="YourDeviceSecret") lk.config_mqtt(port=8883, protocol="MQTTv311", transport="TCP", secure="TLS", keep_alive=60, clean_session=True, max_inflight_message=20, max_queued_message=0, auto_reconnect_min_sec=1, auto_reconnect_max_sec=60, cadata=None)次の表にパラメーターを示します。
パラメーター
例
説明
host_name
cn-shanghai
IoT Platform に接続するデバイスが存在するリージョンの ID です。
product_key
a18wP******
検証に使用されるデバイス証明書。証明書は、デバイスを追加した後にオンプレミスサーバーに保存されます。
また、IoT Platform コンソールの [デバイスの詳細] ページでデバイス証明書を表示することもできます。詳細については、「デバイス検証情報を取得する」をご参照ください。
device_name
LightSwitch
device_secret
uwMTmVAMnGGHaAkqmeDY6cHxxB******
endpoint
iot-cn-6ja******.mqtt.iothub.aliyuncs.com
IoT Platform インスタンスのエンドポイントです。
このパラメーターは、Enterprise Edition インスタンスと新バージョンのパブリックインスタンスにのみ必要です。
説明Enterprise Edition インスタンスまたは新バージョンのパブリックインスタンスを使用する場合は、コードの前にあるシャープ記号(#)を削除してください。
port
8883
ポート番号です。
protocol
MQTTv311
デバイスと IoT Platform 間の接続を確立するために使用されるプロトコルです。
transport
TCP
伝送制御プロトコル( TCP )です。
secure
TLS
Transport Layer Security ( TLS )プロトコルです。
keep_alive
60
キープアライブ期間です。単位:秒。有効な値:60 ~ 180 。キープアライブ期間内にデバイス接続のハートビートが IoT Platform によって検出されない場合、IoT Platform はデバイス接続を拒否します。
ネットワーク接続が不安定な場合は、このパラメーターの値を大きくすることをお勧めします。詳細については、「MQTT キープアライブメカニズム」をご参照ください。
clean_session
True
オフラインメッセージを受信するかどうかを指定します。有効な値:
True:デバイスはオフラインメッセージを受信します。
False:デバイスはオフラインメッセージを受信しません。
auto_reconnect_min_sec
1
接続失敗と再接続の間の最小間隔です。単位:秒。有効な値:1 ~ 1200 。
auto_reconnect_max_sec
60
接続失敗と再接続の間の最大間隔です。単位:秒。有効な値:1 ~ 1200 。
事前登録によるプロダクトごとの一意の証明書検証
説明詳細については、サンプルコードパッケージの
dynamic_register.pyファイルをご参照ください。import time from linkkit import linkkit import logging # config log __log_format = '%(asctime)s-%(process)d-%(thread)d - %(name)s:%(module)s:%(funcName)s - %(levelname)s - %(message)s' logging.basicConfig(format=__log_format) product_key = "${YourProductKey}" device_name = "${YourDeviceName}" product_secret = "${YourProductSecret}" instance_id = "${YourInstanceId}" device_secret = "" lk_auth = linkkit.LinkKit( host_name="cn-shanghai", product_key=product_key, device_name=device_name, device_secret="", auth_type="register", instance_id=instance_id, product_secret=product_secret) def on_device_dynamic_register(rc, value, userdata): if rc == 0: global device_secret print("dynamic register device success, rc:%d, value:%s" % (rc, value)) device_secret = value else: print("dynamic register device fail,rc:%d, value:%s" % (rc, value)) lk_auth.enable_logger(logging.DEBUG) lk_auth.on_device_dynamic_register = on_device_dynamic_register lk_auth.connect_async() # Wait for a downstream message. In most cases, the downstream message is returned within 1 second. time.sleep(5) lk_auth.destroy()LinkKit 関数に
auth_type="register"を指定すると、システムは事前登録によるプロダクトごとの一意の証明書検証方法を使用してデバイスを検証します。検証結果は、on_device_dynamic_registerコールバック関数によって返されます。rcパラメーターの値が0の場合、デバイスは事前登録によるプロダクトごとの一意の証明書検証に合格します。IoT Platform から取得した DeviceSecret が返されます。DeviceSecret をオンプレミスサーバーに保存します。DeviceSecret を使用して、デバイスを IoT Platform に接続できます。詳細については、「デバイスごとの一意の証明書による検証」をご参照ください。auth_type=""を指定すると、システムは中国(上海)リージョンでのみ使用可能なdeprecated検証方法を使用します。詳細については、dynamic_register_deprecated.pyファイルをご参照ください。事前登録不要のプロダクトごとの一意の証明書検証
説明Python 用 Link SDK を使用して、中国(北京)と中国(上海)リージョンでのみ、デバイスで事前登録不要のプロダクトごとの一意の証明書検証を実行できます。
詳細については、サンプルコードパッケージの
dynamic_register_nwl.pyファイルをご参照ください。
import time from linkkit import linkkit import logging # config log __log_format = '%(asctime)s-%(process)d-%(thread)d - %(name)s:%(module)s:%(funcName)s - %(levelname)s - %(message)s' logging.basicConfig(format=__log_format) product_key = "${YourProductKey}" device_name = "${YourDeviceName}" product_secret = "${YourProductSecret}" instance_id = "${YourInstanceId}" lk_auth = linkkit.LinkKit( host_name="cn-shanghai", product_key=product_key, product_secret=product_secret, device_name=device_name, device_secret="", instance_id=instance_id, auth_type="regnwl") def on_device_dynamic_register_nwl_reply(code, client_id_l, user_name_l, password_l): print("code:", code) if 0 == code: print("cid:", client_id_l) print("user_name:", user_name_l) print("password:", password_l) lk_auth.enable_logger(logging.DEBUG) lk_auth.on_device_dynamic_register_nwl_reply = on_device_dynamic_register_nwl_reply lk_auth.connect_async() # Wait for a downstream message. In most cases, the downstream message is returned within 1 second. time.sleep(5) lk_auth.destroy()auth_type="regnwl"を指定すると、システムは事前登録不要のプロダクトごとの一意の証明書検証方法を使用してデバイスを検証します。rcパラメーターの値が0の場合、デバイスは事前登録不要のプロダクトごとの一意の証明書検証に合格します。IoT Platform から取得したusername、ClientID、およびpasswordが返されます。
コールバック関数
デバイスを IoT Platform に接続した後、on_connect コールバック関数を使用して接続ステータスを表示できます。デバイスが切断された場合は、ビジネスシナリオに基づいて on_disconnect コールバック関数に処理ロジックを記述できます。
デフォルトでは、Python 用 Link SDK は再接続をサポートしています。ネットワークの不安定性やその他の例外が原因でデバイスが切断された場合、デバイスはキープアライブパラメーターなどの設定済みパラメーターに基づいて再接続リクエストを自動的に開始します。
サンプルコード:
def on_connect(session_flag, rc, userdata):
print("on_connect:%d,rc:%d,userdata:" % (session_flag, rc))
pass
def on_disconnect(rc, userdata):
print("on_disconnect:rc:%d,userdata:" % rc)
lk.on_connect = on_connect
lk.on_disconnect = on_disconnect (オプション)ネットワーク接続インターフェースの設定
ProductKey、DeviceName、および DeviceSecret を含む同じデバイス証明書が複数のデバイスに書き込まれている場合、IoT Platform はそれらのデバイスを同じデバイスと見なします。この場合、一方のデバイスがオンラインになると、もう一方のデバイスは切断されます。トラブルシューティングのために、接続インターフェースに関する情報を IoT Platform にアップロードできます。
lk.config_device_info("Eth|03ACDEFF0032|Eth|03ACDEFF0031")次の表に、ネットワーク接続インターフェースを示します。
ネットワークタイプ | 例 | 説明 |
WiFi |
| デバイスがアップストリームネットワークインターフェース経由で WiFi または Ethernet に接続されている場合は、ネットワークタイプを WiFi または Eth に設定し、Media Access Control ( MAC )アドレスを指定します。MAC アドレスは大文字にする必要があります。 |
Ethernet ( Eth ) | ||
セルラーネットワーク( Cellular ) | Cellular|imei_001122|iccid_22334455|imsi_234241|msisdn_53212 | デバイスがアップストリームネットワークインターフェース経由で 2G 、 3G 、 4G などのセルラーネットワークに接続されている場合は、ネットワークタイプを Cellular に設定し、次のパラメーターを設定します。
|
接続の確立
Message Queuing Telemetry Transport ( MQTT )接続、コールバック関数、およびネットワーク接続インターフェースのパラメーターを設定した後、connect_async メソッドを呼び出して接続を開始します。
lk.connect_async()ネットワークの不安定性やその他の例外が原因でデバイスが切断された場合、デバイスはキープアライブパラメーターなどの設定済みパラメーターに基づいて再接続リクエストを自動的に開始します。このメソッドを呼び出す必要があるのは 1 回だけです。