提交 23995138 编写于 作者: E ethan.lcz 提交者: yilu.myl

move HaaS App upgrade and LP usage SOP to core_function folder, fix #1725

Signed-off-by: Nethan.lcz <ethan.lcz@alibaba-inc.com>
上级 59431a67
# HaaS Python在线更新
## 原理
HaaS在线更新即用户借助VS Code的HaaS Studio插件通过无线的方式(OTA)给开发板更新HaaS应用程序。
<div align="center">
<img src=../images/haas_studio_app_ota_overview.png width=100%/>
</div>
目前如下HaaS硬件可以支持本功能,可通过相应板子的快速开始文档查看并升级到最新版本。
| **开发板** | **固件版本** |
| --- | --- |
| [HaaS EDU K1](https://haas.iot.aliyun.com/solution/detail/hardware?versionId=800C5AB3B8A4A88800000001&dataId=800C5AB3B8A4A888) | 2.1.0及以上版本 |
| [HaaS 200](https://haas.iot.aliyun.com/solution/detail/hardware?versionId=800C8F815768381600000001&dataId=800C8F8157683816) | 2.1.0及以上版本 |
| [NodeMCU-32S](https://haas.iot.aliyun.com/solution/detail/hardware?versionId=800C0A5C37AADCDB00000001&dataId=800C0A5C37AADCDB) | 2.1.0及以上版本 |
| [ESP32乐鑫开发板](https://haas.iot.aliyun.com/solution/detail/hardware?versionId=800C9562896F994200000001&dataId=800C9562896F9942) | 2.1.0及以上版本 |
| [pyWiFi-ESP32](https://haas.iot.aliyun.com/solution/detail/hardware?versionId=800C55C67883087B00000001&dataId=800C55C67883087B) | 2.1.0及以上版本 |
| [M5Stack Core2](https://haas.iot.aliyun.com/solution/detail/hardware?versionId=800C84FAF561DF6A00000001&dataId=800C84FAF561DF6A) | 2.1.0及以上版本 |
## 准备
- PC工具:Visual Studio Code和HaaS Studio插件V2.1.0以上版本。
- HaaS智能硬件:已烧录最新版HaaS固件(V2.1.0版本及以上)。
- 路由器:要求可正常访问互联网。
## 操作步骤
请按照如下步骤说明进行在线更新的操作。
<div align="center">
<img src=../images/haas_studio_app_ota_steps.png width=100%/>
</div>
### 创建工程
通过HaaS Studio基于helloworld创建名为“HaaS_OTA”工程。
### 设备联网
HaaS在线更新需要开发板接入互联网,不同的平台的接入方式请参考如下:
#### ESP32系列(NodeMCU32S、ESP32乐鑫、pyWiFi-ESP32、M5StackCore2)
复制如下代码到"HaaS_OTA"工程中的main.py中,并修改源码中的wifiSsid & wifiPassword为自己的路由器热点信息,再通过“本地更新”方式将示例代码推送到硬件中执行,等待设备联网成功(打印“Wi-Fi connected”)。
```python
import network # Wi-Fi功能所在库
import utime # 延时API所在组件
# Wi-Fi SSID和Password设置
wifiSsid = "请输入您的Wi-Fi名字"
wifiPassword = "请输入您的Wi-Fi密码"
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
if not sta_if.isconnected():
print('connecting to network...')
sta_if.connect(wifiSsid, wifiPassword)
utime.sleep_ms(500)
while not sta_if.isconnected():
utime.sleep_ms(500)
print('Wi-Fi connected', sta_if.ifconfig())
```
#### HaaS EDU K1和HaaS200
复制如下代码到"HaaS_OTA"工程中的main.py中,并修改源码中的wifiSsid & wifiPassword为自己的路由器热点信息,再通过“本地更新”方式将示例代码推送到硬件中执行,等待设备联网成功(打印“Wi-Fi connected”)。
```python
# -*- coding: UTF-8 -*-
import netmgr as nm # Wi-Fi功能所在库
import utime # 延时API所在组件 # ir人体红外传感器类
# Wi-Fi SSID和Password设置
wifiSsid = "请输入您的Wi-Fi名字"
wifiPassword = "请输入您的Wi-Fi密码"
# 等待Wi-Fi成功连接到路由器
def get_wifi_status():
nm.init()
wifi_connected = nm.getStatus()
print("start to connect " + wifiSsid)
if wifi_connected != 5:
nm.connect(wifiSsid, wifiPassword) # 连接到指定的路由器(路由器名称为wifiSsid, 密码为:wifiPassword)
while True :
if wifi_connected == 5: # nm.getStatus()返回5代表连线成功
break
else:
wifi_connected = nm.getStatus() # 获取Wi-Fi连接路由器的状态信息
utime.sleep(0.5)
print("wifi_connected: " + str(wifi_connected))
print("Wi-Fi connected")
print('DeviceIP:' + nm.getInfo()['ip']) # 打印Wi-Fi的IP地址信息
if __name__ == '__main__' :
get_wifi_status()
```
### 获取Token
当设备**联网**成功之后,HaaS硬件会向阿里云物联网平台请求设备Token,该Token是设备可正常使用在线更新能力的唯一凭证,请大家务必仔细保存好该Token,避免泄漏给无关人员。
您可以通过以下方式来获取设备Token,复制此Token备用。
- 查看日志:当设备激活后,我们可以通过串口日志读取Token信息。
<div align="center">
<img src=../images/haas_studio_app_ota_get_tocken.png width=100%/>
</div>
### 执行在线更新过程
请先切到当前工程到要推送的目标工程下。
#### 首次更新
首次对目标设备进行在线更新操作请参考如下示意图中步骤1~步骤5的操作。
<div align="center">
<img src=../images/haas_studio_app_ota_step1_2.png width=100%/>
</div>
#### 再次更新
之后如果对同一目标设备进行在线更新操作请参考如下示意图中步骤1~步骤2的操作。
<div align="center">
<img src=../images/haas_studio_app_ota_redo.png width=100%/>
</div>
### 查看结果
更新成功之后,设备会自动重启,从串口log中就可以看到新的应用已经生效了。
<div align="center">
<img src=../images/haas_studio_app_ota_result.png width=100%/>
</div>
# 通用物联网云端开发流程
物联网设备开发一般都会涉及到“设备端应用开发”,“物联网平台操作”,“物联网应用开发”三部分。
关于物联网平台理论知识的讲解,请参考[链接](https://gitee.com/haasedu/haasedu/tree/release_2.0/%E6%8B%93%E5%B1%95%E7%9F%A5%E8%AF%86/%E7%89%A9%E8%81%94%E7%BD%91%E5%B9%B3%E5%8F%B0)中的说明。
本文主要对如何在阿里云物理网平台上进行设备接入的操作进行详细说明。
首次使用物联网平台,需要开通实例以使用物联网平台的功能。一般开发者可以选择免费的`公共实例`进行开发。
[物联网平台](https://iot.console.aliyun.com/lk/summary/new)中,左上角选择“华东2-上海”,点击“公共实例”,即可开通。
<div align="center">
<img src=../images/LP_Usage_开通公共实例.png
width=70%/>
</div>
在开通物联网平台账号之后,可以按照下图所示的3个步骤完成物理网平台端设备的创建。
<div align="center">
<img src=./../images/LP_Usage_通用流程.png width=80%/>
</div>
## 一、创建产品
点击上图中的“公共实例”,即可进入[控制台](https://iot.console.aliyun.com/lk/summary/new)进行产品创建。然后,点击创建产品按钮,如下图所示。
<div align="center">
<img src=./../images/LP_Usage_创建产品.png width=70%/>
</div>
在新建产品设定页面按照下图所示的步骤进行产品的创建。
<div align="center">
<img src=./../images/LP_Usage_创建产品步骤.png width=70%/>
</div>
|步骤|操作|说明|
|-|-|-|
|1|产品名称|设定要创建产品的名字|
|2|所属品类| * 如果你的产品属于标准品类(电风扇、加湿器等等),可以选择“标准品类”后在下拉框中选择标准品类的名称<br> * 如果你的产品不属于标准品类建议选择“自定义品类”|
|3|节点类型| * 如果你的设备通过网络直接连接到物联网凭条,选择“直连设备”<br> * 如果你的设备属于网关类的设备,选择“网关设备”<br> * 如果你的设备是通过网关类设备连到物联网平台,选择“网关子设备”|
|4|连网方式|根据你设备的实际联网方式进行选择即可|
|5|数据格式| * 一般来说,建议选择“ICA”标准数据格式即可<br> * 如果ALink协议不能满足需求,可以“透传/自定义”|
产品参数设定好之后,点击“确认”按钮,即可完成产品创建。
产品创建成功后,系统会出现如下提示:
<div align="center">
<img src=./../images/LP_Usage_创建产品成功.png width=70%/>
</div>
此时点击前往“查看产品详情”按钮可以看到刚刚创建产品的详细信息,如下图所示。其中的“ProductKey”则是该产品的唯一标识符,不同产品的ProductKey是不相同的。
<div align="center">
<img src=./../images/LP_Usage_示例产品详情.png width=70%/>
</div>
这样一个新的产品就创建成功了。
<br>
## 二、创建产品功能属性
在产品详情页中的点击“功能定义”标签页,再点击“编辑草稿”进入到产品功能定义。
<div align="center">
<img src=./../images/LP_Usage_示例产品功能定义.png width=70%/>
</div>
在这个页面中有两种方式可以创建产品的属性:
* 导入本地已有的物模型
* 点击“快速导入”按钮
* 手动添加个功能属性的定义
* 物联网平台本身已经定义了很多标准属性可供选择,可点击“添加标准功能”按钮查看有没有适合自己的产品的功能定义
* 如果想添加自定义的属性可点击“添加自定义功能”按钮
下面以“添加自定义功能”为例进行介绍。自定义功能的定义有3中可选,分别是属性、服务和事件。对于一般的数据上云功能选择“属性”即可。对于他们三者之间的差异,请参考[链接](https://help.aliyun.com/document_detail/73727.html)
<div align="center">
<img src=./../images/LP_Usage_示例产品添加自定义功能.png width=40%/>
</div>
以下是各属性的简单说明:
* 功能名称:功能的名称,比如“室内温度”,“室外湿度”,“下雨量”等等
* 标识符:由英文、数字和下划线组成的和“功能名称”一一对应的标识。设备端上报属性状态的消息中需要使用此标识符
* 数据类型:和一般编程语言中数据类型的定义相同,根据实际需求选取即可
* 取值范围:该属性的有效范围,设备上报的属性内容在取值范围的时候才会被物联网平台记录,否则会被物联网平台认定为非法属性而过滤掉
* 步长:一般是指该属性取值的最小分辨率
* 单位:根据实际设备的属性定义进行选择即可
* 读写类型:如果该属性可以通过云端进行配置设定值,则选择“读写”,否则选择“只读”即可
* 描述:可以为该属性增加一些有用的描述信息,比如设计该属性的目的,行为定义等等
如果有多个产品的属性需要定义,可以重复上面添加属性的过程为产品增加多项功能。
功能定义完成后需要为将此功能发布上线,如下图所示。
<div align="center">
<img src=./../images/LP_Usage_示例产品物模型发布.png width=70%/>
</div>
如果此时想要导出刚刚定义好的物模型,按照下图的步骤进行操作进行物模型的导出。
<div align="center">
<img src=./../images/LP_Usage_示例产品导出物模型.png width=70%/>
</div>
产品及其物模型创建完成后就可以创建这个产品的设备了。
<br>
## 三、创建设备
在产品详情页点击“前往管理”即可进入到该产品的设备管理页面后点击“创建设备”按钮进行设备的创建。
* DeviceName:设备名称,可以填入自定义设备名称;在不填此项的时候,系统会自动生成一个设备名称
* DeviceName是的唯一标识符
* 它和上面的ProductKey共同标识唯一一台设备。
<div align="center">
<img src=./../images/LP_Usage_完成添加设备.png width=70%/>
</div>
设备添加完成后,点击“前往查看”按钮,就可以看到此进入到该产品中所有设备的列表了。
<div align="center">
<img src=./../images/LP_Usage_设备创建成功提示页.png width=70%/>
</div>
<div align="center">
<img src=./../images/LP_Usage_设备创建成功列表.png width=70%/>
</div>
在设备列表页面中点击新创建设备的“查看”按钮,就可以看到该设备的详情。
其中有两个信息需要和设备端开发相匹配。
1. 三元组(点击下图中的“查看”即可看到三元组信息)
2. 物模型属性信息
### 3.1 获取设备三元组
如上图所示,点击“查看”按钮,就可以看到设备的三元组信息(如下图所示),三元组是物联网设备端和物联网云端设备相关联的唯一标识符,在设备端连接云端的时候会使用三元组信息和云端进行鉴权,鉴权通过之后云端会认为设备已激活并上线。
<div align="center">
<img src=./../images/LP_Usage_新设备三元组.png width=70%/>
</div>
<br>
### 3.2 查看设备物模型属性信息
设备详情信息页中的“物模型数据”标签页中可以看到设备所属产品的所有属性信息、设备事件上报情况及设备服务调用情况,如下图所示。
待物联网设备按照设备属性对应的标识符上报设备属性值的时候,本图片中的“机房温度“属性值就会显示该设备最新的属性信息。
<div align="center">
<img src=./../images/LP_Usage_新设备物模型.png width=70%/>
</div>
<br>
> 创建产品和设备的过程是按照面向对象的思想进行设计的,其中创建产品可以看成是新建一个类,其中的物模型则是类的对象,创建设备则是进行类的实例化。
<br>
上面就是在物联网平台创建一个新设备的完整流程。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册