使用物联网平台远程管理运维设备
1. 选择实验资源
本实验支持开通免费试用、个人账户资源两种实验资源方式。
在实验开始前,请您选择其中一种实验资源,单击确认开启实验。
- 如果您选择的是开通免费试用,下方卡片会展示本实验支持的试用规格,可以选择你要试用的云产品资源进行开通。您在实验过程中,可以随时用右下角icon唤起试用卡片。
说明:试用云产品开通在您的个人账号下,并占用您的试用权益。如试用超出免费试用额度,可能会产生一定费用。
阿里云支持试用的产品列表、权益及具体规则说明请参考开发者试用中心。
2. 创建实验资源
本步骤指导您如何创建开通开通创建物联网实例。
如果您已创建开通创建物联网实例,请您选择个人账户资源,并跳过本小节,直接进行实验操作即可。
本步骤仅作为参考使用,您可以根据需求自行选择配置。
如果您选择的是开通免费试用,参考以下步骤开通创建物联网实例。
- 在本实验页面下方卡片会展示本实验支持的试用规格,选择试用规格,单击立即试用。
- 在物联网平台试用开通页面,根据页面引导进行开通物联网实例。本实验提供的试用实例为企业实例标准版部署在华东2(上海)地域。
说明:试用实例为企业实例标准版,各类型实例中功能区别请参考文档。
如果您选择的是个人账户资源,参考以下步骤开通创建物联网实例。
- 创建物联网实例
- 前往物联网平台开通当前服务,在实例概览页面,单击创建实例。
说明:开通后平台会提供一个免费的公共实例进行体验,您可根据实际需求选择创建实例类型。实例计费规则请参考文档。
3. 准备环境和资源
- 准备Node.js语言开发环境。教程中设备端开发是在Windows 10(64位)下,使用阿里云提供的Node.js语言SDK进行开发;教程中服务端下发指令,使用物联网平台的云端Node.js语言SDK,调用接口Pub。
- 准备Java开发环境。教程中服务端接收设备消息,使用Java语言的AMQP SDK。
使用Java开发环境如下:
- 操作系统:Windows 10 64位
- JDK版本:JDK8
- 集成开发环境:IntelliJ IDEA社区版
- 登陆物联网平台控制台。
- 在控制台左上方,选择物联网平台所在地域华东2(上海)。
说明:本实验示例地域为华东2(上海),实际地域请根据实际实例所在地域进行选择。
4. 创建产品和设备
使用物联网平台接入设备前,您需在物联网平台控制台创建产品和对应设备,获取设备证书(ProductKey、DeviceName和DeviceSecret)。
- 在实例概览页面,单击试用版实例ID或备注名称。
- 在左侧导航栏,选择设备管理>产品,单击创建产品。
- 在新建产品页面,配置参数后,单击确认。
产品名称:家庭温控器,所属品类为自定义品类,其他参数使用默认值,如下图所示。
- 在创建产品页面,单击前往定义物模型。
- 为产品定义物模型,将实际产品抽象成由属性、服务、事件所组成的数据模型,便于物联网平台管理和数据交互。
在功能定义页签,单击编辑草稿,按照以下步骤,为家庭温控器产品定义温度(temperature)和湿度(humidity)属性。
在默认模块下,单击添加自定义功能,如下图所示,分别配置温度和湿度。
- 温度(temperature)配置信息:
- 湿度(humidity)配置信息:
- 单击功能定义的编辑草稿页面左下方的发布上线。控制台页面会弹出发布物模型上线对话框。
- 选中确认已查看当前版本与线上版本的比对结果前复选框。单击确定,完成物模型的发布。
- 在产品详情页面,单击前往管理。
- 在设备列表页签,单击添加设备,在弹出对话框中,输入设备名称(例如Device1),单击确认。
- 创建设备成功后,在弹出的添加完成对话框,单击一键复制设备证书获取设备证书。
- 您也可单击前往查看,在设备详情页面。
单击DeviceSecret右侧查看,获取设备证书。
- 设备证书包含ProductKey、DeviceName和DeviceSecret,是设备与物联网平台进行通信的重要身份认证。
说明:后续设备接入,需设置此信息,请复制后妥善保管。
参数 |
说明 |
ProductKey |
设备所属产品的ProductKey,即物联网平台为产品颁发的全局唯一标识符。 |
DeviceName |
设备在产品内的唯一标识符。DeviceName与设备所属产品的ProductKey组合,作为设备标识,用来与物联网平台进行连接认证和通信。 |
DeviceSecret |
物联网平台为设备颁发的设备密钥,用于认证加密。需与DeviceName成对使用。 |
5. 设备接入和上报数据
获取设备证书(ProductKey、DeviceName和DeviceSecret)后,通过MQTT协议将设备接⼊企业版实例。
- 在Windows系统或Linux系统下载并安装Node.js。教程以Windows 10(64位)系统为例,下载安装包node-v14.15.1-x64.msi。
- 安装成功后,打开CMD窗口,通过以下命令查看node版本。
node --version
显示版本号,表示安装成功。
- 在本地计算机创建一个JavaScript文件(例如iot_device.js),用来存放Node.js示例代码。
Node.js示例代码如下所示:
const mqtt = require('aliyun-iot-mqtt'); // 1. 设备身份信息 var options = { productKey: "g18l***", deviceName: "Device1", deviceSecret: "b2e6e4f102458d84***", host: "iot-cn-***.mqtt.iothub.aliyuncs.com" }; // 2. 建立MQTT连接 const client = mqtt.getAliyunIotMqttClient(options); //订阅云端指令Topic client.subscribe(`/${options.productKey}/${options.deviceName}/user/get`) client.subscribe(`/sys/${options.productKey}/${options.deviceName}/thing/event/property/post_reply`) client.on('message', function(topic, message) { console.log("topic " + topic) console.log("message " + message) }) setInterval(function() { // 3.定时上报温湿度数据 client.publish(`/sys/${options.productKey}/${options.deviceName}/thing/event/property/post`, getPostData(), { qos: 0 }); }, 5 * 1000); function getPostData() { const payloadJson = { id: Date.now(), version: "1.0", params: { temperature: Math.floor((Math.random() * 20) + 10), humidity: Math.floor((Math.random() * 20) + 10) }, method: "thing.event.property.post" } console.log("payloadJson " + JSON.stringify(payloadJson)) return JSON.stringify(payloadJson); }
注意:以下参数仅为示例值,需要替换为实际环境中真实值。
参数 |
示例 |
说明 |
productKey |
g18l*** |
您添加设备后,保存的设备证书信息。您可在控制台中设备Device1的设备详情页面查看。 |
deviceName |
Device1 |
|
deviceSecret |
b2e6e4f102458d84*** |
|
host |
iot-cn-***.mqtt.iothub.aliyuncs.com |
MQTT设备接入域名。 您可在控制台中实例的实例详情页面,单击查看开发配置,查看MQTT的信息。 |
- 打开CMD窗口,使用cd命令找到iot_device.js文件所在路径,在该路径下使用npm命令下载阿里云IoT的MQTT库。下载后的MQTT库文件如下图所示。
npm install aliyun-iot-mqtt -S
- MQTT库下载完成后,在CMD窗口输入如下命令,运行iot_device.js代码,启动设备。
node iot_device.js
返回如下信息,表示设备接入成功,并上报数据。
payloadJson {"id":161848***,"version":"1.0","params":{"temperature":16,"humidity":21},"method":"thing.event.property.post"} topic /sys/g18l***/Device1/thing/event/property/post_reply message {"code":200,"data":{},"id":"16184848***","message":"success","method":"thing.event.property.post","version":"1.0"}
6. 服务端订阅设备消息
设备连接物联网平台后,数据直接上报至物联网平台,平台上的数据可以通过AMQP通道流转至您的服务器。本文为您介绍通过配置AMQP服务端订阅,实现企业服务器通过接入AMQP客户端,接收路灯设备数据的完整流程。
- 为消息消费端配置消费组身份,用于企业服务器通过消费组获取转发的消息。
- 在左侧导航栏,选择消息转发>服务端订阅,单击消费组列表页签,点击创建消费组。
- 在创建消费组对话框中,设置消费组名称为温控器数据接收,单击确认。
- 创建消费组成功后,查看消费组ID。您需复制并保存消费组ID值,用于AMQP客户端接入。
- 为家庭温控器产品配置服务端订阅,用于您的服务器直接订阅产品下多种类型的消息。
- 在左侧导航栏,选择消息转发>服务端订阅,单击创建订阅,设置参数后单击确认。
参数 |
说明 |
产品 |
选择家庭温控器。 |
订阅类型 |
选择AMQP。 |
消费组 |
选择上一步创建的温控器数据接收。 |
推送消息类型 |
选择设备上报消息和物模型历史数据上报。更多消息类型,请参见设置订阅。 |
- 您也可以通过云产品流转规则,将数据转发至AMQP订阅的消费组,使用AMQP客户端接收消息。
例如,将流转规则温控器数据流转中已处理的物模型数据上报内容,转发到AMQP订阅的消费组温控器数据接收中。
- 在左侧导航栏,选择消息转发 > 云产品流转。
注意:若当前页面显示新版功能,先单击右上角返回旧版,进入旧版功能页面,再单击创建规则。
- 在云产品流转页面,单击创建规则。
- 在创建云产品流转规则对话框,输入规则名称为温控器数据流转,数据格式为JSON,单击确认。
- 规则创建成功后,进入数据流转规则页面,参照以下操作,编辑处理消息数据的SQL,单击编写SQL。
- 在弹出对话框中,输入SELECT的字段,并选择Topic的数据类型为物模型数据上报、产品为家庭温控器、设备为Device1、物模型模块为默认模块、Topic为thing/event/property/post,单击确认。
本示例SELECT的字段如下:
items.temperature.value as temperature, items.humidity.value as humidity,deviceName() as deviceName,timestamp() as time
- 单击转发数据一栏对应的添加操作。在添加操作对话框中,选择操作为发布到AMQP服务端订阅消费组,消费组为温控器数据接收,单击确认。
- 下载Demo代码包,并解压。
- 打开IntelliJ IDEA,导入Demo包中的示例工程amqp-demo。
示例使用Java开发语言,推荐使用Apache Qpid JMS客户端,在pom.xml文件中,已添加相关Maven依赖。
- 右击工程的pom.xml文件中,单击Maven>Reload project图标,完成Qpid JMS客户端等依赖包下载。
- 在src/main/java/com.aliyun.iotx.demo目录下AmqpClient.java文件中,参照下表,修改JMS客户端接入物联网平台代码中的参数值。
注意:
- 本Demo代码中,添加了结束程序的代码(Thread.sleep(60 * 1000);),即程序启动成功,运行一分钟后会结束。实际场景中,您可根据业务需求自行设置程序启动逻辑。
- 以下参数仅为示例值,需要替换为实际环境中真实值。
参数 |
示例 |
说明 |
accessKey |
LTAI4GFGQvKuqHJhFa****** |
登录物联网平台控制台,将鼠标移至账号头像上,然后单击AccessKey管理,获取AccessKey ID和AccessKey Secret。 |
accessSecret |
iMS8ZhCDdfJbCMeA005sieKe****** |
|
consumerGroupId |
VWhGZ2QnP7kxWpeSSjt****** |
已创建的温控器数据接收消费组ID。 |
iotInstanceId |
iotInstanceId |
实例ID。您可在控制台的实例概览页面查看。 |
clientId |
12345 |
客户端ID,可自定义,长度不可超过64个字符。建议设置为您的AMQP客户端所在服务器UUID、MAC地址、IP等唯一标识,方便您识别区分不同的客户端。AMQP客户端接入成功后,在控制台的温控器数据接收的消费组详情页面,显示该参数。 |
connectionCount |
4 |
启动AMQP客户端的连接数,最大不超过64个。用于实时消息推送的扩容。 消费组详情页面会以${clientId}+"-"+数字形式,显示连接的客户端。其中数字最小值为0。 |
host |
iot-***.amqp.iothub.aliyuncs.com |
AMQP接入域名。 您可在控制台中实例的实例详情页面,单击查看开发配置,单击AMQP页签查看。 |
- 运行AmqpClient.java示例代码后,返回类似如下日志信息,表示AMQP客户端已接入物联网平台并成功接收消息。
参数 |
说明 |
topic |
设备属性上报的Topic。 |
messageId |
消息的ID。 |
content |
消息的内容。 |
7. 云端下发消息给设备
您通过云端应用调用Pub接口,向温控器发送指令。
说明:教程通过自定义Topic下发指令。您也可以通过物模型相关Topic,发送标准化的物模型数据,更多信息,请参见物模型。
- 在本地计算机创建一个JavaScript文件(例如PubApi.js),用来存放Pub API调⽤的参考代码。
Pub API调⽤的参考代码如下所示:
const Core = require('@alicloud/pop-core'); var client = new Core({ accessKeyId: 'LTAI4GFGQvKuqHJhFa******', accessKeySecret: 'iMS8ZhCDdfJbCMeA005sieKe******', endpoint: 'https://iot.cn-shanghai.aliyuncs.com', apiVersion: '2018-01-20' }); var params = { "RegionId": "cn-shanghai", "TopicFullName": "/g34q2******/Device1/user/get", "MessageContent": "d2FzaGluZ01vZGU6IDIsIHdhc2hpbmdUaW1lOiAzMA==", "ProductKey": "g34q2******", "IotInstanceId": "iot-cn-6ja1y******" } var requestOption = { method: 'POST' }; client.request('Pub', params, requestOption).then((result) => { console.log(JSON.stringify(result)); }, (ex) => { console.log(ex); })
本示例需修改以下参数的值。更多信息,请参见云端开发指南。
注意:
- MessageContent是要发送的消息主体,通过将消息原文转换成二进制数据,并进行Base64编码生成。示例为消息“washingMode: 2, washingTime: 30”编码后的值。
- 以下参数仅为示例值,需要替换为实际环境中真实值。
参数 |
示例 |
说明 |
accessKeyID |
LTAI4GFGQvKuqHJhFa****** |
您的阿里云账号的AccessKey ID。 登录物联网平台控制台,将鼠标移至账号头像上,然后单击AccessKey管理,获取AccessKey ID和AccessKey Secret。 |
accessKeySecret |
iMS8ZhCDdfJbCMeA005sieKe****** |
|
endpoint |
调用云服务的接入地址。物联网平台的接入地址格式:iot.${RegionId}.aliyuncs.com。 |
|
RegionId |
RegionId |
您的物联网平台服务的地域代码。教程中试用版实例部署在华东2(上海)。 |
TopicFullName |
/g34q2******/Device1/user/get |
要发布消息的自定义Topic。 本示例使用物联网平台中的自定义Topic:/${productKey}/${deviceName}/user/get。 其中${productKey}为产品家庭温控器的ProductKey值,${deviceName}为设备Device1。 |
ProductKey |
g34q2****** |
家庭温控器的ProductKey值。 |
IotInstanceId |
iot-cn-6ja1y****** |
实例ID。 您可在控制台的实例概览页面查看。 |
- 打开CMD窗口,使用cd命令找到PubApi.js文件所在路径,在该路径下执行以下命令,安装@alicloud/pop-core模块。
npm install @alicloud/pop-core -S
安装成功后,下载的库文件如下:
node_modules文件夹中包含以下文件:
- 继续在该路径下执行以下命令,安装co模块。
npm install co
安装成功后,node_modules文件夹中文件如下:
- 模块安装完成后,在CMD窗口输入如下命令,运行PubApi.js代码,从云端下发指令到设备端。
node PubApi.js
执行结果如图所示。关于返回参数的更多信息,请参见Pub。
8. 完成
设备接入和上报数据
- iot_device.js代码运行成功后,设备状态显示为在线,在设备详情页面,单击物模型数据页签,可看到最新上报的温度值和湿度值。
- 在左侧导航栏,单击监控运维>日志服务,进入云端运行日志页签,选择家庭温控器产品,查看设备上报数据的⽇志。
更多信息,请参见云端运行日志。
服务端订阅设备消息
- AMQP客户端程序运行成功后,您可在服务端订阅中,查看消费组状态的基本信息。
具体操作,请参见管理消费组。
- 所有配置完成后,在企业实例下的监控运维>日志服务中,从产品列表选择家庭温控器,可在云端运行日志页签下,查看完整的日志信息。
云端下发消息给设备
- PubApi.js代码运行成功后,在左侧导航栏,单击监控运维>日志服务,进入云端运行日志页签,查看设备API调用的⽇志。
- 您也可以在设备端查看下发的MessageContent内容,如图所示。
9. 释放资源
在完成实验之后,若您想保留实验相关的云产品资源,请随时关注账户扣费情况。若您不想保留实验相关的云产品资源,释放云产品资源即可。
实验链接:https://developer.aliyun.com/adc/scenario/c1ddd626fc6b47988e4050fcdf2292a4