Skip to content

设备配置

driver-box 采用 JSON 格式进行设备配置,所有配置文件位于 res/driver/<plugin>/ 目录下。

设备配置是 driver-box 的核心组成部分,它实现了设备抽象协议解耦,使得系统能够:

  • 统一设备管理:通过标准化的 JSON 配置描述不同协议的设备,无需修改代码即可接入新设备
  • 协议插件化:设备配置与协议插件分离,同一设备模型可通过不同协议插件接入(如 Modbus、MQTT)
  • 灵活扩展:通过配置即可定义点位、读写模式、数据转换规则等,满足多样化设备场景
  • 云端同步:支持模型 ID 关联云端设备模型,实现配置与云端的一致性

本文档详细介绍配置文件的结构、各层级参数说明、以及完整的配置示例。

配置文件应放置在对应协议插件的目录下:

res/
├── driver/
│ ├── modbus/
│ │ └── config.json
│ ├── mqtt/
│ │ └── config.json
│ └── bacnet/
│ └── config.json

配置对应的 Go 结构体定义位于 pkg/config/device_config.go

graph TD
    A[config.json] --> B[deviceModels]
    A --> C[connections]
    A --> D[protocolName]

    B --> E[DeviceModel]
    E --> F[devicePoints]
    E --> G[devices]

层级说明

  • config.json - 顶层配置文件
  • deviceModels - 设备模型数组,定义设备类型和点位
  • connections - 连接配置,定义设备通讯参数
  • protocolName - 协议插件名称
  • DeviceModel - 设备模型,包含点位列表和设备实例
  • devicePoints - 点位定义数组
  • devices - 设备实例数组

完整的配置文件包含以下结构:

config.json
{
"deviceModels": [
{
"name": "模型名称",
"description": "模型描述",
"modelId": "云端模型ID",
"attributes": {},
"devicePoints": [],
"devices": []
}
],
"connections": {},
"protocolName": "插件名称"
}

配置对应的 Go 结构体定义位于 pkg/config/device_config_model.go

设备模型定义了一类设备的数据结构和参数,一个模型可以对应多个设备实例。

{
"name": "温湿度传感器",
"description": "Modbus温湿度传感器",
"modelId": "model-001",
"attributes": {
"manufacturer": "Example Corp",
"version": "1.0"
},
"devicePoints": [...],
"devices": [...]
}

配置对应的 Go 结构体定义位于 pkg/config/device_config_device.go

设备是设备模型的具体实例,一个模型可以对应多个设备。

{
"id": "device-001",
"description": "会议室传感器",
"connectionKey": "modbus-tcp-01",
"properties": {
"unitID": "1"
},
"driverKey": ""
}

点位是设备模型中的最小数据单元,用于定义采集和控制的参数。

配置对应的 Go 结构体和方法定义位于 pkg/config/device_config_model_point.go

{
"name": "temperature",
"description": "温度",
"valueType": "float",
"readWrite": "R",
"reportMode": "realTime",
"scale": 0.1,
"decimals": 1,
"units": ""
}

连接配置定义了与设备通讯的参数,具体格式由协议插件决定。多个设备可以共用同一个连接配置。

{
"connections": {
"connection-name": {
// 协议特定参数
}
}
}

各协议插件的连接配置参数请参考对应的插件文档:

协议插件可以在点位中添加扩展参数,用于定义协议特定的配置。这些扩展参数直接定义在点位对象中,无需嵌套在 properties 字段。

{
"name": "temperature",
"startAddress": "40001",
"primaryTable": "HOLDING_REGISTER",
"rawType": "Float32",
"duration": "5s",
"byteSwap": false,
"wordSwap": false
}
{
"name": "temperature",
"topic": "device/temperature",
"qos": 1,
"retain": false
}

注意:不同协议插件的扩展参数不同,具体请参考对应插件的文档。

点击查看完整的配置示例

以下是一个完整的 Modbus 设备配置示例,包含协议特定扩展参数(如 startAddressprimaryTable 等):

{
"deviceModels": [
{
"name": "温湿度传感器",
"description": "Modbus温湿度传感器",
"modelId": "modbus-001",
"attributes": {
"manufacturer": "Example",
"version": "1.0"
},
"devicePoints": [
{
"name": "temperature",
"description": "温度",
"valueType": "float",
"readWrite": "R",
"reportMode": "realTime",
"scale": 0.1,
"decimals": 1,
"units": "",
"startAddress": "40001",
"primaryTable": "HOLDING_REGISTER",
"rawType": "Float32",
"duration": "5s"
},
{
"name": "humidity",
"description": "湿度",
"valueType": "float",
"readWrite": "R",
"scale": 0.1,
"decimals": 1,
"units": "%",
"startAddress": "40002",
"primaryTable": "HOLDING_REGISTER",
"rawType": "Float32",
"duration": "5s"
}
],
"devices": [
{
"id": "sensor-001",
"description": "会议室传感器",
"connectionKey": "modbus-tcp-01",
"properties": {
"unitID": "1"
}
}
]
}
],
"connections": {
"modbus-tcp-01": {
"address": "192.168.1.100:502",
"mode": "tcp",
"timeout": 5000,
"retry": 3,
"minInterval": 100
}
},
"protocolName": "modbus"
}

创建配置文件后,建议进行以下检查:

  1. JSON 语法验证:使用在线 JSON 验证工具
  2. 必需字段检查:确保所有标记为”必填”的字段都已填写
  3. 引用完整性:确保 connectionKeyconnections 中存在
  4. 设备 ID 唯一性:确保设备 ID 全局唯一