通过使用物联网应用开发(IoT Studio)平台的Web可视化开发和业务逻辑开发工具,开发一个茶园的环境监控大屏。应用用户可在监控大屏中,查看在指定时间内,设备上报的温度值折线图。
监控大屏如下图。
在物联网应用开发(IoT Studio)上创建物联网开发项目,并为项目导入或创建温度监测器产品和设备。后续将在该项目下,创建业务逻辑应用和Web应用。
您也可登录物联网平台控制台,在左侧导航栏单击相关服务后,单击物联网应用开发模块中的前往使用,进入IoT Studio控制台。
若您已创建了产品和设备,且已为产品定义了物模型,直接关联产品和设备即可。
您可在该项目的产品页面的产品列表中查看到关联的产品。
若您还未创建相应产品,需先创建产品,并为产品定义物模型。
参数说明的更多信息,请参见参数说明表。
产品创建成功后,回到产品页面,可在产品列表中查看到已创建的新产品。
本示例添加以下自定义属性。具体操作,请参见单个添加物模型。
功能名称 | 标识符 | 数据类型 | 取值范围 | 单位 | 读写类型 |
---|---|---|---|---|---|
温度 | temperature | float (单精度浮点型) | -10 ~ 50 | 摄氏度(℃) | 读写 |
单击添加设备。
在添加设备对话框中,输入设备信息,单击确认。
设备创建成功后,将自动弹出添加完成对话框。您可以查看、复制设备证书信息。
设备创建完成后,设备状态显示未激活。请参见Link SDK文档开发设备端SDK,激活设备。
有关设备的更多信息,请参见设备。
物联网平台设备的正常开发流程是:设备端开发完成,设备上报数据,云端接收数据,云端开始开发工作。该开发流程战线较长,耗时较久。而虚拟设备可以快速模拟真实设备产生业务数据,是最快体验IoT Studio开发功能的途径。本案例根据开发虚拟设备的数据,完成物联网应用的开发调试。
您也可登录物联网平台控制台,在左侧导航栏单击相关服务后,单击物联网应用开发模块中的前往使用,进入IoT Studio控制台。
您也可单击全局资源项目,进入该项目详情页面。
在设定的时间推送数据后,可在页面右侧实时日志下查看操作日志。
数据推送成功后,可在运行状态页签下,查看设备上报的属性信息。
数据分析服务是物联网应用开发(IoT Studio)的一个重要组件,通过数据分析组件,可简单查阅各数据中各事件维度的统计值,例如平均值,最大值,最小值等。支持通过图表选择不同的数据维度,探索各数据之间的关系。
说明 上图中时序透视的快照图,需要在时序透视工作台中保存后才会生成。
从上图中可以发现每隔1小时左右,温度的平均变化情况。您也可以查看温度上报数据的其他统计值,了解更多温度变化趋势。
在云数据库RDS版控制台,创建一个MySQL类型的数据库实例,并创建两个数据表,分别用于存储设备上报的温度数据和服务应用处理后的温度数据。
在业务逻辑工作台,开发三个业务服务,分别用于获取设备上报的温度数据,每整点统计前一小时的最高温度数据,和筛选指定时间段内每小时的最高温度数据。
您也可登录物联网平台控制台,在左侧导航栏单击相关服务后,单击物联网应用开发模块中的前往使用,进入IoT Studio控制台。
该服务以温度监测器设备作为触发节点,接收温度监测器设备上报的温度数据,并存储到云数据库RDS版MySQL数据表中。
参数 | 说明 |
---|---|
服务名称 | 服务的唯一标识符,在项目下具有唯一性。例如:存储温度数据 仅支持中文汉字、英文字母、数字、下划线(_)、连接号(-)和英文圆括号(()),且必须以中文汉字、英文字母或数字开头,长度不超过30个字符(一个中文汉字算一个字符)。 |
所属项目 | 服务所属的项目。本案例选择已创建的项目:茶园监控方案。 |
备注 | 描述服务的用途等信息。长度不超过100个字符(一个中文汉字算一个字符)。 |
本示例中,输入的参数如下所示。
{
"table": "sensor_data",
"rows": [
{
"id":"{
{payload.deviceContext.gmtCreate}}",
"deviceName" : "{
{payload.deviceContext.deviceName}}",
"dateTime" : "{
{payload.props.temperature.time}}",
"temperature" : "{
{payload.props.temperature.value}}"
}
]
}
5. 创建一个定时触发服务。
该服务用于每整点统计前一小时的最高温度数据,并存储到云数据库RDS版MySQL数据表中。
本示例中,查询数据的输入参数如下所示。
{
"table": "sensor_data",
"condition": {
"where": {"deviceName": "bZxNh9qi6PyqYvFcDvqK"},
"columns": [
"id",
"deviceName",
"temperature",
"dateTime"
],
"orders": ["temperature"]
}
}
本示例中,输入的脚本如下所示。
/**
* @param {Object} payload 上一节点的输出
* @param {Object} node 指定某个节点的输出
* @param {Object} query 服务流第一个节点的输出
* @param {Object} context { appKey, appSecret }
*/
module.exports = async function(payload, node, query, context) {
console.log("payload: ", payload);
let result = {};
result.index = payload.length - 1;
result.maxTemperature = payload[result.index].temperature;
result.id = payload[result.index].id;
result.deviceName = payload[result.index].deviceName;
result.dateTime = payload[result.index].dateTime;
return result;
}
本示例中,输入的参数如下所示。
{
"table": "Maxtemperature",
"rows": [{
"id": "{
{payload.id}}",
"deviceName": "{
{payload.deviceName}}",
"dateTime": "{
{payload.dateTime}}",
"maxTemperature": "{
{payload.maxTemperature}}"
}]
}
6. 创建一个HTTP接口,用于实现筛选指定时间段的数据。
本示例中,配置了以下三个请求参数。
参数 | 类型 | 是否必需 | 说明 |
---|---|---|---|
DeviceName | String | 否 | 调用接口时,传入设备名称,查询指定设备上报的温度数据;不传入设备名称,则返回全部设备的温度数据。 |
startTime | Int | 是 | 调用接口时,需传入要查询数据的起始时间。 |
endTime | Int | 是 | 调用接口时,需传入要查询数据的结束时间。 |
本示例中,输入的参数如下所示。
{
"table": "maxtemperature",
"condition": {
"where": {
"deviceName": "{
{payload.DeviceName}}"
},
"columns": [
"maxTemperature",
"dateTime"
],
"orders": [
"dateTime"
]
}
}
本示例中,输入的脚本如下所示。
/**
* @param {Object} payload 上一节点的输出
* @param {Object} node 指定某个节点的输出
* @param {Object} query 服务流第一个节点的输出
* @param {Object} context { appKey, appSecret }
*/
module.exports = async function(payload, node, query, context) {
console.log("payload: ", payload);
let length = 0;
for (let i = 0; i < payload.length; i++) {
if(parseInt(payload[i].dateTime) >= query.startTime && parseInt(payload[i].dateTime) <= query.endTime) {
length = length + 1;
}
}
console.log("length", length);
var result = new Array(length);
for(let i = 0; i < length ; i++){
result[i] = new Array(2);
result[i][0] = "";
result[i][1] = 0;
}
let valid = 0;
for(let j = 0 ;j < payload.length ; j++ ){
if(parseInt(payload[j].dateTime) >= query.startTime && parseInt(payload[j].dateTime) <= query.endTime) {
result[valid][0] = payload[j].dateTime;
result[valid][1] = payload[j].maxTemperature;
valid = valid + 1;
}
}
return result;
}
7. 三个服务均调试成功后,单击页面右上角的发布按钮,发布服务。
您可开发一个Web可视化应用,用于展示和查询指定时间段中,设备上报的每小时内的最高温度。
您也可登录物联网平台控制台,在左侧导航栏单击相关服务后,单击物联网应用开发模块中的前往使用,进入IoT Studio控制台。
下文有关折线图组件的详细配置,请参见折线图。