| | |
| | | {"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"} |
| New file |
| | |
| | | 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 }; |
| New file |
| | |
| | | { |
| | | "server": { |
| | | "port": 60966, |
| | | "host": "0.0.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')"} |
| | |
| | | const net = require('net'); |
| | | const logger = require('./logger'); |
| | | const { sendDataToAliyun } = require('./aliyun-iot'); |
| | | const { loadConfig } = require('./config'); |
| | | |
| | | // 加载配置(端口、主机) |
| | | const CONFIG = loadConfig(); |
| | | |
| | | |
| | | function getDateString() { |
| | |
| | | |
| | | // 构造 payload |
| | | const payload = { |
| | | deviceName:'', |
| | | deviceName:'威力生', |
| | | deviceType:deviceType, //设备类型 0是血透1 是血滤 |
| | | n: deviceIdHex, //设备序列号 也就是id |
| | | RunningState: modeAndValue, // 运行模式&权值 |
| | |
| | | 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 }); |
| | |
| | | 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 }); |
| | |
| | | |
| | | }); |
| | | |
| | | 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 |
| | | }); |
| | | |
| | | // 如果是端口占用,尝试重启或退出 |
| | |
| | | "zl-communication": "./index.js" |
| | | }, |
| | | "scripts": { |
| | | "start": "node ./index.js", |
| | | "pkg": "pkg index.js", |
| | | "test": "echo \"Error: no test specified\" && exit 1" |
| | | |
| | | }, |