OneNET将系统的基础消息格式设计为json格式,其数据可以映射为虚拟的表,数据中的Key对应表的列,Value对应列值,规则引擎支持SQL语句对该数据进行处理,如下图所示:
消息源选择为设备数据点消息,基础消息格式示例如下:
{
"sysProperty": {
"messageType": "deviceDatapoint",
"productId": "90273"
},
"appProperty":{
"deviceId": "102839",
"dataTimestamp": 15980987429000,
"datastream":"weather"
},
"body":{
"temperature": 30,
"humidity": "47%"
}
}
SQL示例:
SELECT appProperty.deviceId as did, body as weather FROM /deviceDatapoint/ds WHERE body.temperature > 10
该SQL语句表示:
筛选设备上传数据点的消息,当body的value大于10的时候,提取appProperty.deviceId属性,并重命名为 did;提取body属性,重命名为weather ,消息重组后进行转发
经过该SQL处理的消息输出如下消息
{
"did": "102839",
"weather": {
"temperature": 30,
"humidity": "47%"
}
}
SELECT body as temperature
SELECT appProperty.deviceId as did
SELECT appProperty.deviceId as did, appProperty.dataTimestamp as t
- 支持插入数值型数据与字符串型数据
- 支持插入 内置函数 所取得值,均为字符串型
- 支持JSON嵌套插入,最多支持5层嵌套插入,如 SELECT 1 as a.b.c.d.e
- 插入操作时与原数据中的key同级同名时,覆盖原有内容
SELECT使用示例列表如下:
原JSON | SQL语句 | 结果 | 说明 |
---|---|---|---|
{} | SELECT 1 as a | {"a":1} | - |
{} | SELECT 'red' as a | {"a":"red"} | - |
{} | SELECT '' as a | {"a":""} | 插入空字符串 |
{} | SELECT 1 as a.b | {"a":{"b":1}} | 嵌套插入 |
{"b":3} | SELECT 1 as a | {"a":1} | - |
{"b":3} | SELECT 'red' as a | {"a":"red"} | - |
{"b":3} | SELECT '' as a | {"a":""} | 插入空字符串 |
{"b":3} | SELECT 1 as a.b | {"a":{"b":1} | 嵌套插入 |
{"b":3} | SELECT *,1 as a | {"b":3,"a":1} | - |
{"b":3} | SELECT *,'red' as a | {"b":3,"a":"red"} | - |
{"b":3} | SELECT *,'' as a | {"b":3,"a":""} | 插入空字符串 |
{"b":3} | SELECT *,1 as a.b | {"b":3,"a":{"b":1} | 嵌套插入 |
{"c":3} | SELECT *,1 as c | {"c":1} | 对同级同名key进行插入,执行覆盖原有内容 |
WHERE语句用于定义规则触发条件
SELECT * WHERE body.temperature > 10
SELECT * WHERE body.temperature = 10
SELECT * WHERE body.humidity = '47%'
SELECT * WHERE body.temperature > 10 AND body.temperature < 30
表达式支持详情见下表操作符 | 说明 | 举例 |
---|---|---|
= | 相等 | temperature=20 |
!= | 不等于 | temperature!=20 |
AND | 逻辑与 | temperature=20 AND country='CN' |
OR | 逻辑或 | temperature=20 OR country='CN' |
( ) | 括号中表达式优先计算 | temperature=20 AND (country='CN' OR online = true) |
+ | 算术加法 | 4+5 |
- | 算术减法 | 5-4 |
/ | 算术除法 | 10/5 |
* | 算术乘法 | 2*5 |
% | 取余 | 20%7 |
< | 小于 | 5<6 |
<= | 小于等于 | 5<=6 |
> | 大于 | 5>4 |
>= | 大于等于 | 5>=4 |