设备模拟器快速接入【零代码零硬件玩转华为云IoT】
近期听说华为云IoT物联网平台(IoTDA设备接入云服务)提供海量设备的接入和管理能力,将物理设备联接到云,支撑设备数据采集上云和云端下发命令给设备进行远程控制,配合华为云其他产品,可快速构筑物联网解决方案。
且初期无任何消费,于是乎本次我体验了一番。
开通服务
首选需要注册华为云官方帐号并进行实名认证,然后点击华为云物联网平台_华为云IoT平台开通服务即可。
接着点击免费试用。这里我开通了一个月的免费套餐。
开通成功后稍等片刻,即可进入主页面。
创建产品
在物联网平台中,某一类具有相同能力或特征的设备的合集被称为一款产品。接下来我们登录管理控制台,单击左侧导航栏“产品”,单击页面左侧的“创建产品”。
- 填写产品名称:设备接入体验-产品
- 协议类型: mqtt
- 数据格式: json
- 设备类型: 自定义
- 设备类型:设备接入体验-设备
系统提示产品创建成功,并生成了产品 ID。
由于我希望使用平台查看设备上报的数据信息,以及可能之后需要设备进行管理控制,这里还需要设置产品模型(Profile)。
点击产品名称。
切换到模型定义选项卡,点击自定义模型,添加服务。在服务 ID 中填入 serviceA,点击确定。
新增一个属性:温度
注册设备
点击左侧的所有设备,填写注册信息如下图。
成功注册设备后,平台会自动生成设备 ID 和密钥。这里记录设备ID(deviceId)660e9e592a631a0c8fb10c6c_deviceA1 和密钥(deviceSecret),设备接入中要用到。
使用模拟器接入
直接使用我手头 mac 之前已安装的 MQTTX:MQTT 客户端工具 进行连接。
首先从设备列表中进入设备的详情页,查看设备的 MQTT 连接参数并填入 mqttx 的新建连接配置选项。
注:如果您选择安全方式接入,Broker Port 需要设置为 8883 和 mqtts 搭配,而非 1883 端口。
配置完连接参数后,在 mqttx 中点击连接按钮。一旦设备接入物联网平台,平台可以看到该设备的在线状态。
设备上报数据
已知上行 Topic 格式为 $oc/devices/{device_id}/sys/properties/report
这里我们将 {device_id} 换成成真实的设备 ID,因此最终为:Topic: $oc/devices/660e9e592a631a0c8fb10c6c_deviceA1/sys/properties/report
上行报文为:
{
"services": [{
"service_id": "serviceA",
"properties": {
"温度": 32.3
}
}
]
}
其中 service_id 必选,为设备的服务 ID,由创建的产品模型确定。
properties 表示设备服务的属性列表,具体字段在设备关联的产品模型中定义,可以设置多个字段。这里只使用了上面定义产品模型中的 ”温度“ 字段。
在 mqttx 中填写好上行 topic 和 数据后点击按下 alt + enter 快捷键或者直接点击图标进行发送。
在网页控制台可以看到数据更新。
设备命令下发
目前平台提示 MQTT 协议设备仅支持同步命令下发。我们需要先在管理控制台下发命令,已达到远程控制设备的目的。
根据平台介绍的上下行 topic:
- 下行: $oc/devices/{device_id}/sys/commands/request_id={request_id}
- 上行:$oc/devices/{device_id}/sys/commands/response/request_id={request_id}
其中 {request_id} 用于唯一标识这次请求。设备侧收到下行请求的 topic 带该参数时,上行响应的 topic 需要将该参数值返回给平台。
这里我们将 {device_id} 换成成真实的设备 ID,由于 {request_id} 不能提前预知,我们使用了井号通配符,最终为:$oc/devices/660e9e592a631a0c8fb10c6c_deviceA1/sys/commands/#
在订阅后,我们即可进入网页设备控制台。选择“设备 > 所有设备”,找到新建的设备,单击“详情”进入设备详情页面。单击“云端下发”页签,下发同步命令。
注:设备所属的产品模型需要预先定义新增命令后才能下发。
一旦设备收到订阅,设备需要及时响应。命令应答的 json 格式,具体字段在设备关联的产品模型中定义。
- result_code 可选 Integer 标识命令的执行结果,0表示成功,其他表示设备执行结果为失败。不带默认为0。
- response_name 可选 String 命令的响应名称。
- paras 可选 Object 命令的响应参数,具体字段在设备关联的产品模型中定义。
上行响应示例如下:
// 注意:上行填写的 {request_id} 需要与下行的一致
Topic:$oc/devices/660e9e592a631a0c8fb10c6c_deviceA1/sys/commands/response/request_id={request_id}
{
"result_code": 0,
"response_name": "COMMAND_RESPONSE",
"paras": {
"result": "success"
}
}
结束
至此,本次实验完美结束。
我正在参加【有奖征文 第29期】零代码零硬件玩转华为云 IoT 物联网平台多场景
链接:https://bbs.huaweicloud.cn/blogs/423245
- 点赞
- 收藏
- 关注作者
评论(0)