一、企业物联网平台开发实战
1、设备通过MQTT协议与您在阿里云上购买的IoT企业实例建立双向连接,上报设备采集的数据。
2、通过数据解析与分析洞察功能将上传数据进行分析并将通过自定义Topic以及AMQP服务端使用户获取分析后的数据。
二、创建企业实例
首先,我们登录物联网平台控制台(https://iot.console.aliyun.com), 点击购买实例来创建一个企业实例。
然后,在购买页面,根据实际业务需求,选择地域、实例类型、设备数量、消息上下行TPS、规则引擎TPS等参数,点击立即购买,付费成功后,即可看到企业实例创建中。
稍等几分钟后,企业实例创建完成。进入企业实例,我们可以看到当前规格参数,设备接入点信息,AMQP订阅接入点信息,云端API调用接入点信息。如下图:
三、创建产品和注册设备
在企业实例的设备管理页面,我们需要先创建一个产品温湿度传感器,数据通信以JSON格式,认证方式为设备秘钥。
在产品的功能定义页面,我们可以添加电量、状态等属性,具体细节如下图:
最后,我们在设备管理页面,基于温湿度传感器产品,注册一个物理设备,并获取设备身份认证的三元组。如下图:
四、设备接入和上报数据
获取设备身份三元组后,即可通过MQTT协议接入到我们开通的企业实例,并上报物模型数据。设备端应用程序示例如下:
开发环境:
- JDK版本:JDK8
- 集成开发环境:IntelliJ IDEA社区版
1、下载Demo代码,并解压。
2、打开IntelliJ IDEA,导入Demo包中的示例工程data-service-demo,在pom.xml文件中,已添加Maven依赖。
3、在src/main/java/com/iot/demo/subsample/MqttSample/MqttTest.java文件中,参照下表,修改参数值。
4、运行src/main/java/com/iot/demo/DemoApplication.java文件中的demo.mqtt()即可。
private void reportProperty(){ if (StringUtils.isEmptyString(identity) || valueWrapper == null) { ALog.e(TAG, "数据格式错误"); return; } LinkKit.getInstance().getDeviceThing().thingPropertyPost(reportData, new IPublishResourceListener() { public void onSuccess(String s, Object o) { // 属性上报成功 ALog.d(TAG, "上报成功 onSuccess() called with: s = [" + s + "], o = [" + o + "]"); } public void onError(String s, AError aError) { // 属性上报失败 ALog.d(TAG, "上报失败onError() called with: s = [" + s + "], aError = [" + getError(aError) + "]"); } }); }
获取的是缓存在设备本地的属性数据,不是云端实时的属性数据,代码如下:
// 根据 identifier 获取当前物模型中该属性的值 String identifier = "xxx"; LinkKit.getInstance().getDeviceThing().getPropertyValue(identifier); // 获取默认模块(非用户自定义模块)的属性列表 LinkKit.getInstance().getDeviceThing().getProperties()
完整代码链接:https://code.alibaba-inc.com/IoT-DSD/data-service-demo
程序运行后,我们看到设备状态为在线,物模型数据中可以看到最新上报的温度和湿度值。
在监控运维的日志服务里,也可以看到设备上报数据的日志。如下图:
五、创建自定义Topic
在温湿度传感器产品的Topic类列表页面,选择自定义Topic,点击定义Topic类来创建自定义Topic。
设备操作权限选择发布并将Topic类填写完整。
六、数据解析
首先,在数据服务的数据解析里,新建温湿度解析任务用以对上报数据进行预处理。
点击温湿度解析,进入数据解析工作台进行节点配置。
在源节点处,所属产品选择温湿度传感器,Topic类型选择物模型通信,可以处理设备通过物模型Topic上报的数据,如下图所示:
按需配置数据处理节点,如数据计算,相邻消息计算等。
在目标节点处,目标类型选择IoT实例Topic,所属产品选择温湿度传感器,目标Topic选择步骤五新创建的Topic类。
完成校验后启动,便可通过自定义Topic进行实时处理后数据的通信。
七、服务器实时接收数据
我们可以通过服务端订阅AMQP方式,实时接收自定义Topic上报的处理后的数据。
首先,我们要在企业实例的服务端订阅中,创建一个新的消费组,用来接收特定类型的消息。如下图:
然后,在服务端订阅中进入订阅列表页签,来创建订阅。
消费组选择上一步新建的温湿度传感器数据接收消费组。
最后,我们在业务服务器编写程序,使用阿里云账号的AccessKey与IoT企业实例建立AMQP连接,代码示例如下:
开发环境:
- JDK版本:JDK8
- 集成开发环境:IntelliJ IDEA社区版
1、下载Demo代码,并解压。
2、打开IntelliJ IDEA,导入Demo包中的示例工程data-service-demo,在pom.xml文件中,已添加Maven依赖。
3、在src/main/java/com/iot/demo/pubsample/AmqpClient.java文件中,参照下表,修改参数值。
参数 |
示例 |
说明 |
accessKey |
LTAI4GFGQvKuqHJhFa****** |
登录物联网平台控制台,将鼠标移至账号头像上,然后单击AccessKey管理,获取AccessKey ID和AccessKey Secret。 |
accessSecret |
iMS8ZhCDdfJbCMeA005sieKe****** |
|
consumerGroupId |
VWhGZ2QnP7kxWpeSSjt****** |
已创建的温控器数据接收消费组ID。请参见配置AMQP服务端订阅的步骤2。 |
iotInstanceId |
"iot-cn-6ja***" |
IoT测试环境的实例ID。 您可在控制台的实例概览页面查看。 |
clientId |
12345 |
客户端ID,可自定义,长度不可超过64个字符。建议设置为您的AMQP客户端所在服务器UUID、MAC地址、IP等唯一标识,方便您识别区分不同的客户端。 AMQP客户端接入成功后,在控制台的温控器数据接收的消费组详情页面,显示该参数。 |
connectionCount |
4 |
启动AMQP客户端的连接数,最大不超过64个。用于实时消息推送的扩容。 消费组详情页面会以${clientId}+"-"+数字形式,显示连接的客户端。其中数字最小值为0。 |
host |
iot-***.amqp.iothub.aliyuncs.com |
您购买实例成功后,保存的AMQP接入域名,请参见创建企业版实例。 您可在控制台中实例IoT测试环境的实例详情页面,单击查看开发配置,单击AMQP页签查看。 |
4、运行运行src/main/java/com/iot/demo/DemoApplication.java文件中的demo.amqp()即可。
完整代码链接:https://code.alibaba-inc.com/IoT-DSD/data-service-demo
启动后,我们可以看到处理的数据,如下图:
返回参数:
参数 |
参数值 |
说明 |
topic |
/***********/******/user/devmsg |
自定义Topic |
messageId |
1682274939191261184 |
消息的ID |
content |
{"temperature":23,"humidity":21,"time":1604548451951} |
消息的内容 |