开发者学堂课程【物联网平台开发全栈教程:规则引擎】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/562/detail/7696
规则引擎
内容介绍
一、规则引擎最主要的作用
二、数据被 LP 平台接收后
三、规则引擎使用方法
前言:
本节主要讲解整个规则引擎架构,了解完架构后会知道基于阿里云 LoT Hub,根据规则引擎的架构无需购买服务器就可以构建分布式架构,实现事实的采集、计算存储的全栈服务。数据被 LP 平台接收后,会进行打包,要知道打包之后的效果,这是用规则引擎进行数据采集时要用到的。
一、规则引擎最主要的作用
规则引擎最主要的作用根据创建的规则将数据传播到任何地方比如:
1、可以转发到 RDS、表格存储、TSDB 中进行存储。
或者可以转发到数据中心进行大数据的离线计算。
2、可以转发到 DataHub 中,使用 Streamcompute 进行流计算,使用 Maxcompute 进行大规模离线计算。
3、可以转发到函数计算进行事件计算。
4、可以转发到另—个 Topic 中实现 M2M 通信。
5、可以转发到消息队列 MQ、消息服务实现高可靠消费数据·。
这次做的实操就是转发到另—个 Topic 中实现 M2M 通信。
使用规则引擎后,无需购买服务器部署分布式架构,即可实现采集+计算+存储的全栈服务。
首先第一步:互联网数据的采集,比如这一系列课程基于小硬件,这个硬件采集温度,采集这个数据后进入到 lot hub后就可以配置规则引擎,将数据转发出去转发到 lot hub。
lot hub 的意思就是 M2M时转发到另一个 topic,转发到数据库,转发到大数据中心,转发到表格存储,转发到日志服务系统。
在系统设计的时候希望设备运行状态被人所了解,因为当部署了成百上千的设备后,并不会知道某一台设备的工作状况,比如有没有遭雷击,电压正不正常等等,它的工作日志就可以通过规则引擎专门将工作日志转发到日志服务里,可以通过阿里云日志服务分析、管理、控制设备、系统目前状况。
数据到流计算之后可以再次进行深加工后进行转发,到最后数据展示、在线服务、数据分析、数据储存、业务加工,就可以进行一系列的操作了。
无需购买服务器部署分布式架构,即可实现采集+计算+存储的全栈服务。
二、数据被 LP 平台接收后
数据上传到 lot hub 之后,平台会对数据进行打包
主要针对的就是高级版的讲解。数据格式如下:
{
"iotId":"4z819VQHk6VSLmmBJfrf00107ee200",
"productKey":"1234556554""
,
"deviceName" : " deviceName1234"
,
"gmtCreate":1510799670074,
"deviceType" :"Ammeter".
"items" : {
"Power" : {
"value" :" on"
,
"time":1510799670074
"Position" : [
"time":1510292697470,
"value": { [
"latitude" : 39.9
,
"longitude":116.38
}
}
往服务器上丢数据,最原始的就是 key1: 后边跟上温度,上传之后平台就会加上以上信息,在 item 里会有 key,key 里面有 value 和 time,time 是时间戳,是哪一个时刻上报了什么东西,被平台成功接收就会有 item 及里面的温度、时间等,但是此时就没有 position 以下的相关信息了。
在配置规则引擎时,想读这个物理设备上传的温度是多少,就先读 item,再读 item 里面的 Indoor Temperature,再读 value,事例如下:
SELECT items.IndoorTemperature.value as Temperature
FROM"/sys/a1mKVbdAm25/klekBohKYzrD55OANsFc/thing/event/property/post"
读它的温度,items.IndoorTemperature.下面的.value 才是想要读取的,这里 Temperature 是 sql 语句,在用户指南中有 sql 表达式介绍,里面函数列表是写 SQL 表达式时支持的一些函数。
作为初学者想要学规则引擎怎么用,在 SQL 表达式中有使用实例,里面有很多实例,其中转发数据到函数计算是很有用的:
函数计算就是在云端的一段代码,极大增强了数据处理的灵活性,规则引擎数据放在函数计算里,函数计算是自己写的函数,将数据拿到手之后经过计算直接可以扔到任何地方,甚至是三方云,极大提高了物联网平台的灵活性,(注意函数计算是收费服务)。
三、规则引擎使用方法
规则引擎在用之前,因为是 M2M,所以要建两个设备,查看设备参数利用小工具输入三个参数计算,计算好以后填到 connection profile 里的 client id,填完之后点击 connect,
现在已经有一个物理设备是物联网温度继电器,然后用 MQTT.FX-1.3.1 模拟上线了一个设备叫做 Test_Json_123456 ,可以看到 Test_Json_123456里一堆设备的 topic 列表,想要实现 M2M,意思是想让真实的温度(物联网温度继电器)发给 Test_Json_123456,可能a设备放在新疆,b 设备放在了海南,如果想让海南的温度让新疆人知道,此时让数据快速可靠的传播方式是通过规则引擎。
1. 配置规则引擎
如果是第一次用,点击创建规则填入名称和描述,点击管理首先要添加一条转发数据的目的地,点击添加操作发布到另一个 topic,topic 选择 sys,设备是物联网温度继电器,转发给 Test_Json_123456以及具体的 topic,如下图:
点击确定,将 topic 复制到 MQTT.FX-1.3.1中选择 subscribe 粘贴进去,点击 subscribe,订阅这个 topic,看一下平台有没有给这个 topic 发任何的东西过来。此时再添加一个编辑数据:
上报属性里面可能有好多属性,只是现在用到的是 indoor Temperature,此时需要字段且很重要,理论上按照正常理解,它的字段就是 indoorTemperature,后面加这么多是因为上面说的数据格式。
数据格式应该如下:
{
"iotId":"4z819VQHk6VSLmmBJfrf00107e****",
"requestId":"2",
"productKey":"al12345****",
"deviceName":"deviceName1234",
"gmtCreate":1510799670074,
"deviceType":"Ammeter",
"items":{
"Power":{
"value":"on",
"time":1510799670074
},
"Position":{
"time":1510292697470,
"value":{
"latitude":39.9,
"longitude":116.38
}
}
},
"checkFailedData":{
"attribute_8":{
"time": 1510292697470,
"value": 715665571,
"code":6304,
"message":"tsl parse: params not exist -> attribute_8"
}
}
}
数据格式一旦被 lot 平台所接受,平台就会对它进行数据的二次打包,打包之后 indoorTemperature 就到了 power 的位置,温度就放倒了 value 后面,所以就是 item.indoorTemperature.value 才是想要的温度。As 就是将字段扔出去的时候起的名字,比如这里起的名字是 Temperature(本身是 indoorTemperature)然后点击确定,之后启动规则。
规则启动成功后就可以回到 MQTT.FX-1.3.1 进行接收了,会显示传过来的温度:{"Temperature": 32.8} 十秒传递一次。