使用华为云,10分钟构建云端“智能空调”模型【我的IoT端边云体验】

举报
福州司马懿 发表于 2022/10/30 22:40:11 2022/10/30
【摘要】 前言本篇文章主要带大家从零开始,来体验一下利用华为云平台,构建云端“物”模型。通过这篇文章大家将会学到需求分析定义服务定义属性定义命令模型导出及模型结构在线调试(命令上发与数据下报) 什么叫IoT物联网(Internet of Things,简称IoT)是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术,实时采集任何需要监控、 连接、互动的物体或过程...

前言

本篇文章主要带大家从零开始,来体验一下利用华为云平台,构建云端“物”模型。通过这篇文章大家将会学到

  • 需求分析
  • 定义服务
  • 定义属性
  • 定义命令
  • 模型导出及模型结构
  • 在线调试(命令上发与数据下报)

什么叫IoT

物联网(Internet of Things,简称IoT)是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术,实时采集任何需要监控、 连接、互动的物体或过程,采集其声、光、热、电、力学、化学、生物、位置等各种需要的信息,通过各类可能的网络接入,实现物与物、物与人的泛在连接,实现对物品和过程的智能化感知、识别和管理。物联网是一个基于互联网、传统电信网等的信息承载体,它让所有能够被独立寻址的普通物理对象形成互联互通的网络。

设备接入服务(IoT Device Access)是华为云的物联网平台,提供海量设备连接上云、设备和云端双向消息通信、批量设备管理、远程控制和监控、OTA升级、设备联动规则等能力,并可将设备数据灵活流转到华为云其他服务,帮助物联网行业用户快速完成设备联网及行业应用集成

图片.png

图片.png

创建云端“智能空调”产品

在物联网平台中,某一类具有相同能力或特征的设备的合集被称为一款产品。

图片.png

如果您希望使用平台查看设备上报的数据信息,并对设备进行管理控制,就需要开发产品模型(Profile)。定义Profile,使平台理解该款设备支持的属性、命令等信息。根据产品的接入协议、数据格式等

图片.png

只要填写红框的这三个即可。设备类型下拉框有很多个选项,一旦选择其中一个后,便会自动填写“所属行业”和“所属子行业”

图片.png

图片.png

这里默认的模型肯定是不适合“智能空调”的,像是“智能水表”的模型,因此,这里我们要对其进行改造,选择“自定义模型”

图片.png

需求分析

需求描述

在开发产品模型之前,我们要先理清“智能空调”的具体功能,做一波需求分析

  • 作为一台智能空调,首先我们肯定要能获取到它的产品信息
  • 站在用户的角度,我希望它能在夏天时,我快到家的时候提前把家里的温度和湿度,调节到适合我的范围。其次我希望它能在半夜气温降下来之后自动关机(一来可以节约用电,二来下半夜太冷,我怕关节炎)
  • 既然是智能空调了,那肯定会自动清理防尘罩上的灰尘,把灰尘清理到一个特定的储物空间内,那么那个储物空间满了之后,肯定要能通过IoT平台推送到我这里。让我把这个盒子里的灰尘倒掉
  • 也要探测氟利昂的压强,通过某种公式去计算雪种的剩余量(因为缺氟制冷效果就不好了)。一旦缺氟也要提醒我去更换
  • 最后是传统空调在出现问题时,遥控器上都会报一个故障码(我之前就有碰到外机主板坏掉的问题)智能空调通过手机APP代替了遥控器,那相应的也要主动推送给手机APP

需求清单

根据上面描述,智能空调需求模型就基本诞生了

  1. 获取设备信息
  2. 设置指令(Iot服务器 -> 智能空调)
    • 制冷
    • 制热
    • 除湿
    • 加湿
    • 净化空气
    • 自动开/关机
  3. 主动反馈(智能空调 -> Iot服务器)
    • 提醒清灰
    • 提醒加氟
    • 异常报告

绘制功能模型图

下面是我用“亿图”软件绘制的“功能模型图示”

图片.png

添加服务

华为云上有对服务的编写规则进行定义,地址如下 https://support.huaweicloud.cn/devg-iothub/iot_02_0005.html

图片.png

点击“自定义模型”按钮后,会弹出“添加服务”对话框。

图片.png

要遵循指定的规则进行填写

  • 服务ID:采用首字母大写的命名方式。比如:WaterMeter、StreetLight
  • 服务类型:建议和服务ID保持一致
  • 服务描述:比如路灯上报的环境光强度和路灯开关状态的属性

图片.png

添加如下服务

序号 服务ID 服务类型 服务描述
1 DeviceInfo DeviceInfo 获取设备信息(空调厂商、生产日期、室内机型号、室外机型号、制冷剂剩余百分比、储灰盒已使用百分比、设备状态码)
2 TimerPowerOn TimerPowerOn 在每周的指定时间开机,并设置相应的温度和湿度
3 TimerPowerOff TimerPowerOff 在每周的指定时间关机
4 FluorinationLess FluorinationLess 缺少制冷剂,提醒加氟(每天最多仅推送一次)
5 DustTooMuch DustTooMuch 过滤网灰尘太多,提醒清灰(每天最多仅推送一次)
6 Abnormal Abnormal 自检异常(每次开机时自检,或遇到突然故障时主动推送异常状态码及其原因)

添加属性(详见模型附件)

属性分为:

  1. API 可读
  2. API 可写

含义:

  1. 可读的意思是,“应用模拟器”可以通过API读取“设备模拟器”端的属性
  2. 可写的意思是,“应用模拟器”可以通过API修改“设备模拟器”端的属性

DeviceInfo(设备信息)

图片.png

TimerPowerOn(定时开机)

图片.png

TimerPowerOff(定时关机)

图片.png

FluorinationVolume(氟利昂容量)

图片.png

DustBoxVolume(储灰盒剩余容量)

图片.png

Abnormal(故障代码)

图片.png

这是我上网查到的美的空调部分故障代码(这里仅列出部分代码)

  • E0代表EEPROM参数错误
  • E1室内外机通信故障
  • E2过零检测出错
  • E3风机速度
  • E4温度保险丝断保护
  • E5室外温度传感器故障
  • E6室内温度传感器故障,P0模块保护
  • P1电压过高或过低保护
  • P2压缩机顶部温度保护

添加命令(详见模型附件)

命令就是下发报文的serviceId(可以带参数,也可以不带参数)

DeviceInfo(获取设备信息)

图片.png

TimerPowerOn(设置定时开机)

图片.png

TimerPowerOff(设置定时关机)

图片.png

FluorinationVolume(报告氟利昂容量)

图片.png

DustBoxVolume(报告储灰盒剩余容量)

图片.png

Abnormal(报告故障代码)

图片.png

产品服务结构简图

为便于理解,我将产品结构画了一个简图

图片.png

模型导出

点击导出后,会自动下载一个24位哈希字符串的zip包

图片.png

zip 包里面有两个文件 profile(概述) 和 service(服务),目录结构如下

635d15a8222a8601d402e79c.zip

  • profile
    • devicetype-capability.json
  • service
    • Abnormal
      • profile
        • servicetype-capability.json
    • DeviceInfo
      • profile
        • servicetype-capability.json
    • BustBoxVolume
      • profile
        • servicetype-capability.json
    • FluorinationVolume
      • profile
        • servicetype-capability.json
    • TimerPowerOff
      • profile
        • servicetype-capability.json
    • TimerPowerOn
      • profile
        • servicetype-capability.json

图片.png

从上面可以看到,最外层profile的里面是“设备能力”,而内层服务的profile里面封装的则是“服务能力”

我们分别看下两者json内容分别是什么。首先推荐一个在线格式化json的网站:https://www.sojson.com/

可以看到devicetype-capability.json里面封装的是

  1. 产品信息
  2. 该产品的各个服务

注意:文件里的json报文是压缩的,我这里通过在线工具将其格式化后,方便查看

{
	"devices": [{
		"manufacturer_name": "美的",
		"manufacturer_id": "21e0c683-bdf3-b2b8-0ba0-5b0e2adb24cb",
		"model": "c236b96c-6af6-485f-c3d9-94cc334fafcc",
		"protocol_type": "MQTT",
		"device_type": "智能空调",
		"service_capabilities": [{
			"service_id": "DeviceInfo",
			"service_type": "DeviceInfo",
			"option": "Optional",
			"description": "获取设备信息(空调厂商、生产日期、室内机型号、室外机型号、制冷剂剩余百分比、储灰盒已使用百分比、设备状态码)"
		}, {
			"service_id": "TimerPowerOn",
			"service_type": "TimerPowerOn",
			"option": "Optional",
			"description": "在每周的指定时间开机,并设置相应的温度和湿度"
		}, {
			"service_id": "TimerPowerOff",
			"service_type": "TimerPowerOff",
			"option": "Optional",
			"description": "在每周的指定时间关机"
		}, {
			"service_id": "FluorinationVolume",
			"service_type": "FluorinationVolume",
			"option": "Optional",
			"description": "缺少制冷剂,提醒加氟(每天最多仅推送一次)"
		}, {
			"service_id": "DustBoxVolume",
			"service_type": "DustBoxVolume",
			"option": "Optional",
			"description": "过滤网灰尘太多,提醒清灰(每天最多仅推送一次)"
		}, {
			"service_id": "Abnormal",
			"service_type": "Abnormal",
			"option": "Optional",
			"description": "自检异常(每次开机时自检,或遇到突然故障时主动推送异常状态码及其原因)"
		}]
	}]
}

图片.png

下面我们查看下服务里的capability(能力),以最短的 Abnormal\profile\servicetype-capability.json 为例。可以看到里面封装了如下内容

  1. 服务描述
  2. 服务的属性
  3. 服务包含的命令,及其响应
  4. 事件(暂时为空,也没发现图形化的设置接口)
{
	"services": [{
		"service_id": "Abnormal",
		"service_type": "Abnormal",
		"properties": [{
			"property_name": "ErrorCode",
			"data_type": "string",
			"required": false,
			"enum_list": null,
			"min": null,
			"max": null,
			"max_length": 10,
			"step": 0,
			"unit": null,
			"method": "R",
			"description": "故障代码",
			"default_value": null
		}],
		"commands": [{
			"command_name": "ERROR_CODE",
			"paras": null,
			"responses": [{
				"response_name": "cmdResponses",
				"paras": [{
					"para_name": "ErrorCode",
					"data_type": "string",
					"required": false,
					"enum_list": null,
					"min": null,
					"max": null,
					"max_length": 10,
					"step": 0,
					"unit": null,
					"description": "错误码"
				}]
			}]
		}],
		"events": null,
		"description": "自检异常(每次开机时自检,或遇到突然故障时主动推送异常状态码及其原因)",
		"option": "Optional"
	}]
}

图片.png

在线调试

选择设备

首先新增测试设备,我们这里创建的是虚拟设备,因此就点击“虚拟设备”,然后把我们上面创建的设备放进来

图片.png

新增设备成功后,系统会弹出确认对话框。确认后,点击设备右侧的“调试”按钮,可以进入调试页面。

图片.png

同时,左侧面板的“监控运维” -> “在线调试”,也可以进入调试页面

图片.png

首先点击右上角,然后选择我们刚刚创建好的设备

图片.png

图片.png

名词解释

  • 应用模拟器:类似我们的手机APP端,对智能空调进行远程控制
  • lot平台:用于接收、转发和处理“智能终端”及“智能家电”发来的指令
  • 设备模拟器:也就是我们的智能家电(这里是前面定义的智能空调)

下面这副图是我对华为云物联网架构中,各单位作用的理解(画图来描述往往会比文字更好理解)

图片.png

设备模拟器“属性上报”

首先,根据我们前面对智能空调的属性定义(必须是可读的),填写相应的数据参数。然后点击发送,将其发送给 loT平台。随后,loT平台会将其转发给应用模拟器(也就是用户终端,比如用户手机上的智能家居APP)并呈现在用户面前

图片.png

BUG:

  1. 枚举类型的下拉框不见了
  2. 输入时间也没有合法性校验

图片.png

应用模拟器“命令下发”

在应用模拟器这边,向设备模拟器发送命令

BUG:

  1. DateTime属性居然消失了

图片.png

消息跟踪

在运维监控 -> 消息跟踪 这里,可以查看到历史的数据交互报文

图片.png

点击“查看”按钮,可以看到详细的消息报文信息

图片.png

总结

之所以大家都是5分钟搭建好云端物模型,而本篇文章花了一倍的时间,是因为我想让大家更全面的体验华为云端物模型的所有功能和常用的数据类型。

通过上面的“需求分析”,到开始“设计物模型”,再到最后的“模拟调试”阶段,我们看到了华为loT云平台的强大之处(可以让我们在没接入设备的情况下,就能测试我们报文的收发情况)

除了有点之外,当然也发现了一些平台使用不便的地方。诸如

  • 只读的报文“应用模拟器”无法通过指令进行获取
  • 枚举属性,有时有下拉框,有时又没有了
  • 包括输入命令时需要重新输入一遍属性的名称、描述、取值范围
  • 等等

但是不得不承认,华为云平台的loT物模型,对于产品经理和程序员的交互来说,可以大大的减少中间沟通的成本,设计好的模型可以通过可视化的界面查看,调试,然后还可以直接导出成json文件,通过解析json可以直接将模型导入程序,从而大大提高开发效率。也可以直接将物模型直接用于华为云的其它产品,这是一个非常有创新性的解决方案

【我的IoT端边云体验】有奖征文火热进行中:https://bbs.huaweicloud.cn/blogs/378687
此外,在(https://bbs.huaweicloud.cn/activity/suggestion.html)提出您的宝贵建议,标题以【云驻计划-定向征文】开头,还有机会赢取额外奖励。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。