编辑 | blame | 历史 | 原始文档

JHM 服务生产实施部署文档

1. 目标

本文档用于指导 JHM 服务在生产环境中部署、配置和联调。

当前服务支持:

  • 透析机 EE 55 固定帧协议
  • 血压计 AA 55 变长协议
  • MQTT 上报
  • 阿里云上报

2. 打包产物

执行:

npm run build

生成目录:

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. 配置文件说明

主要修改文件:

runtime/config.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:可选 mqttaliyun
  • 只发 MQTT:["mqtt"]
  • 只发阿里云:["aliyun"]
  • 双发:["mqtt", "aliyun"]

4.2 logging

  • enabled:是否写本地日志
  • console:是否输出控制台
  • dir:日志目录
  • filePrefix:日志文件前缀
  • leveldebug/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 规则:

{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

如果现场平台未接血压时间字段,建议配置:

"protocol": {
  "alModelPath": "./alModel.json",
  "bloodPressure": {
    "publishTime": false
  }
}

4.7 devices

每台设备至少配置:

  • deviceId
  • ip
  • name

注意:

  • ip 必须与服务端实际看到的客户端 IP 一致
  • 如果经过 NAT,要填写 NAT 后服务端看到的 IP

5. 血压计协议补充

血压计示例报文:

AA 55 0E BA 00 78 50 59 08 08 08 08 08 10

解析含义:

  • 00 78:收缩压 N
  • 50:舒张压 O
  • 59:脉搏 P
  • 后 5 字节:时间 M

发布时间开启时:

{
  "N": 120,
  "O": 80,
  "P": 89,
  "M": "2026-04-15 09:30"
}

发布时间关闭时:

{
  "N": 120,
  "O": 80,
  "P": 89
}

6. Windows 部署

建议目录:

C:\services\jhm\win-x64

试运行:

cd C:\services\jhm\win-x64
.\jhm-service.exe --config .\runtime\config.json

7. Linux 部署

建议目录:

/opt/jhm/linux-x64

试运行:

cd /opt/jhm/linux-x64
chmod +x ./jhm-service
./jhm-service --config ./runtime/config.json

8. 验证建议

部署完成后建议执行:

npm test
npm run verify:commands

重点确认:

  • TCP 端口监听正常
  • 设备连接日志正常
  • 原透析机数据解析正常
  • 血压计 AA 55 报文解析正常
  • M 字段是否符合现场需求