diff --git a/docs/Advanced_development/en/QuecPythonCloud/HuaweiCloud.md b/docs/Advanced_development/en/QuecPythonCloud/HuaweiCloud.md
index 746a290b61199b97f23e5d67ab5182467fa70a03..9ad6809b8ad604adb450663967fb914367f2ac9d 100644
--- a/docs/Advanced_development/en/QuecPythonCloud/HuaweiCloud.md
+++ b/docs/Advanced_development/en/QuecPythonCloud/HuaweiCloud.md
@@ -2,9 +2,10 @@
**Revision history**
-| **Version** | **Date** | Author | **Description** |
-| ----------- | ---------- | ------ | --------------- |
-| 1.0 | 2021-09-29 | Chic | Initial version |
+| **Version** | **Date** | Author | **Description** |
+| ----------- | ---------- | ------ | ------------------- |
+| 1.0 | 2021-09-29 | Chic | Initial version |
+| 1.1 | 2022-02-16 | Chic | equipment debugging |
@@ -22,17 +23,21 @@ Open up Huawei Cloud via the link: [www.huaweicloud.com](http://www.huaweicloud.
Click [Product]---[IoT]---[IoTDA]
-
+
### Create product
Click [Product] ---[Create product]
-
+
In terms of protocol type, please select the MQTT.
-
+
+
+Product [Model Definition]
+
+
### Add device
@@ -40,11 +45,11 @@ Click [device] ---[All devices]
> [https://console.huaweicloud.com/iotdm/?region=cn-north-4\#/dm-portal/device/all-device](https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/device/all-device)
-
+
The auto generated [Device ID] and [Device private key] will be used to generate connection info of next step after the device is registered.
-
+
### Generate connection info
@@ -52,7 +57,7 @@ Access to this address and fill in the generated device ID and Device Secret to
-
+
```
CLIENT_ID = b'5fbbb784b4ec2202e982e643_868540050954037_0_0_2021011909'
@@ -68,9 +73,9 @@ PASSWORD =b'8001a12405743199b3396943a2ed397286117a9ebab4f5dfda8dd6fafe341d94'
-
+
-
+
Note:
@@ -89,13 +94,13 @@ As for the clientId format generated via tool, the time stamp won't be verified
Fill in port address, take “\$oc/devices/{device_id}/sys/properties/report” as an example,such as “\$oc/devices/5e4e2e92ac-164aefa8fouquan1/sys/properties/report”.
-
+
\$oc/devices/{device_id}/sys/properties/report
\$oc/devices/5fbbb784b4ec2202e982e643_868540050954037/sys/properties/report
-
+
### Deliver data
@@ -113,17 +118,21 @@ HTTP-Transmission Protocol
-**Debug API**
+### Issued an order
-
+$oc/devices/{device_id}/sys/commands/request_id={request_id}
-
+\- Device side subscribing to topic with {request_id} parameter can use wildcard #. For example, topic $OC /devices/{device_id}/sys/commands/request_id={request_id} You can use $oc/devices / {device_id} / sys/commands / #
-Topic: \$oc/devices/{device_id}/sys/messages/down
+
-\$oc/devices/5fbbb784b4ec2202e982e643_1234567890123456789/sys/messages/down
+
-
+$oc/devices/{device_id}/sys/commands/request_id={request_id}
+
+$oc/devices/5fbbb784b4ec2202e982e643_869537055157730/sys/commands/#
+
+
## SW design
@@ -132,109 +141,87 @@ After getting ClientId, Username and Password on HuaweiCloud, it is approachable
Case code
```python
+import checkNet
from umqtt import MQTTClient
+import modem
+from machine import UART
+import sim
+import hmac
+from hashlib import sha256
-CLIENT_ID = b'5fbbb784b4ec2202e982e643_868540050954037_0_0_2021011909'
-
-SERVER = b'a15fbbd7ce.iot-mqtts.cn-north-4.myhuaweicloud.com'
-
-PORT = 1883
-USER = b'5fbbb784b4ec2202e982e643_868540050954037'
+IMEI = modem.getDevImei()
+E_SN = modem.getDevSN()
+ESIM = sim.getImsi()
-PASSWORD = b'8001a12405743199b3396943a2ed397286117a9ebab4f5dfda8dd6fafe341d94'
+DeviceName = IMEI
+DeviceSecret = 'ac4263b86eaf6442997a'
+DeviceID = "5fbbb784b4ec2202e982e643"
-DEVICE_ID = '5fbbb784b4ec2202e982e643_868540050954037'
+CLIENT_ID = DeviceID + "_" + DeviceName + "_0_0_2022010507"
+SERVER = "a15fbbd7ce.iot-mqtts.cn-north-4.myhuaweicloud.com"
+PORT = 1883
+USER = DeviceID + "_" + DeviceName
+PASSWORD = hmac.new(
+ "2022010507".encode('utf-8'),
+ DeviceSecret.encode('utf-8'),
+ digestmod=sha256).hexdigest()
+DEVICE_ID = DeviceID + "_" + DeviceName
state = 0
-def sub_cb(topic, msg):
-
- global state
-
- print(
- "Subscribe Recv: Topic={},Msg={}".format(
-
- topic.decode(),
-
- msg.decode()))
+def sub_cb(topic, msg):
+ global state
+ print(
+ "Subscribe Recv: Topic={},Msg={}".format(
+ topic.decode(),
+ msg.decode()))
+ state = 1
- state = 1
def MQTT_Init():
- # Create one mqtt case
-
- c = MQTTClient(
-
- client_id=CLIENT_ID,
-
- server=SERVER,
-
- port=PORT,
-
- user=USER,
-
- password=PASSWORD,
+ c = MQTTClient(
+ client_id=CLIENT_ID,
+ server=SERVER,
+ port=PORT,
+ user=USER,
+ password=PASSWORD,
+ keepalive=30)
+
+ c.set_callback(sub_cb)
+ try:
+ c.connect()
+ c.subscribe('$oc/devices/{}/sys/commands/#'.format(DEVICE_ID))
+
+ msg = b'''{
+ "services": [{
+ "service_id": "WaterMeterControl",
+ "properties": {
+ "state": "T:15c, H: 85% "
+ }
+ }
+ ]
+ }'''
+ c.publish('$oc/devices/{}/sys/properties/report'.format(DEVICE_ID), msg)
+ except BaseException:
+ print('except')
+ print('Waiting command')
+ while True:
+ c.wait_msg()
+ if state == 1:
+ break
+
+ c.disconnect()
- keepalive=30) # It is a must to make keepalive as 30; otherwise, the connection will be a failure.
-
- # Set message callback
-
- c.set_callback(sub_cb)
-
- # Create connection
-
- c.connect()
-
- # Subscribe topic
-
- c.subscribe('$oc/devices/{}/sys/messages/down'.format(DEVICE_ID))
-
- msg = b'''{
-
- "services": [{
-
- "service_id": "WaterMeterControl",
-
- "properties": {
-
- "state": "T:15c, H: 85% "
-
- },
-
- "event_time": "20151212T121212Z"
-
- }
-
- ]
-
- }'''
-
- # Publish message
-
- c.publish('$oc/devices/{}/sys/properties/report'.format(DEVICE_ID), msg)
-
- while True:
-
- c.wait_msg()
-
- if state == 1:
-
- break
-
- # Disconnect
-
- c.disconnect()
def main():
+ MQTT_Init()
- MQTT_Init()
if __name__ == "__main__":
-
- main()
+ main()
```
Following that, we can download and verify. Since there is no need to compile python code, you can download and run **.py** into module via QPYcom.
@@ -243,15 +230,15 @@ Following that, we can download and verify. Since there is no need to compile py
Download and run **.py** file on module
-
+
Run the script manually
-
+
After sending data, the result is vivid:
-
+
## The matched code
diff --git a/docs/Advanced_development/en/QuecPythonCloud/code/HuaweiCloud_hmac.py b/docs/Advanced_development/en/QuecPythonCloud/code/HuaweiCloud_hmac.py
new file mode 100644
index 0000000000000000000000000000000000000000..2fee2bb2f70f65c22819c9af8b3cffaa96ee044f
--- /dev/null
+++ b/docs/Advanced_development/en/QuecPythonCloud/code/HuaweiCloud_hmac.py
@@ -0,0 +1,81 @@
+import checkNet
+from umqtt import MQTTClient
+import modem
+from machine import UART
+import sim
+import hmac
+from hashlib import sha256
+
+
+IMEI = modem.getDevImei()
+E_SN = modem.getDevSN()
+ESIM = sim.getImsi()
+
+DeviceName = IMEI
+DeviceSecret = 'ac4263b86eaf6442997a'
+DeviceID = "5fbbb784b4ec2202e982e643"
+
+CLIENT_ID = DeviceID + "_" + DeviceName + "_0_0_2022010507"
+SERVER = "a15fbbd7ce.iot-mqtts.cn-north-4.myhuaweicloud.com"
+PORT = 1883
+USER = DeviceID + "_" + DeviceName
+PASSWORD = hmac.new(
+ "2022010507".encode('utf-8'),
+ DeviceSecret.encode('utf-8'),
+ digestmod=sha256).hexdigest()
+DEVICE_ID = DeviceID + "_" + DeviceName
+
+state = 0
+
+
+def sub_cb(topic, msg):
+ global state
+ print(
+ "Subscribe Recv: Topic={},Msg={}".format(
+ topic.decode(),
+ msg.decode()))
+ state = 1
+
+
+def MQTT_Init():
+
+ c = MQTTClient(
+ client_id=CLIENT_ID,
+ server=SERVER,
+ port=PORT,
+ user=USER,
+ password=PASSWORD,
+ keepalive=30)
+
+ c.set_callback(sub_cb)
+ try:
+ c.connect()
+ c.subscribe('$oc/devices/{}/sys/commands/#'.format(DEVICE_ID))
+
+ msg = b'''{
+ "services": [{
+ "service_id": "WaterMeterControl",
+ "properties": {
+ "state": "T:15c, H: 85% "
+ }
+ }
+ ]
+ }'''
+ c.publish('$oc/devices/{}/sys/properties/report'.format(DEVICE_ID), msg)
+ except BaseException:
+ print('except')
+ print('Waiting command')
+ while True:
+ c.wait_msg()
+ if state == 1:
+ break
+
+ c.disconnect()
+
+
+def main():
+ MQTT_Init()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_01.png b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..63c2a2dbc7f6c8fba3ab6d0a0149fb59c6492eca
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_01.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_02.png b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..335f27e180a8147d038233b92128a650c7db21a7
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_02.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_03.png b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..c4dddeb027132d1fdfecab10ffad2fe15b6db0a2
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_03.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_04.png b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..53cc5402c8421305c192a6e65d7e2814a95c480d
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_04.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_05.png b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_05.png
new file mode 100644
index 0000000000000000000000000000000000000000..4643baf03c8f6ee7767699e420b8285dfc9c724f
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_05.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_06.png b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_06.png
new file mode 100644
index 0000000000000000000000000000000000000000..d996e69fa1cc45705eb84c2951b487b70df40998
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_06.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_07.png b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_07.png
new file mode 100644
index 0000000000000000000000000000000000000000..72a9a71612d2462a60b0c2d92f14627192ca455d
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_07.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_08.png b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_08.png
new file mode 100644
index 0000000000000000000000000000000000000000..9e054b3210cbf54960dde1d7b9402cfaf18ffa01
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_08.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_09.png b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_09.png
new file mode 100644
index 0000000000000000000000000000000000000000..8e43d49d2972223ab89947e4771de0800cdc8e63
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_09.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_10.png b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_10.png
new file mode 100644
index 0000000000000000000000000000000000000000..d33a36014aa3e3820106adf1a83aab477b8ba775
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_10.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_11.png b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_11.png
new file mode 100644
index 0000000000000000000000000000000000000000..53cc5402c8421305c192a6e65d7e2814a95c480d
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_11.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_12.png b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_12.png
new file mode 100644
index 0000000000000000000000000000000000000000..6eb6d6f20c81e14c09698f40a73e34eb58528b3a
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_12.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_13.png b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_13.png
new file mode 100644
index 0000000000000000000000000000000000000000..a4df1128615c715c6fdf443a38ef9d33a3de7d60
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_13.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_14.png b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_14.png
new file mode 100644
index 0000000000000000000000000000000000000000..d0dd7e798bb5132dd5dafd78aa014db808aed362
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_14.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_15.png b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_15.png
new file mode 100644
index 0000000000000000000000000000000000000000..48cb3fe63c79e314118c8d8db15ca0e77700b8c5
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_15.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_16.png b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_16.png
new file mode 100644
index 0000000000000000000000000000000000000000..bf8def4a3d432185a1a5dafe01e9fd91c50d3e15
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_16.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_17.png b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_17.png
new file mode 100644
index 0000000000000000000000000000000000000000..ecbc29528db15a89ffa9cef007e1834e892426cc
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/HuaweiCloud_17.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/HuaweiCloud.md b/docs/Advanced_development/zh/QuecPythonCloud/HuaweiCloud.md
index 1894bb649e64cce56f5637db46be4064aadc3a2a..d48b67028148ea8091bc04c2df1ef425d045234e 100644
--- a/docs/Advanced_development/zh/QuecPythonCloud/HuaweiCloud.md
+++ b/docs/Advanced_development/zh/QuecPythonCloud/HuaweiCloud.md
@@ -5,6 +5,7 @@
| **版本** | **日期** | **作者** | **变更表述** |
| -------- | ---------- | -------- | ------------ |
| 1.0 | 2021-09-29 | Chic | 初始版本 |
+| 1.1 | 2022-02-16 | Chic | 改进设备调试 |
@@ -22,17 +23,21 @@
在首页点击【产品】---【IoT物联网】---【设备接入IoTDA】
-
+
### 创建产品
点击【产品】---【创建产品】
-
+
产品的“协议类型”选择MQTT
-
+
+
+产品【模型定义】
+
+
### 添加设备
@@ -40,11 +45,11 @@
> [https://console.huaweicloud.com/iotdm/?region=cn-north-4\#/dm-portal/device/all-device](https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/device/all-device)
-
+
-注册设备后自动生成的【设备ID】和【设备密钥】,用于下一步骤生成连接平台的信息。
+注册设备后自动生成的【设备ID】和【设备密钥】,记下来用于下一步骤生成连接平台的信息。
-
+
### 生成连接信息
@@ -52,7 +57,7 @@
-
+
```
CLIENT_ID = b'5fbbb784b4ec2202e982e643_868540050954037_0_0_2021011909'
@@ -70,7 +75,7 @@ PASSWORD =b'8001a12405743199b3396943a2ed397286117a9ebab4f5dfda8dd6fafe341d94'

-说明:
+说明:
针对不支持用域名接入的设备,通过在cmd命令框中执行“ping
域名”获取IP地址,用IP地址接入平台。由于IP地址不固定,您需要将IP地址做成可配置项。
@@ -89,13 +94,13 @@ a15fbbd7ce.iot-mqtts.cn-north-4.myhuaweicloud.com
填写接口地址,此处以“\$oc/devices/{device_id}/sys/properties/report”为例,如“\$oc/devices/5e4e2e92ac-164aefa8fouquan1/sys/properties/report”。
-
+
\$oc/devices/{device_id}/sys/properties/report
\$oc/devices/5fbbb784b4ec2202e982e643_868540050954037/sys/properties/report
-
+
### 下发数据
@@ -117,124 +122,121 @@ API调试页面:
-
+
Topic: \$oc/devices/{device_id}/sys/messages/down
\$oc/devices/5fbbb784b4ec2202e982e643_1234567890123456789/sys/messages/down
-
+
-## 软件设计
+### 下发命令
-在HuaweiCloud平台取得ClientId、Username、Password之后,即可通过QuecPython的umqtt连接云平台,连接云平台的地址和端口固定不变,接下来就可以编写代码实验了。
+$oc/devices/{device_id}/sys/commands/request_id={request_id}
-示例代码:
+- 设备侧订阅带{request_id}参数的topic时,可以使用通配#。如设备侧订阅命令下发请求的topic $oc/devices/{device_id}/sys/commands/request_id={request_id}时,可以用$oc/devices/{device_id}/sys/commands/#
-```python
-from umqtt import MQTTClient
+
-CLIENT_ID = b'5fbbb784b4ec2202e982e643_868540050954037_0_0_2021011909'
-
-SERVER = b'a15fbbd7ce.iot-mqtts.cn-north-4.myhuaweicloud.com'
+
-PORT = 1883
-
-USER = b'5fbbb784b4ec2202e982e643_868540050954037'
+
-PASSWORD = b'8001a12405743199b3396943a2ed397286117a9ebab4f5dfda8dd6fafe341d94'
+$oc/devices/{device_id}/sys/commands/request_id={request_id}
-DEVICE_ID = '5fbbb784b4ec2202e982e643_868540050954037'
-
-state = 0
-
-def sub_cb(topic, msg):
-
- global state
-
- print(
-
- "Subscribe Recv: Topic={},Msg={}".format(
-
- topic.decode(),
-
- msg.decode()))
-
- state = 1
-
-def MQTT_Init():
+$oc/devices/5fbbb784b4ec2202e982e643_869537055157730/sys/commands/#
- # 创建一个mqtt实例
+
- c = MQTTClient(
-
- client_id=CLIENT_ID,
-
- server=SERVER,
-
- port=PORT,
-
- user=USER,
-
- password=PASSWORD,
-
- keepalive=30) # 必须要 keepalive=30 ,否则连接不上
-
- # 设置消息回调
-
- c.set_callback(sub_cb)
-
- # 建立连接
-
- c.connect()
-
- # 订阅主题
-
- c.subscribe('$oc/devices/{}/sys/messages/down'.format(DEVICE_ID))
-
- msg = b'''{
-
- "services": [{
-
- "service_id": "WaterMeterControl",
+## 软件设计
- "properties": {
+在HuaweiCloud平台取得ClientId、Username、Password之后,即可通过QuecPython的umqtt连接云平台,连接云平台的地址和端口固定不变,接下来就可以编写代码实验了。
- "state": "T:15c, H: 85% "
+示例代码:
- },
+```python
+import checkNet
+from umqtt import MQTTClient
+import modem
+from machine import UART
+import sim
+import hmac
+from hashlib import sha256
- "event_time": "20151212T121212Z"
- }
+IMEI = modem.getDevImei()
+E_SN = modem.getDevSN()
+ESIM = sim.getImsi()
- ]
+DeviceName = IMEI
+DeviceSecret = 'ac4263b86eaf6442997a'
+DeviceID = "5fbbb784b4ec2202e982e643"
- }'''
+CLIENT_ID = DeviceID + "_" + DeviceName + "_0_0_2022010507"
+SERVER = "a15fbbd7ce.iot-mqtts.cn-north-4.myhuaweicloud.com"
+PORT = 1883
+USER = DeviceID + "_" + DeviceName
+PASSWORD = hmac.new(
+ "2022010507".encode('utf-8'),
+ DeviceSecret.encode('utf-8'),
+ digestmod=sha256).hexdigest()
+DEVICE_ID = DeviceID + "_" + DeviceName
- # 发布消息
+state = 0
- c.publish('$oc/devices/{}/sys/properties/report'.format(DEVICE_ID), msg)
- while True:
-
- c.wait_msg()
+def sub_cb(topic, msg):
+ global state
+ print(
+ "Subscribe Recv: Topic={},Msg={}".format(
+ topic.decode(),
+ msg.decode()))
+ state = 1
- if state == 1:
- break
+def MQTT_Init():
- # 关闭连接
+ c = MQTTClient(
+ client_id=CLIENT_ID,
+ server=SERVER,
+ port=PORT,
+ user=USER,
+ password=PASSWORD,
+ keepalive=30)
+
+ c.set_callback(sub_cb)
+ try:
+ c.connect()
+ c.subscribe('$oc/devices/{}/sys/commands/#'.format(DEVICE_ID))
+
+ msg = b'''{
+ "services": [{
+ "service_id": "WaterMeterControl",
+ "properties": {
+ "state": "T:15c, H: 85% "
+ }
+ }
+ ]
+ }'''
+ c.publish('$oc/devices/{}/sys/properties/report'.format(DEVICE_ID), msg)
+ except BaseException:
+ print('except')
+ print('Waiting command')
+ while True:
+ c.wait_msg()
+ if state == 1:
+ break
+
+ c.disconnect()
- c.disconnect()
def main():
+ MQTT_Init()
- MQTT_Init()
if __name__ == "__main__":
+ main()
- main()
```
接下来就可以下载验证了,python代码不需要编译,直接通过QPYcom工具把.py文件下载到模块中运行。
@@ -243,15 +245,15 @@ if __name__ == "__main__":
下载.py文件到模组运行:
-
+
下载之后,手动让脚本运行起来。
-
+
发送数据后,看到实验结果:
-
+
## 配套代码
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/code/HuaweiCloud_hmac.py b/docs/Advanced_development/zh/QuecPythonCloud/code/HuaweiCloud_hmac.py
new file mode 100644
index 0000000000000000000000000000000000000000..2fee2bb2f70f65c22819c9af8b3cffaa96ee044f
--- /dev/null
+++ b/docs/Advanced_development/zh/QuecPythonCloud/code/HuaweiCloud_hmac.py
@@ -0,0 +1,81 @@
+import checkNet
+from umqtt import MQTTClient
+import modem
+from machine import UART
+import sim
+import hmac
+from hashlib import sha256
+
+
+IMEI = modem.getDevImei()
+E_SN = modem.getDevSN()
+ESIM = sim.getImsi()
+
+DeviceName = IMEI
+DeviceSecret = 'ac4263b86eaf6442997a'
+DeviceID = "5fbbb784b4ec2202e982e643"
+
+CLIENT_ID = DeviceID + "_" + DeviceName + "_0_0_2022010507"
+SERVER = "a15fbbd7ce.iot-mqtts.cn-north-4.myhuaweicloud.com"
+PORT = 1883
+USER = DeviceID + "_" + DeviceName
+PASSWORD = hmac.new(
+ "2022010507".encode('utf-8'),
+ DeviceSecret.encode('utf-8'),
+ digestmod=sha256).hexdigest()
+DEVICE_ID = DeviceID + "_" + DeviceName
+
+state = 0
+
+
+def sub_cb(topic, msg):
+ global state
+ print(
+ "Subscribe Recv: Topic={},Msg={}".format(
+ topic.decode(),
+ msg.decode()))
+ state = 1
+
+
+def MQTT_Init():
+
+ c = MQTTClient(
+ client_id=CLIENT_ID,
+ server=SERVER,
+ port=PORT,
+ user=USER,
+ password=PASSWORD,
+ keepalive=30)
+
+ c.set_callback(sub_cb)
+ try:
+ c.connect()
+ c.subscribe('$oc/devices/{}/sys/commands/#'.format(DEVICE_ID))
+
+ msg = b'''{
+ "services": [{
+ "service_id": "WaterMeterControl",
+ "properties": {
+ "state": "T:15c, H: 85% "
+ }
+ }
+ ]
+ }'''
+ c.publish('$oc/devices/{}/sys/properties/report'.format(DEVICE_ID), msg)
+ except BaseException:
+ print('except')
+ print('Waiting command')
+ while True:
+ c.wait_msg()
+ if state == 1:
+ break
+
+ c.disconnect()
+
+
+def main():
+ MQTT_Init()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216153531106.png b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216153531106.png
new file mode 100644
index 0000000000000000000000000000000000000000..e1791a501541aaea933e6e95453ae062788c5b08
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216153531106.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216154010392.png b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216154010392.png
new file mode 100644
index 0000000000000000000000000000000000000000..7191c5a0eae88a817c5ca081e6ee876a92498058
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216154010392.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216154203735.png b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216154203735.png
new file mode 100644
index 0000000000000000000000000000000000000000..f3321f2c42bfedb25099e7e844fc8c291bc81cf4
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216154203735.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216154517352.png b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216154517352.png
new file mode 100644
index 0000000000000000000000000000000000000000..01a227cbe82cf134ab4f81bd92da838a8bb9c112
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216154517352.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216154918490.png b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216154918490.png
new file mode 100644
index 0000000000000000000000000000000000000000..d0dd7e798bb5132dd5dafd78aa014db808aed362
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216154918490.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216161638266.png b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216161638266.png
new file mode 100644
index 0000000000000000000000000000000000000000..9db5dc3e42cd55b4695113e5855b01d5fb7a0b3c
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216161638266.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216161801912.png b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216161801912.png
new file mode 100644
index 0000000000000000000000000000000000000000..7010a833dcc92b0f7c97536a123c9c0625677ad2
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216161801912.png differ
diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216161915875.png b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216161915875.png
new file mode 100644
index 0000000000000000000000000000000000000000..6951edbd76729b57d914f7f1fd977cfbe5dee741
Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/image-20220216161915875.png differ