RHILEX 推送数据到联犀物联网平台
RHILEX 有强大的数据处理能力,本文主要展示如何通过 RHILEX 边缘规则引擎将 Modbus 数据推送到联犀物联网平台。
新建产品
首先在联犀系统内新建一个网关产品:
配置基本信息:
新建物模型
然后根据自己的数据字段来新建物模型。
新建设备
产品设计完成以后新建一个设备。
新建设备完成后即可在列表查看:
获取认证信息
打开设备详情最底下找到连接参数:
RHILEX 配置
RHILEX 北向资源新建一个“数据转发到 MQTT Broker” 资源,然后将上面获取到的基本信息填写到对应的位置。最后确认无误后提交。
数据采集
下面我们使用模拟器来模拟 15 个 Modbus 从设备,使用 RHILEX 来采集,最后上传到联犀。
首先使用 ModbusSlaver 软件开启 15 个节点:
然后新建采集的节点点位,对应到下面的点位表。确认连接没问题以后数据即可立即采集上来。
数据上传
RHILEX 快速配置规则,然后选择刚才新建的 Modbus 网关,给网关挂规则上去。
如果你比较关注背后的原理,可以查看生成的规则。为了支持灵活场景,默认生成的规则可以实现自定义修改,取决于用户自己的需求。
查看数据
当数据开始采集的时候,如果网络没问题,数据即可到达联犀。
高级扩展
除此之外,RHILEX 还内置了针对联犀平台的扩展 API,用户可以很容易通过 lua 脚本来增强功能。
上报属性
假设无模型是 temp、humi、oxygen 三个参数,可以通过下面的方式向云端上报。
Lua
Actions = {
function(args)
local errIothub = ithings:PropertyReport('DEVICE62MJLVLS', {
temp = 12.45,
humi = 45.6,
oxygen = 23.1
})
if errIothub ~= nil then
Throw("ithings:PropertyReport Error:" .. errIothub)
return false, args
end
return true, args
end
}
行为响应
当平台下发指令的时候,可以灵活的响应,下面是个简单的实例。本次使用的设备是 rhilexg1。rhilexg1 是一款轻量级网关,其内置了 1 个用户 LED 和两个继电器。用户可以使用联犀来控制 rhilexg1 的 LED 状态和继电器状态。
Lua
Actions = {
function(args)
Debug("[====] Received Remote Data:" .. args)
local dataT, errJ2T = json:J2T(args)
if (errJ2T ~= nil) then
Throw('json:J2T error:' .. errJ2T)
return false, args
end
if dataT.method == "control" then
Debug("[====] Ithings Send Control CMD:" .. args)
if dataT.params.led1 == 0 then
rhilexg1:Led1Off()
end
if dataT.params.led1 == 1 then
rhilexg1:Led1On()
end
if dataT.params.do1 == 1 then
rhilexg1:DO1Set(1)
end
if dataT.params.do1 == 0 then
rhilexg1:DO1Set(0)
end
if dataT.params.do2 == 1 then
rhilexg1:DO2Set(1)
end
if dataT.params.do2 == 0 then
rhilexg1:DO2Set(0)
end
local errIothub = ithings:ActionReplySuccess('OUTSKGLIQJX', dataT.token)
if errIothub ~= nil then
Throw("data:ToMqtt Error:" .. errIothub)
return false, args
end
end
return true, args
end
}
关键函数
- rhilexg1:Led1Off():LED 点亮
- rhilexg1:Led1On():LED 熄灭
- rhilexg1:DO2Set(1):继电器 2 闭合
- rhilexg1:DO2Set(0):继电器 2 开启
- rhilexg1:DO1Set(1):继电器 1 闭合
- rhilexg1:DO1Set(0):继电器 1 闭合
- ithings:ActionReplySuccess('OUTSKGLIQJX', dataT.token):向联犀反馈状态