Cette rubrique explique comment initialiser le SDK Link pour Python et connecter un appareil à IoT Platform.
Contexte
Le SDK Link pour Python prend uniquement en charge la vérification des appareils basée sur le device certificate. Le tableau suivant décrit les méthodes de vérification.
Méthode de vérification | Méthode d'enregistrement | Description | Références |
Vérification par certificat unique par appareil | N/A | Un certificat d'appareil contenant un ProductKey, un DeviceName et un DeviceSecret est inscrit sur chaque appareil. | |
Vérification par certificat unique par produit | Préenregistrement |
| Vérification par certificat unique par produit Remarque Pour plus d'informations sur les différences entre la vérification par certificat unique par produit avec préenregistrement et celle sans préenregistrement, consultez la section Différences entre les méthodes de vérification. |
Sans préenregistrement |
|
Exemple de code
-
Vérification par certificat unique par appareil
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)Le tableau suivant décrit les paramètres.
Paramètre
Exemple
Description
host_name
cn-shanghai
L'ID de la région où se trouve l'appareil que vous souhaitez connecter à IoT Platform.
product_key
a18wP
Le certificat d'appareil utilisé pour la vérification. Ce certificat est enregistré sur votre serveur local après l'ajout de l'appareil.
Vous pouvez également consulter le certificat d'appareil sur la page Device Details dans la console IoT Platform. Pour plus d'informations, consultez la rubrique Obtenir les informations de vérification de l'appareil.
device_name
LightSwitch
device_secret
uwMTmVAMnGGHaAkqmeDY6cHxxB
endpoint
iot-cn-6ja.mqtt.iothub.aliyuncs.com
Le point de terminaison de l'instance IoT Platform.
Ce paramètre est requis uniquement pour les instances Enterprise Edition et les instances publiques de la nouvelle version.
RemarqueSi vous utilisez une instance Enterprise Edition ou une instance publique de la nouvelle version, supprimez le dièse (#) devant le code.
port
8883
Le numéro de port.
protocol
MQTTv311
Le protocole utilisé pour établir une connexion entre l'appareil et IoT Platform.
transport
TCP
Le protocole TCP (Transmission Control Protocol).
secure
TLS
Le protocole TLS (Transport Layer Security).
keep_alive
60
La période de maintien de la connexion (keep-alive). Unité : secondes. Valeurs valides : 60 à 180. Si IoT Platform ne détecte pas le signal de maintien de la connexion de l'appareil durant cette période, la connexion de l'appareil est rejetée.
Si la connexion réseau est instable, nous vous recommandons d'augmenter la valeur de ce paramètre. Pour plus d'informations, consultez la rubrique Maintien de la connexion MQTT.
clean_session
True
Indique si les messages hors ligne doivent être reçus. Valeurs valides :
True : l'appareil reçoit les messages hors ligne.
False : l'appareil ne reçoit pas les messages hors ligne.
auto_reconnect_min_sec
1
L'intervalle minimum entre l'échec de la connexion et la reconnexion. Unité : secondes. Valeurs valides : 1 à 1200.
auto_reconnect_max_sec
60
L'intervalle maximum entre l'échec de la connexion et la reconnexion. Unité : secondes. Valeurs valides : 1 à 1200.
-
Vérification par certificat unique par produit avec préenregistrement
RemarquePour plus d'informations, consultez le fichier
dynamic_register.pydans le package d'exemples de code.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 vous spécifiez
auth_type="register"pour la fonction LinkKit, le système utilise la méthode de vérification par certificat unique par produit avec préenregistrement pour vérifier l'appareil. La fonction de rappelon_device_dynamic_registerrenvoie le résultat de la vérification. Si la valeur du paramètrercest0, l'appareil passe la vérification par certificat unique par produit avec préenregistrement. Le système renvoie le DeviceSecret obtenu depuis IoT Platform. Enregistrez le DeviceSecret sur votre serveur local. Vous pouvez utiliser le DeviceSecret pour connecter votre appareil à IoT Platform. Pour plus d'informations, consultez la rubrique Vérification par certificat unique par appareil.Si vous spécifiez
auth_type="", le système utilise une méthode de vérificationdeprecateddisponible uniquement dans la région Chine (Shanghai). Pour plus d'informations, consultez le fichierdynamic_register_deprecated.py. -
Vérification par certificat unique par produit sans préenregistrement
RemarqueVous pouvez utiliser le SDK Link pour Python pour effectuer une vérification par certificat unique par produit sans préenregistrement sur les appareils uniquement dans les régions Chine (Pékin) et Chine (Shanghai).
Pour plus d'informations, consultez le fichier
dynamic_register_nwl.pydans le package d'exemples de code.
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 vous spécifiez
auth_type="regnwl", le système utilise la méthode de vérification par certificat unique par produit sans préenregistrement pour vérifier l'appareil. Si la valeur du paramètrercest0, l'appareil passe la vérification par certificat unique par produit sans préenregistrement. Le système renvoie les valeursusername,ClientIDetpasswordobtenues depuis IoT Platform.
Fonction de rappel
Après avoir connecté un appareil à IoT Platform, utilisez la fonction de rappel on_connect pour consulter le statut de la connexion. Si l'appareil est déconnecté, écrivez la logique de traitement dans la fonction de rappel on_disconnect en fonction de votre scénario métier.
Par défaut, le SDK Link pour Python prend en charge la reconnexion. Si un appareil est déconnecté en raison d'une instabilité du réseau ou d'autres exceptions, l'appareil lance automatiquement une demande de reconnexion en fonction des paramètres configurés, tels que le paramètre de maintien de la connexion.
Exemple de code :
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
(Facultatif) Configurer l'interface de connexion réseau
Si le même certificat d'appareil contenant le ProductKey, le DeviceName et le DeviceSecret est inscrit sur plusieurs appareils, IoT Platform considère ces appareils comme un seul et même appareil. Dans ce cas, lorsqu'un appareil se connecte, un autre est déconnecté. Vous pouvez transmettre des informations sur vos interfaces de connexion à IoT Platform pour le dépannage.
lk.config_device_info("Eth|03ACDEFF0032|Eth|03ACDEFF0031")
Le tableau suivant décrit les interfaces de connexion réseau.
Type de réseau | Exemple | Description |
WiFi |
| Si votre appareil est connecté au WiFi ou à Ethernet via l'interface réseau ascendante, définissez le type de réseau sur WiFi ou Eth et spécifiez une adresse MAC (Media Access Control). L'adresse MAC doit être en majuscules. |
Ethernet (Eth) | ||
Réseau cellulaire (Cellular) | Cellular|imei_001122|iccid_22334455|imsi_234241|msisdn_53212 | Si votre appareil est connecté à un réseau cellulaire, tel que 2G, 3G ou 4G, via l'interface réseau ascendante, définissez le type de réseau sur Cellular et configurez les paramètres suivants :
|
Établir une connexion
Après avoir configuré les paramètres pour la connexion MQTT (Message Queuing Telemetry Transport), la fonction de rappel et l'interface de connexion réseau, appelez la méthode connect_async pour initier une connexion.
lk.connect_async()
Si un appareil est déconnecté en raison d'une instabilité du réseau ou d'autres exceptions, l'appareil lance automatiquement une demande de reconnexion en fonction des paramètres configurés, tels que le paramètre de maintien de la connexion. Il vous suffit d'appeler la méthode une seule fois.