すべてのプロダクト
Search
ドキュメントセンター

IoT Platform:MQTT Topic を使用した通信

最終更新日:Mar 22, 2025

このトピックでは、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() 関数が通知を返します。