# 配置文件说明文档 **版本**: v1.1.0 **最后更新**: 2025-12-10 --- ## 📋 目录 1. [概述](#概述) 2. [homeConfig.json](#homeconfigjson) 3. [mqtt.json](#mqttjson) 4. [httpConfig.json](#httpconfigjson) 5. [aliyun.json](#aliyunjson) 6. [schema.json](#schemajson) 7. [常见问题](#常见问题) --- ## 概述 系统使用多个 JSON 配置文件来管理不同模块的参数。所有配置文件都应该放在应用程序的根目录中。 ### 配置文件加载优先级 ``` 当前工作目录 (开发环境) ↓ 可执行文件所在目录 (pkg 打包环境) ↓ 硬编码默认值 ``` ### 环境变量覆盖 某些配置可以通过环境变量覆盖: ```bash # Socket 服务端口 PORT=10961 npm start # HTTP 服务端口 HTTP_PORT=8080 npm start ``` --- ## homeConfig.json **用途**: Socket 服务器和主服务配置 **位置**: 应用程序根目录 **优先级**: 环境变量 > homeConfig.json > 默认值 ### 完整配置示例 ```json { "socketPort": 10961, "description": "Socket服务器监听端口" } ``` ### 配置字段说明 | 字段 | 类型 | 默认值 | 说明 | 示例 | |------|------|--------|------|------| | `socketPort` | number | 10961 | Socket服务器监听的端口号 | 10961 | | `description` | string | - | 配置文件描述(可选) | Socket服务器监听端口 | ### 使用方式 ```javascript // 在 index.js 中 const homeConfig = JSON.parse(fs.readFileSync(homeConfigPath, 'utf8')); const PORT = process.env.PORT || homeConfig.socketPort || 10961; ``` ### 修改示例 ```json { "socketPort": 9999, "description": "自定义Socket服务器监听端口" } ``` --- ## mqtt.json **用途**: MQTT 消息队列服务配置 **位置**: 应用程序根目录 **依赖包**: `mqtt@5.13.3` ### 完整配置示例 ```json { "enabled": true, "brokerUrl": "mqtt://127.0.0.1:1883", "clientId": "dialysis-server-01", "username": "admin", "password": "admin123", "keepalive": 60, "reconnectPeriod": 5000, "defaultTopicPrefix": "device/data", "qos": 1, "retain": false } ``` ### 配置字段说明 | 字段 | 类型 | 默认值 | 说明 | 示例 | |------|------|--------|------|------| | `enabled` | boolean | true | 是否启用 MQTT 功能 | true/false | | `brokerUrl` | string | mqtt://127.0.0.1:1883 | MQTT Broker 服务器地址 | mqtt://192.168.1.100:1883 | | `clientId` | string | dialysis-server-01 | MQTT 客户端 ID(需唯一) | device-server-01 | | `username` | string | admin | MQTT 连接用户名 | mqtt_user | | `password` | string | admin123 | MQTT 连接密码 | secure_password_123 | | `keepalive` | number | 60 | 心跳间隔(秒) | 60 | | `reconnectPeriod` | number | 5000 | 重连间隔(毫秒) | 5000 | | `defaultTopicPrefix` | string | device/data | MQTT 主题前缀 | device/dialysis | | `qos` | number | 1 | QoS 级别(0/1/2) | 1 | | `retain` | boolean | false | 消息是否保留 | false | ### 使用方式 ```javascript // 在 index.js 中 const mqttConfig = JSON.parse(fs.readFileSync(mqttConfigPath, 'utf8')); if (mqttConfig.enabled) { const topic = `${mqttConfig.defaultTopicPrefix}/${deviceNo}`; publishMessage(topic, payload); } ``` ### 常见场景 #### 场景1:禁用 MQTT ```json { "enabled": false } ``` #### 场景2:使用云端 MQTT(如阿里云) ```json { "enabled": true, "brokerUrl": "mqtt://mqtt.aliyuncs.com:1883", "username": "xxxxx@instance123|securemode=2,signmethod=hmacsha256", "password": "your_password", "clientId": "device_client_id" } ``` --- ## httpConfig.json **用途**: HTTP API 服务器配置 **位置**: 应用程序根目录 ### 完整配置示例 ```json { "port": 8080, "host": "0.0.0.0", "cors": { "enabled": true, "origin": "*" }, "rateLimit": { "enabled": true, "singleDeviceInterval": 5000, "allDevicesInterval": 60000 }, "propertyMapping": { "enabled": true, "useEmbeddedSchema": true }, "cache": { "enabled": true } } ``` ### 配置字段说明 #### 基础配置 | 字段 | 类型 | 默认值 | 说明 | 示例 | |------|------|--------|------|------| | `port` | number | 8080 | HTTP 服务器监听端口 | 8080 | | `host` | string | 0.0.0.0 | 服务器绑定地址(0.0.0.0 表示所有网卡) | 127.0.0.1 | #### CORS 配置 | 字段 | 类型 | 默认值 | 说明 | 示例 | |------|------|--------|------|------| | `cors.enabled` | boolean | true | 是否启用 CORS 跨域 | true | | `cors.origin` | string | * | 允许的来源(* 表示所有) | https://example.com | #### 限流配置 | 字段 | 类型 | 默认值 | 说明 | 备注 | |------|------|--------|------|------| | `rateLimit.enabled` | boolean | true | 是否启用限流 | 生产环境建议启用 | | `rateLimit.singleDeviceInterval` | number | 5000 | 单个设备查询限流间隔(毫秒) | 同一设备 5 秒最多 1 次 | | `rateLimit.allDevicesInterval` | number | 60000 | 全局查询限流间隔(毫秒) | 所有设备 60 秒最多 1 次 | #### 属性映射配置 | 字段 | 类型 | 默认值 | 说明 | 备注 | |------|------|--------|------|------| | `propertyMapping.enabled` | boolean | true | 是否启用属性映射 | 推荐启用 | | `propertyMapping.useEmbeddedSchema` | boolean | true | 是否使用内嵌 schema | false 时使用 schema.json | #### 缓存配置 | 字段 | 类型 | 默认值 | 说明 | 备注 | |------|------|--------|------|------| | `cache.enabled` | boolean | true | 是否启用数据缓存 | 建议启用以提升性能 | ### 使用方式 ```javascript // 在 httpServer.js 中 const httpConfig = JSON.parse(fs.readFileSync(httpConfigPath, 'utf8')); const server = http.createServer((req, res) => { if (httpConfig.cors.enabled) { res.setHeader('Access-Control-Allow-Origin', httpConfig.cors.origin); } }); ``` ### 修改示例 #### 仅本地访问 ```json { "port": 8080, "host": "127.0.0.1", "cors": { "enabled": false } } ``` #### 生产环境高性能配置 ```json { "port": 8080, "host": "0.0.0.0", "cors": { "enabled": true, "origin": "https://your-domain.com" }, "rateLimit": { "enabled": true, "singleDeviceInterval": 5000, "allDevicesInterval": 60000 }, "cache": { "enabled": true } } ``` --- ## aliyun.json **用途**: 阿里云 IoT 平台集成配置 **位置**: 应用程序根目录 **依赖包**: `aliyun-iot-device-sdk` ### 完整配置示例 ```json { "enabled": true, "region": "cn-shanghai", "productKey": "your_product_key", "description": "阿里云IoT设备连接配置(需从阿里云控制台获取)" } ``` ### 配置字段说明 | 字段 | 类型 | 默认值 | 说明 | 示例 | |------|------|--------|------|------| | `enabled` | boolean | true | 是否启用阿里云功能 | true/false | | `region` | string | cn-shanghai | 阿里云服务区域 | cn-shanghai, cn-beijing | | `productKey` | string | - | 阿里云产品 Key(从控制台获取) | a1xxxxxxxxxxxxb | | `description` | string | - | 配置说明(可选) | 阿里云IoT配置 | ### 使用方式 ```javascript // 在 index.js 中 const aliyunConfig = JSON.parse(fs.readFileSync(aliyunConfigPath, 'utf8')); if (aliyunConfig.enabled) { // 连接到阿里云 IoT 平台 const device = aliyunIot.device({ ProductKey: aliyunConfig.productKey, DeviceName: deviceName, DeviceSecret: deviceSecret }); } ``` ### 禁用阿里云 ```json { "enabled": false } ``` ### 注意事项 ⚠️ **安全提示**: - 不要将真实的 `productKey` 提交到公开代码仓库 - 生产环境建议使用环境变量替代敏感信息 - 确保配置文件的访问权限受限 --- ## schema.json **用途**: 设备属性 TSL(Thing Specification Language)定义 **位置**: 应用程序根目录 **备注**: 68 个属性的完整定义,与 propertyMapper.js 中的定义同步 ### 完整配置示例(部分) ```json { "version": "1.0.0", "properties": [ { "identifier": "A", "name": "脱水目标量", "dataType": "float", "accessMode": "r", "unit": "kg", "description": "患者脱水目标量" }, { "identifier": "B", "name": "脱水量", "dataType": "float", "accessMode": "r", "unit": "kg", "description": "当前已脱水的量" }, { "identifier": "R", "name": "收缩压下限", "dataType": "int", "accessMode": "r", "unit": "mmHg", "description": "血压收缩压下限" }, { "identifier": "IPAddress", "name": "IP地址", "dataType": "string", "accessMode": "r", "description": "设备连接的IP地址" } ] } ``` ### 属性字段说明 | 字段 | 类型 | 说明 | 示例 | |------|------|------|------| | `identifier` | string | 属性唯一标识符(A-Z, a-z, C53-C55 等) | A, B, C, IPAddress | | `name` | string | 属性中文名称(用户可读) | 脱水目标量 | | `dataType` | string | 数据类型(int, float, string, bool) | float | | `accessMode` | string | 访问模式(r 读, w 写, rw 读写) | r | | `unit` | string | 单位(可选) | kg, mmHg, bpm | | `description` | string | 属性描述(可选) | 患者脱水目标量 | ### 完整属性列表(68 个) 详见 `schema.json` 文件的完整内容。主要分类: - **A-Z** (26 个): 基本生命体征和治疗参数 - **a-z** (26 个): 扩展参数 - **C53-C55** (3 个): 特殊参数 - **特殊字段** (13 个): deviceName, IPAddress, deviceType 等 --- ## 常见问题 ### Q1: 启动时报错 "找不到配置文件" **A**: 确保以下文件存在于应用程序同目录: - `homeConfig.json` ✅ - `mqtt.json` ✅ - `httpConfig.json` ✅ - `aliyun.json` ✅ - `schema.json` ✅ ### Q2: 我想禁用某个功能,应该怎么做? **A**: 在对应的配置文件中设置 `enabled: false`: ```json // 禁用 MQTT { "enabled": false } // 禁用阿里云 { "enabled": false } // 禁用 CORS { "cors": { "enabled": false } } ``` ### Q3: 配置文件修改后需要重启吗? **A**: **是的**,需要重启应用程序才能加载新的配置: ```bash npm run pkg # 重新打包 npm start # 重新启动 ``` ### Q4: 环境变量如何设置? **A**: 在启动命令前设置环境变量: ```bash # Windows PowerShell $env:PORT=10961; npm start # Windows CMD set PORT=10961 && npm start # Linux/Mac PORT=10961 npm start ``` ### Q5: MQTT 连接失败怎么办? **A**: 检查以下内容: 1. Broker URL 是否正确 2. 用户名和密码是否正确 3. 防火墙是否允许 MQTT 端口(通常 1883) 4. MQTT Broker 服务是否运行 ```json { "brokerUrl": "mqtt://your_broker_ip:1883", "username": "your_username", "password": "your_password" } ``` ### Q6: 如何修改 HTTP 服务端口? **A**: 修改 `httpConfig.json`: ```json { "port": 8080, "host": "0.0.0.0" } ``` 或使用环境变量: ```bash HTTP_PORT=9000 npm start ``` ### Q7: 限流规则是什么? **A**: 在 `httpConfig.json` 中配置: ```json { "rateLimit": { "enabled": true, "singleDeviceInterval": 5000, // 单个设备 5 秒内最多 1 次 "allDevicesInterval": 60000 // 全部设备 60 秒内最多 1 次 } } ``` ### Q8: 如何在生产环境中安全地使用配置文件? **A**: 建议做法: 1. **敏感信息使用环境变量**: ```bash MQTT_PASSWORD=xxx ALIYUN_KEY=xxx npm start ``` 2. **配置文件不提交敏感信息**: ```json { "password": "${MQTT_PASSWORD}" } ``` 3. **限制文件权限**: ```bash chmod 600 homeConfig.json mqtt.json ``` 4. **定期更新密码** ### Q9: 多个实例如何使用不同的配置? **A**: 使用环境变量覆盖: ```bash # 实例 1 PORT=10961 HTTP_PORT=8080 npm start # 实例 2 PORT=10962 HTTP_PORT=8081 npm start ``` --- ## 快速参考表 ### 配置文件概览 | 文件名 | 用途 | 必需 | 可禁用 | |--------|------|:----:|:------:| | homeConfig.json | Socket 端口配置 | ✅ | ❌ | | mqtt.json | MQTT 服务配置 | ✅ | ✅ | | httpConfig.json | HTTP API 配置 | ✅ | ❌ | | aliyun.json | 阿里云 IoT 配置 | ✅ | ✅ | | schema.json | 属性定义 | ✅ | ❌ | ### 服务启动流程 ``` 启动应用 ↓ 读取 homeConfig.json → 启动 Socket 服务 ↓ 读取 mqtt.json → 初始化 MQTT(若启用) ↓ 读取 httpConfig.json → 启动 HTTP 服务 ↓ 读取 aliyun.json → 连接阿里云(若启用) ↓ 读取 schema.json → 初始化属性映射 ↓ 系统运行 ✅ ``` --- ## 更新日志 ### v1.1.0 (2025-12-10) - 新增 `homeConfig.json` Socket 端口配置 - 更新所有配置文件说明 - 添加常见问题解答 - 增加安全建议 ### v1.0.0 (2025-12-08) - 初始版本 --- **最后更新**: 2025-12-10 **版本**: v1.1.0 **维护者**: 技术团队