规则引擎推送实例
此处将编写三个实例来使用户更好地理解规则引擎的用法及功能。
实例0:对照实例
【说明】:
此实例将创建一个不进行任何字段筛选(SELECT)或条件过滤(WHERE)的规则引擎,即将所有的数据通过HTTP(S)的推送方式推送到指定地址。 所得到的结果可以为后续实例进行对比。
【操作步骤】:
- 在“规则引擎”页面,点击“新建规则”,填好规则描述,选择产品;
- 规则内容
SELECT
中填写*
; - 规则内容
WHERE
中不填写过滤条件; - 选择操作“发送到HTTP(S)接口”;
- 目的地填写
http://10.50.80.100:1200
(此地址为无效地址,仅作示例); - 点击“确定”,完成规则创建;
- 在规则列表中点击“启用”,启用规则;
- 规则启用后,满足规则条件的数据会通过POST方式发送到所配置的http地址。
【设备操作】:
- 设备登录;
- 发送设备所有参数(电源开关信息
power:1
;光照强度light:50
;湿度hum:23
); - 发送设备所有参数(电源开关信息
power:1
;光照强度light:95
;湿度hum:23
); - 设备登出。
【数据结果】: 共收到推送四组数据:
操作1对应的数据
{
"iot_sys_devId": "8237948938472348",
"iot_sys_pk": "fb4327cdcfe5432e82ad217572bd8ebd",
"iot_sys_event": "devLogin",
"iot_sys_raw": "{\"action\":\"devLogin\",\"msgId\":1,\"sign\":\"4f6a95a54bad27a874132929781ff4fea1748b7c\",\"random\":\"init\",\"hashMethod\":\"HmacSHA1\"}",
"iot_sys_resp": "{\"action\":\"devLoginResp\",\"msgId\":1,\"pk\":\"fb4327cdcfe5432e82ad217572bd8ebd\",\"devId\":\"8237948938472348\",\"code\":0,\"desc\":\"success, \"}",
"iot_sys_timestamp": 1576034808492
}
操作2对应的数据
{
"iot_sys_devId": "8237948938472348",
"iot_sys_pk": "fb4327cdcfe5432e82ad217572bd8ebd",
"iot_sys_params": {
"hum": 23,
"light": 50,
"power": 1
},
"iot_sys_event": "devSend",
"iot_sys_cmd": "reportAll",
"iot_sys_raw": "{\"action\":\"devSend\",\"msgId\":0,\"pk\":\"fb4327cdcfe5432e82ad217572bd8ebd\",\"devId\":\"8237948938472348\",\"data\":{\"cmd\":\"reportAll\",\"params\":{\"power\":1,\"light\":50,\"hum\":23}}}",
"iot_sys_resp": "{\"action\":\"devSendResp\",\"msgId\":0,\"pk\":\"fb4327cdcfe5432e82ad217572bd8ebd\",\"devId\":\"8237948938472348\",\"code\":0,\"desc\":\"success\"}",
"iot_sys_timestamp": 1576033843689
}
操作3对应的数据
{
"iot_sys_devId": "8237948938472348",
"iot_sys_pk": "fb4327cdcfe5432e82ad217572bd8ebd",
"iot_sys_params": {
"hum": 23,
"light": 95,
"power": 1
},
"iot_sys_event": "devSend",
"iot_sys_cmd": "reportAll",
"iot_sys_raw": "{\"action\":\"devSend\",\"msgId\":0,\"pk\":\"fb4327cdcfe5432e82ad217572bd8ebd\",\"devId\":\"8237948938472348\",\"data\":{\"cmd\":\"reportAll\",\"params\":{\"power\":1,\"light\":95,\"hum\":23}}}",
"iot_sys_resp": "{\"action\":\"devSendResp\",\"msgId\":0,\"pk\":\"fb4327cdcfe5432e82ad217572bd8ebd\",\"devId\":\"8237948938472348\",\"code\":0,\"desc\":\"success\"}",
"iot_sys_timestamp": 1576035409147
}
操作4对应的数据
{
"iot_sys_devId": "8237948938472348",
"iot_sys_pk": "fb4327cdcfe5432e82ad217572bd8ebd",
"iot_sys_event": "devLogout",
"iot_sys_raw": "{\"action\":\"devLogout\",\"msgId\":0,\"reason\":\"normal\"}",
"iot_sys_resp": "{\"action\":\"devLogoutResp\",\"msgId\":0,\"pk\":\"fb4327cdcfe5432e82ad217572bd8ebd\",\"devId\":\"8237948938472348\",\"code\":0,\"desc\":\"success\"}",
"iot_sys_timestamp": 1576034807613
}
实例1:转发到指定HTTP(S)地址
【说明】:
只接收devSend请求的推送,且只把部分字段推送到指定地址。
推送地址:http://10.50.80.100:1200
(此地址为无效地址,仅作示例)。
推送的字段为:设备IDiot_sys_devId
、事件iot_sys_event
以及部分协议参数iot_sys_params
(光照强度light
,湿度hum
)。
【操作步骤】:
- 在“规则引擎”页面,点击“新建规则”,填好规则描述,选择产品;
- 根据需求“推送的字段为:设备ID、PK以及协议参数”,SELECT中填写
iot_sys_devId,iot_sys_event,light,hum
(light,hum为协议中定义的要上报的参数); - 根据需求“设备上报状态时(devSend),若设备的亮度高于阈值90时推送”,WHERE中填写;
iot_sys_event="devSend" and light > 90
(devSen为设备上报状态的数据、light > 90 表示亮度高于阈值90); - 选择操作“发送到HTTP(S)接口”;
- 目的地填写
http://10.50.80.100:1200
(此地址为无效地址,仅作示例); - 点击“确定”,完成规则创建;
- 在规则列表中点击“启用”,启用规则;
- 规则启用后,满足规则条件的数据会通过POST方式发送到所配置的http地址。
【设备操作】:
- 设备登录;
- 发送设备所有参数(电源开关信息
power:1
;光照强度light:50
;湿度hum:23
); - 发送设备所有参数(电源开关信息
power:1
;光照强度light:95
;湿度hum:23
); - 设备登出。
【数据结果】:
仅收到一组数据:
操作3对应的数据
{
"iot_sys_devId": "8237948938472348",
"iot_sys_params": {
"hum": 23,
"light": 95
},
"iot_sys_event": "devSend"
}
【对照分析】:
对比对照实例,可知:
- 规则引擎的条件过滤功能使得设备的
操作1
、操作2
和操作4
数据被过滤; - 规则引擎的字段筛选功能使得仅获得到设备ID
iot_sys_devId
、事件iot_sys_event
和参数iot_sys_params
,且参数只转发湿度hum
和光照强度light
。
实例2:转发到一个Topic
【说明】:
获取设备上下线通知
推送的字段为:设备IDiot_sys_devId
、事件iot_sys_event
以及操作时间iot_sys_timestamp
。
【操作步骤】:
- 在“规则引擎”页面,点击“新建规则”,填好规则描述,选择产品;
- 根据需求,SELECT中填写
iot_sys_devId,iot_sys_event,iot_sys_timestamp
; - 根据需求“设备上线、离线状态变化时”时推送,WHERE中填写
iot_sys_event="devLogin" or iot_sys_event="devLogout"
(devLogin设备上线、devLogout设备离线); - 选择操作“发送到一个Topic”;
- 点击“确定”,完成规则创建;
- 在规则列表中点击“启用”,启用规则;
- 规则创建好后,点击“查看”,可获取推送的Topic,以及建立MQTT连接认证需要的AccessKey和AccessSecret。注意,此AccessKey和AccessSecret不同于"应用开发指南"中的AccessKey,仅用于当前Topic数据获取。
接收数据操作步骤:
1. 构造clientId:rule:{AccessKey}
2. 构造username:{hashMethod}:{random}(hashMethod支持:HmacMD5、HmacSHA1、HmacSHA256和 HmacSHA512。
3. 计算password,password= hashMethod(AccessKey+AccessSecret+random),加密秘钥填写AccessSecret。
4. 建立MQTT连接,进行接入认证。
5. 复制规则引擎中生成的Topic,并订阅该Topic。
6. 订阅成功后就可正常接收规则引擎推送来的数据。
【注意】
暂不支持自定义Topic。
注意区分clientId和Topic。
【设备操作】:
- 设备登录;
- 发送设备所有参数(电源开关信息
power:1
;光照强度light:50
;湿度hum:23
); - 发送设备所有参数(电源开关信息
power:1
;光照强度light:95
;湿度hum:23
); - 设备登出。
【数据结果】:
收到二组数据:
操作1对应的数据
{
"iot_sys_devId": "8237948938472348",
"iot_sys_event": "devLogin",
"iot_sys_timestamp": 1576053309725
}
操作4对应的数据
{
"iot_sys_devId": "8237948938472348",
"iot_sys_event": "devLogout",
"iot_sys_timestamp": 1576053324204
}
【对照分析】:
对比对照实例,可知:
- 规则引擎的条件过滤功能使得设备的
操作2
和操作3
数据被过滤; - 规则引擎的字段筛选功能使得仅获得到设备ID
iot_sys_devId
、事件iot_sys_event
和时间iot_sys_timestamp
。
说明
此处实例只涉及到了部分筛选字段和部分过滤条件,可以在规则引擎中查看所有的字段和条件,以及不同设备操作对应推送消息包含的字段说明。