启用路由实例后,系统将会向其目的地端点转发路由实例符合过滤器要求的数据。转发的最终数据为EVENT标准格式,且加密、压缩之后的数据。
event JSON格式
{
"eventId": "f86797d2-9366-4b26-aa02-28a4a703bf10",
"deviceId": "10000166",//设备id
"productId": "100036", //产品id
"protocol": 1,//设备协议: 1:MQTT 2:LWM2M 3:TCP 4:MODBUS 5:OPCUA 6:HTTP 7:BACNET 8:BLUETOOTH 9:ZIGBEE 10:LORA 14:OTHER 15:VIDEO
"data":{
"temprature" : 30, //设备上报的属性值
"light":"15",//设备上报的属性值
}
"created": 1569664351174, //创建事件
"type":0, //type不为1时为事件类型,0:无 1:信息,2:告警,3:故障
"identifierType":0, // 0:属性,1:事件,默认为0
}
data对象为键值对对象,键为属性标志,值为属性数据值。例如"data":{"temprature" : 30}表示温度为30度。
event XML格式:
<Event>
<ID></ID>
<EventId>f86797d2-9366-4b26-aa02-28a4a703bf10</EventId>
<DeviceId>10000166</DeviceId>
<ProductId>100036</ProductId>
<Protocol>1</Protocol>
<Data>
<temperature>
30
</temperature>
</Data>
<Created>1569664351174</Created>
</Event>
<Data></Data>节点中包含属性数据。子节点为属性标志,节点值为数据值。例如 <temprature>30</temprature>表示温度为30度。
event CSV格式:
ID,EventId,DeviceId,ProductId,Protocol,Data,Created
-----------------------------------------------------------
1,f86797d2-9366-4b26-aa02-28a4a703bf10,10000166,100036,1,cpu.used,0.015,1569664351174
Data对应的数据为“cpu.used,0.015”表示cpu.used属性值为0.015。
MySQL形式数据转发与REST,MQTT,KAFKA等其他类型不一致,数据结构以表形式存于数据库表中。结构如下:
名称 | 数据类型 | 描述 |
---|---|---|
id | INT(11) | 记录ID |
event_id | VARCHAR(60) | 数据原始ID |
product_id | VARCHAR(60) | 产品ID |
device_id | VARCHAR(60) | 设备ID |
protocol | INT(11) | 数据产品协议 |
data_string | VARCHAR(2048) | 设备属性数据,值为属性标志-值键值对 |
created | BIGINT(20) | 数据产生时间 |
其中data_string为属性键值对json格式,例如{ "temperature" : 30}
加密方式暂时只支持AES-128加密,设置AES加密参数后,系统会对event数据进行相应参数加密后转发。
注:加密后的event数据会进行一次base64加密后再进行转发。开发者如需要对数据解密,首先需要将得到的数据依次进行base64解密和AES解密。
压缩数据方式暂只支持gzip和zip加密,选择相应压缩方式后,系统将对数据(加密后的数据)进行压缩后再进行转发。
针对设备上传数据的自定义转发场景,目前支持Lua脚本。
脚本模板
--[[
* @param event 设备上传的数据table类型里面包含
* event["deviceid"] string —— 设备ID
* event["pid"] string —— 产品ID
* event["protocol"] int —— 协议类型
* event["eventId"] string —— 设备数据上传event id
* event["ruleId"] string —— 规则引擎转发id
* event["created"] string —— 创建时间,可以被数据库datetime类型接受
* event["属性名"] 属性值类型 —— 属性值
* @return table类型res ={} 必须包含:
* res["data"],data里是需要发送的数据列表如res["data"] ={event1,event2}
* event1或者event2中必须包含device_id(设备ID)、name(属性名称)字段
* event中属性类型为Boolean时,0为false,1为true
--]]
function handler(event)
event1 = {}
event1["name"] = "someDouble"
event1["device_id"] = event["deviceid"]
event1["created"] = event["created"]
event1["value"] = event["someDouble"]
event2 = {}
event2["name"] = "someInteger"
event2["device_id"] = event["deviceid"]
event2["created"] = event["created"]
event2["value"] = event["someInteger"]
res = {}
res["data"]= {event1,event2}
return res
end