今天,我们给大家带来基于云产品组合的方案,无需编写应用程序代码,实时缓存IoT设备上报的当前运行状态,供业务系统查询的技术方案。
技术原理
借助物联网平台提供的规则引擎模块,我们可以轻松的把设备上报的最新状态存储到Key-Value的数据库--表格存储OTS/Redis/MongoDB中,技术方案如下:
IoT物联网开发
首先我们在IoT物联网控制台创建产品水泵,并注册2个设备:
然后,给每个设备添加city标签,如下:
水泵监控场景中,每10分钟会定时上报运行状态到IoT平台,具体通信 Topic 和payload 如下:
// 定时上报运行状态的Topic
/${productKey}/${deviceName}/user/bizHeart/post
// 对应payload结构体
{
status: 'RUNNING', //运行状态 RUNNING,STOP,SHUTDOWN
speed: 3000, //当前转速
waterOutput: 125,//当前出水量
workingTime: 72//工作时长 xx分钟
}
表格存储数据库
我们在表格存储OTS控制台创建一个数据表,以设备deviceName为主键,扩展信息为设备当前状态属性,无需预先定义。
创建完成后,数据表基本信息,如下:
规则引擎配置
当设备上报状态数据后,需要通过预先配置规则引擎实时流转到表格存储中,规则引擎配置如下:
数据处理的SQL参考:
SELECT
deviceName() as deviceName,
attribute('coordinate') as coordinate,
attribute('city') as city,
timestamp('yyyy-MM-dd HH:mm:ss') as currentTime,
status,speed,waterOutput,workingTime
FROM
"/a1vYwzHjT6p/+/user/bizHeart/post"
数据转发配置如下:
联机运行
当设备启动,上报状态数据后,我们在IoT控制台的日志服务里可以查看到如下消息报文记录:
以及规则引擎流转日志:
同时在表格存储数据库中,我们也可以查看到设备当前状态数据:
查询设备状态
Node.js方式从表格存储OTS中读取指定key的数据参考据代码如下:
var TableStore = require('tablestore');
var client = new TableStore.Client({
accessKeyId: '账号accessKey',
secretAccessKey: '账号secretAccessKey',
endpoint: '表格存储接入点',
instancename: '表格存储实例ID',
maxRetries: 3
});
var params = {
tableName: '表名',
primaryKey: [{ 'deviceName': '设备Id' }],
maxVersions: 1
};
client.getRow(params, function(err, data) {
if (err) {
console.log('error:', err);
return;
}
if (data.row.primaryKey) {
data.row.primaryKey.forEach(function(item) {
console.log('======> getRow: ', item.name + '=' + item.value);
})
data.row.attributes.forEach(function(item) {
console.log('\t\t' + item.columnName + '=' + item.columnValue);
})
}
});
设备最新状态数据查看:
$ node queryOTS.js
======> getRow: deviceName=xxxxxx
city=xxxxxx
coordinate=xxxxxx
currentTime=xxxxxx
status=xxxxxx
speed=xxxxxx
waterOutput=xxxxxx
workingTime=xxxxxx
【往期回顾】
1、39张传感器工作原理GIF图汇总
2、智能手持测温枪开发实践
3、JMeter压测MQTT服务性能实战
4、IoT物联网平台日志服务详解
5、自建MQTT集群迁移阿里云IoT实践
6、工业Modbus电力104规约接入IoT平台
7、设备免烧录三元组,即时注册解决方案
8、IoT+TSDB+Quick BI 搭建楼宇环境监控
9、JS全栈开发,构建智能家居小程序