|
| 1 | +* [订阅与取消订阅](#订阅与取消订阅) |
| 2 | + * [订阅 数据模板相关联 Topic 主题](#订阅-数据模板相关联-Topic-主题) |
| 3 | + * [取消订阅 Topic 主题](#取消订阅-Topic-主题) |
| 4 | + |
| 5 | +# 订阅与取消订阅 |
| 6 | + |
| 7 | +在腾讯云物联网开发平台控制台(以下简称控制台)创建产品时,会默认生成一套产品的数据模板和一些标准功能,用户也可以自定义功能。数据模板对应的功能包含三大类:属性,事件和行为。控制台数据模板的使用,可参考官网 [数据模板](https://cloud.tencent.com/document/product/1081/44921) 章节。 |
| 8 | + |
| 9 | +产品定义数据模板后,设备可以按照数据模板中的定义上报属性、事件,并可对设备下发远程控制指令,即对可写的设备属性进行修改。数据模板的管理详见 产品定义。数据模板协议包括设备属性上报、设备远程控制、获取设备最新上报信息、设备事件上报、设备行为。对应的定义和云端下发控制指令使用的 Topic 请参考官网 [数据模板协议](https://cloud.tencent.com/document/product/1081/34916) 章节。 |
| 10 | + |
| 11 | +本文主要描述 如何对数据模板相关联 Topic 的订阅与取消订阅。 |
| 12 | + |
| 13 | +## 订阅 数据模板相关联 Topic 主题 |
| 14 | + |
| 15 | +运行 [TemplateSample.py](../../explorer/sample/template/example_template.py),初始化数据模板会自动订阅数据模板相关联的属性、事件和行为类型的 Topic: |
| 16 | +``` |
| 17 | +$thing/down/property/{ProductID}/{DeviceName} |
| 18 | +$thing/down/event/{ProductID}/{DeviceName} |
| 19 | +$thing/down/action/{ProductID}/{DeviceName} |
| 20 | +$thing/down/service/{ProductID}/{DeviceName} |
| 21 | +``` |
| 22 | + |
| 23 | +示例代码如下: |
| 24 | +```python |
| 25 | +# 构造QcloudExplorer |
| 26 | +qcloud = QcloudExplorer(device_file="explorer/sample/device_info.json", tls=True) |
| 27 | +# 初始化日志 |
| 28 | +logger = qcloud.logInit(qcloud.LoggerLevel.DEBUG, enable=True) |
| 29 | + |
| 30 | +# 注册mqtt回调 |
| 31 | +qcloud.registerMqttCallback(on_connect, on_disconnect, |
| 32 | + on_message, on_publish, |
| 33 | + on_subscribe, on_unsubscribe) |
| 34 | +# 获取设备product id和device name |
| 35 | +product_id = qcloud.getProductID() |
| 36 | +device_name = qcloud.getDeviceName() |
| 37 | + |
| 38 | +# mqtt连接 |
| 39 | +qcloud.connect() |
| 40 | + |
| 41 | +# 数据模板初始化,自动订阅相关Topic |
| 42 | +qcloud.templateInit(product_id, device_name, on_template_property, |
| 43 | + on_template_action, on_template_event, on_template_service) |
| 44 | +qcloud.templateSetup(product_id, device_name, "sample/template/template_config.json") |
| 45 | +``` |
| 46 | + |
| 47 | +观察日志。 |
| 48 | +``` |
| 49 | +2021-07-21 16:59:34,956.956 [log.py:35] - DEBUG - LoopThread thread enter |
| 50 | +2021-07-21 16:59:34,956.956 [log.py:35] - DEBUG - connect_async (xxx.iotcloud.tencentdevices.com:8883) |
| 51 | +2021-07-21 16:59:35,432.432 [client.py:2165] - DEBUG - Sending CONNECT (u1, p1, wr0, wq0, wf0, c1, k60) client_id=b'xxxx' |
| 52 | +2021-07-21 16:59:35,491.491 [client.py:2165] - DEBUG - Received CONNACK (0, 0) |
| 53 | +2021-07-21 16:59:35,491.491 [log.py:35] - DEBUG - on_connect:flags:0,rc:0,userdata:None |
| 54 | +2021-07-21 16:59:35,958.958 [client.py:2165] - DEBUG - Sending SUBSCRIBE (d0, m1) [(b'$thing/down/property/xxx/dev1', 0)] |
| 55 | +2021-07-21 16:59:35,958.958 [log.py:35] - DEBUG - subscribe success topic:$thing/down/property/xxx/dev1 |
| 56 | +2021-07-21 16:59:35,959.959 [client.py:2165] - DEBUG - Sending SUBSCRIBE (d0, m2) [(b'$thing/down/action/xxx/dev1', 0)] |
| 57 | +2021-07-21 16:59:35,959.959 [log.py:35] - DEBUG - subscribe success topic:$thing/down/action/xxx/dev1 |
| 58 | +2021-07-21 16:59:35,960.960 [client.py:2165] - DEBUG - Sending SUBSCRIBE (d0, m3) [(b'$thing/down/event/xxx/dev1', 0)] |
| 59 | +2021-07-21 16:59:35,960.960 [log.py:35] - DEBUG - subscribe success topic:$thing/down/event/xxx/dev1 |
| 60 | +2021-07-21 16:59:35,960.960 [client.py:2165] - DEBUG - Sending SUBSCRIBE (d0, m4) [(b'$thing/down/service/xxx/dev1', 0)] |
| 61 | +2021-07-21 16:59:35,960.960 [log.py:35] - DEBUG - subscribe success topic:$thing/down/service/xxx/dev1 |
| 62 | +2021-07-21 16:59:36,006.006 [client.py:2165] - DEBUG - Received SUBACK |
| 63 | +2021-07-21 16:59:36,006.006 [log.py:35] - DEBUG - on_subscribe:mid:0,granted_qos:1,userdata:None |
| 64 | +2021-07-21 16:59:36,009.009 [client.py:2165] - DEBUG - Received SUBACK |
| 65 | +2021-07-21 16:59:36,010.010 [client.py:2165] - DEBUG - Received SUBACK |
| 66 | +2021-07-21 16:59:36,010.010 [log.py:35] - DEBUG - on_subscribe:mid:0,granted_qos:2,userdata:None |
| 67 | +2021-07-21 16:59:36,010.010 [log.py:35] - DEBUG - on_subscribe:mid:0,granted_qos:4,userdata:None |
| 68 | +2021-07-21 16:59:36,016.016 [client.py:2165] - DEBUG - Received SUBACK |
| 69 | +2021-07-21 16:59:36,016.016 [log.py:35] - DEBUG - on_subscribe:mid:0,granted_qos:3,userdata:None |
| 70 | +``` |
| 71 | +观察日志可以看到成功设备订阅了Topic. |
| 72 | + |
| 73 | +## 取消订阅 Topic 主题 |
| 74 | + |
| 75 | +运行 [TemplateSample.py](../../explorer/sample/template/example_template.py),退出时调用`templateDeinit()`接口取消订阅 Topic. |
| 76 | + |
| 77 | +示例代码如下: |
| 78 | +```python |
| 79 | +# 注销数据模板 |
| 80 | +qcloud.templateDeinit(product_id, device_name) |
| 81 | + |
| 82 | +# 断开mqtt连接 |
| 83 | +qcloud.disconnect() |
| 84 | +``` |
| 85 | + |
| 86 | +观察输出日志。 |
| 87 | +``` |
| 88 | +2021-07-21 17:21:33,833.833 [client.py:2165] - DEBUG - Sending UNSUBSCRIBE (d0, m5) [b'$thing/down/property/xxx/dev1', b'$thing/down/event/xxx/dev1', b'$thing/down/action/xxx/dev1', b'$thing/down/service/xxx/dev1'] |
| 89 | +2021-07-21 17:21:33,913.913 [client.py:2165] - DEBUG - Received UNSUBACK (Mid: 5) |
| 90 | +2021-07-21 17:21:33,914.914 [log.py:35] - DEBUG - on_unsubscribe:mid:5,userdata:None |
| 91 | +2021-07-21 17:21:35,218.218 [log.py:35] - DEBUG - disconnect |
| 92 | +2021-07-21 17:21:35,218.218 [client.py:2165] - DEBUG - Sending DISCONNECT |
| 93 | +2021-07-21 17:21:35,219.219 [log.py:35] - DEBUG - LoopThread thread exit |
| 94 | +2021-07-21 17:21:35,219.219 [log.py:35] - DEBUG - on_disconnect:rc:0,userdata:None |
| 95 | +``` |
| 96 | +观察日志可以看到成功设备取消订阅了Topic. |
0 commit comments