すべてのプロダクト
Search
ドキュメントセンター

IoT Platform:デバイスの検証と接続

最終更新日:Mar 22, 2025

このトピックでは、Python 用 Link SDK を初期化し、デバイスを IoT Platform に接続する方法について説明します。

背景情報

Python 用 Link SDK は、[デバイス証明書] に基づくデバイス検証のみをサポートしています。次の表に、検証方法を示します。

検証方法

登録方法

説明

参照資料

デバイスごとの一意の証明書による検証

該当なし

ProductKey、DeviceName、および DeviceSecret を含むデバイス証明書が各デバイスに書き込まれます。

デバイスごとの一意の証明書による検証

プロダクトごとの一意の証明書による検証

事前登録

  • ProductKey と ProductSecret を含むプロダクト証明書が、プロダクトのすべてのデバイスに書き込まれます。

  • プロダクトに対して [動的登録] 機能を有効にする必要があります。

  • 動的登録により、デバイスは DeviceSecret を取得できます。

プロダクトごとの一意の証明書による検証

説明

事前登録によるプロダクトごとの一意の証明書検証と、事前登録不要のプロダクトごとの一意の証明書検証の違いについては、「検証方法の違い」をご参照ください。

事前登録不要

  • ProductKey と ProductSecret を含むプロダクト証明書が、プロダクトのすべてのデバイスに書き込まれます。

  • プロダクトに対して [動的登録] 機能を有効にする必要があります。

  • 動的登録により、デバイスは ClientID と DeviceToken の組み合わせを取得できます。

サンプルコード

  • デバイスごとの一意の証明書による検証

    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 から取得した usernameClientID、および 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

Eth|03ACDEFF0032|Eth|03ACDEFF0031

デバイスがアップストリームネットワークインターフェース経由で 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 に設定し、次のパラメーターを設定します。

  • IMEI

  • ICCID

  • IMSI

  • MSISDN

接続の確立

Message Queuing Telemetry Transport ( MQTT )接続、コールバック関数、およびネットワーク接続インターフェースのパラメーターを設定した後、connect_async メソッドを呼び出して接続を開始します。

lk.connect_async()
重要

ネットワークの不安定性やその他の例外が原因でデバイスが切断された場合、デバイスはキープアライブパラメーターなどの設定済みパラメーターに基づいて再接続リクエストを自動的に開始します。このメソッドを呼び出す必要があるのは 1 回だけです。