diff --git a/docs/Advanced_development/zh/QuecPythonCloud/Aliyun.md b/docs/Advanced_development/zh/QuecPythonCloud/Aliyun.md index ccb90cfcd22729fa7148cd2354997ffc72235118..d0d8c0c238350715aaddedab008da87a9f2b3c2a 100644 --- a/docs/Advanced_development/zh/QuecPythonCloud/Aliyun.md +++ b/docs/Advanced_development/zh/QuecPythonCloud/Aliyun.md @@ -5,6 +5,7 @@ | **版本** | **日期** | **作者** | **变更表述** | | -------- | ---------- | -------- | ------------ | | 1.0 | 2021-09-29 | Chic | 初始版本 | +| 1.1 | 2022-01-29 | Chic | 使用sys_bus | @@ -107,80 +108,129 @@ PASSWORD = b'EC01986E912222B0A82049A874AF183D0A490E5E' 示例代码: ```python -import log + import utime import checkNet from aLiYun import aLiYun - -''' -下面两个全局变量是必须有的,用户可以根据自己的实际项目修改下面两个全局变量的值, -在执行用户代码前,会先打印这两个变量的值。 -''' -PROJECT_NAME = "QuecPython_AliYin_example" -PROJECT_VERSION = "1.0.0" -checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION) - - -# 设置日志输出级别 -log.basicConfig(level=log.INFO) -aliYun_log = log.getLogger("ALiYun") - -productKey = "a1llZotKkCm" # 产品标识(参照阿里云应用开发指导) -productSecret = None # 产品密钥(使用一机一密认证时此参数传入None,参照阿里云应用开发指导) -DeviceName = "11111" # 设备名称(参照阿里云应用开发指导) -# 设备密钥(使用一型一密认证此参数传入None,免预注册暂不支持,需先在云端创建设备,参照阿里云应用开发指导) -DeviceSecret = "03c5e91aea167edead7d381d4b41ed71" - -state = 1 - -# 回调函数 - - -def sub_cb(topic, msg): - global state - aliYun_log.info( - "Subscribe Recv: Topic={},Msg={}".format( - topic.decode(), msg.decode())) - state -= 1 +import _thread +import sys_bus + + +class SYSTOPIC_Class(object): + RRPC = "rrpc" + OTA = "ota" + PUB = "pub" + SUB = "sub" + + +class aliyun_Class(object): + def __init__(self): + aliyun_Class.inst = self + self.productKey = "a1llZotKkCm" # 产品标识 + self.productSecret = 'mj7qKfEn73y07gyK' # 产品密钥(一机一密认证此参数传入None) + self.DeviceSecret = None # 设备密钥(一型一密认证此参数传入None) + self.DeviceName = "Chic_001" # 设备名称 + + self.subscribe_topic1 = "/" + self.productKey + \ + "/" + self.DeviceName + "/user/123" + self.subscribe_topic2 = "/" + self.productKey + "/" + self.DeviceName + "/user/qq" + self.publish_topic1 = "/" + self.productKey + "/" + self.DeviceName + "/user/qq" + + # 创建aliyun连接对象 + self.ali = aLiYun( + self.productKey, + self.productSecret, + self.DeviceName, + self.DeviceSecret) + # 设置mqtt连接属性 + clientID = b'clientID' # 自定义字符(不超过64) + ret = self.ali.setMqtt( + clientID, + clean_session=False, + keepAlive=60, + reconn=True) # False True + + # 设置回调函数 + self.ali.setCallback(self.ali_sub_cb) + + def ali_sub_cb(self, topic, msg): # 回调函数 + if topic.decode().find(SYSTOPIC.RRPC) != -1: + sys_bus.publish(SYSTOPIC.RRPC, {"topic": topic, "msg": msg}) + elif topic.decode().find(SYSTOPIC.OTA) != -1: + sys_bus.publish(SYSTOPIC.OTA, {"topic": topic, "msg": msg}) + else: + sys_bus.publish(SYSTOPIC.SUB, {"topic": topic, "msg": msg}) + + def ali_start(self): + # 运行 + self.ali.start() + print('Runing') + # aLiYun.disconnect() + + def ali_subscribe_topic(self): + # 订阅主题 + self.ali.subscribe(self.subscribe_topic1, qos=0) + self.ali.subscribe(self.subscribe_topic2, qos=0) + + def ali_publish(self, topic, msg): + ret = self.ali.getAliyunSta() + # print(ret) + if ret == 0: + try: + self.ali.publish(msg.get('topic'), msg.get("msg"), qos=0) + except BaseException: + print('!!!!!!!!!!发送失败') + + +class Handler(object): + @classmethod + def sub(cls, topic, msg): + print( + "Subscribe Recv: Topic={},Msg={}".format( + msg.get('topic').decode(), + msg.get("msg").decode())) + + @classmethod + def pub(cls, msg): + while True: + sys_bus.publish(SYSTOPIC.PUB, msg) + utime.sleep_ms(2000) + + @classmethod + def ota(cls, topic, msg): + """处理完ota的信息后,同步发送""" + msg = {"topic": "xxx", "msg": "xxx"} + """同步publish,同步情况下会等待所有topic对应的处理函数处理完才会退出""" + sys_bus.publish_sync(SYSTOPIC.PUB, msg) + + @classmethod + def rrpc(cls, topic, msg): + """发布rrpc执行下列操作""" + msg = {"topic": "xxx", "msg": "xxx"} + """异步publish, """ + sys_bus.publish(SYSTOPIC.PUB, msg) if __name__ == '__main__': - ''' - 手动运行本例程时,可以去掉该延时,如果将例程文件名改为main.py,希望开机自动运行时,需要加上该延时, - 否则无法从CDC口看到下面的 poweron_print_once() 中打印的信息 - ''' - utime.sleep(5) + PROJECT_NAME = "QuecPython" + PROJECT_VERSION = "1.0.0" + checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION) checknet.poweron_print_once() - ''' - 如果用户程序包含网络相关代码,必须执行 wait_network_connected() 等待网络就绪(拨号成功); - 如果是网络无关代码,可以屏蔽 wait_network_connected() - 【本例程必须保留下面这一行!】 - ''' checknet.wait_network_connected() - # 创建aliyun连接对象 - ali = aLiYun(productKey, productSecret, DeviceName, DeviceSecret) - - # 设置mqtt连接属性 - clientID = b'11111clientID' # 自定义字符(不超过64) - ali.setMqtt(clientID, clean_session=False, keepAlive=300) - - # 设置回调函数 - ali.setCallback(sub_cb) - topic = '/broadcast/a1llZotKkCm/123' # 云端自定义或自拥有的Topic - # 订阅主题 - ali.subscribe(topic) - # 发布消息 - ali.publish(topic, "hello world") - # 运行 - ali.start() - - while True: - if state: - pass - else: - ali.disconnect() - break + aliyunClass = aliyun_Class() + aliyunClass.ali_subscribe_topic() + + SYSTOPIC = SYSTOPIC_Class() + sys_bus.subscribe(SYSTOPIC.RRPC, Handler.rrpc) + sys_bus.subscribe(SYSTOPIC.OTA, Handler.ota) + sys_bus.subscribe(SYSTOPIC.SUB, Handler.sub) + sys_bus.subscribe(SYSTOPIC.PUB, aliyunClass.ali_publish) + + tuple = ({"topic": aliyunClass.publish_topic1, "msg": "hello world"},) + _thread.start_new_thread(Handler.pub, tuple) + + aliyunClass.ali_start() ``` 接下来就可以下载验证了,python代码不需要编译,直接通过QPYcom工具把.py文件下载到模块中运行。 @@ -189,10 +239,13 @@ if __name__ == '__main__': 下载.py文件到模组运行: -![](media/AliyunCloud_IoT_210324_011.png) +![AliyunCloud_IoT_210324_011](media\AliyunCloud_IoT_210324_011.png) 下载之后,手动让脚本运行起来。 -![](media/AliyunCloud_IoT_210324_012.png) +![AliyunCloud_IoT_210324_012](media\AliyunCloud_IoT_210324_012.png) ## 配套代码 + + + 下载代码 \ No newline at end of file diff --git a/docs/Advanced_development/zh/QuecPythonCloud/TencentCloud.md b/docs/Advanced_development/zh/QuecPythonCloud/TencentCloud.md index 11b545ae0f5aa606e8515d5ae3f336f5e6256020..dd623499d91a4dcfa68edfed149dba3c84feef9d 100644 --- a/docs/Advanced_development/zh/QuecPythonCloud/TencentCloud.md +++ b/docs/Advanced_development/zh/QuecPythonCloud/TencentCloud.md @@ -5,6 +5,7 @@ | **版本** | **日期** | **作者** | **变更表述** | | -------- | ---------- | -------- | ------------ | | 1.0 | 2021-09-29 | Chic | 初始版本 | +| 1.1 | 2022-01-29 | Chic | 使用sys_bus | @@ -75,67 +76,112 @@ (2)本代码做了两个简单的规则转发示例,具体原理是:代码中向**topic = "3ICA4ULOXI/QuecPython_test/data"**发布消息,同时会订阅到此主题的数据(原因是做了规则转发且此主题支持发布与订阅);代码中向**pub_topic = "3ICA4ULOXI/QuecPython_test/event"**发布消息,会订阅到**sub_topic = "3ICA4ULOXI/QuecPython_test/control"**主题的消息(原因是做了规则转发) ```python -from TenCentYun import TXyun -import log + import utime import checkNet +from TenCentYun import TXyun +import _thread +import sys_bus + +class SYSTOPIC_Class(object): + RRPC = "rrpc" + OTA = "ota" + PUB = "pub" + SUB = "sub" + +class TXyun_Class(object): + def __init__(self): + self.productID = "X3Z30XABBU" # 产品标识 + self.devicename = "001" # 设备名称 + self.devicePsk = None # 设备密钥(一型一密认证此参数传入None) + self.ProductSecret = 'TeXbX8bZ40vutWHGxfUGJEZS' # 产品密钥(一机一密认证此参数传入None) + + # 输入自定义的Topic + self.subscribe_topic1 = 'X3Z30XABBU/{}/data'.format(self.devicename) + self.publish_topic1 = 'X3Z30XABBU/{}/data'.format(self.devicename) + + self.tenxun = TXyun( + self.productID, + self.devicename, + self.devicePsk, + self.ProductSecret) # 创建连接对象 + self.tenxun.setMqtt() # 设置mqtt + self.tenxun.setCallback(self.sub_cb) # 设置消息回调函数 + + def sub_cb(self, topic, msg): # 云端消息响应回调函数 + if topic.decode().find(SYSTOPIC.RRPC) != -1: + sys_bus.publish(SYSTOPIC.RRPC, {"topic": topic, "msg": msg}) + elif topic.decode().find(SYSTOPIC.OTA) != -1: + sys_bus.publish(SYSTOPIC.OTA, {"topic": topic, "msg": msg}) + else: + sys_bus.publish(SYSTOPIC.SUB, {"topic": topic, "msg": msg}) + + def TXyun_start(self): + # 运行 + self.tenxun.start() + print('start') + + def TXyun_subscribe_topic(self): + # 订阅主题 + self.tenxun.subscribe(self.subscribe_topic1, qos=0) + # self.tenxun.subscribe(self.subscribe_topic2, qos=0) + + def TXyun_publish(self, topic, msg): + try: + self.tenxun.publish(msg.get('topic'), msg.get("msg"), qos=0) + except BaseException: + print('!!!!!!!!!!发送失败') + +class Handler(object): + @classmethod + def sub(cls, topic, msg): + print( + "Subscribe Recv: Topic={},Msg={}".format( + msg.get('topic').decode(), + msg.get("msg").decode())) + + @classmethod + def pub(cls, msg): + while True: + sys_bus.publish(SYSTOPIC.PUB, msg) + utime.sleep_ms(2000) + + @classmethod + def ota(cls, topic, msg): + """处理完ota的信息后,同步发送""" + msg = {"topic": "xxx", "msg": "xxx"} + """同步publish,同步情况下会等待所有topic对应的处理函数处理完才会退出""" + sys_bus.publish_sync(SYSTOPIC.PUB, msg) + + @classmethod + def rrpc(cls, topic, msg): + """发布rrpc执行下列操作""" + msg = {"topic": "xxx", "msg": "xxx"} + """异步publish, """ + sys_bus.publish(SYSTOPIC.PUB, msg) +if __name__ == '__main__': + PROJECT_NAME = "QuecPython" + PROJECT_VERSION = "1.0.0" + checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION) + checknet.poweron_print_once() + checknet.wait_network_connected() -''' -下面两个全局变量是必须有的,用户可以根据自己的实际项目修改下面两个全局变量的值 -''' -PROJECT_NAME = "QuecPython_TencentYun_example" -PROJECT_VERSION = "1.0.0" - -checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION) - -# 设置日志输出级别 -log.basicConfig(level=log.INFO) -txyun_log = log.getLogger("TenCentYun") - -''' -腾讯云物联网套件客户端功能 -''' -productID = "3ICA4ULOXI" # 产品标识(参照接入腾讯云应用开发指导) -devicename = "QuecPython_test" # 设备名称(参照接入腾讯云应用开发指导) -devicePsk = "1uZhJRjRTQnBG8TVHKZ2xw==" # 设备密钥(一型一密认证此参数传入None, 参照接入腾讯云应用开发指导) -ProductSecret = None # 产品密钥(一机一密认证此参数传入None,参照接入腾讯云应用开发指导) + TXyunClass = TXyun_Class() + TXyunClass.TXyun_subscribe_topic() -tenxun = TXyun(productID, devicename, devicePsk, ProductSecret) # 创建连接对象 -state = 5 + SYSTOPIC = SYSTOPIC_Class() + sys_bus.subscribe(SYSTOPIC.RRPC, Handler.rrpc) + sys_bus.subscribe(SYSTOPIC.OTA, Handler.ota) + sys_bus.subscribe(SYSTOPIC.SUB, Handler.sub) + sys_bus.subscribe(SYSTOPIC.PUB, TXyunClass.TXyun_publish) -def sub_cb(topic, msg): # 云端消息响应回调函数 - global state - txyun_log.info("Subscribe Recv: Topic={},Msg={}".format(topic.decode(), msg.decode())) - state -= 1 + msg = '{{"DeviceName":"{}","msg":"test publish"}}'.format(TXyunClass.devicename) + tuple = ({"topic": TXyunClass.publish_topic1, "msg": msg},) + _thread.start_new_thread(Handler.pub, tuple) + TXyunClass.TXyun_start() -if __name__ == '__main__': - stagecode, subcode = checknet.wait_network_connected(30) - if stagecode == 3 and subcode == 1: - txyun_log.info('Network connection successful!') - - tenxun.setMqtt(clean_session=True, keepAlive=300, reconn=True) # 设置mqtt - tenxun.setCallback(sub_cb) # 设置消息回调函数 - topic = "3ICA4ULOXI/QuecPython_test/data" # 输入发布的Topic - sub_topic = "3ICA4ULOXI/QuecPython_test/control" - pub_topic = "3ICA4ULOXI/QuecPython_test/event" - tenxun.subscribe(sub_topic, 1) - tenxun.subscribe(topic, 1) # 订阅Topic - tenxun.start() - while True: - tenxun.publish(topic, "123456789", 1) # 发布消息 - tenxun.publish(pub_topic, "987654321", 1) # 发布消息 - utime.sleep(5) - - while 1: - if state: - pass - else: - tenxun.disconnect() - break - else: - txyun_log.info('Network connection failed! stagecode = {}, subcode = {}'.format(stagecode, subcode)) ``` 接下来就可以下载验证了,QuecPython代码不需要编译,直接通过QPYcom工具把.py文件下载到模块中运行。 @@ -144,12 +190,15 @@ if __name__ == '__main__': 下载.py文件到模组中: -![TencentCloud_10](media/TencentCloud_10.png) +![TencentCloud_10](media\TencentCloud_10.png) 下载之后,手动让脚本运行起来,查看现象如下。 -![TencentCloud_11](media/TencentCloud_11.png) +![TencentCloud_11](media\TencentCloud_11.png) +## 配套代码 + + 下载代码 \ No newline at end of file diff --git a/docs/Advanced_development/zh/QuecPythonCloud/code/Aliyun_sysbus_Chic.py b/docs/Advanced_development/zh/QuecPythonCloud/code/Aliyun_sysbus_Chic.py new file mode 100644 index 0000000000000000000000000000000000000000..329b8b33b15c0d9ad8422184a88fa03a1cf15c5e --- /dev/null +++ b/docs/Advanced_development/zh/QuecPythonCloud/code/Aliyun_sysbus_Chic.py @@ -0,0 +1,123 @@ + +import utime +import checkNet +from aLiYun import aLiYun +import _thread +import sys_bus + + +class SYSTOPIC_Class(object): + RRPC = "rrpc" + OTA = "ota" + PUB = "pub" + SUB = "sub" + + +class aliyun_Class(object): + def __init__(self): + aliyun_Class.inst = self + self.productKey = "a1llZotKkCm" # 产品标识 + self.productSecret = 'mj7qKfEn73y07gyK' # 产品密钥(一机一密认证此参数传入None) + self.DeviceSecret = None # 设备密钥(一型一密认证此参数传入None) + self.DeviceName = "Chic_001" # 设备名称 + + self.subscribe_topic1 = "/" + self.productKey + \ + "/" + self.DeviceName + "/user/123" + self.subscribe_topic2 = "/" + self.productKey + "/" + self.DeviceName + "/user/qq" + self.publish_topic1 = "/" + self.productKey + "/" + self.DeviceName + "/user/qq" + + # 创建aliyun连接对象 + self.ali = aLiYun( + self.productKey, + self.productSecret, + self.DeviceName, + self.DeviceSecret) + # 设置mqtt连接属性 + clientID = b'clientID' # 自定义字符(不超过64) + ret = self.ali.setMqtt( + clientID, + clean_session=False, + keepAlive=60, + reconn=True) # False True + + # 设置回调函数 + self.ali.setCallback(self.ali_sub_cb) + + def ali_sub_cb(self, topic, msg): # 回调函数 + if topic.decode().find(SYSTOPIC.RRPC) != -1: + sys_bus.publish(SYSTOPIC.RRPC, {"topic": topic, "msg": msg}) + elif topic.decode().find(SYSTOPIC.OTA) != -1: + sys_bus.publish(SYSTOPIC.OTA, {"topic": topic, "msg": msg}) + else: + sys_bus.publish(SYSTOPIC.SUB, {"topic": topic, "msg": msg}) + + def ali_start(self): + # 运行 + self.ali.start() + print('Runing') + # aLiYun.disconnect() + + def ali_subscribe_topic(self): + # 订阅主题 + self.ali.subscribe(self.subscribe_topic1, qos=0) + self.ali.subscribe(self.subscribe_topic2, qos=0) + + def ali_publish(self, topic, msg): + ret = self.ali.getAliyunSta() + # print(ret) + if ret == 0: + try: + self.ali.publish(msg.get('topic'), msg.get("msg"), qos=0) + except BaseException: + print('!!!!!!!!!!发送失败') + + +class Handler(object): + @classmethod + def sub(cls, topic, msg): + print( + "Subscribe Recv: Topic={},Msg={}".format( + msg.get('topic').decode(), + msg.get("msg").decode())) + + @classmethod + def pub(cls, msg): + while True: + sys_bus.publish(SYSTOPIC.PUB, msg) + utime.sleep_ms(2000) + + @classmethod + def ota(cls, topic, msg): + """处理完ota的信息后,同步发送""" + msg = {"topic": "xxx", "msg": "xxx"} + """同步publish,同步情况下会等待所有topic对应的处理函数处理完才会退出""" + sys_bus.publish_sync(SYSTOPIC.PUB, msg) + + @classmethod + def rrpc(cls, topic, msg): + """发布rrpc执行下列操作""" + msg = {"topic": "xxx", "msg": "xxx"} + """异步publish, """ + sys_bus.publish(SYSTOPIC.PUB, msg) + + +if __name__ == '__main__': + PROJECT_NAME = "QuecPython" + PROJECT_VERSION = "1.0.0" + checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION) + checknet.poweron_print_once() + checknet.wait_network_connected() + + aliyunClass = aliyun_Class() + aliyunClass.ali_subscribe_topic() + + SYSTOPIC = SYSTOPIC_Class() + sys_bus.subscribe(SYSTOPIC.RRPC, Handler.rrpc) + sys_bus.subscribe(SYSTOPIC.OTA, Handler.ota) + sys_bus.subscribe(SYSTOPIC.SUB, Handler.sub) + sys_bus.subscribe(SYSTOPIC.PUB, aliyunClass.ali_publish) + + tuple = ({"topic": aliyunClass.publish_topic1, "msg": "hello world"},) + _thread.start_new_thread(Handler.pub, tuple) + + aliyunClass.ali_start() diff --git a/docs/Advanced_development/zh/QuecPythonCloud/code/TX_sysbus_Chic.py b/docs/Advanced_development/zh/QuecPythonCloud/code/TX_sysbus_Chic.py new file mode 100644 index 0000000000000000000000000000000000000000..54443f865c5fa3e12b9fbd25418662c3629937b9 --- /dev/null +++ b/docs/Advanced_development/zh/QuecPythonCloud/code/TX_sysbus_Chic.py @@ -0,0 +1,105 @@ + +import utime +import checkNet +from TenCentYun import TXyun +import _thread +import sys_bus + +class SYSTOPIC_Class(object): + RRPC = "rrpc" + OTA = "ota" + PUB = "pub" + SUB = "sub" + +class TXyun_Class(object): + def __init__(self): + self.productID = "X3Z30XABBU" # 产品标识 + self.devicename = "001" # 设备名称 + self.devicePsk = None # 设备密钥(一型一密认证此参数传入None) + self.ProductSecret = 'TeXbX8bZ40vutWHGxfUGJEZS' # 产品密钥(一机一密认证此参数传入None) + + # 输入自定义的Topic + self.subscribe_topic1 = 'X3Z30XABBU/{}/data'.format(self.devicename) + self.publish_topic1 = 'X3Z30XABBU/{}/data'.format(self.devicename) + + self.tenxun = TXyun( + self.productID, + self.devicename, + self.devicePsk, + self.ProductSecret) # 创建连接对象 + self.tenxun.setMqtt() # 设置mqtt + self.tenxun.setCallback(self.sub_cb) # 设置消息回调函数 + + def sub_cb(self, topic, msg): # 云端消息响应回调函数 + if topic.decode().find(SYSTOPIC.RRPC) != -1: + sys_bus.publish(SYSTOPIC.RRPC, {"topic": topic, "msg": msg}) + elif topic.decode().find(SYSTOPIC.OTA) != -1: + sys_bus.publish(SYSTOPIC.OTA, {"topic": topic, "msg": msg}) + else: + sys_bus.publish(SYSTOPIC.SUB, {"topic": topic, "msg": msg}) + + def TXyun_start(self): + # 运行 + self.tenxun.start() + print('start') + + def TXyun_subscribe_topic(self): + # 订阅主题 + self.tenxun.subscribe(self.subscribe_topic1, qos=0) + # self.tenxun.subscribe(self.subscribe_topic2, qos=0) + + def TXyun_publish(self, topic, msg): + try: + self.tenxun.publish(msg.get('topic'), msg.get("msg"), qos=0) + except BaseException: + print('!!!!!!!!!!发送失败') + +class Handler(object): + @classmethod + def sub(cls, topic, msg): + print( + "Subscribe Recv: Topic={},Msg={}".format( + msg.get('topic').decode(), + msg.get("msg").decode())) + + @classmethod + def pub(cls, msg): + while True: + sys_bus.publish(SYSTOPIC.PUB, msg) + utime.sleep_ms(2000) + + @classmethod + def ota(cls, topic, msg): + """处理完ota的信息后,同步发送""" + msg = {"topic": "xxx", "msg": "xxx"} + """同步publish,同步情况下会等待所有topic对应的处理函数处理完才会退出""" + sys_bus.publish_sync(SYSTOPIC.PUB, msg) + + @classmethod + def rrpc(cls, topic, msg): + """发布rrpc执行下列操作""" + msg = {"topic": "xxx", "msg": "xxx"} + """异步publish, """ + sys_bus.publish(SYSTOPIC.PUB, msg) + +if __name__ == '__main__': + PROJECT_NAME = "QuecPython" + PROJECT_VERSION = "1.0.0" + checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION) + checknet.poweron_print_once() + checknet.wait_network_connected() + + TXyunClass = TXyun_Class() + TXyunClass.TXyun_subscribe_topic() + + SYSTOPIC = SYSTOPIC_Class() + sys_bus.subscribe(SYSTOPIC.RRPC, Handler.rrpc) + sys_bus.subscribe(SYSTOPIC.OTA, Handler.ota) + sys_bus.subscribe(SYSTOPIC.SUB, Handler.sub) + sys_bus.subscribe(SYSTOPIC.PUB, TXyunClass.TXyun_publish) + + msg = '{{"DeviceName":"{}","msg":"test publish"}}'.format(TXyunClass.devicename) + tuple = ({"topic": TXyunClass.publish_topic1, "msg": msg},) + _thread.start_new_thread(Handler.pub, tuple) + + TXyunClass.TXyun_start() diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_011.png b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_011.png index 0f43d769e739ce8e4b432e625891f194ab5ac922..08efc29a2e50ab32089881a36d1e1e3a22d7c89c 100644 Binary files a/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_011.png and b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_011.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_012.png b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_012.png index 7449980c169dafd0f3c24781d24842fc5da5434c..f0aeb590ea257c531d979068a8cd2c8ce15c9da2 100644 Binary files a/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_012.png and b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_012.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_10.png b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_10.png index b0326c47a95ec1169efffc1d23b91555924261b0..9184302934e851a613c116b14152f447f5e78267 100644 Binary files a/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_10.png and b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_10.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_11.png b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_11.png index fa16648bc619ad78181cad86ce3792f123c7aa1e..f2c10af8807fc62afc6308dea0d32d2c8ac12854 100644 Binary files a/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_11.png and b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_11.png differ