产品模型定义:创建产品、定义服务属性、定义命令、定义事件

好,咱们接着往下走。设备注册搞定了,接下来要做什么?

你得告诉华为云IoT平台,你的设备长什么样,能干什么。这就是产品模型定义。说白了,就是给设备画个像,定个规矩。

我个人习惯,把这步叫做「设备上云前的户口本」。没有这个,平台根本不认识你的设备。

一、创建产品:给设备一个身份

先登录华为云IoT平台的控制台。找到「产品」菜单,点进去,然后点「创建产品」。

这里要填几个关键信息:

  • 产品名称:比如「智能温控器v2.0」。别太随意,后面找起来麻烦。
  • 所属资源空间:选你之前创建的那个资源空间。我建议一个项目一个资源空间,别混在一起。
  • 协议类型:选MQTT。咱们这课就是讲MQTT对接的。
  • 数据格式:选JSON。这是最通用的,解析也方便。
  • 厂商名称:填你公司名或者你自己起的名字。
小提示: 产品创建后,会生成一个「产品ID」。这个ID后面会用到,建议复制到记事本里存好。

填完点「确定」。嗯,产品就创建好了。是不是很简单?

但别高兴太早。产品只是个空壳子,你得往里填东西。

二、定义服务属性:告诉平台设备能上报什么

产品创建好了,接下来要定义「服务」。一个产品可以包含多个服务。每个服务里,再定义属性、命令、事件。

我举个例子。假设你做一个智能灯。它有一个服务叫「LightControl」。这个服务里,属性就是灯的当前状态。

点击产品名称,进入产品详情。找到「服务」选项卡,点「添加服务」。

  • 服务ID:比如 LightControl。注意,这个ID在代码里会用到,别用中文。
  • 服务类型:一般和服务ID保持一致就行。
  • 描述:随便写点,方便以后维护。

服务建好了,接下来定义属性。点「添加属性」。

参数 说明 示例值
属性名称 属性的名字,比如「开关状态」 power
属性ID 代码里用的标识符 power
数据类型 int、string、float等 int
取值范围 属性的有效值范围 0-1
步长 数值变化的粒度 1
单位 比如百分比、摄氏度
访问模式 可读、可写、可上报 可读、可上报

举个例子。灯的开关状态,属性ID叫 power,数据类型是int,取值范围0或1。0表示关,1表示开。

重点: 访问模式里,「可上报」一定要勾上。不然设备上报的数据,平台会直接丢弃。我在项目里吃过这个亏,排查了半天才发现是这里没勾。

再比如,灯的亮度。属性ID叫 brightness,数据类型int,取值范围0-100,单位是百分比。

定义完属性,设备就能上报这些数据了。平台收到后,会按照你定义的格式来解析。

三、定义命令:让平台能控制设备

属性是设备告诉平台「我是什么状态」。命令是平台告诉设备「你给我做什么」。

你想想看,智能灯不能只上报状态吧?你还得能远程开关它。这就用到命令了。

在服务里,点「添加命令」。

参数 说明 示例值
命令名称 命令的名字 setPower
命令ID 代码里用的标识符 setPower
描述 说明这个命令是干嘛的 设置灯的开关状态

命令可以带参数。比如 setPower 命令,需要一个参数叫 power,类型是int,取值范围0-1。

添加参数的方法:在命令详情里,点「添加参数」。参数的定义方式和属性类似。

注意: 命令的响应超时时间,默认是30秒。如果你的设备处理比较慢,记得调大一点。我曾经遇到一个设备,处理命令需要40秒,结果平台一直报超时。后来把超时时间改成60秒就好了。

命令定义好后,平台下发命令时,设备会收到一个MQTT消息。设备处理完,要回复一个响应。这样平台才知道命令执行成功了。

四、定义事件:让设备能主动报告异常

事件和属性有点像,但用途不同。属性是周期性上报的,比如每5秒上报一次温度。事件是突发性的,比如设备故障、告警。

我个人习惯,把事件定义为「设备主动告诉平台,我出事了」。

在服务里,点「添加事件」。

参数 说明 示例值
事件名称 事件的名字 alarm
事件ID 代码里用的标识符 alarm
事件类型 告警、故障、信息等 告警
描述 说明什么情况下触发这个事件 温度超过阈值时触发

事件也可以带参数。比如告警事件,可以带一个参数叫 temperature,表示触发告警时的温度值。

举个例子。你做一个温度传感器,正常温度范围是0-50度。一旦超过50度,设备就上报一个告警事件。平台收到后,可以发短信通知你。

小技巧: 事件参数里,建议加一个 message 字段,类型是string。这样设备可以把具体的错误信息带上来,方便排查问题。

定义完事件,整个产品模型就差不多了。总结一下:

  • 属性:设备的状态,周期性上报。
  • 命令:平台下发给设备的指令,设备要执行并回复。
  • 事件:设备主动上报的突发情况,比如告警。

嗯,到这里,产品模型定义这块就讲完了。下一章,咱们开始写代码,让设备真正连上华为云IoT平台。

课后思考: 如果一个设备有多个传感器,比如一个温湿度计,既有温度传感器又有湿度传感器。你会怎么设计它的服务和属性?是放在一个服务里,还是分成两个服务?我个人建议分成两个服务,这样逻辑更清晰,也方便后续扩展。