根据卓岚的通讯文件做的透析机通讯
chenyc
2026-01-06 3754f4e5f16adc3855e1ab1b73581b213d64e513
更新优化
4个文件已修改
2个文件已添加
3个文件已删除
276 ■■■■ 已修改文件
combined.log 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
config.js 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
config.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
error.log 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
index.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zl-communication-linux 补丁 | 查看 | 原始文档 | blame | 历史
zl-communication-macos 补丁 | 查看 | 原始文档 | blame | 历史
zl-communication-win.exe 补丁 | 查看 | 原始文档 | blame | 历史
combined.log
@@ -2048,3 +2048,139 @@
{"level":"info","message":"客户端已连接: 127.0.0.1:56632","service":"dialysis-server","timestamp":"2025-09-22 19:08:39"}
{"level":"warn","message":"客户端连接超时,关闭连接: 127.0.0.1:56632","service":"dialysis-server","timestamp":"2025-09-22 19:13:39"}
{"level":"info","message":"客户端已连接: 127.0.0.1:65283","service":"dialysis-server","timestamp":"2025-09-22 19:13:44"}
{"level":"info","message":"血透机服务已初始化,等待客户端连接...","service":"dialysis-server","timestamp":"2026-01-05 14:22:07"}
{"level":"info","message":"✅ 血透机TCP服务器已启动,监听端口 60961","service":"dialysis-server","timestamp":"2026-01-05 14:22:07"}
{"level":"info","message":"客户端已连接: 192.168.0.201:53789","service":"dialysis-server","timestamp":"2026-01-05 14:22:52"}
{"level":"info","message":"接收数据: 192.168.0.201:53789","service":"dialysis-server","timestamp":"2026-01-05 14:25:15","数据":"55aa00130b0310c6000701f402f2"}
{"level":"info","message":"校验和验证成功: 754","service":"dialysis-server","timestamp":"2026-01-05 14:25:15"}
{"level":"info","message":"设备类型: 0","service":"dialysis-server","timestamp":"2026-01-05 14:25:15"}
{"level":"info","message":"设备ID: 130b03","service":"dialysis-server","timestamp":"2026-01-05 14:25:15"}
{"level":"info","message":"运行模式&权值: 16","service":"dialysis-server","timestamp":"2026-01-05 14:25:15"}
{"level":"info","message":"主要报警标志: 198","service":"dialysis-server","timestamp":"2026-01-05 14:25:15"}
{"level":"info","message":"当前无报警","service":"dialysis-server","timestamp":"2026-01-05 14:25:15"}
{"level":"info","message":"其他报警标志: 0","service":"dialysis-server","timestamp":"2026-01-05 14:25:15"}
{"level":"info","message":"数据标识: 7","service":"dialysis-server","timestamp":"2026-01-05 14:25:15"}
{"level":"info","message":"数据值: 500","service":"dialysis-server","timestamp":"2026-01-05 14:25:15"}
{"level":"warn","message":"设备 130b03 当前未连接,跳过发送","service":"dialysis-server","timestamp":"2026-01-05 14:25:15"}
{"level":"info","message":"✅ 设备 130b03 已连接到阿里云 IoT","service":"dialysis-server","timestamp":"2026-01-05 14:25:15"}
{"level":"info","message":"接收数据: 192.168.0.201:53789","service":"dialysis-server","timestamp":"2026-01-05 14:25:53","数据":"55aa00130b0302c60001000001e9"}
{"level":"info","message":"校验和验证成功: 489","service":"dialysis-server","timestamp":"2026-01-05 14:25:53"}
{"level":"info","message":"设备类型: 0","service":"dialysis-server","timestamp":"2026-01-05 14:25:53"}
{"level":"info","message":"设备ID: 130b03","service":"dialysis-server","timestamp":"2026-01-05 14:25:53"}
{"level":"info","message":"运行模式&权值: 2","service":"dialysis-server","timestamp":"2026-01-05 14:25:53"}
{"level":"info","message":"主要报警标志: 198","service":"dialysis-server","timestamp":"2026-01-05 14:25:53"}
{"level":"info","message":"当前无报警","service":"dialysis-server","timestamp":"2026-01-05 14:25:53"}
{"level":"info","message":"其他报警标志: 0","service":"dialysis-server","timestamp":"2026-01-05 14:25:53"}
{"level":"info","message":"数据标识: 1","service":"dialysis-server","timestamp":"2026-01-05 14:25:53"}
{"level":"info","message":"数据值: 0","service":"dialysis-server","timestamp":"2026-01-05 14:25:53"}
{"level":"info","message":"接收数据: 192.168.0.201:53789","service":"dialysis-server","timestamp":"2026-01-05 14:26:34","数据":"55aa00130b0301c6000800f002df"}
{"level":"info","message":"校验和验证成功: 735","service":"dialysis-server","timestamp":"2026-01-05 14:26:34"}
{"level":"info","message":"设备类型: 0","service":"dialysis-server","timestamp":"2026-01-05 14:26:34"}
{"level":"info","message":"设备ID: 130b03","service":"dialysis-server","timestamp":"2026-01-05 14:26:34"}
{"level":"info","message":"运行模式&权值: 1","service":"dialysis-server","timestamp":"2026-01-05 14:26:34"}
{"level":"info","message":"主要报警标志: 198","service":"dialysis-server","timestamp":"2026-01-05 14:26:34"}
{"level":"info","message":"当前无报警","service":"dialysis-server","timestamp":"2026-01-05 14:26:34"}
{"level":"info","message":"其他报警标志: 0","service":"dialysis-server","timestamp":"2026-01-05 14:26:34"}
{"level":"info","message":"数据标识: 8","service":"dialysis-server","timestamp":"2026-01-05 14:26:34"}
{"level":"info","message":"数据值: 240","service":"dialysis-server","timestamp":"2026-01-05 14:26:34"}
{"level":"warn","message":"客户端连接超时,关闭连接: 192.168.0.201:53789","service":"dialysis-server","timestamp":"2026-01-05 14:31:34"}
{"level":"info","message":"已加载配置文件 config.json","service":"dialysis-server","timestamp":"2026-01-06 11:29:45"}
{"level":"info","message":"血透机服务已初始化,等待客户端连接...","service":"dialysis-server","timestamp":"2026-01-06 11:29:45"}
{"level":"info","message":"✅ 血透机TCP服务器已启动,监听 0.0.0.0:60961","service":"dialysis-server","timestamp":"2026-01-06 11:29:45"}
{"level":"info","message":"收到 SIGINT 信号,正在关闭...","service":"dialysis-server","timestamp":"2026-01-06 11:30:09"}
{"level":"info","message":"已加载配置文件 config.json","service":"dialysis-server","timestamp":"2026-01-06 11:30:11"}
{"level":"info","message":"血透机服务已初始化,等待客户端连接...","service":"dialysis-server","timestamp":"2026-01-06 11:30:11"}
{"level":"info","message":"✅ 血透机TCP服务器已启动,监听 0.0.0.0:60962","service":"dialysis-server","timestamp":"2026-01-06 11:30:11"}
{"level":"info","message":"收到 SIGINT 信号,正在关闭...","service":"dialysis-server","timestamp":"2026-01-06 11:30:17"}
{"level":"info","message":"已加载配置文件 config.json","service":"dialysis-server","timestamp":"2026-01-06 11:31:30"}
{"level":"info","message":"血透机服务已初始化,等待客户端连接...","service":"dialysis-server","timestamp":"2026-01-06 11:31:30"}
{"level":"info","message":"✅ 血透机TCP服务器已启动,监听 0.0.0.0:60962","service":"dialysis-server","timestamp":"2026-01-06 11:31:30"}
{"level":"info","message":"客户端已连接: 192.168.0.17:32753","service":"dialysis-server","timestamp":"2026-01-06 11:34:17"}
{"level":"info","message":"接收数据: 192.168.0.17:32753","service":"dialysis-server","timestamp":"2026-01-06 11:34:39","数据":"346230643061"}
{"level":"error","message":"数据长度无效。期望长度为14字节。","service":"dialysis-server","timestamp":"2026-01-06 11:34:39","实际长度":6,"数据":"346230643061"}
{"level":"info","message":"接收数据: 192.168.0.17:32753","service":"dialysis-server","timestamp":"2026-01-06 11:35:37","数据":"55aa00130b0300c6000400dc02c6"}
{"level":"info","message":"校验和验证成功: 710","service":"dialysis-server","timestamp":"2026-01-06 11:35:37"}
{"level":"info","message":"设备类型: 0","service":"dialysis-server","timestamp":"2026-01-06 11:35:37"}
{"level":"info","message":"设备ID: 130b03","service":"dialysis-server","timestamp":"2026-01-06 11:35:37"}
{"level":"info","message":"运行模式&权值: 0","service":"dialysis-server","timestamp":"2026-01-06 11:35:37"}
{"level":"info","message":"主要报警标志: 198","service":"dialysis-server","timestamp":"2026-01-06 11:35:37"}
{"level":"info","message":"当前无报警","service":"dialysis-server","timestamp":"2026-01-06 11:35:37"}
{"level":"info","message":"其他报警标志: 0","service":"dialysis-server","timestamp":"2026-01-06 11:35:37"}
{"level":"info","message":"数据标识: 4","service":"dialysis-server","timestamp":"2026-01-06 11:35:37"}
{"level":"info","message":"数据值: 220","service":"dialysis-server","timestamp":"2026-01-06 11:35:37"}
{"level":"warn","message":"设备 130b03 当前未连接,跳过发送","service":"dialysis-server","timestamp":"2026-01-06 11:35:37"}
{"level":"info","message":"✅ 设备 130b03 已连接到阿里云 IoT","service":"dialysis-server","timestamp":"2026-01-06 11:35:49"}
{"level":"info","message":"接收数据: 192.168.0.17:32753","service":"dialysis-server","timestamp":"2026-01-06 11:38:21","数据":"55aa00130b0300c6000400dc02c6"}
{"level":"info","message":"校验和验证成功: 710","service":"dialysis-server","timestamp":"2026-01-06 11:38:21"}
{"level":"info","message":"设备类型: 0","service":"dialysis-server","timestamp":"2026-01-06 11:38:21"}
{"level":"info","message":"设备ID: 130b03","service":"dialysis-server","timestamp":"2026-01-06 11:38:21"}
{"level":"info","message":"运行模式&权值: 0","service":"dialysis-server","timestamp":"2026-01-06 11:38:21"}
{"level":"info","message":"主要报警标志: 198","service":"dialysis-server","timestamp":"2026-01-06 11:38:21"}
{"level":"info","message":"当前无报警","service":"dialysis-server","timestamp":"2026-01-06 11:38:21"}
{"level":"info","message":"其他报警标志: 0","service":"dialysis-server","timestamp":"2026-01-06 11:38:21"}
{"level":"info","message":"数据标识: 4","service":"dialysis-server","timestamp":"2026-01-06 11:38:21"}
{"level":"info","message":"数据值: 220","service":"dialysis-server","timestamp":"2026-01-06 11:38:21"}
{"level":"warn","message":"客户端连接超时,关闭连接: 192.168.0.17:32753","service":"dialysis-server","timestamp":"2026-01-06 11:43:21"}
{"level":"info","message":"客户端已连接: 192.168.0.17:32754","service":"dialysis-server","timestamp":"2026-01-06 11:43:22"}
{"level":"info","message":"接收数据: 192.168.0.17:32754","service":"dialysis-server","timestamp":"2026-01-06 11:43:23","数据":"55aa00130b0300c6000f000001f5"}
{"level":"info","message":"校验和验证成功: 501","service":"dialysis-server","timestamp":"2026-01-06 11:43:23"}
{"level":"info","message":"设备类型: 0","service":"dialysis-server","timestamp":"2026-01-06 11:43:23"}
{"level":"info","message":"设备ID: 130b03","service":"dialysis-server","timestamp":"2026-01-06 11:43:23"}
{"level":"info","message":"运行模式&权值: 0","service":"dialysis-server","timestamp":"2026-01-06 11:43:23"}
{"level":"info","message":"主要报警标志: 198","service":"dialysis-server","timestamp":"2026-01-06 11:43:23"}
{"level":"info","message":"当前无报警","service":"dialysis-server","timestamp":"2026-01-06 11:43:23"}
{"level":"info","message":"其他报警标志: 0","service":"dialysis-server","timestamp":"2026-01-06 11:43:23"}
{"level":"info","message":"数据标识: 15","service":"dialysis-server","timestamp":"2026-01-06 11:43:23"}
{"level":"info","message":"数据值: 0","service":"dialysis-server","timestamp":"2026-01-06 11:43:23"}
{"level":"warn","message":"客户端连接超时,关闭连接: 192.168.0.17:32754","service":"dialysis-server","timestamp":"2026-01-06 11:48:23"}
{"level":"info","message":"客户端已连接: 192.168.0.17:32755","service":"dialysis-server","timestamp":"2026-01-06 11:48:24"}
{"level":"info","message":"接收数据: 192.168.0.17:32755","service":"dialysis-server","timestamp":"2026-01-06 11:52:15","数据":"55aa00130b0300c6000f000001f5"}
{"level":"info","message":"校验和验证成功: 501","service":"dialysis-server","timestamp":"2026-01-06 11:52:15"}
{"level":"info","message":"设备类型: 0","service":"dialysis-server","timestamp":"2026-01-06 11:52:15"}
{"level":"info","message":"设备ID: 130b03","service":"dialysis-server","timestamp":"2026-01-06 11:52:15"}
{"level":"info","message":"运行模式&权值: 0","service":"dialysis-server","timestamp":"2026-01-06 11:52:15"}
{"level":"info","message":"主要报警标志: 198","service":"dialysis-server","timestamp":"2026-01-06 11:52:15"}
{"level":"info","message":"当前无报警","service":"dialysis-server","timestamp":"2026-01-06 11:52:15"}
{"level":"info","message":"其他报警标志: 0","service":"dialysis-server","timestamp":"2026-01-06 11:52:15"}
{"level":"info","message":"数据标识: 15","service":"dialysis-server","timestamp":"2026-01-06 11:52:15"}
{"level":"info","message":"数据值: 0","service":"dialysis-server","timestamp":"2026-01-06 11:52:15"}
{"level":"info","message":"已关闭设备连接: 130b03","service":"dialysis-server","timestamp":"2026-01-06 11:52:26"}
{"level":"info","message":"已加载配置文件 config.json","service":"dialysis-server","timestamp":"2026-01-06 11:52:30"}
{"level":"info","message":"血透机服务已初始化,等待客户端连接...","service":"dialysis-server","timestamp":"2026-01-06 11:52:30"}
{"level":"info","message":"✅ 血透机TCP服务器已启动,监听 0.0.0.0:60962","service":"dialysis-server","timestamp":"2026-01-06 11:52:30"}
{"level":"info","message":"客户端已连接: 192.168.0.17:32759","service":"dialysis-server","timestamp":"2026-01-06 11:52:30"}
{"level":"info","message":"接收数据: 192.168.0.17:32759","service":"dialysis-server","timestamp":"2026-01-06 11:52:35","数据":"55aa00130b0300c6000f000001f5"}
{"level":"info","message":"校验和验证成功: 501","service":"dialysis-server","timestamp":"2026-01-06 11:52:35"}
{"level":"info","message":"设备类型: 0","service":"dialysis-server","timestamp":"2026-01-06 11:52:35"}
{"level":"info","message":"设备ID: 130b03","service":"dialysis-server","timestamp":"2026-01-06 11:52:35"}
{"level":"info","message":"运行模式&权值: 0","service":"dialysis-server","timestamp":"2026-01-06 11:52:35"}
{"level":"info","message":"主要报警标志: 198","service":"dialysis-server","timestamp":"2026-01-06 11:52:35"}
{"level":"info","message":"当前无报警","service":"dialysis-server","timestamp":"2026-01-06 11:52:35"}
{"level":"info","message":"其他报警标志: 0","service":"dialysis-server","timestamp":"2026-01-06 11:52:35"}
{"level":"info","message":"数据标识: 15","service":"dialysis-server","timestamp":"2026-01-06 11:52:35"}
{"level":"info","message":"数据值: 0","service":"dialysis-server","timestamp":"2026-01-06 11:52:35"}
{"level":"warn","message":"设备 130b03 当前未连接,跳过发送","service":"dialysis-server","timestamp":"2026-01-06 11:52:35"}
{"level":"info","message":"✅ 设备 130b03 已连接到阿里云 IoT","service":"dialysis-server","timestamp":"2026-01-06 11:52:46"}
{"level":"info","message":"接收数据: 192.168.0.17:32759","service":"dialysis-server","timestamp":"2026-01-06 11:53:17","数据":"55aa00130b0300c60010000001f6"}
{"level":"info","message":"校验和验证成功: 502","service":"dialysis-server","timestamp":"2026-01-06 11:53:17"}
{"level":"info","message":"设备类型: 0","service":"dialysis-server","timestamp":"2026-01-06 11:53:17"}
{"level":"info","message":"设备ID: 130b03","service":"dialysis-server","timestamp":"2026-01-06 11:53:17"}
{"level":"info","message":"运行模式&权值: 0","service":"dialysis-server","timestamp":"2026-01-06 11:53:17"}
{"level":"info","message":"主要报警标志: 198","service":"dialysis-server","timestamp":"2026-01-06 11:53:17"}
{"level":"info","message":"当前无报警","service":"dialysis-server","timestamp":"2026-01-06 11:53:17"}
{"level":"info","message":"其他报警标志: 0","service":"dialysis-server","timestamp":"2026-01-06 11:53:17"}
{"level":"info","message":"数据标识: 16","service":"dialysis-server","timestamp":"2026-01-06 11:53:17"}
{"level":"info","message":"数据值: 0","service":"dialysis-server","timestamp":"2026-01-06 11:53:17"}
{"level":"info","message":"已关闭设备连接: 130b03","service":"dialysis-server","timestamp":"2026-01-06 11:54:21"}
{"level":"warn","message":"配置文件 config.json 未找到,使用默认配置","service":"dialysis-server","timestamp":"2026-01-06 12:54:33"}
{"level":"info","message":"血透机服务已初始化,等待客户端连接...","service":"dialysis-server","timestamp":"2026-01-06 12:54:33"}
{"level":"info","message":"✅ 血透机TCP服务器已启动,监听 0.0.0.0:60961","service":"dialysis-server","timestamp":"2026-01-06 12:54:33"}
{"level":"info","message":"已加载配置文件","service":"dialysis-server","timestamp":"2026-01-06 12:56:46","可执行目录":"d:\\gitData\\ZL-Communication","打包运行":false,"路径":"d:\\gitData\\ZL-Communication\\config.json"}
{"level":"info","message":"血透机服务已初始化,等待客户端连接...","service":"dialysis-server","timestamp":"2026-01-06 12:56:46"}
{"level":"info","message":"✅ 血透机TCP服务器已启动,监听 0.0.0.0:60962","service":"dialysis-server","timestamp":"2026-01-06 12:56:46"}
{"level":"info","message":"客户端已连接: 192.168.0.17:57394","service":"dialysis-server","timestamp":"2026-01-06 12:56:46"}
{"level":"info","message":"收到 SIGINT 信号,正在关闭...","service":"dialysis-server","timestamp":"2026-01-06 12:59:46"}
{"level":"info","message":"已加载配置文件","service":"dialysis-server","timestamp":"2026-01-06 13:01:56","可执行目录":"D:\\gitData\\ZL-Communication","打包运行":true,"路径":"D:\\gitData\\ZL-Communication\\config.json"}
{"level":"info","message":"血透机服务已初始化,等待客户端连接...","service":"dialysis-server","timestamp":"2026-01-06 13:01:56"}
{"level":"info","message":"✅ 血透机TCP服务器已启动,监听 0.0.0.0:60962","service":"dialysis-server","timestamp":"2026-01-06 13:01:56"}
{"level":"info","message":"客户端已连接: 192.168.0.17:57525","service":"dialysis-server","timestamp":"2026-01-06 13:01:57"}
config.js
New file
@@ -0,0 +1,88 @@
const fs = require('fs');
const path = require('path');
const logger = require('./logger');
const defaultConfig = {
  server: {
    port: 60961,
    host: '0.0.0.0'
  }
};
function resolveConfigPaths() {
  const isPackaged = !!process.pkg;
  const exeDir = isPackaged ? path.dirname(process.execPath) : __dirname;
  const cwd = process.cwd();
  const explicit = process.env.CONFIG_PATH && process.env.CONFIG_PATH.trim()
    ? path.resolve(process.env.CONFIG_PATH.trim())
    : null;
  const candidates = [];
  if (explicit) candidates.push(explicit);
  // 优先:可执行文件所在目录(适用于 pkg 打包后的 exe 同目录)
  candidates.push(path.join(exeDir, 'config.json'));
  // 其次:当前工作目录(命令行运行时常用)
  candidates.push(path.join(cwd, 'config.json'));
  // 最后:源码目录(开发环境默认)
  candidates.push(path.join(__dirname, 'config.json'));
  return { candidates, isPackaged, exeDir };
}
function loadConfig() {
  const { candidates, isPackaged, exeDir } = resolveConfigPaths();
  let userConfig = {};
  let usedPath = null;
  for (const p of candidates) {
    try {
      if (fs.existsSync(p)) {
        const raw = fs.readFileSync(p, 'utf-8');
        userConfig = JSON.parse(raw);
        usedPath = p;
        break;
      }
    } catch (err) {
      logger.warn('读取配置路径失败,尝试下一个', { 路径: p, 错误: err.message });
    }
  }
  if (usedPath) {
    logger.info('已加载配置文件', { 路径: usedPath, 打包运行: isPackaged, 可执行目录: exeDir });
  } else {
    logger.warn('未找到配置文件,使用默认配置', { 打包运行: isPackaged, 可执行目录: exeDir });
  }
  const cfg = { ...defaultConfig };
  if (userConfig && typeof userConfig === 'object') {
    if (userConfig.server && typeof userConfig.server === 'object') {
      const s = userConfig.server;
      if (typeof s.port === 'number' && Number.isFinite(s.port)) {
        cfg.server.port = s.port;
      }
      if (typeof s.host === 'string' && s.host.trim()) {
        cfg.server.host = s.host.trim();
      }
    }
  }
  if (process.env.PORT) {
    const envPort = Number(process.env.PORT);
    if (Number.isFinite(envPort) && envPort > 0 && envPort < 65536) {
      cfg.server.port = envPort;
      logger.info('使用环境变量 PORT 覆盖端口', { port: envPort });
    } else {
      logger.warn('环境变量 PORT 无效,忽略', { PORT: process.env.PORT });
    }
  }
  if (process.env.HOST && process.env.HOST.trim()) {
    cfg.server.host = process.env.HOST.trim();
    logger.info('使用环境变量 HOST 覆盖主机', { host: cfg.server.host });
  }
  return cfg;
}
module.exports = { loadConfig };
config.json
New file
@@ -0,0 +1,6 @@
{
  "server": {
    "port": 60966,
    "host": "0.0.0.0"
  }
}
error.log
@@ -1,17 +0,0 @@
{"level":"error","message":"向阿里云物联网平台发送数据失败,设备ID: 130b03","service":"dialysis-server","timestamp":"2025-09-16 12:23:52","错误":{"code":200,"data":{},"id":"2","message":"success","method":"thing.event.property.post","version":"1.0"}}
{"level":"error","message":"向阿里云物联网平台发送数据失败,设备ID: 130b03","service":"dialysis-server","timestamp":"2025-09-16 13:43:20","错误":{"code":200,"data":{},"id":"3","message":"success","method":"thing.event.property.post","version":"1.0"}}
{"level":"error","message":"向阿里云物联网平台发送数据失败,设备ID: 130b03","service":"dialysis-server","timestamp":"2025-09-16 13:43:59","错误":{"code":200,"data":{},"id":"2","message":"success","method":"thing.event.property.post","version":"1.0"}}
{"level":"error","message":"向阿里云物联网平台发送数据失败,设备ID: 130b03","service":"dialysis-server","timestamp":"2025-09-16 13:44:41","错误":{"code":200,"data":{},"id":"2","message":"success","method":"thing.event.property.post","version":"1.0"}}
{"level":"error","message":"向阿里云物联网平台发送数据失败,设备ID: 130b03","service":"dialysis-server","timestamp":"2025-09-16 13:44:56","错误":{"code":200,"data":{},"id":"3","message":"success","method":"thing.event.property.post","version":"1.0"}}
{"level":"error","message":"向阿里云物联网平台发送数据失败,设备ID: 130b03","service":"dialysis-server","timestamp":"2025-09-16 13:48:20","错误":{"code":200,"data":{},"id":"2","message":"success","method":"thing.event.property.post","version":"1.0"}}
{"level":"error","message":"向阿里云物联网平台发送数据失败,设备ID: 130b03","service":"dialysis-server","timestamp":"2025-09-16 13:49:44","错误":{"code":200,"data":{},"id":"2","message":"success","method":"thing.event.property.post","version":"1.0"}}
{"level":"error","message":"向阿里云物联网平台发送数据失败,设备ID: 130b03","service":"dialysis-server","timestamp":"2025-09-16 13:50:44","错误":{"code":200,"data":{},"id":"2","message":"success","method":"thing.event.property.post","version":"1.0"}}
{"level":"error","message":"向阿里云物联网平台发送数据失败,设备ID: 130b03","service":"dialysis-server","timestamp":"2025-09-16 13:55:40","错误":{"code":200,"data":{},"id":"2","message":"success","method":"thing.event.property.post","version":"1.0"}}
{"level":"error","message":"向阿里云物联网平台发送数据失败,设备ID: 130b03","service":"dialysis-server","timestamp":"2025-09-16 13:55:59","错误":{"code":200,"data":{},"id":"2","message":"success","method":"thing.event.property.post","version":"1.0"}}
{"level":"error","message":"创建服务器时发生严重错误","service":"dialysis-server","timestamp":"2025-09-16 15:30:58","堆栈":"RangeError [ERR_SOCKET_BAD_PORT]: options.port should be >= 0 and < 65536. Received 80961.\n    at new NodeError (node:internal/errors:387:5)\n    at validatePort (node:internal/validators:365:11)\n    at Server.listen (node:net:1591:5)\n    at createServer (D:\\gitData\\ZL-Communication\\index.js:254:16)\n    at Object.<anonymous> (D:\\gitData\\ZL-Communication\\index.js:336:1)\n    at Module._compile (node:internal/modules/cjs/loader:1198:14)\n    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1252:10)\n    at Module.load (node:internal/modules/cjs/loader:1076:32)\n    at Function.Module._load (node:internal/modules/cjs/loader:911:12)\n    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)","错误":"options.port should be >= 0 and < 65536. Received 80961."}
{"level":"error","message":"创建服务器时发生严重错误","service":"dialysis-server","timestamp":"2025-09-16 15:31:16","堆栈":"RangeError [ERR_SOCKET_BAD_PORT]: options.port should be >= 0 and < 65536. Received 80961.\n    at new NodeError (node:internal/errors:387:5)\n    at validatePort (node:internal/validators:365:11)\n    at Server.listen (node:net:1591:5)\n    at createServer (D:\\gitData\\ZL-Communication\\index.js:254:16)\n    at Object.<anonymous> (D:\\gitData\\ZL-Communication\\index.js:336:1)\n    at Module._compile (node:internal/modules/cjs/loader:1198:14)\n    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1252:10)\n    at Module.load (node:internal/modules/cjs/loader:1076:32)\n    at Function.Module._load (node:internal/modules/cjs/loader:911:12)\n    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)","错误":"options.port should be >= 0 and < 65536. Received 80961."}
{"level":"error","message":"调用 sendDataToAliyun 时发生同步错误","payload":{"alarms":["液位","气泡","温度","电导"],"dataFlag":1,"dataValue":0,"deviceId":"130b03","deviceType":0,"modeAndValue":2,"otherAlarmFlag":0,"timestamp":"2025-09-16T07:49:57.611Z"},"service":"dialysis-server","timestamp":"2025-09-16 15:49:57","错误":"Cannot read properties of undefined (reading 'catch')"}
{"level":"error","message":"调用 sendDataToAliyun 时发生同步错误","payload":{"alarms":["液位","气泡","温度","电导"],"dataFlag":1,"dataValue":0,"deviceId":"130b03","deviceType":0,"modeAndValue":2,"otherAlarmFlag":0,"timestamp":"2025-09-16T07:50:10.924Z"},"service":"dialysis-server","timestamp":"2025-09-16 15:50:10","错误":"Cannot read properties of undefined (reading 'catch')"}
{"level":"error","message":"调用 sendDataToAliyun 时发生同步错误","payload":{"alarms":["液位","气泡","温度","电导"],"dataFlag":1,"dataValue":0,"deviceId":"130b03","deviceType":0,"modeAndValue":2,"otherAlarmFlag":0,"timestamp":"2025-09-16T07:52:32.336Z"},"service":"dialysis-server","timestamp":"2025-09-16 15:52:32","错误":"Cannot read properties of undefined (reading 'catch')"}
{"level":"error","message":"调用 sendDataToAliyun 时发生同步错误","payload":{"alarms":["液位","气泡","温度","电导"],"dataFlag":1,"dataValue":0,"deviceId":"130b03","deviceType":0,"modeAndValue":2,"otherAlarmFlag":0,"timestamp":"2025-09-16T07:53:42.544Z"},"service":"dialysis-server","timestamp":"2025-09-16 15:53:42","错误":"Cannot read properties of undefined (reading 'catch')"}
{"level":"error","message":"调用 sendDataToAliyun 时发生同步错误","payload":{"alarms":["液位","气泡","温度","电导"],"dataFlag":1,"dataValue":0,"deviceId":"130b03","deviceType":0,"modeAndValue":2,"otherAlarmFlag":0,"timestamp":"2025-09-16T07:53:45.959Z"},"service":"dialysis-server","timestamp":"2025-09-16 15:53:45","错误":"Cannot read properties of undefined (reading 'catch')"}
index.js
@@ -2,6 +2,10 @@
const net = require('net');
const logger = require('./logger');
const { sendDataToAliyun } = require('./aliyun-iot');
const { loadConfig } = require('./config');
// 加载配置(端口、主机)
const CONFIG = loadConfig();
function getDateString() {
@@ -214,7 +218,7 @@
        // 构造 payload
        const payload = {
            deviceName:'',
            deviceName:'威力生',
            deviceType:deviceType, //设备类型 0是血透1 是血滤
            n: deviceIdHex, //设备序列号 也就是id
            RunningState: modeAndValue, // 运行模式&权值
@@ -310,13 +314,13 @@
                            payload.o=dataValue
                            break;
                        case 15:
                            payload.ssy=dataValue
                            payload.N=dataValue
                            break;
                        case 16:
                            payload.szy=dataValue
                            payload.O=dataValue
                            break;
                        case 17:
                            payload.mb=dataValue
                            payload.P=dataValue
                            break;
                        default:
                            logger.warn('未知的数据标识', { dataFlag });
@@ -370,13 +374,13 @@
                            payload.o=dataValue
                            break;
                        case 15:
                            payload.ssy=dataValue
                            payload.N=dataValue
                            break;
                        case 16:
                            payload.szy=dataValue
                            payload.O=dataValue
                            break;
                        case 17:
                            payload.mb=dataValue
                            payload.P=dataValue
                            break;
                        default:
                            logger.warn('未知的数据标识', { dataFlag });
@@ -457,17 +461,18 @@
        });
        const PORT = process.env.PORT || 60961;
        const { port: PORT, host: HOST } = CONFIG.server;
        server.listen(PORT, '0.0.0.0', () => {
            logger.info(`✅ 血透机TCP服务器已启动,监听端口 ${PORT}`);
        server.listen(PORT, HOST, () => {
            logger.info(`✅ 血透机TCP服务器已启动,监听 ${HOST}:${PORT}`);
        });
        server.on('error', (err) => {
            logger.error('服务器监听错误', {
                错误: err.message,
                堆栈: err.stack,
                端口: PORT
                端口: PORT,
                主机: HOST
            });
            // 如果是端口占用,尝试重启或退出
package.json
@@ -10,6 +10,8 @@
    "zl-communication": "./index.js"
  },
  "scripts": {
    "start": "node ./index.js",
    "pkg": "pkg index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
zl-communication-linux
Binary files differ
zl-communication-macos
Binary files differ
zl-communication-win.exe
Binary files differ