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文件到模组运行:
-
+
下载之后,手动让脚本运行起来。
-
+
## 配套代码
+
+
+ 下载代码
\ 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文件到模组中:
-
+
下载之后,手动让脚本运行起来,查看现象如下。
-
+
+## 配套代码
+
+ 下载代码
\ 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