diff --git a/docs/Advanced_development/zh/QuecPythonCloud/QuecCloud.md b/docs/Advanced_development/zh/QuecPythonCloud/QuecCloud.md
index f22211bfe8bad0f0981c50ef9ebf88210e3fb82e..1334a7124fe64f168fb517e0f838d4002536f17a 100644
--- a/docs/Advanced_development/zh/QuecPythonCloud/QuecCloud.md
+++ b/docs/Advanced_development/zh/QuecPythonCloud/QuecCloud.md
@@ -1,197 +1,196 @@
-# QuecPython 接入QuecCloud
+## 文档历史
-文档主要介绍如何使用QuecCloud移远云,QuecCloud物联网平台,为客户的多种终端设备提供安全可靠的网络快速接入、数据传输、数据存储、数据管理等完整的交互服务。可通过云端调用API实现海量设备和应用的数据传输,达到控制设备和采集数据的目的。
+| **版本** | **日期** | **作者** | **变更表述** |
+| -------- | ---------- | -------- | ------------ |
+| 1.0 | 2021-04-30 | Chic | 初始版本 |
-下面主要从MQTT连接方式讲解,通过阅读本文,您将了解到QuecPython连接QuecCloud的过程操作和验证实验理论。
-## 云端设置
-移远云首页:
+## 平台设置
-### 进入平台
-
-点击【控制台】
-
-
-
-### 创建产品
-
-
-
-
-
-### 添加设备
-
-
-
-进入【设备列表】后,点击【+添加设备】
-
-
-
-
-
-IMEI在模组的丝印面上可以找到,也可以通过AT指令“AT+GSN”读取。
-
-至此,手动添加设备已经完成。
-
-
-
-### 获取Secret
-
-在设备详情页面里面记下Secret,用于连接移远云平台。
-
-
-
-批量时可通过API接口获取Secret,用于连接移远云平台
-
-文档中心说明:[https://iot.quectel.com/doc_getStart.html\#api_AcquireTheInformation](https://iot.quectel.com/doc_getStart.html#api_AcquireTheInformation)
-
-
-
-### 生成连接信息
-
-```
-CLIENT_ID = IMEI
-
-SERVER = b"southbound.quectel.com"
-
-PORT = 1883
+移远云首页:
-USER = IMEI
-
-PASSWORD = b '7fe0570d91f2ef2bcd4d5683f68521e5'
-```
+### 进入平台
-**CLIENT_ID:**固定为IMEI
+
-**SERVER:**固定为"southbound.quectel.com"
+### 创建项目
-**PORT:**固定为1883
+点击进入【研发中心】后,点击【创建新项目】
-**USER:**固定为IMEI
+
-**PASSWORD:**上一步骤获取的Secret
+设置项目名称:
-### 上报和下发数据
+
-调试设备时,上传、下发的数据都可以在【设备详情】---【数据交互】查看:
+### 创建产品
-
+在创建的项目表中,点击【查看产品】 -> 【创建产品】
-## 软件设计
+
-在QuecCloud平台取得Secret之后,即可在umqtt连接云平台,模块的IMEI在代码中自动获取,其IMEI号和Secret号码在平台中添加的设备一一对应,连接云平台的地址和端口固定不变,因此在程序中设定Secret的值之后,就可以运行实验了。
+根据需求自定义产品:
-示例代码:
+连网方式选择:蜂窝移动
-```python
-from umqtt import MQTTClient
+数据格式:Json时,根据物模型的功能点解释数据; 透传时,数据原样直达模组,自行解释数据。
-import modem
+
-import utime
+点击【下一步】选择一个产品所用的模组型号,便于跟踪管理产品。
-import _thread
+
-IMEI = None # modem.getDevImei()
+产品创建完成后,可看到新增的产品:
-Secret = '7fe0570d91f2ef2bcd4d5683f68521e5'
+
-address = "southbound.quectel.com"
-Port = 1883
-def GetDevImei():
+### 定义物模型
- global IMEI
+点击【产品信息】 -> 【功能定义】,根据自己的需求增加产品的功能。注意:这里的“**功能ID**”序号,在代码上用到。
- IMEI = modem.getDevImei()
+
- #print(IMEI)
-state = 0
-def sub_cb(topic, msg):
+至此,平台创建操作已经完成。
- global state
- print(
- "Subscribe Recv: Topic={},Msg={}".format(
+### 认证设备
- topic.decode(),
+模组连接平台时,将自动创建设备并认证,无需手动添加设备。
- msg.decode()))
+
- state = 1
+目前还没有设备,设备列表为空。
-def MQTT_Init():
+
- # 创建一个mqtt实例
+### 获取Secret
- c = MQTTClient(
+“研发中心” -> “查看产品” -> “产品信息” -> 点击【查看】,ProductKey和ProductSecret将发送到您的注册邮箱,用于连接平台。
- IMEI,
+
- address,
+
- Port,
+获取ProductKey、ProductSecret之后,就可以使用QuecPython代码连接平台了。
- user=IMEI,
+**提醒:所有操作都在“研发中心”**
- password=Secret)
- # 设置消息回调
- c.set_callback(sub_cb)
-
- # 建立连接
+## 软件设计
- c.connect()
+示例代码:
- # 订阅主题
+```python
+import quecIot
+import quecTtlv
+
+key = "p1116T" # 填入产品key
+src = "bGpkVnordkFodFZj" # 填入产品密钥
+
+DEF_ID_TYPE = ['0', '温度', '湿度', '光照']
+DEF_DATA_TYPE0 = 'bool'
+DEF_DATA_TYPE1 = 'num'
+DEF_DATA_TYPE2 = 'byte'
+DEF_DATA_TYPE3 = 'struct'
+DEF_DATA_TYPE = [
+ DEF_DATA_TYPE0,
+ DEF_DATA_TYPE1,
+ DEF_DATA_TYPE2,
+ DEF_DATA_TYPE3]
+# 0 布尔
+# 1 数值
+# 2 Byt
+# 3 结构体
+
+
+class Quecthing:
+ def __init__(self):
+ # ''' 初始化qucsdk '''
+ quecIot.init()
+ # ''' 注册事件回调函数 '''
+ quecIot.setEventCB(self.eventCB)
+ # ''' 配置产品信息'''
+ quecIot.setProductinfo(key, src)
+ # ''' 配置服务器信息,可选,默认连接MQTT生产环境服务器 '''
+ # quecIot.setServer(1, "http://iot-south.quectel.com:2883")
+ # ''' 配置PDP context Id,可选,默认为1 '''
+ # quecIot.setPdpContextId(1)
+ # ''' 配置lifetime,可选,MQTT默认为120 '''
+ # quecIot.setLifetime(120)
+ # ''' 配置外部MCU标识号和版本号,可选,如没有外部MCU则不需要配置 '''
+ # quecIot.setMcuVersion("MCU1", "1_0_0")
+ # ''' 启动云平台连接 '''
+ quecIot.setConnmode(1)
+ return
+
+ @staticmethod
+ def eventCB(data):
+ print("event:", data)
+
+ if 5 == data[0] and 10210 == data[1]:
+ data = data[2]
+ listret = quecTtlv.nodeGet(data)
+ print(listret)
+ listretlen = len(listret)
+ for i in range(listretlen):
+ id = listret[i][0]
+ type = listret[i][1]
+ if DEF_DATA_TYPE[type] == DEF_DATA_TYPE0:
+ ret = quecTtlv.idGetBool(data, id)
+ print(DEF_ID_TYPE[id], ret)
+ elif DEF_DATA_TYPE[type] == DEF_DATA_TYPE1:
+ ret = quecTtlv.idGetNum(data, id)
+ print(DEF_ID_TYPE[id], ret)
+
+
+if __name__ == '__main__':
+ Quecthing()
+```
- c.subscribe('quec/{}/down'.format(IMEI))
+接下来就可以下载验证了,python代码不需要编译,直接通过QPYcom工具把.py文件下载到模块中运行。
- # 发布消息
+## 下载验证
- c.publish('quec/{}/up'.format(IMEI), b"test publish")
+下载.py文件到模组运行:
- while True:
+
- c.wait_msg()
+下载之后,手动让脚本运行起来。
- if state == 1:
+
- break
+回到设备管理平台的设备管理列表中:
- # 关闭连接
+
- c.disconnect()
+设备列表自动新增了一个设备,已经连接平台并认证了。
-def main():
+
- GetDevImei()
- MQTT_Init()
-if __name__ == "__main__":
+## 下发数据
- main()
-```
+移远IoT设备管理平台提供设备调试功能,
-接下来就可以下载验证了,python代码不需要编译,直接通过QPYcom工具把.py文件下载到模块中运行。
+
-## 下载验证
+进入“设备详细”页面,点击【设备调试】,看到调试界面,改变数据,【发送指令】即可,模组将收到数据。
-下载.py文件到模组运行:
+
-
+模组收到数据后,在代码里解释,QPYcom调试工具显示如下:
-下载之后,手动让脚本运行起来。
+
-
-
## 配套代码
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/code/QuecIoTCloud.py b/docs/Advanced_development/zh/QuecPythonCloud/code/QuecIoTCloud.py
new file mode 100644
index 0000000000000000000000000000000000000000..751dcd08f368f85ddce664f904e34ab643e4bbb2
--- /dev/null
+++ b/docs/Advanced_development/zh/QuecPythonCloud/code/QuecIoTCloud.py
@@ -0,0 +1,64 @@
+import quecIot
+import quecTtlv
+
+key = "p1116T" # 填入产品key
+src = "bGpkVnordkFodFZj" # 填入产品密钥
+
+DEF_ID_TYPE = ['0', '温度', '湿度', '光照']
+DEF_DATA_TYPE0 = 'bool'
+DEF_DATA_TYPE1 = 'num'
+DEF_DATA_TYPE2 = 'byte'
+DEF_DATA_TYPE3 = 'struct'
+DEF_DATA_TYPE = [
+ DEF_DATA_TYPE0,
+ DEF_DATA_TYPE1,
+ DEF_DATA_TYPE2,
+ DEF_DATA_TYPE3]
+# 0 布尔
+# 1 数值
+# 2 Byt
+# 3 结构体
+
+
+class Quecthing:
+ def __init__(self):
+ # ''' 初始化qucsdk '''
+ quecIot.init()
+ # ''' 注册事件回调函数 '''
+ quecIot.setEventCB(self.eventCB)
+ # ''' 配置产品信息'''
+ quecIot.setProductinfo(key, src)
+ # ''' 配置服务器信息,可选,默认连接MQTT生产环境服务器 '''
+ # quecIot.setServer(1, "http://iot-south.quectel.com:2883")
+ # ''' 配置PDP context Id,可选,默认为1 '''
+ # quecIot.setPdpContextId(1)
+ # ''' 配置lifetime,可选,MQTT默认为120 '''
+ # quecIot.setLifetime(120)
+ # ''' 配置外部MCU标识号和版本号,可选,如没有外部MCU则不需要配置 '''
+ # quecIot.setMcuVersion("MCU1", "1_0_0")
+ # ''' 启动云平台连接 '''
+ quecIot.setConnmode(1)
+ return
+
+ @staticmethod
+ def eventCB(data):
+ print("event:", data)
+
+ if 5 == data[0] and 10210 == data[1]:
+ data = data[2]
+ listret = quecTtlv.nodeGet(data)
+ print(listret)
+ listretlen = len(listret)
+ for i in range(listretlen):
+ id = listret[i][0]
+ type = listret[i][1]
+ if DEF_DATA_TYPE[type] == DEF_DATA_TYPE0:
+ ret = quecTtlv.idGetBool(data, id)
+ print(DEF_ID_TYPE[id], ret)
+ elif DEF_DATA_TYPE[type] == DEF_DATA_TYPE1:
+ ret = quecTtlv.idGetNum(data, id)
+ print(DEF_ID_TYPE[id], ret)
+
+
+if __name__ == '__main__':
+ Quecthing()
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_01.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..614a7b8539bad8485a9e1accb0b02fc8a60ac224
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_01.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_02.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..9e54b39bef6c5aa6290ecd7cb8d9166d311cef07
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_02.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_03.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..5c7244c13aeaec346556e336a840a800bea49cc9
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_03.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_04.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..456ae8874d0e9ecaa2a1f36de1ff6c9833515bb4
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_04.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_05.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_05.png
new file mode 100644
index 0000000000000000000000000000000000000000..1d58fbee9a8a7a280af8963383a3b01aa0f7b9a6
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_05.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_06.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_06.png
new file mode 100644
index 0000000000000000000000000000000000000000..6543f10084c45867b7d9e0e4265e74292842cfe2
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_06.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_07.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_07.png
new file mode 100644
index 0000000000000000000000000000000000000000..0b913c4e90ff7a5f2ef00179ce4989ffcfbf6833
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_07.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_08.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_08.png
new file mode 100644
index 0000000000000000000000000000000000000000..224e2ee147ee984e863b9618e7e1077d2a891e9b
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_08.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_09.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_09.png
new file mode 100644
index 0000000000000000000000000000000000000000..5925e10ac2dee7a6a339d334711f54b517d6c8a5
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_09.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_10.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_10.png
new file mode 100644
index 0000000000000000000000000000000000000000..a8fde8c7554ca55fc6c5117c0db30f6af328064b
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_10.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_11.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_11.png
new file mode 100644
index 0000000000000000000000000000000000000000..dfc0b493ef3a8724ac1e8ca5445cb4118780bb4e
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_11.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_12.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_12.png
new file mode 100644
index 0000000000000000000000000000000000000000..cdf32912a2dfd94260ccbd056f12f2b0e904f75f
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_12.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_13.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_13.png
new file mode 100644
index 0000000000000000000000000000000000000000..72d27d648e44b8a284ac7864184c6bc45107f13a
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_13.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_14.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_14.png
new file mode 100644
index 0000000000000000000000000000000000000000..a58c4a7402112b3d3bda32861967e964d2d0e315
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_14.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_15.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_15.png
new file mode 100644
index 0000000000000000000000000000000000000000..a8fde8c7554ca55fc6c5117c0db30f6af328064b
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_15.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_16.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_16.png
new file mode 100644
index 0000000000000000000000000000000000000000..2631c4c57384aa68616709e6c1befdc9e6c4bbf1
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_16.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_17.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_17.png
new file mode 100644
index 0000000000000000000000000000000000000000..84f311855a2616d3ac3bb09f84403665c168daab
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_17.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_18.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_18.png
new file mode 100644
index 0000000000000000000000000000000000000000..9d898906b29096e18d897457e5c516250eb26919
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_18.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_19.png b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_19.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8fdd43eee6fadbd4baebece11b9f2ad346d7e8d
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/QuecPythonCloud_210430_19.png differ