星纵网关BACnet对接楼宇系统
目录
概述
星纵物联LoRaWAN®网关能够对LoRaWAN®终端节点的上报数据进行解码,并将终端数据转发到BMS系统或BACnet设备使用的BACnet对象,从而便捷的将LoRaWAN®终端设备集成到楼宇管理系统中。本文以WT30X温控面板为例,测试如何通过BACnet实现数据上报和下发控制。
准备
- 星纵物联LoRaWAN®网关
- LoRaWAN®节点设备
- BACnet客户端软件:SetupYabe(如出现不可下载情况,推荐优先使用谷歌浏览器打开)
步骤
1. 配置应用
- 进入“Network Server->应用”,若之前没有创建应用,则点击”+”添加应用。
- 创建“名称”和填写“描述”,两者均可自定义。
3.若之前已有创建应用,则点击”编辑”应用。
4.配置参数后先保存设置。
2. BACnet 对接(温控器)
- 进入Network Server–>载荷边解码器–>自定义载荷边解码器,点击
- 打开编解码器的代码链接https://github.com/Milesight-IoT/codec/tree/release/vendors/milesight-iot/wt301
将decoder.js代码复制到解码函数里面,将encoder.js代码复制到编码函数里面。
- 进入“Network Server->设备”,点击添加,添加对应的设备信息,选择设备对应的载荷解码器。
- 进入Network Server–>数据流,点击“详情”查看解码后的结果。
- 进入Network Server–>应用,在数据传输选择类型为BACnet/IP,点击保存
- 进入“协议集成”–>BACnet Server–>Server,填写UDP端口、设备ID(需要注意ID的唯一性)、设备名称,点击保存。
- 进入“协议集成”–>BACnet Server–>BACnet对象,点击添加。
- 进入“协议集成”–>BACnet Server–>BACnet对象,生成可添加的对象,添加完成之后,查看当前温控面板上报的值。
9.打开Yabe BACnet客户端工具读取对应数据与对节点写数据。
(1)点击Add device,填入对应的本地电脑的地址,点击Start,就可以根据设备ID找到BACnet服务器设备并查看对象列表。
(2)发现设备
(3)传感器上报数据
(4)下发数据给节点
点击对应的BACnet对象,找到Present Value,修改Present Value的值,回车即可发送下行命令。
(5)在网关上即可收到通过BACnet下发的指令。
3. BACnet 对接(WS50x触摸式开关面板)
以解码器为例,1111全开,1101(1、3开,2关)、1001(1灯开,2,3关)。
function Encode(fPort, obj) {
var bytes = [];
bytes.push(0xff);
bytes.push(0x29);
if (obj.switch1 == 1111 ) {
bytes.push(0x77);
}
else if(obj.switch1 == 1011 ){
bytes.push(0x76);
}
else if(obj.switch1 == 1101 ){
bytes.push(0x75);
}
else if(obj.switch1 == 1110 ){
bytes.push(0x73);
}
else if(obj.switch1 == 1001 ){
bytes.push(0x74);
}
else if(obj.switch1 == 1010 ){
bytes.push(0x72);
}
else if(obj.switch1 == 1100 ){
bytes.push(0x71);
}
else if(obj.switch1 == 1000 ){
bytes.push(0x70);
}
return bytes;
}
下发内容:{“switch1”: 1000}
- 将上面的解码器函数复制到WS50x的编码函数中,下发内容复制到编解码测试中,点击”编码”—生成FF2970。
- 添加对象。
- 下发内容:1111全关。
- 在网关上即可收到通过BACnet下发的指令。
备注:机械式解码函数,步骤同上。function Encode(fPort, obj) {var bytes = [];bytes.push(0x08);if (obj.switch1 == 1111 ) {bytes.push(0x77);}else if(obj.switch1 == 1011 ){bytes.push(0x76);}else if(obj.switch1 == 1101 ){bytes.push(0x75);}else if(obj.switch1 == 1110 ){bytes.push(0x73);}else if(obj.switch1 == 1001 ){bytes.push(0x74);}else if(obj.switch1 == 1010 ){bytes.push(0x72);}else if(obj.switch1 == 1100 ){bytes.push(0x71);}else if(obj.switch1 == 1000 ){bytes.push(0x70);}bytes.push(0xff);return bytes;}