Utilisez le kit de développement logiciel (SDK) Python Link pour vous abonner à des topics, publier des messages et vous désabonner de topics sur IoT Platform via MQTT. Cette rubrique décrit le flux complet de requête et de confirmation pour chaque opération.
Format de topic
Un topic est un canal de communication entre un appareil et IoT Platform. Les appareils utilisent les topics pour envoyer et recevoir des messages.
Les topics utilisent des barres obliques (/) pour définir une hiérarchie et séparer les catégories. Les trois premiers niveaux d'un topic personnalisé sont prédéfinis :
|
Niveau |
Valeur |
Description |
|
1 |
ProductKey |
Identifie le produit |
|
2 |
|
Joker pour le DeviceName |
|
3 |
user |
Identifie la catégorie de topic personnalisé |
Pour plus d'informations, consultez Qu'est-ce qu'un topic ?.
Recevoir des messages depuis le cloud
Appelez subscribe_topic() pour vous abonner à un topic :
rc, mid = lk.subscribe_topic(topic, qos=1)
Dans la démonstration mqtt_sub_pub_on.py, appelez lk.to_full_topic("user/test") pour générer une chaîne de topic. L'API to_full_topic utilise le ProductKey et le DeviceName que vous avez spécifiés et renvoie une chaîne équivalente à /YourProductKey/YourDeviceName/user/test.
Le résultat de l'abonnement est renvoyé dans le rappel on_subscribe_topic :
lk.on_subscribe_topic = on_subscribe_topic
def on_subscribe_topic(mid, granted_qos, userdata):
print("on_subscribe_topic mid:%d, granted_qos:%s" %
(mid, str(','.join('%s' % it for it in granted_qos))))
pass
La variable granted_qos correspond au niveau de qualité de service (QoS) accordé pour le topic abonné :
|
Valeur |
Signification |
|
|
L'abonnement a réussi. |
|
|
L'abonnement a échoué. |
Recevoir et traiter les messages du cloud
Les messages entrants déclenchent le rappel on_topic_message() :
lk.on_topic_message = on_topic_message
def on_topic_message(topic, payload, qos, userdata):
print("on_topic_message:" + topic + " payload:" + str(payload) + " qos:" + str(qos))
pass
Envoyer des messages vers le cloud
Dans les versions 1.0.0 à 1.2.11 du SDK Python Link, si l'appareil se déconnecte d'IoT Platform, l'appel de l'API de publication lève une exception que vous devez gérer. Dans les versions 1.2.12 et ultérieures, l'API renvoie une valeur d'erreur non nulle au lieu de lever une exception.
Envoyer un message
Appelez publish_topic() pour publier un message vers le cloud :
rc, mid = lk.publish_topic(topic, payload)
Notification du résultat de publication
Le rappel on_publish_topic confirme si le cloud a reçu le message :
lk.on_publish_topic = on_publish_topic
def on_publish_topic(mid, userdata):
print("on_publish_topic mid:%d" % mid)
Une valeur rc de 0 provenant de publish_topic signifie que la requête a été écrite dans le tampon d'envoi. Un rappel on_publish_topic réussi confirme ensuite que la publication a abouti.
Se désabonner d'un topic
Dans les versions 1.0.0 à 1.2.11 du SDK Python Link, si l'appareil se déconnecte d'IoT Platform, l'appel de l'API de désabonnement lève une exception que vous devez gérer. Dans les versions 1.2.12 et ultérieures, l'API renvoie une valeur d'erreur non nulle au lieu de lever une exception.
Appelez unsubscribe_topic() pour vous désabonner d'un topic spécifique :
rc, mid = lk.unsubscribe_topic(topic)
Le résultat du désabonnement est renvoyé dans le rappel on_unsubscribe_topic :
lk.on_unsubscribe_topic = on_unsubscribe_topic
def on_unsubscribe_topic(mid, userdata):
print("on_unsubscribe_topic mid:%d" % mid)
pass
Une valeur rc de 0 provenant de unsubscribe_topic signifie que la requête a été écrite dans le tampon de cache. Toute autre valeur indique un échec. Un rappel on_unsubscribe_topic réussi confirme ensuite que le désabonnement a abouti.