BACnet 插件
BACnet 插件
Section titled “BACnet 插件”BACnet 插件实现了 BACnet 协议,用于与楼宇自动化设备进行通信,支持设备发现、数据采集和远程控制。
- BACnet IP:支持 BACnet/IP 协议
- 设备发现:自动发现网络中的 BACnet 设备
- 批量采集:将相同采集周期的点位合并批量读取
- 定时采集:支持自定义采集间隔
- 读写操作:支持读取和写入 BACnet 对象属性
- 虚拟模式:支持虚拟模式(测试用)
- 多设备映射:单个 BACnet 对象可映射到多个物模型设备
连接配置位于 config.json 的 connections 字段下:
BACnet IP 配置示例
Section titled “BACnet IP 配置示例”{ "plugin": "bacnet", "connections": { "bacnet-network-1": { "mode": "ip", "interface": "eth0", "localIp": "192.168.1.100", "localSubnet": 24, "localPort": 47808, "virtual": false } }}配置参数说明
Section titled “配置参数说明”| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| mode | string | ip | 连接模式(目前仅支持 ip) |
| interface | string | - | 网络接口名称(如 eth0) |
| localIp | string | - | 本地 IP 地址 |
| localSubnet | int | - | 子网掩码位数 |
| localPort | int | 47808 | BACnet 端口 |
| virtual | bool | false | 是否启用虚拟模式 |
点位配置基于通用点位定义,并添加 BACnet 协议扩展参数。
通用点位参数
Section titled “通用点位参数”点位的基础参数请参考设备配置指南。
BACnet 扩展参数
Section titled “BACnet 扩展参数”在通用点位基础上,BACnet 插件支持以下扩展参数:
{ "name": "temperature", "description": "温度", "valueType": "float", "readWrite": "R", "objectType": "analogInput", "instance": 1001, "defaultPriority": 16, "defaultNull": false, "duration": "5s"}| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| objectType | string | 是 | BACnet 对象类型(如 analogInput、analogOutput、binaryInput 等) |
| instance | int | 是 | 对象实例号 |
| defaultPriority | int | 否 | 写入时的默认优先级(默认 16) |
| defaultNull | bool | 否 | 是否默认写入 null 值 |
| duration | string | 否 | 采集周期,默认 1s |
设备属性说明
Section titled “设备属性说明”BACnet 设备需要在 properties 中配置网络参数:
| 属性 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deviceId | string | 是 | BACnet 设备 ID 或其他标识 |
BACnet 对象类型
Section titled “BACnet 对象类型”常用的 BACnet 对象类型:
| 对象类型 | 说明 | 常用属性 |
|---|---|---|
| analogInput | 模拟输入 | Present Value |
| analogOutput | 模拟输出 | Present Value |
| analogValue | 模拟值 | Present Value |
| binaryInput | 二进制输入 | Present Value |
| binaryOutput | 二进制输出 | Present Value |
| binaryValue | 二进制值 | Present Value |
| multistateInput | 多状态输入 | Present Value |
| multistateOutput | 多状态输出 | Present Value |
| multistateValue | 多状态值 | Present Value |
插件自动将相同采集周期的点位合并为采集组:
- 相同
duration的点位分为一组 - 每组最多包含 15 个对象(避免请求过大)
- 减少网络请求次数,提高采集效率
单个 BACnet 对象可以映射到多个物模型设备:
{ "objects": [ { "id": { "type": "analogInput", "instance": 1001 }, "points": { "device-001": "temperature", "device-002": "temp_sensor" } } ]}启用 virtual 或全局虚拟模式时:
- 不实际连接 BACnet 网络
- 可通过 Lua 脚本模拟数据读写(当前未完全实现)
- 用于测试配置和协议解析
以下参数未配置时使用默认值:
duration:1slocalPort:47808defaultPriority:16
- 插件入口:
plugins/bacnet/plugin.go - 核心实现:
plugins/bacnet/internal/plugin.go - 连接器:
plugins/bacnet/internal/connector.go - 适配器:
plugins/bacnet/internal/adapter.go