# JHM 服务生产实施部署文档 ## 1. 目标 本文档用于指导 JHM 服务在生产环境中部署、配置和联调。 当前服务支持: - 透析机 `EE 55` 固定帧协议 - 血压计 `AA 55` 变长协议 - MQTT 上报 - 阿里云上报 ## 2. 打包产物 执行: ```bash npm run build ``` 生成目录: ```text dist/ win-x64/ jhm-service.exe runtime/ config.json alModel.json linux-x64/ jhm-service runtime/ config.json alModel.json ``` ## 3. 部署前检查 部署前确认: - 目标服务器 IP、系统、开放端口 - 设备透传盒目标 TCP 地址和端口 - `devices[].ip` 与现场实际来源 IP 一致 - MQTT 或阿里云连接参数已准备完成 ## 4. 配置文件说明 主要修改文件: ```text runtime/config.json ``` 当前推荐结构: ```json { "send": { "channels": ["aliyun"] }, "logging": { "enabled": true, "console": true, "dir": "./logs", "filePrefix": "jhm-service", "level": "info" }, "tcp": { "host": "0.0.0.0", "port": 9000, "maxConnections": 100, "socketTimeoutMs": 120000, "keepAlive": true, "keepAliveDelayMs": 10000, "noDelay": true, "backlog": 128, "maxBufferBytes": 8192 }, "mqtt": { "protocol": "mqtt", "host": "mqtt.ihemodialysis.com", "port": 62283, "username": "data", "password": "data#2018", "defaultTopicPrefix": "touxiji" }, "aliyun": { "enabled": true, "tupleApiBaseUrl": "https://things.icoldchain.cn", "tupleApiPath": "/device/info/getAliyunDeviceSecret", "autoRegister": true, "registerRetryMs": 60000, "connectTimeoutMs": 15000 }, "protocol": { "alModelPath": "./alModel.json", "bloodPressure": { "publishTime": true } }, "devices": [ { "deviceId": "JHM-001", "ip": "192.168.33.1", "name": "1号透析机" } ] } ``` ### 4.1 `send` - `channels`:可选 `mqtt`、`aliyun` - 只发 MQTT:`["mqtt"]` - 只发阿里云:`["aliyun"]` - 双发:`["mqtt", "aliyun"]` ### 4.2 `logging` - `enabled`:是否写本地日志 - `console`:是否输出控制台 - `dir`:日志目录 - `filePrefix`:日志文件前缀 - `level`:`debug/info/warn/error` ### 4.3 `tcp` - `host`:监听地址,生产建议 `0.0.0.0` - `port`:TCP 监听端口 - `maxConnections`:最大连接数 - `socketTimeoutMs`:连接超时时间 - `keepAlive`:是否启用 KeepAlive - `keepAliveDelayMs`:KeepAlive 延迟 - `noDelay`:是否关闭 Nagle - `backlog`:监听队列长度 - `maxBufferBytes`:解码缓冲区上限 ### 4.4 `mqtt` - `protocol`:通常为 `mqtt` - `host`:Broker 地址 - `port`:Broker 端口 - `username`:用户名 - `password`:密码 - `defaultTopicPrefix`:topic 前缀 topic 规则: ```text {defaultTopicPrefix}/{deviceId} ``` ### 4.5 `aliyun` - `enabled`:是否启用阿里云 - `tupleApiBaseUrl`:三元组接口基础地址 - `tupleApiPath`:三元组接口路径 - `autoRegister`:是否允许自动注册 - `registerRetryMs`:失败重试冷却时间 - `connectTimeoutMs`:连接超时时间 ### 4.6 `protocol` - `alModelPath`:模型文件路径 - `bloodPressure.publishTime`:是否发布血压监测时间 `M` 规则: - `true`:发布 `N/O/P/M` - `false`:只发布 `N/O/P` - 未配置时默认 `true` 如果现场平台未接血压时间字段,建议配置: ```json "protocol": { "alModelPath": "./alModel.json", "bloodPressure": { "publishTime": false } } ``` ### 4.7 `devices` 每台设备至少配置: - `deviceId` - `ip` - `name` 注意: - `ip` 必须与服务端实际看到的客户端 IP 一致 - 如果经过 NAT,要填写 NAT 后服务端看到的 IP ## 5. 血压计协议补充 血压计示例报文: ```text AA 55 0E BA 00 78 50 59 08 08 08 08 08 10 ``` 解析含义: - `00 78`:收缩压 `N` - `50`:舒张压 `O` - `59`:脉搏 `P` - 后 5 字节:时间 `M` 发布时间开启时: ```json { "N": 120, "O": 80, "P": 89, "M": "2026-04-15 09:30" } ``` 发布时间关闭时: ```json { "N": 120, "O": 80, "P": 89 } ``` ## 6. Windows 部署 建议目录: ```powershell C:\services\jhm\win-x64 ``` 试运行: ```powershell cd C:\services\jhm\win-x64 .\jhm-service.exe --config .\runtime\config.json ``` ## 7. Linux 部署 建议目录: ```bash /opt/jhm/linux-x64 ``` 试运行: ```bash cd /opt/jhm/linux-x64 chmod +x ./jhm-service ./jhm-service --config ./runtime/config.json ``` ## 8. 验证建议 部署完成后建议执行: ```powershell npm test npm run verify:commands ``` 重点确认: - TCP 端口监听正常 - 设备连接日志正常 - 原透析机数据解析正常 - 血压计 `AA 55` 报文解析正常 - `M` 字段是否符合现场需求