认证与连接

本文介绍如何进行Python Link SDK初始化,然后建立设备与物联网平台的连接。

背景信息

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(endpoint="iot-cn-6ja******.mqtt.iothub.aliyuncs.com")
    lk.config_mqtt(port=1883, 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

    设备接入的地域ID。

    product_key

    a18wP******

    设备认证信息。即完成添加设备后,您保存至本地的设备证书。

    您也可以在物联网平台的设备详情页查看设备的认证信息。更多信息,请参见获取设备认证信息

    device_name

    LightSwitch

    device_secret

    uwMTmVAMnGGHaAkqmeDY6cHxxB******

    endpoint

    iot-cn-6ja******.mqtt.iothub.aliyuncs.com

    接入域名。

    仅企业版实例和新版公共实例,需配置该参数。

    说明

    如使用企业版实例和新版公共实例,请删除代码前的注释符号(#)。

    port

    1883

    端口号。

    protocol

    MQTTv311

    设备与物联网平台建立连接的协议。

    transport

    TCP

    传输控制协议。

    secure

    TLS

    安全传输层协议。

    keep_alive

    60

    保活时间,单位秒,取值范围为60~180。当设备的心跳时间不在保活时间内,物联网平台将拒绝设备的连接请求。

    如果网络不稳定,建议增大该参数的值。更多信息,请参见MQTT保活

    clean_session

    True

    设置是否接收离线消息。取值为:

    • True:是

    • False:否

    auto_reconnect_min_sec

    1

    设置重连的最小间隔时间,单位为秒,取值范围为1~1,200。

    auto_reconnect_max_sec

    60

    设置重连的最大间隔时间,单位为秒,取值范围为1~1,200。

  • 一型一密预注册

    说明
    • Python Link SDK仅支持地域为华东2(上海)的设备进行一型一密预注册的认证方式。

    • 更多代码信息,请参见exmaple示例代码中的dynamic_register.py文件。

    from linkkit import linkkit
    lk = linkkit.LinkKit(
        host_name="YourHostName",
        product_key="YourProductKey",
        device_name="YourDeviceName",
        device_secret="",
        product_secret="YourProductSecretly")
    lk.on_device_dynamic_register = on_device_dynamic_register
    def on_device_dynamic_register(rc, value, userdata):
        if rc == 0:
            print("dynamic register device success, rc:%d, value:%s" % (rc, value))
        else:
            print("dynamic register device fail,rc:%d, value:%s" % (rc, value))
                

    rc值为0时,表示一型一密动态注册成功。返回的值为从物联网平台获取的设备的DeviceSecret。您需将该参数的值储存至本地,待设备接入时使用。

  • 一型一密免预注册

    说明
    • Python Link SDK仅支持地域为华东2(上海)的设备进行一型一密免预注册的认证方式。

    • 更多代码信息,请参见exmaple示例代码中的dynamic_register_nwl.py文件。

    lk = linkkit.LinkKit(
        host_name="cn-shanghai",
        product_key="${YourProductKey}",
        device_name="${YourDeviceName}",
        device_secret="",
        auth_type="regnwl",
        instance_id="${YourInstanceId}",
        product_secret="${YourProductSecret}")
    
    lk.enable_logger(logging.DEBUG)
    
    def on_device_dynamic_register_nwl_reply(code, client_id, user_name, password):
        print("code:", code)
        if 0 == code:
            print("cid:", client_id)
            print("user_name:", user_name)
            print("password:", password)
    
    lk.on_device_dynamic_register_nwl_reply = on_device_dynamic_register_nwl_reply
    lk.connect_async()

回调函数

设备与物联网平台建立连接后,您可通过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          

(可选)配置网络接口信息

如果产品生产时,错误地将设备认证信息烧写至多个设备,多个设备将会被物联网平台认为是同一个设备,从而出现一个设备上线将另外一个设备的连接断开的情况。您可以将自己的接口信息上传至物联网平台,物联网平台可以通过该接口的信息定位问题。

lk.config_device_info("Eth|03ACDEFF0032|Eth|03ACDEFF0031")

其中接口可取值:

网络类型

示例值

说明

WiFi

Eth|03ACDEFF0032|Eth|03ACDEFF0031

如果设备的上行网络接口是WiFi或者Eth(以太网),那么接口需包含MAC地址,MAC地址的格式为全大写。

Eth(以太网)

Cellular(蜂窝网)

Cellular|imei_001122|iccid_22334455|imsi_234241|msisdn_53212

如果是Cellular(即2G、3G、4G蜂窝网接口),那么需要填入的接口数据为:

  • IMEI

  • ICCID

  • IMSI

  • MSISDN

启动连接

在MQTT连接参数配置、回调函数设置、网络接口信息等操作完成后,您需调用connect_async发起连接。

lk.connect_async()
重要

当设备连接成功后,如果设备由于网络等原因断开连接,设备会根据配置的保活等参数,自动发起重新连接的请求。因此,您无需再次调用该接口。

阿里云首页 物联网平台 相关技术圈