このトピックでは、MQTT(Message Queuing Telemetry Transport)Topic を使用して IoT Platform にメッセージを送受信する方法について説明します。
背景情報
Topic は、デバイスと IoT Platform 間の通信のためのトンネルとして使用されます。デバイスは Topic を使用してメッセージを送受信できます。
Topic 名は複数のフィールドで構成されます。フィールドはスラッシュ(/)で区切られます。カスタム Topic の最初の 3 つのフィールドは事前定義されています。最初のフィールドは ProductKey を指定し、2 番目のフィールド ${deviceName} は DeviceName を指定し、3 番目のフィールドはプロダクトのカスタム Topic カテゴリを指定します。
詳細については、「Topic」をご参照ください。
ダウンストリームメッセージの受信
rc, mid = lk.subscribe_topic(lk.to_full_topic("user/test")) 上記のサンプルコードでは、lk.to_full_topic は、Topic を自動的に生成するために呼び出すことができる関数です。この関数は、product_key パラメーターや device_name パラメーターなど、設定したパラメーターの値を取得し、それらの値に基づいて文字列を返します。文字列は /<YourProductKey>/<YourDeviceName>/user/test 形式です。
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
granded_qos パラメーターは、サブスクライブされた Topic の QoS(サービス品質)レベルを示します。値 0 または 1 は、サブスクリプションが成功したことを示します。値 128 は、サブスクリプションが失敗したことを示します。
ダウンストリームメッセージの受信と処理
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
アップストリームメッセージの送信
メッセージの送信
publish_topic() 関数を呼び出して、IoT Platform にメッセージを送信できます。
rc, mid = lk.publish_topic(lk.to_full_topic("user/pub"), "123")
通知の送信
on_publish_topic() コールバック関数は、IoT Platform がメッセージを受信したかどうかを通知するために使用されます。
lk.on_publish_topic = on_publish_topic
def on_publish_topic(mid, userdata):
print("on_publish_topic mid:%d" % mid)
publish_topic() 関数を呼び出した後、メッセージが送信バッファーに書き込まれた場合、rc パラメーターには値 0 が返されます。IoT Platform がメッセージを受信すると、on_publish_topic 関数が通知を返します。
Topic サブスクリプションのキャンセル
unsubscribe_topic() 関数を呼び出して、指定した Topic のサブスクリプションをキャンセルできます。
rc, mid = lk.unsubscribe_topic(lk.to_full_topic("user/test"))
on_unsubscribe_topic() 関数は、結果を通知するために使用されます。
lk.on_unsubscribe_topic = on_unsubscribe_topic
def on_unsubscribe_topic(mid, userdata):
print("on_unsubscribe_topic mid:%d" % mid)
pass
unsubscribe_topic() 関数を呼び出した後、リクエストがバッファーに書き込まれた場合、rc パラメーターには値 0 が返されます。その他の値は、リクエストが失敗したことを示します。サブスクリプションがキャンセルされると、on_unsubscribe_topic() 関数が通知を返します。