Este tema describe cómo inicializar Link SDK for Python y conectar un dispositivo a IoT Platform.
Contexto
Link SDK for Python solo admite la verificación de dispositivos basada en el device certificate. La tabla a continuación describe los métodos de verificación.
Método de verificación | Método de registro | Descripción | Referencias |
Verificación con certificado único por dispositivo | N/A | Se graba un certificado de dispositivo que incluye ProductKey, DeviceName y DeviceSecret en cada dispositivo. | |
Verificación con certificado único por producto | Preregistro |
| Unique-certificate-per-product verification Nota Para obtener información sobre las diferencias entre la verificación con certificado único por producto con prerregistro y sin prerregistro, consulte Differences between the verification methods. |
Sin prerregistro |
|
Código de ejemplo
-
Verificación con certificado único por dispositivo
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)La tabla a continuación describe los parámetros.
Parámetro
Ejemplo
Descripción
host_name
cn-shanghai
El ID de la región donde reside el dispositivo que desea conectar a IoT Platform.
product_key
a18wP
El certificado de dispositivo que se utiliza para la verificación. El certificado se guarda en su servidor local después de agregar el dispositivo.
También puede consultar el certificado del dispositivo en la página Device Details de la consola de IoT Platform. Para obtener más información, consulte Obtain device verification information.
device_name
LightSwitch
device_secret
uwMTmVAMnGGHaAkqmeDY6cHxxB
endpoint
iot-cn-6ja.mqtt.iothub.aliyuncs.com
El endpoint de la instancia de IoT Platform.
Este parámetro es obligatorio solo para instancias Enterprise Edition e instancias públicas de la nueva versión.
NotaSi utiliza una instancia Enterprise Edition o una instancia pública de la nueva versión, elimine el signo de número (#) antes del código.
port
8883
El número de puerto.
protocol
MQTTv311
El protocolo que se utiliza para establecer una conexión entre el dispositivo e IoT Platform.
transport
TCP
El protocolo de control de transmisión (TCP).
secure
TLS
El protocolo de seguridad de capa de transporte (TLS).
keep_alive
60
El periodo de keep-alive. Unidad: segundos. Valores válidos: de 60 a 180. Si IoT Platform no detecta el latido de la conexión del dispositivo dentro del periodo de keep-alive, rechaza la conexión del dispositivo.
Si la conexión de red es inestable, se recomienda aumentar el valor de este parámetro. Para obtener más información, consulte MQTT keepalive.
clean_session
True
Especifica si se reciben mensajes sin conexión. Valores válidos:
True: El dispositivo recibe mensajes sin conexión.
False: El dispositivo no recibe mensajes sin conexión.
auto_reconnect_min_sec
1
El intervalo mínimo entre el fallo de conexión y la reconexión. Unidad: segundos. Valores válidos: de 1 a 1200.
auto_reconnect_max_sec
60
El intervalo máximo entre el fallo de conexión y la reconexión. Unidad: segundos. Valores válidos: de 1 a 1200.
-
Verificación con certificado único por producto con prerregistro
NotaPara obtener más información, consulte el archivo
dynamic_register.pyen el paquete de código de ejemplo.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()Si especifica
auth_type="register"para la función LinkKit, el sistema utiliza el método de verificación con certificado único por producto con prerregistro para verificar el dispositivo. La función de callbackon_device_dynamic_registerdevuelve el resultado de la verificación. Si el valor del parámetrorces0, el dispositivo supera la verificación con certificado único por producto con prerregistro. Se devuelve el DeviceSecret obtenido de IoT Platform. Guarde el DeviceSecret en su servidor local. Puede utilizar el DeviceSecret para conectar su dispositivo a IoT Platform. Para obtener más información, consulte Unique-certificate-per-device verification.Si especifica
auth_type="", el sistema utiliza un método de verificacióndeprecatedque solo está disponible en la región China (Shanghai). Para obtener más información, consulte el archivodynamic_register_deprecated.py. -
Verificación con certificado único por producto sin prerregistro
NotaPuede utilizar Link SDK for Python para realizar la verificación con certificado único por producto sin prerregistro en dispositivos solo en las regiones China (Beijing) y China (Shanghai).
Para obtener más información, consulte el archivo
dynamic_register_nwl.pyen el paquete de código de ejemplo.
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()Si especifica
auth_type="regnwl", el sistema utiliza el método de verificación con certificado único por producto sin prerregistro para verificar el dispositivo. Si el valor del parámetrorces0, el dispositivo supera la verificación con certificado único por producto sin prerregistro. Se devuelven elusername, elClientIDy lapasswordobtenidos de IoT Platform.
Función de callback
Después de conectar un dispositivo a IoT Platform, puede utilizar la función de callback on_connect para consultar el estado de la conexión. Si el dispositivo se desconecta, puede escribir la lógica de procesamiento en la función de callback on_disconnect según su escenario de negocio.
De forma predeterminada, Link SDK for Python admite la reconexión. Si un dispositivo se desconecta debido a inestabilidad de la red u otras excepciones, el dispositivo inicia automáticamente una solicitud de reconexión basada en los parámetros configurados, como el parámetro keep-alive.
Código de ejemplo:
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
(Opcional) Configurar la interfaz de conexión de red
Si se graba el mismo certificado de dispositivo que contiene ProductKey, DeviceName y DeviceSecret en varios dispositivos, IoT Platform considera que los dispositivos son el mismo dispositivo. En este caso, un dispositivo se desconecta cuando otro dispositivo se conecta. Puede cargar información sobre sus interfaces de conexión a IoT Platform para la solución de problemas.
lk.config_device_info("Eth|03ACDEFF0032|Eth|03ACDEFF0031")
La tabla a continuación describe las interfaces de conexión de red.
Tipo de red | Ejemplo | Descripción |
WiFi |
| Si su dispositivo está conectado a WiFi o Ethernet a través de la interfaz de red ascendente, establezca el tipo de red en WiFi o Eth y especifique una dirección de control de acceso al medio (MAC). La dirección MAC debe estar en letras mayúsculas. |
Ethernet (Eth) | ||
Red celular (Cellular) | Cellular|imei_001122|iccid_22334455|imsi_234241|msisdn_53212 | Si su dispositivo está conectado a una red celular, como 2G, 3G o 4G, a través de la interfaz de red ascendente, establezca el tipo de red en Cellular y configure los siguientes parámetros:
|
Establecer una conexión
Después de configurar los parámetros para la conexión de Message Queuing Telemetry Transport (MQTT), la función de callback y la interfaz de conexión de red, llame al método connect_async para iniciar una conexión.
lk.connect_async()
Si un dispositivo se desconecta debido a inestabilidad de la red u otras excepciones, el dispositivo inicia automáticamente una solicitud de reconexión basada en los parámetros configurados, como el parámetro keep-alive. Solo necesita llamar al método una vez.