From 747a86bb94006aaca721cfc0c0ce7061643a9ea6 Mon Sep 17 00:00:00 2001
From: chenyc <501753378@qq.com>
Date: 星期四, 20 八月 2026 12:19:35 +0800
Subject: [PATCH] gx

---
 jh2028-new-service/dashboard/styles.css           |  361 +
 jh2028-new-service/tcp-service.js                 |  227 
 build/ncc/index.js                                |  193 
 jh2028-new-service/verify-protocol.js             |   52 
 jh2028-new-service/package-lock.json              | 4250 ++++++++++++
 jh2028-new-service/test/tcp-service.test.js       |   49 
 生产实施部署文档.md                                       |  280 
 JH2028对外接口通讯协议 - 20260511.pdf                     |    0 
 tttt.md                                           |   24 
 jh2028-new-service/服务通讯功能流程图.md                   |  191 
 jh2028-new-service/test/dashboard-service.test.js |   46 
 jh2028-new-service/test/decoder.test.js           |  103 
 jh2028-new-service/实施部署文档.md                      |  622 +
 jh2028-new-service/app.js                         |  283 
 build/ncc/logs/jhm-service-20260430.log           | 7717 +++++++++++++++++++++++
 jh2028-new-service/package.json                   |   34 
 jh2028-new-service/alModel.json                   |   30 
 jh2028-new-service/dashboard/app.js               |  264 
 jh2028-new-service/配置说明.md                        |  303 
 jh2028-new-service/README.md                      |  288 
 jh2028-new-service/config.json                    |   68 
 tcp-service.js                                    |    8 
 verify-all-commands.js                            |   44 
 metric-aggregator.js                              |   65 
 aliyun-service.js                                 |   12 
 jh2028-new-service/test/state-cache.test.js       |   53 
 app.js                                            |  107 
 jh2028-new-service/mqtt-service.js                |  137 
 jh2028-new-service/dashboard/index.html           |   64 
 runtime-paths.js                                  |    1 
 jh2028-new-service/tcp-simulator.js               |  296 
 jh2028-new-service/test/app.test.js               |   74 
 test/tcp-simulator.test.js                        |   40 
 jh2028-new-service/scripts/build-executables.js   |  202 
 jh2028-new-service/.gitignore                     |    5 
 jh2028-new-service/test/mqtt-service.test.js      |   16 
 jh2028-new-service/decoder.js                     |  347 +
 test/metric-aggregator.test.js                    |   81 
 /dev/null                                         | 1553 ----
 jhm2028-service.js                                |   92 
 jh2028-new-service/state-cache.js                 |  101 
 jh2028-new-service/dashboard-service.js           |  228 
 test/app.test.js                                  |   88 
 jh2028-new-service/logger.js                      |  119 
 package.json                                      |    2 
 tcp-simulator.js                                  |  139 
 jh2028-new-service/runtime-paths.js               |   42 
 build/pkg/bundle/index.cjs                        |  193 
 jh2028-new-service/aliyun-service.js              |  343 +
 49 files changed, 17,913 insertions(+), 1,924 deletions(-)

diff --git "a/JH2028\345\257\271\345\244\226\346\216\245\345\217\243\351\200\232\350\256\257\345\215\217\350\256\256 - 20260511.pdf" "b/JH2028\345\257\271\345\244\226\346\216\245\345\217\243\351\200\232\350\256\257\345\215\217\350\256\256 - 20260511.pdf"
new file mode 100644
index 0000000..96dd256
--- /dev/null
+++ "b/JH2028\345\257\271\345\244\226\346\216\245\345\217\243\351\200\232\350\256\257\345\215\217\350\256\256 - 20260511.pdf"
Binary files differ
diff --git a/aliyun-service.js b/aliyun-service.js
index 3d10bca..df0e1c7 100644
--- a/aliyun-service.js
+++ b/aliyun-service.js
@@ -63,7 +63,7 @@
     const normalized = this.normalizeEventPayload(errorLike);
 
     if (normalized instanceof Error) {
-      return normalized.message || normalized.name || 'unknown-error';
+      return normalized.message || normalized.name || '未知错误';
     }
 
     if (Array.isArray(normalized)) {
@@ -71,7 +71,7 @@
         .map((item) => this.formatErrorMessage(item))
         .filter(Boolean);
 
-      return parts.length > 0 ? parts.join(' | ') : 'unknown-error';
+      return parts.length > 0 ? parts.join(' | ') : '未知错误';
     }
 
     if (normalized && typeof normalized === 'object') {
@@ -87,7 +87,7 @@
     }
 
     if (normalized === undefined || normalized === null || normalized === '') {
-      return 'unknown-error';
+      return '未知错误';
     }
 
     return String(normalized);
@@ -139,7 +139,7 @@
       return this.aliyunSdk;
     }
 
-    // eslint-disable-next-line global-require
+    // 延迟加载 SDK,避免未启用阿里云时引入额外依赖。
     this.aliyunSdk = require('aliyun-iot-device-sdk');
     return this.aliyunSdk;
   }
@@ -219,7 +219,7 @@
     try {
       responseBody = JSON.parse(rawText);
     } catch (_error) {
-      throw new Error('三元组接口返回不是有效 JSON');
+      throw new Error('三元组接口返回的不是有效 JSON');
     }
 
     return this.extractTuple(responseBody, deviceId);
@@ -241,7 +241,7 @@
 
     if (context.lastRegisterAttempt > 0 && (now - context.lastRegisterAttempt) < retryMs && context.lastRegisterError) {
       this.logger.warn(`[ALIYUN] 三元组请求冷却中 deviceId=${device.deviceId} retryMs=${retryMs} lastError=${context.lastRegisterError}`);
-      throw new Error(`阿里云三元组重试冷却中 ${context.lastRegisterError}`);
+      throw new Error(`阿里云三元组重试冷却中: ${context.lastRegisterError}`);
     }
 
     context.lastRegisterAttempt = now;
diff --git a/app.js b/app.js
index 7c4f879..124f0e9 100644
--- a/app.js
+++ b/app.js
@@ -15,6 +15,7 @@
   error: 40,
 };
 
+// 统一生成本地日志时间,兼顾控制台和文件日志格式。
 function formatLocalTimestamp(date = new Date()) {
   const year = date.getFullYear();
   const month = String(date.getMonth() + 1).padStart(2, '0');
@@ -101,7 +102,7 @@
       try {
         fs.appendFileSync(logFilePath, `${line}\n`, 'utf8');
       } catch (error) {
-        console.error(`[LOGGER] Failed to append log file: ${error.message}`);
+        console.error(`[LOGGER] 写入日志文件失败: ${error.message}`);
       }
     }
   }
@@ -150,23 +151,23 @@
 }
 
 function printHelp() {
-  console.log(`JHM TCP Socket Gateway
+  console.log(`JHM TCP Socket 网关服务
 
-Usage:
+用法:
   node app.js
   node app.js --config ./config.json
   jhm-service.exe --config .\\runtime\\config.json
   ./jhm-service --config ./runtime/config.json
 
-Options:
-  --config <path>    set config file path
-  --help, -h         show help
+参数:
+  --config <path>    指定配置文件路径
+  --help, -h         显示帮助
 `);
 }
 
 function loadConfig(configPath) {
   if (!fs.existsSync(configPath)) {
-    throw new Error(`config file not found: ${configPath}`);
+    throw new Error(`未找到配置文件: ${configPath}`);
   }
 
   const content = fs.readFileSync(configPath, 'utf8');
@@ -208,66 +209,67 @@
 
   return {
     publishTime: bloodPressure ? bloodPressure.publishTime !== false : true,
+    flushImmediately: bloodPressure ? bloodPressure.flushImmediately !== false : true,
   };
 }
 
 function validateConfig(config) {
   if (!config.tcp || !Array.isArray(config.devices)) {
-    throw new Error('config.json must include tcp and devices');
+    throw new Error('config.json 必须包含 tcp 和 devices');
   }
 
   if (!config.tcp.host || !config.tcp.port) {
-    throw new Error('config.json must include tcp.host and tcp.port');
+    throw new Error('config.json 必须包含 tcp.host 和 tcp.port');
   }
 
   const channels = getSendChannels(config);
 
   if (channels.length === 0) {
-    throw new Error('config.json send.channels must enable at least one channel');
+    throw new Error('config.json 的 send.channels 至少要启用一个通道');
   }
 
   if (channels.includes('mqtt')) {
     if (!config.mqtt) {
-      throw new Error('config.json enabled mqtt but missing mqtt config');
+      throw new Error('config.json 已启用 mqtt,但缺少 mqtt 配置');
     }
 
     const hasBrokerUrl = Boolean(config.mqtt.brokerUrl);
     const hasHostMode = Boolean(config.mqtt.protocol && config.mqtt.host && config.mqtt.port);
 
     if (!hasBrokerUrl && !hasHostMode) {
-      throw new Error('config.json mqtt requires brokerUrl or protocol/host/port');
+      throw new Error('config.json 的 mqtt 必须配置 brokerUrl 或 protocol/host/port');
     }
 
     if (!config.mqtt.topicTemplate && !config.mqtt.defaultTopicPrefix) {
-      throw new Error('config.json mqtt requires topicTemplate or defaultTopicPrefix');
+      throw new Error('config.json 的 mqtt 必须配置 topicTemplate 或 defaultTopicPrefix');
     }
   }
 
   if (channels.includes('aliyun')) {
     if (!config.aliyun) {
-      throw new Error('config.json enabled aliyun but missing aliyun config');
+      throw new Error('config.json 已启用 aliyun,但缺少 aliyun 配置');
     }
 
     if (!config.aliyun.tupleApiBaseUrl && !config.aliyun.tupleApiUrl) {
-      throw new Error('config.json aliyun requires tupleApiBaseUrl or tupleApiUrl');
+      throw new Error('config.json 的 aliyun 必须配置 tupleApiBaseUrl 或 tupleApiUrl');
     }
   }
 
   if (!config.protocol || !config.protocol.alModelPath) {
-    throw new Error('config.json protocol.alModelPath is required');
+    throw new Error('config.json 必须配置 protocol.alModelPath');
   }
 
   const sendOptions = getSendOptions(config);
 
   if (sendOptions.flushIntervalMs <= 0) {
-    throw new Error('config.json send.flushIntervalMs must be > 0');
+    throw new Error('config.json 的 send.flushIntervalMs 必须大于 0');
   }
 
   if (config.logging && config.logging.level) {
     const supportedLevels = ['debug', 'info', 'warn', 'error'];
 
     if (!supportedLevels.includes(String(config.logging.level).toLowerCase())) {
-      throw new Error(`config.json logging.level only supports ${supportedLevels.join(', ')}`);
+      throw new Error(`config.json 的 logging.level 仅支持 ${supportedLevels.join('、')}`);
     }
   }
 }
@@ -278,6 +280,29 @@
   }
 
   return path.join(path.dirname(configFilePath), targetPath);
+}
+
+function createOnMetricHandler({ logger, aggregator, sendOptions, bloodPressureOptions }) {
+  return function onMetric(device, metric, result) {
+    logger.info(`[APP] 指标已缓存 deviceId=${device.deviceId} mode=${sendOptions.mode} metric=${JSON.stringify(metric)}`);
+    return aggregator.ingest(device, metric)
+      .then(() => {
+        if (
+          sendOptions.mode === 'batch'
+          && bloodPressureOptions.flushImmediately
+          && result
+          && result.protocol === 'blood-pressure'
+        ) {
+          logger.info(`[APP] 血压报文触发整包立即发送 deviceId=${device.deviceId}`);
+          return aggregator.flush({ reason: 'blood-pressure', deviceId: device.deviceId });
+        }
+
+        return null;
+      })
+      .catch((error) => {
+        logger.error(`[APP] 指标处理失败 deviceId=${device.deviceId}: ${error.message}`);
+      });
+  };
 }
 
 async function main() {
@@ -292,7 +317,7 @@
     enabled: false,
     console: true,
   });
-  bootstrapLogger.info(`[APP] Startup arguments parsed config=${options.configPath}`);
+  bootstrapLogger.info(`[APP] 启动参数解析完成 config=${options.configPath}`);
 
   const config = loadConfig(options.configPath);
   const logDir = resolveConfigPath(options.configPath, (config.logging && config.logging.dir) || './logs');
@@ -306,21 +331,22 @@
   const alModelPath = resolveConfigPath(options.configPath, config.protocol.alModelPath);
 
   if (config.logging && config.logging.enabled === false) {
-    logger.info('[APP] File logging is disabled; console output only');
+    logger.info('[APP] 文件日志已禁用,仅输出到控制台');
   } else {
-    logger.info(`[APP] Local logging enabled dir=${logDir} file=${logger.getLogFilePath()} level=${normalizeLogLevel(config.logging && config.logging.level)}`);
+    logger.info(`[APP] 本地日志已启用 dir=${logDir} file=${logger.getLogFilePath()} level=${normalizeLogLevel(config.logging && config.logging.level)}`);
   }
 
-  logger.info(`[APP] Config loaded tcp=${config.tcp.host}:${config.tcp.port} devices=${config.devices.length} channels=${sendChannels.join(',')} sendMode=${sendOptions.mode} flushIntervalMs=${sendOptions.flushIntervalMs} alModel=${alModelPath}`);
+  logger.info(`[APP] 配置加载完成 tcp=${config.tcp.host}:${config.tcp.port} devices=${config.devices.length} channels=${sendChannels.join(',')} sendMode=${sendOptions.mode} flushIntervalMs=${sendOptions.flushIntervalMs} alModel=${alModelPath}`);
 
   const mqttService = sendChannels.includes('mqtt') ? new MqttService(config.mqtt, logger) : null;
   const aliyunService = sendChannels.includes('aliyun') ? new AliyunService(config.aliyun, logger) : null;
 
+  // 聚合器负责把多次单点指标合并成一次完整物模型上报。
   const aggregator = new MetricAggregator({
     logger,
     ...sendOptions,
     onFlush: async (device, payload, meta) => {
-      logger.info(`[APP] Batch dispatch deviceId=${device.deviceId} channels=${sendChannels.join(',')} reason=${meta.reason} payload=${JSON.stringify(payload)}`);
+      logger.info(`[APP] 开始批量分发 deviceId=${device.deviceId} channels=${sendChannels.join(',')} reason=${meta.reason} payload=${JSON.stringify(payload)}`);
 
       let ok = true;
 
@@ -329,7 +355,7 @@
           mqttService.publish(device, payload);
         } catch (error) {
           ok = false;
-          logger.error(`[APP] MQTT batch dispatch failed deviceId=${device.deviceId}: ${error.message}`);
+          logger.error(`[APP] MQTT 批量分发失败 deviceId=${device.deviceId}: ${error.message}`);
         }
       }
 
@@ -339,14 +365,14 @@
 
           if (result && result.skipped) {
             ok = false;
-            logger.warn(`[APP] Aliyun batch dispatch skipped deviceId=${device.deviceId} reason=${result.reason}`);
+            logger.warn(`[APP] 阿里云批量分发已跳过 deviceId=${device.deviceId} reason=${result.reason}`);
           } else if (result && result.ok === false) {
             ok = false;
-            logger.error(`[APP] Aliyun batch dispatch failed deviceId=${device.deviceId}: ${result.reason}`);
+            logger.error(`[APP] 阿里云批量分发失败 deviceId=${device.deviceId}: ${result.reason}`);
           }
         } catch (error) {
           ok = false;
-          logger.error(`[APP] Aliyun batch dispatch exception deviceId=${device.deviceId}: ${error.message}`);
+          logger.error(`[APP] 阿里云批量分发异常 deviceId=${device.deviceId}: ${error.message}`);
         }
       }
 
@@ -360,27 +386,27 @@
     alModelPath,
     publishBloodPressureTime: bloodPressureOptions.publishTime,
     logger,
-    onMetric(device, metric) {
-      logger.info(`[APP] Metric cached deviceId=${device.deviceId} mode=${sendOptions.mode} metric=${JSON.stringify(metric)}`);
-      aggregator.ingest(device, metric).catch((error) => {
-        logger.error(`[APP] Metric cache failed deviceId=${device.deviceId}: ${error.message}`);
-      });
-    },
+    onMetric: createOnMetricHandler({
+      logger,
+      aggregator,
+      sendOptions,
+      bloodPressureOptions,
+    }),
   });
 
   if (mqttService) {
-    logger.info('[APP] Starting MQTT channel');
+    logger.info('[APP] 正在启动 MQTT 通道');
     mqttService.start();
   }
 
   if (aliyunService) {
-    logger.info('[APP] Starting Aliyun channel');
+    logger.info('[APP] 正在启动阿里云通道');
     aliyunService.start();
   }
 
   aggregator.start();
   await tcpService.start();
-  logger.info('[APP] All services started');
+  logger.info('[APP] 所有服务已启动');
 
   let shuttingDown = false;
 
@@ -390,7 +416,7 @@
     }
 
     shuttingDown = true;
-    logger.warn(`[APP] Received ${signal}, shutting down`);
+    logger.warn(`[APP] 收到 ${signal},开始关闭服务`);
 
     await tcpService.stop();
     await aggregator.stop();
@@ -403,7 +429,7 @@
       await aliyunService.stop();
     }
 
-    logger.info('[APP] Service shutdown completed');
+    logger.info('[APP] 服务已完成关闭');
     await logger.close();
     process.exit(0);
   }
@@ -417,11 +443,11 @@
   });
 
   process.on('uncaughtException', (error) => {
-    logger.error(`[APP] Uncaught exception: ${error.stack || error.message}`);
+    logger.error(`[APP] 未捕获异常: ${error.stack || error.message}`);
   });
 
   process.on('unhandledRejection', (reason) => {
-    logger.error(`[APP] Unhandled promise rejection: ${reason}`);
+    logger.error(`[APP] 未处理的 Promise 拒绝: ${reason}`);
   });
 }
 
@@ -440,6 +466,7 @@
   getSendOptions,
   loadConfig,
   main,
+  createOnMetricHandler,
   normalizeLogLevel,
   parseArgs,
   printHelp,
diff --git a/build/ncc/index.js b/build/ncc/index.js
index 83c5471..ab4b510 100644
--- a/build/ncc/index.js
+++ b/build/ncc/index.js
@@ -67332,7 +67332,7 @@
     const normalized = this.normalizeEventPayload(errorLike);
 
     if (normalized instanceof Error) {
-      return normalized.message || normalized.name || 'unknown-error';
+      return normalized.message || normalized.name || '未知错误';
     }
 
     if (Array.isArray(normalized)) {
@@ -67340,7 +67340,7 @@
         .map((item) => this.formatErrorMessage(item))
         .filter(Boolean);
 
-      return parts.length > 0 ? parts.join(' | ') : 'unknown-error';
+      return parts.length > 0 ? parts.join(' | ') : '未知错误';
     }
 
     if (normalized && typeof normalized === 'object') {
@@ -67356,7 +67356,7 @@
     }
 
     if (normalized === undefined || normalized === null || normalized === '') {
-      return 'unknown-error';
+      return '未知错误';
     }
 
     return String(normalized);
@@ -67408,7 +67408,7 @@
       return this.aliyunSdk;
     }
 
-    // eslint-disable-next-line global-require
+    // 延迟加载 SDK,避免未启用阿里云时引入额外依赖。
     this.aliyunSdk = __nccwpck_require__(9871);
     return this.aliyunSdk;
   }
@@ -67488,7 +67488,7 @@
     try {
       responseBody = JSON.parse(rawText);
     } catch (_error) {
-      throw new Error('三元组接口返回不是有效 JSON');
+      throw new Error('三元组接口返回的不是有效 JSON');
     }
 
     return this.extractTuple(responseBody, deviceId);
@@ -67510,7 +67510,7 @@
 
     if (context.lastRegisterAttempt > 0 && (now - context.lastRegisterAttempt) < retryMs && context.lastRegisterError) {
       this.logger.warn(`[ALIYUN] 三元组请求冷却中 deviceId=${device.deviceId} retryMs=${retryMs} lastError=${context.lastRegisterError}`);
-      throw new Error(`阿里云三元组重试冷却中 ${context.lastRegisterError}`);
+      throw new Error(`阿里云三元组重试冷却中: ${context.lastRegisterError}`);
     }
 
     context.lastRegisterAttempt = now;
@@ -67774,6 +67774,7 @@
   error: 40,
 };
 
+// 统一生成本地日志时间,兼顾控制台和文件日志格式。
 function formatLocalTimestamp(date = new Date()) {
   const year = date.getFullYear();
   const month = String(date.getMonth() + 1).padStart(2, '0');
@@ -67860,7 +67861,7 @@
       try {
         fs.appendFileSync(logFilePath, `${line}\n`, 'utf8');
       } catch (error) {
-        console.error(`[LOGGER] Failed to append log file: ${error.message}`);
+        console.error(`[LOGGER] 写入日志文件失败: ${error.message}`);
       }
     }
   }
@@ -67909,23 +67910,23 @@
 }
 
 function printHelp() {
-  console.log(`JHM TCP Socket Gateway
+  console.log(`JHM TCP Socket 网关服务
 
-Usage:
+用法:
   node app.js
   node app.js --config ./config.json
   jhm-service.exe --config .\\runtime\\config.json
   ./jhm-service --config ./runtime/config.json
 
-Options:
-  --config <path>    set config file path
-  --help, -h         show help
+参数:
+  --config <path>    指定配置文件路径
+  --help, -h         显示帮助
 `);
 }
 
 function loadConfig(configPath) {
   if (!fs.existsSync(configPath)) {
-    throw new Error(`config file not found: ${configPath}`);
+    throw new Error(`未找到配置文件: ${configPath}`);
   }
 
   const content = fs.readFileSync(configPath, 'utf8');
@@ -67967,66 +67968,67 @@
 
   return {
     publishTime: bloodPressure ? bloodPressure.publishTime !== false : true,
+    flushImmediately: bloodPressure ? bloodPressure.flushImmediately !== false : true,
   };
 }
 
 function validateConfig(config) {
   if (!config.tcp || !Array.isArray(config.devices)) {
-    throw new Error('config.json must include tcp and devices');
+    throw new Error('config.json 必须包含 tcp 和 devices');
   }
 
   if (!config.tcp.host || !config.tcp.port) {
-    throw new Error('config.json must include tcp.host and tcp.port');
+    throw new Error('config.json 必须包含 tcp.host 和 tcp.port');
   }
 
   const channels = getSendChannels(config);
 
   if (channels.length === 0) {
-    throw new Error('config.json send.channels must enable at least one channel');
+    throw new Error('config.json 的 send.channels 至少要启用一个通道');
   }
 
   if (channels.includes('mqtt')) {
     if (!config.mqtt) {
-      throw new Error('config.json enabled mqtt but missing mqtt config');
+      throw new Error('config.json 已启用 mqtt,但缺少 mqtt 配置');
     }
 
     const hasBrokerUrl = Boolean(config.mqtt.brokerUrl);
     const hasHostMode = Boolean(config.mqtt.protocol && config.mqtt.host && config.mqtt.port);
 
     if (!hasBrokerUrl && !hasHostMode) {
-      throw new Error('config.json mqtt requires brokerUrl or protocol/host/port');
+      throw new Error('config.json 的 mqtt 必须配置 brokerUrl 或 protocol/host/port');
     }
 
     if (!config.mqtt.topicTemplate && !config.mqtt.defaultTopicPrefix) {
-      throw new Error('config.json mqtt requires topicTemplate or defaultTopicPrefix');
+      throw new Error('config.json 的 mqtt 必须配置 topicTemplate 或 defaultTopicPrefix');
     }
   }
 
   if (channels.includes('aliyun')) {
     if (!config.aliyun) {
-      throw new Error('config.json enabled aliyun but missing aliyun config');
+      throw new Error('config.json 已启用 aliyun,但缺少 aliyun 配置');
     }
 
     if (!config.aliyun.tupleApiBaseUrl && !config.aliyun.tupleApiUrl) {
-      throw new Error('config.json aliyun requires tupleApiBaseUrl or tupleApiUrl');
+      throw new Error('config.json 的 aliyun 必须配置 tupleApiBaseUrl 或 tupleApiUrl');
     }
   }
 
   if (!config.protocol || !config.protocol.alModelPath) {
-    throw new Error('config.json protocol.alModelPath is required');
+    throw new Error('config.json 必须配置 protocol.alModelPath');
   }
 
   const sendOptions = getSendOptions(config);
 
   if (sendOptions.flushIntervalMs <= 0) {
-    throw new Error('config.json send.flushIntervalMs must be > 0');
+    throw new Error('config.json 的 send.flushIntervalMs 必须大于 0');
   }
 
   if (config.logging && config.logging.level) {
     const supportedLevels = ['debug', 'info', 'warn', 'error'];
 
     if (!supportedLevels.includes(String(config.logging.level).toLowerCase())) {
-      throw new Error(`config.json logging.level only supports ${supportedLevels.join(', ')}`);
+      throw new Error(`config.json 的 logging.level 仅支持 ${supportedLevels.join('、')}`);
     }
   }
 }
@@ -68037,6 +68039,29 @@
   }
 
   return path.join(path.dirname(configFilePath), targetPath);
+}
+
+function createOnMetricHandler({ logger, aggregator, sendOptions, bloodPressureOptions }) {
+  return function onMetric(device, metric, result) {
+    logger.info(`[APP] 指标已缓存 deviceId=${device.deviceId} mode=${sendOptions.mode} metric=${JSON.stringify(metric)}`);
+    return aggregator.ingest(device, metric)
+      .then(() => {
+        if (
+          sendOptions.mode === 'batch'
+          && bloodPressureOptions.flushImmediately
+          && result
+          && result.protocol === 'blood-pressure'
+        ) {
+          logger.info(`[APP] 血压报文触发整包立即发送 deviceId=${device.deviceId}`);
+          return aggregator.flush({ reason: 'blood-pressure', deviceId: device.deviceId });
+        }
+
+        return null;
+      })
+      .catch((error) => {
+        logger.error(`[APP] 指标处理失败 deviceId=${device.deviceId}: ${error.message}`);
+      });
+  };
 }
 
 async function main() {
@@ -68051,7 +68076,7 @@
     enabled: false,
     console: true,
   });
-  bootstrapLogger.info(`[APP] Startup arguments parsed config=${options.configPath}`);
+  bootstrapLogger.info(`[APP] 启动参数解析完成 config=${options.configPath}`);
 
   const config = loadConfig(options.configPath);
   const logDir = resolveConfigPath(options.configPath, (config.logging && config.logging.dir) || './logs');
@@ -68065,21 +68090,22 @@
   const alModelPath = resolveConfigPath(options.configPath, config.protocol.alModelPath);
 
   if (config.logging && config.logging.enabled === false) {
-    logger.info('[APP] File logging is disabled; console output only');
+    logger.info('[APP] 文件日志已禁用,仅输出到控制台');
   } else {
-    logger.info(`[APP] Local logging enabled dir=${logDir} file=${logger.getLogFilePath()} level=${normalizeLogLevel(config.logging && config.logging.level)}`);
+    logger.info(`[APP] 本地日志已启用 dir=${logDir} file=${logger.getLogFilePath()} level=${normalizeLogLevel(config.logging && config.logging.level)}`);
   }
 
-  logger.info(`[APP] Config loaded tcp=${config.tcp.host}:${config.tcp.port} devices=${config.devices.length} channels=${sendChannels.join(',')} sendMode=${sendOptions.mode} flushIntervalMs=${sendOptions.flushIntervalMs} alModel=${alModelPath}`);
+  logger.info(`[APP] 配置加载完成 tcp=${config.tcp.host}:${config.tcp.port} devices=${config.devices.length} channels=${sendChannels.join(',')} sendMode=${sendOptions.mode} flushIntervalMs=${sendOptions.flushIntervalMs} alModel=${alModelPath}`);
 
   const mqttService = sendChannels.includes('mqtt') ? new MqttService(config.mqtt, logger) : null;
   const aliyunService = sendChannels.includes('aliyun') ? new AliyunService(config.aliyun, logger) : null;
 
+  // 聚合器负责把多次单点指标合并成一次完整物模型上报。
   const aggregator = new MetricAggregator({
     logger,
     ...sendOptions,
     onFlush: async (device, payload, meta) => {
-      logger.info(`[APP] Batch dispatch deviceId=${device.deviceId} channels=${sendChannels.join(',')} reason=${meta.reason} payload=${JSON.stringify(payload)}`);
+      logger.info(`[APP] 开始批量分发 deviceId=${device.deviceId} channels=${sendChannels.join(',')} reason=${meta.reason} payload=${JSON.stringify(payload)}`);
 
       let ok = true;
 
@@ -68088,7 +68114,7 @@
           mqttService.publish(device, payload);
         } catch (error) {
           ok = false;
-          logger.error(`[APP] MQTT batch dispatch failed deviceId=${device.deviceId}: ${error.message}`);
+          logger.error(`[APP] MQTT 批量分发失败 deviceId=${device.deviceId}: ${error.message}`);
         }
       }
 
@@ -68098,14 +68124,14 @@
 
           if (result && result.skipped) {
             ok = false;
-            logger.warn(`[APP] Aliyun batch dispatch skipped deviceId=${device.deviceId} reason=${result.reason}`);
+            logger.warn(`[APP] 阿里云批量分发已跳过 deviceId=${device.deviceId} reason=${result.reason}`);
           } else if (result && result.ok === false) {
             ok = false;
-            logger.error(`[APP] Aliyun batch dispatch failed deviceId=${device.deviceId}: ${result.reason}`);
+            logger.error(`[APP] 阿里云批量分发失败 deviceId=${device.deviceId}: ${result.reason}`);
           }
         } catch (error) {
           ok = false;
-          logger.error(`[APP] Aliyun batch dispatch exception deviceId=${device.deviceId}: ${error.message}`);
+          logger.error(`[APP] 阿里云批量分发异常 deviceId=${device.deviceId}: ${error.message}`);
         }
       }
 
@@ -68119,27 +68145,27 @@
     alModelPath,
     publishBloodPressureTime: bloodPressureOptions.publishTime,
     logger,
-    onMetric(device, metric) {
-      logger.info(`[APP] Metric cached deviceId=${device.deviceId} mode=${sendOptions.mode} metric=${JSON.stringify(metric)}`);
-      aggregator.ingest(device, metric).catch((error) => {
-        logger.error(`[APP] Metric cache failed deviceId=${device.deviceId}: ${error.message}`);
-      });
-    },
+    onMetric: createOnMetricHandler({
+      logger,
+      aggregator,
+      sendOptions,
+      bloodPressureOptions,
+    }),
   });
 
   if (mqttService) {
-    logger.info('[APP] Starting MQTT channel');
+    logger.info('[APP] 正在启动 MQTT 通道');
     mqttService.start();
   }
 
   if (aliyunService) {
-    logger.info('[APP] Starting Aliyun channel');
+    logger.info('[APP] 正在启动阿里云通道');
     aliyunService.start();
   }
 
   aggregator.start();
   await tcpService.start();
-  logger.info('[APP] All services started');
+  logger.info('[APP] 所有服务已启动');
 
   let shuttingDown = false;
 
@@ -68149,7 +68175,7 @@
     }
 
     shuttingDown = true;
-    logger.warn(`[APP] Received ${signal}, shutting down`);
+    logger.warn(`[APP] 收到 ${signal},开始关闭服务`);
 
     await tcpService.stop();
     await aggregator.stop();
@@ -68162,7 +68188,7 @@
       await aliyunService.stop();
     }
 
-    logger.info('[APP] Service shutdown completed');
+    logger.info('[APP] 服务已完成关闭');
     await logger.close();
     process.exit(0);
   }
@@ -68176,11 +68202,11 @@
   });
 
   process.on('uncaughtException', (error) => {
-    logger.error(`[APP] Uncaught exception: ${error.stack || error.message}`);
+    logger.error(`[APP] 未捕获异常: ${error.stack || error.message}`);
   });
 
   process.on('unhandledRejection', (reason) => {
-    logger.error(`[APP] Unhandled promise rejection: ${reason}`);
+    logger.error(`[APP] 未处理的 Promise 拒绝: ${reason}`);
   });
 }
 
@@ -68199,6 +68225,7 @@
   getSendOptions,
   loadConfig,
   main,
+  createOnMetricHandler,
   normalizeLogLevel,
   parseArgs,
   printHelp,
@@ -68605,7 +68632,7 @@
     this.timer = null;
     this.started = false;
     this.flushing = false;
-    this.flushQueued = false;
+    this.queuedFlushOptions = null;
   }
 
   start() {
@@ -68640,8 +68667,15 @@
 
     const entry = this.getOrCreateEntry(device);
     entry.device = device;
+    const now = Date.now();
+
+    // 首次进入脏状态时记录时间,便于控制“缓存满一轮再发送”。
+    if (!entry.dirty) {
+      entry.dirtySinceAt = now;
+    }
+
     entry.dirty = true;
-    entry.lastUpdateAt = Date.now();
+    entry.lastUpdateAt = now;
 
     if (this.includeDeviceIdField) {
       entry.payload[this.deviceIdField] = device.deviceId;
@@ -68662,6 +68696,7 @@
         device,
         payload: {},
         dirty: false,
+        dirtySinceAt: 0,
         firstSeenAt: Date.now(),
         lastUpdateAt: 0,
         lastFlushAt: 0,
@@ -68691,7 +68726,7 @@
 
     this.timer = setTimeout(() => {
       this.flush({ reason: 'timer' }).catch((error) => {
-        this.logger.error(`[APP] Aggregator flush failed: ${error.message}`);
+        this.logger.error(`[APP] 聚合器刷新失败: ${error.message}`);
       });
     }, this.computeDelayMs());
 
@@ -68700,12 +68735,36 @@
     }
   }
 
+  mergeQueuedFlushOptions(options = {}) {
+    const nextOptions = {
+      reason: options.reason || 'manual',
+      deviceId: options.deviceId || '',
+    };
+
+    if (!this.queuedFlushOptions) {
+      this.queuedFlushOptions = nextOptions;
+      return;
+    }
+
+    const currentOptions = this.queuedFlushOptions;
+    const currentIsTimer = currentOptions.reason === 'timer' || currentOptions.reason === 'queued';
+    const nextIsTimer = nextOptions.reason === 'timer' || nextOptions.reason === 'queued';
+
+    if (currentIsTimer && !nextIsTimer) {
+      currentOptions.reason = nextOptions.reason;
+    }
+
+    if (!currentOptions.deviceId || !nextOptions.deviceId || currentOptions.deviceId !== nextOptions.deviceId) {
+      currentOptions.deviceId = '';
+    }
+  }
+
   async flush(options = {}) {
     const reason = options.reason || 'manual';
     const deviceId = options.deviceId || '';
 
     if (this.flushing) {
-      this.flushQueued = true;
+      this.mergeQueuedFlushOptions({ reason, deviceId });
       return false;
     }
 
@@ -68726,10 +68785,20 @@
           return false;
         }
 
+        // 定时触发时要求数据至少缓存满一个周期,避免刚收到就被单独发出。
+        if ((reason === 'timer' || reason === 'queued') && entry.dirtySinceAt > 0) {
+          const dirtyAgeMs = Date.now() - entry.dirtySinceAt;
+
+          if (dirtyAgeMs < this.flushIntervalMs) {
+            return false;
+          }
+        }
+
         return true;
       });
 
       for (const entry of entries) {
+        const flushUpdateAt = entry.lastUpdateAt;
         const payload = {
           ...entry.payload,
         };
@@ -68750,10 +68819,14 @@
             continue;
           }
 
-          entry.dirty = false;
+          if (entry.lastUpdateAt === flushUpdateAt) {
+            entry.dirty = false;
+            entry.dirtySinceAt = 0;
+          }
+
           entry.lastFlushAt = Date.now();
         } catch (error) {
-          this.logger.error(`[APP] Aggregator device flush failed deviceId=${entry.device.deviceId}: ${error.message}`);
+          this.logger.error(`[APP] 聚合器设备刷新失败 deviceId=${entry.device.deviceId}: ${error.message}`);
         }
       }
 
@@ -68765,9 +68838,10 @@
         this.scheduleNextFlush();
       }
 
-      if (this.flushQueued) {
-        this.flushQueued = false;
-        await this.flush({ reason: 'queued' });
+      if (this.queuedFlushOptions) {
+        const queuedOptions = this.queuedFlushOptions;
+        this.queuedFlushOptions = null;
+        await this.flush(queuedOptions);
       }
     }
   }
@@ -71058,6 +71132,7 @@
 const fs = __nccwpck_require__(9896);
 const path = __nccwpck_require__(6928);
 
+// 按候选路径顺序寻找默认配置文件,兼容源码运行和打包运行两种场景。
 function fileExists(filePath) {
   try {
     return fs.statSync(filePath).isFile();
@@ -71154,7 +71229,7 @@
 
       map.set(normalizeIp(device.ip), {
         ...device,
-        name: device.name || device['备注'] || device.deviceId,
+        name: device.name || device.备注 || device['澶囨敞'] || device.deviceId,
       });
     }
 
@@ -71173,7 +71248,7 @@
     this.server.maxConnections = this.tcpConfig.maxConnections || 100;
 
     this.server.on('error', (error) => {
-      this.logger.error(`[TCP] 服务错误: ${error.message}`);
+      this.logger.error(`[TCP] 服务异常: ${error.message}`);
     });
 
     await new Promise((resolve, reject) => {
@@ -71186,7 +71261,7 @@
       });
     });
 
-    this.logger.info(`[TCP] 已监听 ${this.tcpConfig.host}:${this.tcpConfig.port} devices=${this.deviceMap.size} maxConnections=${this.server.maxConnections}`);
+    this.logger.info(`[TCP] 已开始监听 ${this.tcpConfig.host}:${this.tcpConfig.port} devices=${this.deviceMap.size} maxConnections=${this.server.maxConnections}`);
   }
 
   handleConnection(socket) {
@@ -71250,7 +71325,7 @@
     const results = session.decoder.push(chunk);
 
     if (results.length === 0) {
-      this.logger.warn(`[TCP] 当前数据片段未形成完整报文 deviceId=${session.device.deviceId} bytes=${chunk.length}`);
+      this.logger.warn(`[TCP] 当前数据片段尚未组成完整报文 deviceId=${session.device.deviceId} bytes=${chunk.length}`);
     }
 
     for (const result of results) {
diff --git a/build/ncc/logs/jhm-service-20260415.log b/build/ncc/logs/jhm-service-20260415.log
deleted file mode 100644
index 55bc82b..0000000
--- a/build/ncc/logs/jhm-service-20260415.log
+++ /dev/null
@@ -1,1553 +0,0 @@
-[2026-04-15 18:09:23.498] [INFO] [APP] 本地日志已启用 dir=D:\gitData\JHM\logs file=D:\gitData\JHM\logs\jhm-service-20260415.log level=info
-[2026-04-15 18:09:23.500] [INFO] [APP] 配置加载完成 tcp=0.0.0.0:9000 devices=3 channels=aliyun alModel=D:\gitData\JHM\alModel.json
-[2026-04-15 18:09:23.502] [INFO] [APP] 正在启动阿里云通道
-[2026-04-15 18:09:23.503] [INFO] [ALIYUN] 阿里云服务已启用 tupleApi=https://things.icoldchain.cn/device/info/getAliyunDeviceSecret autoRegister=1 retryMs=60000
-[2026-04-15 18:09:23.540] [INFO] [TCP] 已监听 0.0.0.0:9000 devices=3 maxConnections=100
-[2026-04-15 18:09:23.542] [INFO] [APP] 所有服务启动完成
-[2026-04-15 18:09:36.616] [INFO] [TCP] 设备已连接 deviceId=JH-10235221005A ip=127.0.0.1 port=59070 activeSessions=1
-[2026-04-15 18:09:36.621] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:36.623] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
-[2026-04-15 18:09:36.624] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"F":37.5}
-[2026-04-15 18:09:36.625] [INFO] [ALIYUN] 创建设备上下文 deviceId=JH-10235221005A
-[2026-04-15 18:09:36.626] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:09:36"}
-[2026-04-15 18:09:36.627] [INFO] [ALIYUN] 开始请求三元组 deviceId=JH-10235221005A url=https://things.icoldchain.cn/device/info/getAliyunDeviceSecret
-[2026-04-15 18:09:36.992] [INFO] [ALIYUN] 三元组获取成功 deviceId=JH-10235221005A deviceName=JH-10235221005A
-[2026-04-15 18:09:36.994] [INFO] [ALIYUN] 开始创建设备连接 deviceId=JH-10235221005A deviceName=JH-10235221005A
-[2026-04-15 18:09:37.332] [INFO] [ALIYUN] 等待现有设备连接恢复 deviceId=JH-10235221005A
-[2026-04-15 18:09:37.451] [INFO] [ALIYUN] 设备连接成功 deviceId=JH-10235221005A
-[2026-04-15 18:09:37.453] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=F,suedtime
-[2026-04-15 18:09:37.630] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:37.632] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
-[2026-04-15 18:09:37.633] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"A":1.234}
-[2026-04-15 18:09:37.634] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:09:37"}
-[2026-04-15 18:09:37.635] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:37.636] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=A,suedtime
-[2026-04-15 18:09:37.762] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:09:36"}
-[2026-04-15 18:09:37.763] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:09:37"}
-[2026-04-15 18:09:38.633] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:38.635] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
-[2026-04-15 18:09:38.635] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"sysj":90}
-[2026-04-15 18:09:38.636] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:09:38"}
-[2026-04-15 18:09:38.637] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:38.637] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=sysj,suedtime
-[2026-04-15 18:09:38.731] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:09:38"}
-[2026-04-15 18:09:39.648] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:39.649] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
-[2026-04-15 18:09:39.650] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"C":0.5}
-[2026-04-15 18:09:39.653] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:09:39"}
-[2026-04-15 18:09:39.654] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:39.655] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=C,suedtime
-[2026-04-15 18:09:39.744] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:09:39"}
-[2026-04-15 18:09:40.647] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:40.649] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
-[2026-04-15 18:09:40.649] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"B":0.25}
-[2026-04-15 18:09:40.651] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:09:40"}
-[2026-04-15 18:09:40.652] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:40.653] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=B,suedtime
-[2026-04-15 18:09:40.762] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:09:40"}
-[2026-04-15 18:09:41.657] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:41.658] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
-[2026-04-15 18:09:41.660] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"L":600}
-[2026-04-15 18:09:41.661] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:09:41"}
-[2026-04-15 18:09:41.662] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:41.662] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=L,suedtime
-[2026-04-15 18:09:42.054] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:09:41"}
-[2026-04-15 18:09:42.666] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:42.668] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
-[2026-04-15 18:09:42.669] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"D":320}
-[2026-04-15 18:09:42.670] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:09:42"}
-[2026-04-15 18:09:42.671] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:42.672] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=D,suedtime
-[2026-04-15 18:09:42.781] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:09:42"}
-[2026-04-15 18:09:43.683] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:43.685] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
-[2026-04-15 18:09:43.685] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"H":-100}
-[2026-04-15 18:09:43.686] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:09:43"}
-[2026-04-15 18:09:43.686] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:43.687] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=H,suedtime
-[2026-04-15 18:09:43.764] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:09:43"}
-[2026-04-15 18:09:44.698] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:44.700] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
-[2026-04-15 18:09:44.700] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"o":120}
-[2026-04-15 18:09:44.703] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:09:44"}
-[2026-04-15 18:09:44.704] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:44.705] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=o,suedtime
-[2026-04-15 18:09:44.808] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:09:44"}
-[2026-04-15 18:09:45.712] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:45.713] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
-[2026-04-15 18:09:45.714] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"J":-80}
-[2026-04-15 18:09:45.715] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:09:45"}
-[2026-04-15 18:09:45.715] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:45.716] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=J,suedtime
-[2026-04-15 18:09:45.790] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:09:45"}
-[2026-04-15 18:09:46.728] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:46.729] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
-[2026-04-15 18:09:46.730] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"U":2048}
-[2026-04-15 18:09:46.730] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:09:46"}
-[2026-04-15 18:09:46.731] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:46.732] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=U,suedtime
-[2026-04-15 18:09:46.810] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:09:46"}
-[2026-04-15 18:09:47.743] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:47.744] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
-[2026-04-15 18:09:47.746] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"G":12.3}
-[2026-04-15 18:09:47.746] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:09:47"}
-[2026-04-15 18:09:47.748] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:47.749] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=G,suedtime
-[2026-04-15 18:09:47.830] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:09:47"}
-[2026-04-15 18:09:48.755] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:48.757] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
-[2026-04-15 18:09:48.757] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"Na":140}
-[2026-04-15 18:09:48.758] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:09:48"}
-[2026-04-15 18:09:48.759] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:48.759] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=Na,suedtime
-[2026-04-15 18:09:48.852] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:09:48"}
-[2026-04-15 18:09:49.771] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:49.772] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
-[2026-04-15 18:09:49.773] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"HCO3":25}
-[2026-04-15 18:09:49.773] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:09:49"}
-[2026-04-15 18:09:49.775] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:49.776] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=HCO3,suedtime
-[2026-04-15 18:09:49.917] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:09:49"}
-[2026-04-15 18:09:50.785] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:50.786] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
-[2026-04-15 18:09:50.787] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"F":37.5}
-[2026-04-15 18:09:50.787] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:09:50"}
-[2026-04-15 18:09:50.789] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:50.789] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=F,suedtime
-[2026-04-15 18:09:50.877] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:09:50"}
-[2026-04-15 18:09:51.798] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:51.800] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
-[2026-04-15 18:09:51.800] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"A":1.234}
-[2026-04-15 18:09:51.801] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:09:51"}
-[2026-04-15 18:09:51.802] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:51.802] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=A,suedtime
-[2026-04-15 18:09:51.894] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:09:51"}
-[2026-04-15 18:09:52.813] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:52.814] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
-[2026-04-15 18:09:52.815] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"sysj":90}
-[2026-04-15 18:09:52.816] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:09:52"}
-[2026-04-15 18:09:52.816] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:52.817] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=sysj,suedtime
-[2026-04-15 18:09:52.910] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:09:52"}
-[2026-04-15 18:09:53.828] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:53.829] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
-[2026-04-15 18:09:53.829] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"C":0.5}
-[2026-04-15 18:09:53.830] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:09:53"}
-[2026-04-15 18:09:53.831] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:53.831] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=C,suedtime
-[2026-04-15 18:09:53.900] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:09:53"}
-[2026-04-15 18:09:54.829] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:54.830] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
-[2026-04-15 18:09:54.832] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"B":0.25}
-[2026-04-15 18:09:54.833] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:09:54"}
-[2026-04-15 18:09:54.833] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:54.834] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=B,suedtime
-[2026-04-15 18:09:54.927] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:09:54"}
-[2026-04-15 18:09:55.844] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:55.845] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
-[2026-04-15 18:09:55.846] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"L":600}
-[2026-04-15 18:09:55.847] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:09:55"}
-[2026-04-15 18:09:55.849] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:55.850] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=L,suedtime
-[2026-04-15 18:09:55.944] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:09:55"}
-[2026-04-15 18:09:56.859] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:56.860] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
-[2026-04-15 18:09:56.860] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"D":320}
-[2026-04-15 18:09:56.861] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:09:56"}
-[2026-04-15 18:09:56.862] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:56.863] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=D,suedtime
-[2026-04-15 18:09:56.952] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:09:56"}
-[2026-04-15 18:09:57.871] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:57.872] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
-[2026-04-15 18:09:57.873] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"H":-100}
-[2026-04-15 18:09:57.874] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:09:57"}
-[2026-04-15 18:09:57.875] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:57.877] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=H,suedtime
-[2026-04-15 18:09:57.950] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:09:57"}
-[2026-04-15 18:09:58.872] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:58.873] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
-[2026-04-15 18:09:58.874] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"o":120}
-[2026-04-15 18:09:58.875] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:09:58"}
-[2026-04-15 18:09:58.876] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:58.877] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=o,suedtime
-[2026-04-15 18:09:58.995] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:09:58"}
-[2026-04-15 18:09:59.884] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:09:59.885] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
-[2026-04-15 18:09:59.886] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"J":-80}
-[2026-04-15 18:09:59.887] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:09:59"}
-[2026-04-15 18:09:59.887] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:09:59.888] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=J,suedtime
-[2026-04-15 18:09:59.991] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:09:59"}
-[2026-04-15 18:10:00.898] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:00.899] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
-[2026-04-15 18:10:00.900] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"U":2048}
-[2026-04-15 18:10:00.900] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:10:00"}
-[2026-04-15 18:10:00.901] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:00.902] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=U,suedtime
-[2026-04-15 18:10:00.987] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:10:00"}
-[2026-04-15 18:10:01.911] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:01.912] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
-[2026-04-15 18:10:01.913] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"G":12.3}
-[2026-04-15 18:10:01.914] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:10:01"}
-[2026-04-15 18:10:01.914] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:01.915] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=G,suedtime
-[2026-04-15 18:10:01.991] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:10:01"}
-[2026-04-15 18:10:02.919] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:02.920] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
-[2026-04-15 18:10:02.921] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"Na":140}
-[2026-04-15 18:10:02.922] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:10:02"}
-[2026-04-15 18:10:02.922] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:02.923] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=Na,suedtime
-[2026-04-15 18:10:03.006] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:10:02"}
-[2026-04-15 18:10:03.930] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:03.931] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
-[2026-04-15 18:10:03.932] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"HCO3":25}
-[2026-04-15 18:10:03.933] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:10:03"}
-[2026-04-15 18:10:03.934] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:03.935] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=HCO3,suedtime
-[2026-04-15 18:10:04.025] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:10:03"}
-[2026-04-15 18:10:04.942] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:04.944] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
-[2026-04-15 18:10:04.945] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"F":37.5}
-[2026-04-15 18:10:04.946] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:10:04"}
-[2026-04-15 18:10:04.947] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:04.947] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=F,suedtime
-[2026-04-15 18:10:05.037] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:10:04"}
-[2026-04-15 18:10:05.955] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:05.956] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
-[2026-04-15 18:10:05.957] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"A":1.234}
-[2026-04-15 18:10:05.958] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:10:05"}
-[2026-04-15 18:10:05.958] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:05.959] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=A,suedtime
-[2026-04-15 18:10:06.049] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:10:05"}
-[2026-04-15 18:10:06.959] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:06.960] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
-[2026-04-15 18:10:06.961] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"sysj":90}
-[2026-04-15 18:10:06.963] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:10:06"}
-[2026-04-15 18:10:06.963] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:06.965] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=sysj,suedtime
-[2026-04-15 18:10:07.084] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:10:06"}
-[2026-04-15 18:10:07.969] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:07.970] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
-[2026-04-15 18:10:07.971] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"C":0.5}
-[2026-04-15 18:10:07.972] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:10:07"}
-[2026-04-15 18:10:07.973] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:07.974] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=C,suedtime
-[2026-04-15 18:10:08.046] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:10:07"}
-[2026-04-15 18:10:08.980] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:08.981] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
-[2026-04-15 18:10:08.982] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"B":0.25}
-[2026-04-15 18:10:08.982] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:10:08"}
-[2026-04-15 18:10:08.983] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:08.984] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=B,suedtime
-[2026-04-15 18:10:09.062] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:10:08"}
-[2026-04-15 18:10:09.991] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:09.992] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
-[2026-04-15 18:10:09.993] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"L":600}
-[2026-04-15 18:10:09.993] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:10:09"}
-[2026-04-15 18:10:09.994] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:09.995] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=L,suedtime
-[2026-04-15 18:10:10.086] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:10:09"}
-[2026-04-15 18:10:11.007] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:11.008] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
-[2026-04-15 18:10:11.009] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"D":320}
-[2026-04-15 18:10:11.009] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:10:11"}
-[2026-04-15 18:10:11.010] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:11.011] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=D,suedtime
-[2026-04-15 18:10:11.089] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:10:11"}
-[2026-04-15 18:10:12.021] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:12.022] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
-[2026-04-15 18:10:12.024] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"H":-100}
-[2026-04-15 18:10:12.026] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:10:12"}
-[2026-04-15 18:10:12.027] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:12.028] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=H,suedtime
-[2026-04-15 18:10:12.108] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:10:12"}
-[2026-04-15 18:10:13.034] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:13.036] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
-[2026-04-15 18:10:13.037] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"o":120}
-[2026-04-15 18:10:13.038] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:10:13"}
-[2026-04-15 18:10:13.039] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:13.040] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=o,suedtime
-[2026-04-15 18:10:13.199] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:10:13"}
-[2026-04-15 18:10:14.049] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:14.051] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
-[2026-04-15 18:10:14.052] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"J":-80}
-[2026-04-15 18:10:14.052] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:10:14"}
-[2026-04-15 18:10:14.053] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:14.054] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=J,suedtime
-[2026-04-15 18:10:14.129] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:10:14"}
-[2026-04-15 18:10:15.063] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:15.065] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
-[2026-04-15 18:10:15.066] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"U":2048}
-[2026-04-15 18:10:15.067] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:10:15"}
-[2026-04-15 18:10:15.068] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:15.068] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=U,suedtime
-[2026-04-15 18:10:15.164] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:10:15"}
-[2026-04-15 18:10:16.064] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:16.065] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
-[2026-04-15 18:10:16.066] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"G":12.3}
-[2026-04-15 18:10:16.067] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:10:16"}
-[2026-04-15 18:10:16.068] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:16.069] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=G,suedtime
-[2026-04-15 18:10:16.172] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:10:16"}
-[2026-04-15 18:10:17.077] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:17.078] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
-[2026-04-15 18:10:17.079] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"Na":140}
-[2026-04-15 18:10:17.080] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:10:17"}
-[2026-04-15 18:10:17.081] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:17.082] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=Na,suedtime
-[2026-04-15 18:10:17.548] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:10:17"}
-[2026-04-15 18:10:18.088] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:18.089] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
-[2026-04-15 18:10:18.090] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"HCO3":25}
-[2026-04-15 18:10:18.091] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:10:18"}
-[2026-04-15 18:10:18.092] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:18.092] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=HCO3,suedtime
-[2026-04-15 18:10:18.490] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:10:18"}
-[2026-04-15 18:10:19.102] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:19.103] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
-[2026-04-15 18:10:19.104] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"F":37.5}
-[2026-04-15 18:10:19.105] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:10:19"}
-[2026-04-15 18:10:19.106] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:19.107] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=F,suedtime
-[2026-04-15 18:10:20.103] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:20.104] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
-[2026-04-15 18:10:20.105] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"A":1.234}
-[2026-04-15 18:10:20.105] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:10:20"}
-[2026-04-15 18:10:20.106] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:20.106] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=A,suedtime
-[2026-04-15 18:10:20.415] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:10:19"}
-[2026-04-15 18:10:20.417] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:10:20"}
-[2026-04-15 18:10:21.106] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:21.107] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
-[2026-04-15 18:10:21.108] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"sysj":90}
-[2026-04-15 18:10:21.109] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:10:21"}
-[2026-04-15 18:10:21.110] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:21.111] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=sysj,suedtime
-[2026-04-15 18:10:21.800] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:10:21"}
-[2026-04-15 18:10:22.107] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:22.108] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
-[2026-04-15 18:10:22.109] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"C":0.5}
-[2026-04-15 18:10:22.110] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:10:22"}
-[2026-04-15 18:10:22.110] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:22.111] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=C,suedtime
-[2026-04-15 18:10:22.384] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:10:22"}
-[2026-04-15 18:10:23.110] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:23.111] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
-[2026-04-15 18:10:23.112] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"B":0.25}
-[2026-04-15 18:10:23.112] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:10:23"}
-[2026-04-15 18:10:23.113] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:23.113] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=B,suedtime
-[2026-04-15 18:10:23.951] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:10:23"}
-[2026-04-15 18:10:24.123] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:24.124] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
-[2026-04-15 18:10:24.125] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"L":600}
-[2026-04-15 18:10:24.125] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:10:24"}
-[2026-04-15 18:10:24.126] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:24.127] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=L,suedtime
-[2026-04-15 18:10:24.539] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:10:24"}
-[2026-04-15 18:10:25.125] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:25.126] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
-[2026-04-15 18:10:25.127] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"D":320}
-[2026-04-15 18:10:25.128] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:10:25"}
-[2026-04-15 18:10:25.128] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:25.129] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=D,suedtime
-[2026-04-15 18:10:25.354] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:10:25"}
-[2026-04-15 18:10:26.141] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:26.143] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
-[2026-04-15 18:10:26.143] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"H":-100}
-[2026-04-15 18:10:26.145] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:10:26"}
-[2026-04-15 18:10:26.146] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:26.146] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=H,suedtime
-[2026-04-15 18:10:26.335] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:10:26"}
-[2026-04-15 18:10:27.152] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:27.153] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
-[2026-04-15 18:10:27.154] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"o":120}
-[2026-04-15 18:10:27.155] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:10:27"}
-[2026-04-15 18:10:27.155] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:27.157] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=o,suedtime
-[2026-04-15 18:10:28.167] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:28.168] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
-[2026-04-15 18:10:28.168] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"J":-80}
-[2026-04-15 18:10:28.169] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:10:28"}
-[2026-04-15 18:10:28.170] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:28.170] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=J,suedtime
-[2026-04-15 18:10:28.601] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:10:27"}
-[2026-04-15 18:10:28.602] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:10:28"}
-[2026-04-15 18:10:29.182] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:29.183] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
-[2026-04-15 18:10:29.183] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"U":2048}
-[2026-04-15 18:10:29.184] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:10:29"}
-[2026-04-15 18:10:29.185] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:29.185] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=U,suedtime
-[2026-04-15 18:10:29.963] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:10:29"}
-[2026-04-15 18:10:30.197] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:30.198] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
-[2026-04-15 18:10:30.199] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"G":12.3}
-[2026-04-15 18:10:30.199] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:10:30"}
-[2026-04-15 18:10:30.200] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:30.201] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=G,suedtime
-[2026-04-15 18:10:30.283] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:10:30"}
-[2026-04-15 18:10:31.211] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:31.213] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
-[2026-04-15 18:10:31.213] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"Na":140}
-[2026-04-15 18:10:31.214] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:10:31"}
-[2026-04-15 18:10:31.215] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:31.216] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=Na,suedtime
-[2026-04-15 18:10:31.308] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:10:31"}
-[2026-04-15 18:10:32.222] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:32.223] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
-[2026-04-15 18:10:32.223] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"HCO3":25}
-[2026-04-15 18:10:32.224] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:10:32"}
-[2026-04-15 18:10:32.225] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:32.226] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=HCO3,suedtime
-[2026-04-15 18:10:32.330] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:10:32"}
-[2026-04-15 18:10:33.225] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:33.226] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
-[2026-04-15 18:10:33.227] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"F":37.5}
-[2026-04-15 18:10:33.227] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:10:33"}
-[2026-04-15 18:10:33.228] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:33.229] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=F,suedtime
-[2026-04-15 18:10:33.308] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:10:33"}
-[2026-04-15 18:10:34.229] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:34.230] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
-[2026-04-15 18:10:34.230] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"A":1.234}
-[2026-04-15 18:10:34.231] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:10:34"}
-[2026-04-15 18:10:34.232] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:34.232] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=A,suedtime
-[2026-04-15 18:10:34.316] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:10:34"}
-[2026-04-15 18:10:35.244] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:35.245] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
-[2026-04-15 18:10:35.245] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"sysj":90}
-[2026-04-15 18:10:35.246] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:10:35"}
-[2026-04-15 18:10:35.247] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:35.248] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=sysj,suedtime
-[2026-04-15 18:10:35.340] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:10:35"}
-[2026-04-15 18:10:36.257] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:36.258] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
-[2026-04-15 18:10:36.259] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"C":0.5}
-[2026-04-15 18:10:36.262] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:10:36"}
-[2026-04-15 18:10:36.263] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:36.265] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=C,suedtime
-[2026-04-15 18:10:36.350] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:10:36"}
-[2026-04-15 18:10:37.259] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:37.260] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
-[2026-04-15 18:10:37.261] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"B":0.25}
-[2026-04-15 18:10:37.261] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:10:37"}
-[2026-04-15 18:10:37.262] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:37.263] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=B,suedtime
-[2026-04-15 18:10:37.349] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:10:37"}
-[2026-04-15 18:10:38.259] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:38.260] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
-[2026-04-15 18:10:38.261] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"L":600}
-[2026-04-15 18:10:38.262] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:10:38"}
-[2026-04-15 18:10:38.263] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:38.264] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=L,suedtime
-[2026-04-15 18:10:38.343] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:10:38"}
-[2026-04-15 18:10:39.274] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:39.275] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
-[2026-04-15 18:10:39.276] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"D":320}
-[2026-04-15 18:10:39.277] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:10:39"}
-[2026-04-15 18:10:39.277] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:39.278] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=D,suedtime
-[2026-04-15 18:10:39.846] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:10:39"}
-[2026-04-15 18:10:40.288] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:40.289] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
-[2026-04-15 18:10:40.289] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"H":-100}
-[2026-04-15 18:10:40.290] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:10:40"}
-[2026-04-15 18:10:40.291] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:40.292] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=H,suedtime
-[2026-04-15 18:10:40.372] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:10:40"}
-[2026-04-15 18:10:41.290] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:41.291] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
-[2026-04-15 18:10:41.293] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"o":120}
-[2026-04-15 18:10:41.294] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:10:41"}
-[2026-04-15 18:10:41.295] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:41.296] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=o,suedtime
-[2026-04-15 18:10:41.384] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:10:41"}
-[2026-04-15 18:10:42.294] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:42.295] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
-[2026-04-15 18:10:42.296] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"J":-80}
-[2026-04-15 18:10:42.296] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:10:42"}
-[2026-04-15 18:10:42.297] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:42.298] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=J,suedtime
-[2026-04-15 18:10:42.386] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:10:42"}
-[2026-04-15 18:10:43.295] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:43.297] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
-[2026-04-15 18:10:43.298] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"U":2048}
-[2026-04-15 18:10:43.299] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:10:43"}
-[2026-04-15 18:10:43.300] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:43.301] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=U,suedtime
-[2026-04-15 18:10:43.388] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:10:43"}
-[2026-04-15 18:10:44.295] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:44.296] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
-[2026-04-15 18:10:44.297] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"G":12.3}
-[2026-04-15 18:10:44.299] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:10:44"}
-[2026-04-15 18:10:44.300] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:44.302] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=G,suedtime
-[2026-04-15 18:10:44.387] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:10:44"}
-[2026-04-15 18:10:45.305] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:45.306] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
-[2026-04-15 18:10:45.307] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"Na":140}
-[2026-04-15 18:10:45.308] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:10:45"}
-[2026-04-15 18:10:45.308] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:45.309] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=Na,suedtime
-[2026-04-15 18:10:45.386] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:10:45"}
-[2026-04-15 18:10:46.319] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:46.320] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
-[2026-04-15 18:10:46.321] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"HCO3":25}
-[2026-04-15 18:10:46.322] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:10:46"}
-[2026-04-15 18:10:46.323] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:46.323] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=HCO3,suedtime
-[2026-04-15 18:10:46.641] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:10:46"}
-[2026-04-15 18:10:47.322] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:47.324] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
-[2026-04-15 18:10:47.324] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"F":37.5}
-[2026-04-15 18:10:47.325] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:10:47"}
-[2026-04-15 18:10:47.326] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:47.327] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=F,suedtime
-[2026-04-15 18:10:47.406] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:10:47"}
-[2026-04-15 18:10:48.337] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:48.339] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
-[2026-04-15 18:10:48.340] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"A":1.234}
-[2026-04-15 18:10:48.341] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:10:48"}
-[2026-04-15 18:10:48.342] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:48.343] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=A,suedtime
-[2026-04-15 18:10:48.548] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:10:48"}
-[2026-04-15 18:10:49.351] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:49.352] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
-[2026-04-15 18:10:49.353] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"sysj":90}
-[2026-04-15 18:10:49.354] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:10:49"}
-[2026-04-15 18:10:49.356] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:49.357] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=sysj,suedtime
-[2026-04-15 18:10:49.477] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:10:49"}
-[2026-04-15 18:10:50.351] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:50.353] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
-[2026-04-15 18:10:50.354] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"C":0.5}
-[2026-04-15 18:10:50.355] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:10:50"}
-[2026-04-15 18:10:50.356] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:50.357] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=C,suedtime
-[2026-04-15 18:10:50.655] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:10:50"}
-[2026-04-15 18:10:51.363] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:51.365] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
-[2026-04-15 18:10:51.366] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"B":0.25}
-[2026-04-15 18:10:51.367] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:10:51"}
-[2026-04-15 18:10:51.367] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:51.368] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=B,suedtime
-[2026-04-15 18:10:51.459] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:10:51"}
-[2026-04-15 18:10:52.379] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:52.380] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
-[2026-04-15 18:10:52.381] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"L":600}
-[2026-04-15 18:10:52.382] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:10:52"}
-[2026-04-15 18:10:52.383] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:52.384] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=L,suedtime
-[2026-04-15 18:10:52.489] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:10:52"}
-[2026-04-15 18:10:53.381] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:53.382] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
-[2026-04-15 18:10:53.383] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"D":320}
-[2026-04-15 18:10:53.384] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:10:53"}
-[2026-04-15 18:10:53.384] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:53.385] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=D,suedtime
-[2026-04-15 18:10:53.466] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:10:53"}
-[2026-04-15 18:10:54.394] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:54.395] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
-[2026-04-15 18:10:54.396] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"H":-100}
-[2026-04-15 18:10:54.397] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:10:54"}
-[2026-04-15 18:10:54.398] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:54.400] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=H,suedtime
-[2026-04-15 18:10:54.468] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:10:54"}
-[2026-04-15 18:10:55.397] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:55.398] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
-[2026-04-15 18:10:55.399] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"o":120}
-[2026-04-15 18:10:55.400] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:10:55"}
-[2026-04-15 18:10:55.402] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:55.402] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=o,suedtime
-[2026-04-15 18:10:55.494] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:10:55"}
-[2026-04-15 18:10:56.397] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:56.398] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
-[2026-04-15 18:10:56.399] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"J":-80}
-[2026-04-15 18:10:56.399] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:10:56"}
-[2026-04-15 18:10:56.400] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:56.401] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=J,suedtime
-[2026-04-15 18:10:56.487] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:10:56"}
-[2026-04-15 18:10:57.401] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:57.403] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
-[2026-04-15 18:10:57.404] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"U":2048}
-[2026-04-15 18:10:57.406] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:10:57"}
-[2026-04-15 18:10:57.406] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:57.407] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=U,suedtime
-[2026-04-15 18:10:57.489] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:10:57"}
-[2026-04-15 18:10:58.416] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:58.417] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
-[2026-04-15 18:10:58.418] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"G":12.3}
-[2026-04-15 18:10:58.419] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:10:58"}
-[2026-04-15 18:10:58.420] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:58.421] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=G,suedtime
-[2026-04-15 18:10:58.494] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:10:58"}
-[2026-04-15 18:10:59.427] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:10:59.428] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
-[2026-04-15 18:10:59.429] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"Na":140}
-[2026-04-15 18:10:59.429] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:10:59"}
-[2026-04-15 18:10:59.430] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:10:59.431] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=Na,suedtime
-[2026-04-15 18:10:59.513] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:10:59"}
-[2026-04-15 18:11:00.434] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:00.435] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
-[2026-04-15 18:11:00.436] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"HCO3":25}
-[2026-04-15 18:11:00.436] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:11:00"}
-[2026-04-15 18:11:00.437] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:00.437] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=HCO3,suedtime
-[2026-04-15 18:11:00.516] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:11:00"}
-[2026-04-15 18:11:01.435] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:01.436] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
-[2026-04-15 18:11:01.436] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"F":37.5}
-[2026-04-15 18:11:01.437] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:11:01"}
-[2026-04-15 18:11:01.438] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:01.439] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=F,suedtime
-[2026-04-15 18:11:01.530] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:11:01"}
-[2026-04-15 18:11:02.447] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:02.448] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
-[2026-04-15 18:11:02.449] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"A":1.234}
-[2026-04-15 18:11:02.449] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:11:02"}
-[2026-04-15 18:11:02.450] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:02.450] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=A,suedtime
-[2026-04-15 18:11:02.521] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:11:02"}
-[2026-04-15 18:11:03.460] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:03.461] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
-[2026-04-15 18:11:03.462] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"sysj":90}
-[2026-04-15 18:11:03.463] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:11:03"}
-[2026-04-15 18:11:03.464] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:03.465] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=sysj,suedtime
-[2026-04-15 18:11:03.541] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:11:03"}
-[2026-04-15 18:11:04.461] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:04.462] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
-[2026-04-15 18:11:04.463] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"C":0.5}
-[2026-04-15 18:11:04.464] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:11:04"}
-[2026-04-15 18:11:04.465] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:04.466] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=C,suedtime
-[2026-04-15 18:11:04.543] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:11:04"}
-[2026-04-15 18:11:05.476] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:05.477] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
-[2026-04-15 18:11:05.478] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"B":0.25}
-[2026-04-15 18:11:05.480] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:11:05"}
-[2026-04-15 18:11:05.480] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:05.481] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=B,suedtime
-[2026-04-15 18:11:06.136] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:11:05"}
-[2026-04-15 18:11:06.490] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:06.491] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
-[2026-04-15 18:11:06.492] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"L":600}
-[2026-04-15 18:11:06.493] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:11:06"}
-[2026-04-15 18:11:06.494] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:06.494] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=L,suedtime
-[2026-04-15 18:11:06.570] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:11:06"}
-[2026-04-15 18:11:07.503] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:07.504] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
-[2026-04-15 18:11:07.505] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"D":320}
-[2026-04-15 18:11:07.506] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:11:07"}
-[2026-04-15 18:11:07.507] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:07.508] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=D,suedtime
-[2026-04-15 18:11:07.878] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:11:07"}
-[2026-04-15 18:11:08.513] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:08.514] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
-[2026-04-15 18:11:08.515] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"H":-100}
-[2026-04-15 18:11:08.516] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:11:08"}
-[2026-04-15 18:11:08.516] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:08.517] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=H,suedtime
-[2026-04-15 18:11:08.592] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:11:08"}
-[2026-04-15 18:11:09.518] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:09.519] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
-[2026-04-15 18:11:09.520] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"o":120}
-[2026-04-15 18:11:09.521] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:11:09"}
-[2026-04-15 18:11:09.522] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:09.523] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=o,suedtime
-[2026-04-15 18:11:09.605] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:11:09"}
-[2026-04-15 18:11:10.533] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:10.535] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
-[2026-04-15 18:11:10.536] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"J":-80}
-[2026-04-15 18:11:10.536] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:11:10"}
-[2026-04-15 18:11:10.537] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:10.537] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=J,suedtime
-[2026-04-15 18:11:10.637] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:11:10"}
-[2026-04-15 18:11:11.548] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:11.548] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
-[2026-04-15 18:11:11.549] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"U":2048}
-[2026-04-15 18:11:11.550] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:11:11"}
-[2026-04-15 18:11:11.551] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:11.552] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=U,suedtime
-[2026-04-15 18:11:11.922] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:11:11"}
-[2026-04-15 18:11:12.562] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:12.563] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
-[2026-04-15 18:11:12.564] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"G":12.3}
-[2026-04-15 18:11:12.564] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:11:12"}
-[2026-04-15 18:11:12.566] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:12.568] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=G,suedtime
-[2026-04-15 18:11:12.640] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:11:12"}
-[2026-04-15 18:11:13.577] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:13.578] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
-[2026-04-15 18:11:13.579] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"Na":140}
-[2026-04-15 18:11:13.580] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:11:13"}
-[2026-04-15 18:11:13.581] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:13.582] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=Na,suedtime
-[2026-04-15 18:11:13.665] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:11:13"}
-[2026-04-15 18:11:14.581] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:14.582] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
-[2026-04-15 18:11:14.583] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"HCO3":25}
-[2026-04-15 18:11:14.583] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:11:14"}
-[2026-04-15 18:11:14.584] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:14.585] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=HCO3,suedtime
-[2026-04-15 18:11:14.677] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:11:14"}
-[2026-04-15 18:11:15.584] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:15.585] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
-[2026-04-15 18:11:15.586] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"F":37.5}
-[2026-04-15 18:11:15.587] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:11:15"}
-[2026-04-15 18:11:15.587] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:15.588] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=F,suedtime
-[2026-04-15 18:11:15.666] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:11:15"}
-[2026-04-15 18:11:16.589] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:16.591] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
-[2026-04-15 18:11:16.591] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"A":1.234}
-[2026-04-15 18:11:16.592] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:11:16"}
-[2026-04-15 18:11:16.593] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:16.594] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=A,suedtime
-[2026-04-15 18:11:16.697] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:11:16"}
-[2026-04-15 18:11:17.604] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:17.605] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
-[2026-04-15 18:11:17.606] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"sysj":90}
-[2026-04-15 18:11:17.607] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:11:17"}
-[2026-04-15 18:11:17.608] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:17.608] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=sysj,suedtime
-[2026-04-15 18:11:17.685] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:11:17"}
-[2026-04-15 18:11:18.616] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:18.618] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
-[2026-04-15 18:11:18.619] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"C":0.5}
-[2026-04-15 18:11:18.620] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:11:18"}
-[2026-04-15 18:11:18.621] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:18.622] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=C,suedtime
-[2026-04-15 18:11:18.798] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:11:18"}
-[2026-04-15 18:11:19.633] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:19.634] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
-[2026-04-15 18:11:19.635] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"B":0.25}
-[2026-04-15 18:11:19.635] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:11:19"}
-[2026-04-15 18:11:19.636] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:19.636] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=B,suedtime
-[2026-04-15 18:11:19.727] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:11:19"}
-[2026-04-15 18:11:20.633] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:20.634] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
-[2026-04-15 18:11:20.635] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"L":600}
-[2026-04-15 18:11:20.636] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:11:20"}
-[2026-04-15 18:11:20.636] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:20.637] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=L,suedtime
-[2026-04-15 18:11:20.721] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:11:20"}
-[2026-04-15 18:11:21.646] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:21.648] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
-[2026-04-15 18:11:21.648] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"D":320}
-[2026-04-15 18:11:21.649] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:11:21"}
-[2026-04-15 18:11:21.650] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:21.651] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=D,suedtime
-[2026-04-15 18:11:21.747] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:11:21"}
-[2026-04-15 18:11:22.660] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:22.661] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
-[2026-04-15 18:11:22.662] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"H":-100}
-[2026-04-15 18:11:22.663] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:11:22"}
-[2026-04-15 18:11:22.664] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:22.664] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=H,suedtime
-[2026-04-15 18:11:22.745] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:11:22"}
-[2026-04-15 18:11:23.662] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:23.663] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
-[2026-04-15 18:11:23.664] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"o":120}
-[2026-04-15 18:11:23.664] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:11:23"}
-[2026-04-15 18:11:23.665] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:23.666] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=o,suedtime
-[2026-04-15 18:11:23.758] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:11:23"}
-[2026-04-15 18:11:24.674] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:24.675] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
-[2026-04-15 18:11:24.676] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"J":-80}
-[2026-04-15 18:11:24.676] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:11:24"}
-[2026-04-15 18:11:24.677] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:24.678] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=J,suedtime
-[2026-04-15 18:11:24.765] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:11:24"}
-[2026-04-15 18:11:25.687] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:25.688] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
-[2026-04-15 18:11:25.689] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"U":2048}
-[2026-04-15 18:11:25.690] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:11:25"}
-[2026-04-15 18:11:25.691] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:25.691] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=U,suedtime
-[2026-04-15 18:11:25.779] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:11:25"}
-[2026-04-15 18:11:26.697] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:26.698] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
-[2026-04-15 18:11:26.699] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"G":12.3}
-[2026-04-15 18:11:26.699] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:11:26"}
-[2026-04-15 18:11:26.700] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:26.700] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=G,suedtime
-[2026-04-15 18:11:26.843] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:11:26"}
-[2026-04-15 18:11:27.707] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:27.708] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
-[2026-04-15 18:11:27.709] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"Na":140}
-[2026-04-15 18:11:27.710] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:11:27"}
-[2026-04-15 18:11:27.711] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:27.712] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=Na,suedtime
-[2026-04-15 18:11:27.793] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:11:27"}
-[2026-04-15 18:11:28.717] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:28.718] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
-[2026-04-15 18:11:28.719] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"HCO3":25}
-[2026-04-15 18:11:28.719] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:11:28"}
-[2026-04-15 18:11:28.721] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:28.721] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=HCO3,suedtime
-[2026-04-15 18:11:28.802] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:11:28"}
-[2026-04-15 18:11:29.723] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:29.724] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
-[2026-04-15 18:11:29.725] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"F":37.5}
-[2026-04-15 18:11:29.726] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:11:29"}
-[2026-04-15 18:11:29.727] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:29.727] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=F,suedtime
-[2026-04-15 18:11:29.828] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:11:29"}
-[2026-04-15 18:11:30.731] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:30.732] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
-[2026-04-15 18:11:30.733] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"A":1.234}
-[2026-04-15 18:11:30.734] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:11:30"}
-[2026-04-15 18:11:30.734] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:30.735] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=A,suedtime
-[2026-04-15 18:11:31.066] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:11:30"}
-[2026-04-15 18:11:31.735] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:31.736] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
-[2026-04-15 18:11:31.737] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"sysj":90}
-[2026-04-15 18:11:31.739] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:11:31"}
-[2026-04-15 18:11:31.740] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:31.741] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=sysj,suedtime
-[2026-04-15 18:11:31.844] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:11:31"}
-[2026-04-15 18:11:32.740] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:32.742] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
-[2026-04-15 18:11:32.743] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"C":0.5}
-[2026-04-15 18:11:32.745] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:11:32"}
-[2026-04-15 18:11:32.746] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:32.747] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=C,suedtime
-[2026-04-15 18:11:33.122] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:11:32"}
-[2026-04-15 18:11:33.746] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:33.747] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
-[2026-04-15 18:11:33.748] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"B":0.25}
-[2026-04-15 18:11:33.749] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:11:33"}
-[2026-04-15 18:11:33.750] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:33.750] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=B,suedtime
-[2026-04-15 18:11:33.903] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:11:33"}
-[2026-04-15 18:11:34.752] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:34.753] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
-[2026-04-15 18:11:34.754] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"L":600}
-[2026-04-15 18:11:34.754] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:11:34"}
-[2026-04-15 18:11:34.755] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:34.756] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=L,suedtime
-[2026-04-15 18:11:34.848] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:11:34"}
-[2026-04-15 18:11:35.760] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:35.761] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
-[2026-04-15 18:11:35.761] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"D":320}
-[2026-04-15 18:11:35.762] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:11:35"}
-[2026-04-15 18:11:35.763] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:35.763] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=D,suedtime
-[2026-04-15 18:11:35.841] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:11:35"}
-[2026-04-15 18:11:36.767] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:36.768] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
-[2026-04-15 18:11:36.769] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"H":-100}
-[2026-04-15 18:11:36.770] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:11:36"}
-[2026-04-15 18:11:36.770] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:36.772] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=H,suedtime
-[2026-04-15 18:11:36.856] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:11:36"}
-[2026-04-15 18:11:37.777] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:37.778] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
-[2026-04-15 18:11:37.778] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"o":120}
-[2026-04-15 18:11:37.779] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:11:37"}
-[2026-04-15 18:11:37.781] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:37.781] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=o,suedtime
-[2026-04-15 18:11:37.870] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:11:37"}
-[2026-04-15 18:11:38.786] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:38.787] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
-[2026-04-15 18:11:38.787] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"J":-80}
-[2026-04-15 18:11:38.788] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:11:38"}
-[2026-04-15 18:11:38.789] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:38.790] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=J,suedtime
-[2026-04-15 18:11:38.870] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:11:38"}
-[2026-04-15 18:11:39.791] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:39.792] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
-[2026-04-15 18:11:39.793] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"U":2048}
-[2026-04-15 18:11:39.794] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:11:39"}
-[2026-04-15 18:11:39.795] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:39.796] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=U,suedtime
-[2026-04-15 18:11:40.188] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:11:39"}
-[2026-04-15 18:11:40.798] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:40.800] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
-[2026-04-15 18:11:40.801] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"G":12.3}
-[2026-04-15 18:11:40.801] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:11:40"}
-[2026-04-15 18:11:40.802] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:40.802] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=G,suedtime
-[2026-04-15 18:11:40.896] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:11:40"}
-[2026-04-15 18:11:41.809] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:41.811] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
-[2026-04-15 18:11:41.812] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"Na":140}
-[2026-04-15 18:11:41.813] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:11:41"}
-[2026-04-15 18:11:41.813] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:41.815] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=Na,suedtime
-[2026-04-15 18:11:42.192] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:11:41"}
-[2026-04-15 18:11:42.820] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:42.822] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
-[2026-04-15 18:11:42.823] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"HCO3":25}
-[2026-04-15 18:11:42.824] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:11:42"}
-[2026-04-15 18:11:42.824] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:42.825] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=HCO3,suedtime
-[2026-04-15 18:11:42.896] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:11:42"}
-[2026-04-15 18:11:43.829] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:43.831] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
-[2026-04-15 18:11:43.832] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"F":37.5}
-[2026-04-15 18:11:43.832] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:11:43"}
-[2026-04-15 18:11:43.834] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:43.835] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=F,suedtime
-[2026-04-15 18:11:43.938] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:11:43"}
-[2026-04-15 18:11:44.833] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:44.834] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
-[2026-04-15 18:11:44.835] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"A":1.234}
-[2026-04-15 18:11:44.835] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:11:44"}
-[2026-04-15 18:11:44.836] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:44.836] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=A,suedtime
-[2026-04-15 18:11:44.910] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:11:44"}
-[2026-04-15 18:11:45.840] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:45.841] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
-[2026-04-15 18:11:45.842] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"sysj":90}
-[2026-04-15 18:11:45.843] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:11:45"}
-[2026-04-15 18:11:45.843] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:45.844] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=sysj,suedtime
-[2026-04-15 18:11:45.964] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:11:45"}
-[2026-04-15 18:11:46.844] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:46.845] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
-[2026-04-15 18:11:46.846] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"C":0.5}
-[2026-04-15 18:11:46.846] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:11:46"}
-[2026-04-15 18:11:46.847] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:46.848] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=C,suedtime
-[2026-04-15 18:11:47.015] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:11:46"}
-[2026-04-15 18:11:47.849] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:47.850] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
-[2026-04-15 18:11:47.851] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"B":0.25}
-[2026-04-15 18:11:47.852] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:11:47"}
-[2026-04-15 18:11:47.852] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:47.853] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=B,suedtime
-[2026-04-15 18:11:48.856] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:48.857] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
-[2026-04-15 18:11:48.857] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"L":600}
-[2026-04-15 18:11:48.859] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:11:48"}
-[2026-04-15 18:11:48.860] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:48.861] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=L,suedtime
-[2026-04-15 18:11:49.164] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:11:47"}
-[2026-04-15 18:11:49.620] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:11:48"}
-[2026-04-15 18:11:49.856] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:49.857] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
-[2026-04-15 18:11:49.858] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"D":320}
-[2026-04-15 18:11:49.859] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:11:49"}
-[2026-04-15 18:11:49.859] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:49.860] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=D,suedtime
-[2026-04-15 18:11:49.936] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:11:49"}
-[2026-04-15 18:11:50.869] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:50.870] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
-[2026-04-15 18:11:50.872] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"H":-100}
-[2026-04-15 18:11:50.872] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:11:50"}
-[2026-04-15 18:11:50.873] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:50.874] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=H,suedtime
-[2026-04-15 18:11:50.959] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:11:50"}
-[2026-04-15 18:11:51.879] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:51.880] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
-[2026-04-15 18:11:51.881] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"o":120}
-[2026-04-15 18:11:51.881] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:11:51"}
-[2026-04-15 18:11:51.882] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:51.883] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=o,suedtime
-[2026-04-15 18:11:52.213] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:11:51"}
-[2026-04-15 18:11:52.882] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:52.883] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
-[2026-04-15 18:11:52.884] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"J":-80}
-[2026-04-15 18:11:52.885] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:11:52"}
-[2026-04-15 18:11:52.886] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:52.887] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=J,suedtime
-[2026-04-15 18:11:53.273] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:11:52"}
-[2026-04-15 18:11:53.886] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:53.887] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
-[2026-04-15 18:11:53.887] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"U":2048}
-[2026-04-15 18:11:53.888] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:11:53"}
-[2026-04-15 18:11:53.889] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:53.889] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=U,suedtime
-[2026-04-15 18:11:54.592] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:11:53"}
-[2026-04-15 18:11:54.897] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:54.898] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
-[2026-04-15 18:11:54.899] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"G":12.3}
-[2026-04-15 18:11:54.900] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:11:54"}
-[2026-04-15 18:11:54.901] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:54.902] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=G,suedtime
-[2026-04-15 18:11:55.412] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:11:54"}
-[2026-04-15 18:11:55.908] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:55.910] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
-[2026-04-15 18:11:55.911] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"Na":140}
-[2026-04-15 18:11:55.912] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:11:55"}
-[2026-04-15 18:11:55.913] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:55.913] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=Na,suedtime
-[2026-04-15 18:11:56.038] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:11:55"}
-[2026-04-15 18:11:56.919] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:56.920] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
-[2026-04-15 18:11:56.921] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"HCO3":25}
-[2026-04-15 18:11:56.922] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:11:56"}
-[2026-04-15 18:11:56.922] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:56.923] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=HCO3,suedtime
-[2026-04-15 18:11:56.992] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:11:56"}
-[2026-04-15 18:11:57.928] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:57.930] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
-[2026-04-15 18:11:57.931] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"F":37.5}
-[2026-04-15 18:11:57.932] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:11:57"}
-[2026-04-15 18:11:57.933] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:57.934] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=F,suedtime
-[2026-04-15 18:11:58.019] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:11:57"}
-[2026-04-15 18:11:58.941] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:58.942] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
-[2026-04-15 18:11:58.943] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"A":1.234}
-[2026-04-15 18:11:58.944] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:11:58"}
-[2026-04-15 18:11:58.944] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:58.945] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=A,suedtime
-[2026-04-15 18:11:59.330] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:11:58"}
-[2026-04-15 18:11:59.953] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:11:59.954] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
-[2026-04-15 18:11:59.954] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"sysj":90}
-[2026-04-15 18:11:59.956] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:11:59"}
-[2026-04-15 18:11:59.956] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:11:59.958] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=sysj,suedtime
-[2026-04-15 18:12:00.857] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:11:59"}
-[2026-04-15 18:12:00.961] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:00.962] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
-[2026-04-15 18:12:00.963] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"C":0.5}
-[2026-04-15 18:12:00.963] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:12:00"}
-[2026-04-15 18:12:00.964] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:00.965] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=C,suedtime
-[2026-04-15 18:12:01.403] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:12:00"}
-[2026-04-15 18:12:01.971] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:01.972] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
-[2026-04-15 18:12:01.973] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"B":0.25}
-[2026-04-15 18:12:01.974] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:12:01"}
-[2026-04-15 18:12:01.975] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:01.976] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=B,suedtime
-[2026-04-15 18:12:02.055] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:12:01"}
-[2026-04-15 18:12:02.984] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:02.985] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
-[2026-04-15 18:12:02.986] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"L":600}
-[2026-04-15 18:12:02.987] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:12:02"}
-[2026-04-15 18:12:02.987] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:02.988] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=L,suedtime
-[2026-04-15 18:12:03.058] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:12:02"}
-[2026-04-15 18:12:03.990] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:03.991] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
-[2026-04-15 18:12:03.992] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"D":320}
-[2026-04-15 18:12:03.993] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:12:03"}
-[2026-04-15 18:12:03.993] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:03.994] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=D,suedtime
-[2026-04-15 18:12:04.063] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:12:03"}
-[2026-04-15 18:12:05.000] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:05.001] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
-[2026-04-15 18:12:05.002] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"H":-100}
-[2026-04-15 18:12:05.004] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:12:05"}
-[2026-04-15 18:12:05.004] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:05.005] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=H,suedtime
-[2026-04-15 18:12:05.092] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:12:05"}
-[2026-04-15 18:12:06.002] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:06.003] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
-[2026-04-15 18:12:06.004] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"o":120}
-[2026-04-15 18:12:06.005] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:12:06"}
-[2026-04-15 18:12:06.005] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:06.006] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=o,suedtime
-[2026-04-15 18:12:06.080] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:12:06"}
-[2026-04-15 18:12:07.004] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:07.005] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
-[2026-04-15 18:12:07.007] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"J":-80}
-[2026-04-15 18:12:07.008] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:12:07"}
-[2026-04-15 18:12:07.009] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:07.010] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=J,suedtime
-[2026-04-15 18:12:07.098] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:12:07"}
-[2026-04-15 18:12:08.007] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:08.009] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
-[2026-04-15 18:12:08.010] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"U":2048}
-[2026-04-15 18:12:08.012] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:12:08"}
-[2026-04-15 18:12:08.012] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:08.013] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=U,suedtime
-[2026-04-15 18:12:08.081] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:12:08"}
-[2026-04-15 18:12:09.008] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:09.009] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
-[2026-04-15 18:12:09.010] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"G":12.3}
-[2026-04-15 18:12:09.012] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:12:09"}
-[2026-04-15 18:12:09.012] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:09.013] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=G,suedtime
-[2026-04-15 18:12:09.092] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:12:09"}
-[2026-04-15 18:12:10.021] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:10.022] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
-[2026-04-15 18:12:10.023] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"Na":140}
-[2026-04-15 18:12:10.024] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:12:10"}
-[2026-04-15 18:12:10.024] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:10.025] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=Na,suedtime
-[2026-04-15 18:12:10.114] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:12:10"}
-[2026-04-15 18:12:11.032] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:11.033] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
-[2026-04-15 18:12:11.034] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"HCO3":25}
-[2026-04-15 18:12:11.036] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:12:11"}
-[2026-04-15 18:12:11.037] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:11.038] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=HCO3,suedtime
-[2026-04-15 18:12:11.416] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:12:11"}
-[2026-04-15 18:12:12.038] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:12.039] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
-[2026-04-15 18:12:12.039] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"F":37.5}
-[2026-04-15 18:12:12.040] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:12:12"}
-[2026-04-15 18:12:12.041] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:12.042] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=F,suedtime
-[2026-04-15 18:12:12.130] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:12:12"}
-[2026-04-15 18:12:13.050] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:13.051] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
-[2026-04-15 18:12:13.052] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"A":1.234}
-[2026-04-15 18:12:13.054] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:12:13"}
-[2026-04-15 18:12:13.055] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:13.056] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=A,suedtime
-[2026-04-15 18:12:13.361] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:12:13"}
-[2026-04-15 18:12:14.050] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:14.051] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
-[2026-04-15 18:12:14.052] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"sysj":90}
-[2026-04-15 18:12:14.053] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:12:14"}
-[2026-04-15 18:12:14.054] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:14.054] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=sysj,suedtime
-[2026-04-15 18:12:14.131] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:12:14"}
-[2026-04-15 18:12:15.065] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:15.066] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
-[2026-04-15 18:12:15.067] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"C":0.5}
-[2026-04-15 18:12:15.067] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:12:15"}
-[2026-04-15 18:12:15.068] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:15.069] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=C,suedtime
-[2026-04-15 18:12:15.143] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:12:15"}
-[2026-04-15 18:12:16.079] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:16.080] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
-[2026-04-15 18:12:16.081] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"B":0.25}
-[2026-04-15 18:12:16.081] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:12:16"}
-[2026-04-15 18:12:16.082] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:16.083] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=B,suedtime
-[2026-04-15 18:12:16.159] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:12:16"}
-[2026-04-15 18:12:17.093] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:17.094] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
-[2026-04-15 18:12:17.094] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"L":600}
-[2026-04-15 18:12:17.095] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:12:17"}
-[2026-04-15 18:12:17.095] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:17.096] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=L,suedtime
-[2026-04-15 18:12:17.180] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:12:17"}
-[2026-04-15 18:12:18.093] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:18.094] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
-[2026-04-15 18:12:18.095] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"D":320}
-[2026-04-15 18:12:18.095] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:12:18"}
-[2026-04-15 18:12:18.096] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:18.097] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=D,suedtime
-[2026-04-15 18:12:18.474] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:12:18"}
-[2026-04-15 18:12:19.103] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:19.104] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
-[2026-04-15 18:12:19.105] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"H":-100}
-[2026-04-15 18:12:19.105] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:12:19"}
-[2026-04-15 18:12:19.106] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:19.106] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=H,suedtime
-[2026-04-15 18:12:19.190] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:12:19"}
-[2026-04-15 18:12:20.116] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:20.118] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
-[2026-04-15 18:12:20.119] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"o":120}
-[2026-04-15 18:12:20.120] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:12:20"}
-[2026-04-15 18:12:20.120] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:20.121] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=o,suedtime
-[2026-04-15 18:12:20.206] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:12:20"}
-[2026-04-15 18:12:21.125] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:21.126] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
-[2026-04-15 18:12:21.126] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"J":-80}
-[2026-04-15 18:12:21.127] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:12:21"}
-[2026-04-15 18:12:21.127] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:21.128] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=J,suedtime
-[2026-04-15 18:12:21.506] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:12:21"}
-[2026-04-15 18:12:22.138] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:22.139] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
-[2026-04-15 18:12:22.139] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"U":2048}
-[2026-04-15 18:12:22.140] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:12:22"}
-[2026-04-15 18:12:22.141] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:22.142] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=U,suedtime
-[2026-04-15 18:12:22.821] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:12:22"}
-[2026-04-15 18:12:23.152] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:23.153] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
-[2026-04-15 18:12:23.154] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"G":12.3}
-[2026-04-15 18:12:23.154] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:12:23"}
-[2026-04-15 18:12:23.155] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:23.156] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=G,suedtime
-[2026-04-15 18:12:23.245] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:12:23"}
-[2026-04-15 18:12:24.164] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:24.165] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
-[2026-04-15 18:12:24.166] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"Na":140}
-[2026-04-15 18:12:24.166] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:12:24"}
-[2026-04-15 18:12:24.167] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:24.168] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=Na,suedtime
-[2026-04-15 18:12:24.245] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:12:24"}
-[2026-04-15 18:12:25.174] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:25.175] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
-[2026-04-15 18:12:25.176] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"HCO3":25}
-[2026-04-15 18:12:25.177] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:12:25"}
-[2026-04-15 18:12:25.177] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:25.178] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=HCO3,suedtime
-[2026-04-15 18:12:25.284] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:12:25"}
-[2026-04-15 18:12:26.182] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:26.183] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
-[2026-04-15 18:12:26.184] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"F":37.5}
-[2026-04-15 18:12:26.185] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:12:26"}
-[2026-04-15 18:12:26.186] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:26.186] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=F,suedtime
-[2026-04-15 18:12:26.309] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:12:26"}
-[2026-04-15 18:12:27.194] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:27.195] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
-[2026-04-15 18:12:27.196] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"A":1.234}
-[2026-04-15 18:12:27.197] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:12:27"}
-[2026-04-15 18:12:27.198] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:27.198] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=A,suedtime
-[2026-04-15 18:12:27.274] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:12:27"}
-[2026-04-15 18:12:28.206] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:28.207] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
-[2026-04-15 18:12:28.208] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"sysj":90}
-[2026-04-15 18:12:28.208] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:12:28"}
-[2026-04-15 18:12:28.209] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:28.210] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=sysj,suedtime
-[2026-04-15 18:12:28.260] [WARN] [ALIYUN] 连接离线 deviceId=JH-10235221005A
-[2026-04-15 18:12:28.261] [INFO] [ALIYUN] 连接关闭 deviceId=JH-10235221005A
-[2026-04-15 18:12:29.207] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:29.208] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
-[2026-04-15 18:12:29.209] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"C":0.5}
-[2026-04-15 18:12:29.210] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:12:29"}
-[2026-04-15 18:12:29.211] [INFO] [ALIYUN] 等待现有设备连接恢复 deviceId=JH-10235221005A
-[2026-04-15 18:12:29.268] [INFO] [ALIYUN] 正在重连 deviceId=JH-10235221005A
-[2026-04-15 18:12:29.386] [INFO] [ALIYUN] 设备重新连接成功 deviceId=JH-10235221005A
-[2026-04-15 18:12:29.387] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=C,suedtime
-[2026-04-15 18:12:29.453] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:12:29"}
-[2026-04-15 18:12:30.068] [WARN] [ALIYUN] 连接离线 deviceId=JH-10235221005A
-[2026-04-15 18:12:30.069] [INFO] [ALIYUN] 连接关闭 deviceId=JH-10235221005A
-[2026-04-15 18:12:30.215] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:30.215] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
-[2026-04-15 18:12:30.216] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"B":0.25}
-[2026-04-15 18:12:30.217] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:12:30"}
-[2026-04-15 18:12:30.218] [INFO] [ALIYUN] 等待现有设备连接恢复 deviceId=JH-10235221005A
-[2026-04-15 18:12:31.081] [INFO] [ALIYUN] 正在重连 deviceId=JH-10235221005A
-[2026-04-15 18:12:31.194] [INFO] [ALIYUN] 设备重新连接成功 deviceId=JH-10235221005A
-[2026-04-15 18:12:31.196] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=B,suedtime
-[2026-04-15 18:12:31.221] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:31.222] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
-[2026-04-15 18:12:31.223] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"L":600}
-[2026-04-15 18:12:31.226] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:12:31"}
-[2026-04-15 18:12:31.226] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:31.227] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=L,suedtime
-[2026-04-15 18:12:31.304] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:12:30"}
-[2026-04-15 18:12:31.370] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:12:31"}
-[2026-04-15 18:12:31.456] [WARN] [ALIYUN] 连接离线 deviceId=JH-10235221005A
-[2026-04-15 18:12:31.457] [INFO] [ALIYUN] 连接关闭 deviceId=JH-10235221005A
-[2026-04-15 18:12:32.232] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:32.233] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
-[2026-04-15 18:12:32.233] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"D":320}
-[2026-04-15 18:12:32.234] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:12:32"}
-[2026-04-15 18:12:32.235] [INFO] [ALIYUN] 等待现有设备连接恢复 deviceId=JH-10235221005A
-[2026-04-15 18:12:32.465] [INFO] [ALIYUN] 正在重连 deviceId=JH-10235221005A
-[2026-04-15 18:12:32.581] [INFO] [ALIYUN] 设备重新连接成功 deviceId=JH-10235221005A
-[2026-04-15 18:12:32.582] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=D,suedtime
-[2026-04-15 18:12:32.657] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:12:32"}
-[2026-04-15 18:12:32.706] [WARN] [ALIYUN] 连接离线 deviceId=JH-10235221005A
-[2026-04-15 18:12:32.707] [INFO] [ALIYUN] 连接关闭 deviceId=JH-10235221005A
-[2026-04-15 18:12:33.238] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:33.239] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
-[2026-04-15 18:12:33.240] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"H":-100}
-[2026-04-15 18:12:33.240] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:12:33"}
-[2026-04-15 18:12:33.241] [INFO] [ALIYUN] 等待现有设备连接恢复 deviceId=JH-10235221005A
-[2026-04-15 18:12:33.708] [INFO] [ALIYUN] 正在重连 deviceId=JH-10235221005A
-[2026-04-15 18:12:33.811] [INFO] [ALIYUN] 设备重新连接成功 deviceId=JH-10235221005A
-[2026-04-15 18:12:33.812] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=H,suedtime
-[2026-04-15 18:12:33.885] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:12:33"}
-[2026-04-15 18:12:34.073] [WARN] [ALIYUN] 连接离线 deviceId=JH-10235221005A
-[2026-04-15 18:12:34.074] [INFO] [ALIYUN] 连接关闭 deviceId=JH-10235221005A
-[2026-04-15 18:12:34.239] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:34.240] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
-[2026-04-15 18:12:34.241] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"o":120}
-[2026-04-15 18:12:34.242] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:12:34"}
-[2026-04-15 18:12:34.243] [INFO] [ALIYUN] 等待现有设备连接恢复 deviceId=JH-10235221005A
-[2026-04-15 18:12:35.077] [INFO] [ALIYUN] 正在重连 deviceId=JH-10235221005A
-[2026-04-15 18:12:35.201] [INFO] [ALIYUN] 设备重新连接成功 deviceId=JH-10235221005A
-[2026-04-15 18:12:35.203] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=o,suedtime
-[2026-04-15 18:12:35.248] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:35.249] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
-[2026-04-15 18:12:35.249] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"J":-80}
-[2026-04-15 18:12:35.250] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:12:35"}
-[2026-04-15 18:12:35.251] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:35.251] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=J,suedtime
-[2026-04-15 18:12:36.260] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:36.261] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
-[2026-04-15 18:12:36.261] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"U":2048}
-[2026-04-15 18:12:36.262] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:12:36"}
-[2026-04-15 18:12:36.264] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:36.265] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=U,suedtime
-[2026-04-15 18:12:37.270] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:37.271] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
-[2026-04-15 18:12:37.272] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"G":12.3}
-[2026-04-15 18:12:37.273] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:12:37"}
-[2026-04-15 18:12:37.274] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:37.274] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=G,suedtime
-[2026-04-15 18:12:38.279] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:38.280] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
-[2026-04-15 18:12:38.281] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"Na":140}
-[2026-04-15 18:12:38.282] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:12:38"}
-[2026-04-15 18:12:38.282] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:38.283] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=Na,suedtime
-[2026-04-15 18:12:39.291] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:39.292] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
-[2026-04-15 18:12:39.292] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"HCO3":25}
-[2026-04-15 18:12:39.293] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:12:39"}
-[2026-04-15 18:12:39.294] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:39.294] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=HCO3,suedtime
-[2026-04-15 18:12:39.360] [WARN] [ALIYUN] 连接离线 deviceId=JH-10235221005A
-[2026-04-15 18:12:39.361] [INFO] [ALIYUN] 连接关闭 deviceId=JH-10235221005A
-[2026-04-15 18:12:40.299] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:40.300] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
-[2026-04-15 18:12:40.301] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"F":37.5}
-[2026-04-15 18:12:40.302] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:12:40"}
-[2026-04-15 18:12:40.303] [INFO] [ALIYUN] 等待现有设备连接恢复 deviceId=JH-10235221005A
-[2026-04-15 18:12:40.376] [INFO] [ALIYUN] 正在重连 deviceId=JH-10235221005A
-[2026-04-15 18:12:40.473] [INFO] [ALIYUN] 设备重新连接成功 deviceId=JH-10235221005A
-[2026-04-15 18:12:40.474] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=F,suedtime
-[2026-04-15 18:12:40.558] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:12:40"}
-[2026-04-15 18:12:40.574] [WARN] [ALIYUN] 连接离线 deviceId=JH-10235221005A
-[2026-04-15 18:12:40.575] [INFO] [ALIYUN] 连接关闭 deviceId=JH-10235221005A
-[2026-04-15 18:12:41.313] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:41.315] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
-[2026-04-15 18:12:41.316] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"A":1.234}
-[2026-04-15 18:12:41.317] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:12:41"}
-[2026-04-15 18:12:41.317] [INFO] [ALIYUN] 等待现有设备连接恢复 deviceId=JH-10235221005A
-[2026-04-15 18:12:41.581] [INFO] [ALIYUN] 正在重连 deviceId=JH-10235221005A
-[2026-04-15 18:12:42.180] [ERROR] [ALIYUN] 连接错误 deviceId=JH-10235221005A: Connection refused: Server unavailable
-[2026-04-15 18:12:42.182] [ERROR] [ALIYUN] 属性上报失败 deviceId=JH-10235221005A: Connection refused: Server unavailable
-[2026-04-15 18:12:42.314] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:42.315] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
-[2026-04-15 18:12:42.316] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"sysj":90}
-[2026-04-15 18:12:42.317] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:12:42"}
-[2026-04-15 18:12:42.318] [INFO] [ALIYUN] 等待现有设备连接恢复 deviceId=JH-10235221005A
-[2026-04-15 18:12:43.184] [INFO] [ALIYUN] 正在重连 deviceId=JH-10235221005A
-[2026-04-15 18:12:43.303] [INFO] [ALIYUN] 设备重新连接成功 deviceId=JH-10235221005A
-[2026-04-15 18:12:43.304] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=sysj,suedtime
-[2026-04-15 18:12:43.325] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:43.327] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
-[2026-04-15 18:12:43.328] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"C":0.5}
-[2026-04-15 18:12:43.329] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:12:43"}
-[2026-04-15 18:12:43.331] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:43.334] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=C,suedtime
-[2026-04-15 18:12:43.659] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:12:42"}
-[2026-04-15 18:12:43.679] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:12:43"}
-[2026-04-15 18:12:43.813] [WARN] [ALIYUN] 连接离线 deviceId=JH-10235221005A
-[2026-04-15 18:12:43.814] [INFO] [ALIYUN] 连接关闭 deviceId=JH-10235221005A
-[2026-04-15 18:12:44.330] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:44.331] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
-[2026-04-15 18:12:44.332] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"B":0.25}
-[2026-04-15 18:12:44.333] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:12:44"}
-[2026-04-15 18:12:44.334] [INFO] [ALIYUN] 等待现有设备连接恢复 deviceId=JH-10235221005A
-[2026-04-15 18:12:44.815] [INFO] [ALIYUN] 正在重连 deviceId=JH-10235221005A
-[2026-04-15 18:12:44.914] [ERROR] [ALIYUN] 连接错误 deviceId=JH-10235221005A: Connection refused: Server unavailable
-[2026-04-15 18:12:44.916] [ERROR] [ALIYUN] 属性上报失败 deviceId=JH-10235221005A: Connection refused: Server unavailable
-[2026-04-15 18:12:45.344] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:45.345] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
-[2026-04-15 18:12:45.346] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"L":600}
-[2026-04-15 18:12:45.346] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:12:45"}
-[2026-04-15 18:12:45.347] [INFO] [ALIYUN] 等待现有设备连接恢复 deviceId=JH-10235221005A
-[2026-04-15 18:12:45.920] [INFO] [ALIYUN] 正在重连 deviceId=JH-10235221005A
-[2026-04-15 18:12:46.022] [ERROR] [ALIYUN] 连接错误 deviceId=JH-10235221005A: Connection refused: Server unavailable
-[2026-04-15 18:12:46.023] [ERROR] [ALIYUN] 属性上报失败 deviceId=JH-10235221005A: Connection refused: Server unavailable
-[2026-04-15 18:12:46.356] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:46.358] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
-[2026-04-15 18:12:46.358] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"D":320}
-[2026-04-15 18:12:46.359] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:12:46"}
-[2026-04-15 18:12:46.360] [INFO] [ALIYUN] 等待现有设备连接恢复 deviceId=JH-10235221005A
-[2026-04-15 18:12:47.030] [INFO] [ALIYUN] 正在重连 deviceId=JH-10235221005A
-[2026-04-15 18:12:47.151] [INFO] [ALIYUN] 设备重新连接成功 deviceId=JH-10235221005A
-[2026-04-15 18:12:47.152] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=D,suedtime
-[2026-04-15 18:12:47.256] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:12:46"}
-[2026-04-15 18:12:47.360] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:47.361] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
-[2026-04-15 18:12:47.362] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"H":-100}
-[2026-04-15 18:12:47.363] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:12:47"}
-[2026-04-15 18:12:47.363] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:47.364] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=H,suedtime
-[2026-04-15 18:12:47.457] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:12:47"}
-[2026-04-15 18:12:48.374] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:48.375] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
-[2026-04-15 18:12:48.376] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"o":120}
-[2026-04-15 18:12:48.377] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:12:48"}
-[2026-04-15 18:12:48.378] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:48.379] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=o,suedtime
-[2026-04-15 18:12:48.484] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:12:48"}
-[2026-04-15 18:12:49.379] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:49.380] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
-[2026-04-15 18:12:49.381] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"J":-80}
-[2026-04-15 18:12:49.382] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:12:49"}
-[2026-04-15 18:12:49.383] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:49.383] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=J,suedtime
-[2026-04-15 18:12:49.480] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:12:49"}
-[2026-04-15 18:12:50.392] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:50.393] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
-[2026-04-15 18:12:50.393] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"U":2048}
-[2026-04-15 18:12:50.394] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:12:50"}
-[2026-04-15 18:12:50.395] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:50.396] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=U,suedtime
-[2026-04-15 18:12:50.540] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:12:50"}
-[2026-04-15 18:12:51.405] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:51.407] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
-[2026-04-15 18:12:51.408] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"G":12.3}
-[2026-04-15 18:12:51.408] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:12:51"}
-[2026-04-15 18:12:51.409] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:51.410] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=G,suedtime
-[2026-04-15 18:12:51.503] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:12:51"}
-[2026-04-15 18:12:52.415] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:52.416] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
-[2026-04-15 18:12:52.417] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"Na":140}
-[2026-04-15 18:12:52.418] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:12:52"}
-[2026-04-15 18:12:52.419] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:52.419] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=Na,suedtime
-[2026-04-15 18:12:52.516] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:12:52"}
-[2026-04-15 18:12:53.425] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:53.425] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
-[2026-04-15 18:12:53.426] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"HCO3":25}
-[2026-04-15 18:12:53.427] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:12:53"}
-[2026-04-15 18:12:53.428] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:53.429] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=HCO3,suedtime
-[2026-04-15 18:12:53.721] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:12:53"}
-[2026-04-15 18:12:54.426] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:54.428] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
-[2026-04-15 18:12:54.431] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"F":37.5}
-[2026-04-15 18:12:54.433] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:12:54"}
-[2026-04-15 18:12:54.434] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:54.435] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=F,suedtime
-[2026-04-15 18:12:54.525] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:12:54"}
-[2026-04-15 18:12:55.430] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:55.430] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
-[2026-04-15 18:12:55.431] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"A":1.234}
-[2026-04-15 18:12:55.432] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:12:55"}
-[2026-04-15 18:12:55.432] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:55.433] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=A,suedtime
-[2026-04-15 18:12:55.513] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:12:55"}
-[2026-04-15 18:12:56.437] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:56.438] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
-[2026-04-15 18:12:56.438] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"sysj":90}
-[2026-04-15 18:12:56.439] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:12:56"}
-[2026-04-15 18:12:56.441] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:56.441] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=sysj,suedtime
-[2026-04-15 18:12:56.542] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:12:56"}
-[2026-04-15 18:12:57.448] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:57.449] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
-[2026-04-15 18:12:57.450] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"C":0.5}
-[2026-04-15 18:12:57.450] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:12:57"}
-[2026-04-15 18:12:57.451] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:57.452] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=C,suedtime
-[2026-04-15 18:12:57.702] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:12:57"}
-[2026-04-15 18:12:58.457] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:58.458] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
-[2026-04-15 18:12:58.459] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"B":0.25}
-[2026-04-15 18:12:58.459] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:12:58"}
-[2026-04-15 18:12:58.460] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:58.461] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=B,suedtime
-[2026-04-15 18:12:58.560] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:12:58"}
-[2026-04-15 18:12:59.462] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:12:59.463] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
-[2026-04-15 18:12:59.464] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"L":600}
-[2026-04-15 18:12:59.464] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:12:59"}
-[2026-04-15 18:12:59.465] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:12:59.465] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=L,suedtime
-[2026-04-15 18:12:59.560] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"L":600,"suedtime":"2026-04-15 18:12:59"}
-[2026-04-15 18:13:00.465] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:13:00.466] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
-[2026-04-15 18:13:00.467] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"D":320}
-[2026-04-15 18:13:00.468] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:13:00"}
-[2026-04-15 18:13:00.469] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:13:00.471] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=D,suedtime
-[2026-04-15 18:13:00.568] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"D":320,"suedtime":"2026-04-15 18:13:00"}
-[2026-04-15 18:13:01.470] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:13:01.471] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
-[2026-04-15 18:13:01.472] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"H":-100}
-[2026-04-15 18:13:01.473] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:13:01"}
-[2026-04-15 18:13:01.474] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:13:01.474] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=H,suedtime
-[2026-04-15 18:13:01.572] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"H":-100,"suedtime":"2026-04-15 18:13:01"}
-[2026-04-15 18:13:02.478] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:13:02.479] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
-[2026-04-15 18:13:02.480] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"o":120}
-[2026-04-15 18:13:02.481] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:13:02"}
-[2026-04-15 18:13:02.482] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:13:02.483] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=o,suedtime
-[2026-04-15 18:13:02.884] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"o":120,"suedtime":"2026-04-15 18:13:02"}
-[2026-04-15 18:13:03.486] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:13:03.487] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
-[2026-04-15 18:13:03.488] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"J":-80}
-[2026-04-15 18:13:03.489] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:13:03"}
-[2026-04-15 18:13:03.489] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:13:03.490] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=J,suedtime
-[2026-04-15 18:13:03.781] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"J":-80,"suedtime":"2026-04-15 18:13:03"}
-[2026-04-15 18:13:04.492] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:13:04.493] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
-[2026-04-15 18:13:04.494] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"U":2048}
-[2026-04-15 18:13:04.495] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:13:04"}
-[2026-04-15 18:13:04.496] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:13:04.497] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=U,suedtime
-[2026-04-15 18:13:04.586] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"U":2048,"suedtime":"2026-04-15 18:13:04"}
-[2026-04-15 18:13:05.505] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:13:05.506] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
-[2026-04-15 18:13:05.507] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"G":12.3}
-[2026-04-15 18:13:05.507] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:13:05"}
-[2026-04-15 18:13:05.508] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:13:05.509] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=G,suedtime
-[2026-04-15 18:13:05.614] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"G":12.3,"suedtime":"2026-04-15 18:13:05"}
-[2026-04-15 18:13:06.518] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:13:06.519] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
-[2026-04-15 18:13:06.520] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"Na":140}
-[2026-04-15 18:13:06.521] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:13:06"}
-[2026-04-15 18:13:06.521] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:13:06.522] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=Na,suedtime
-[2026-04-15 18:13:06.628] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"Na":140,"suedtime":"2026-04-15 18:13:06"}
-[2026-04-15 18:13:07.531] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:13:07.532] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
-[2026-04-15 18:13:07.533] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"HCO3":25}
-[2026-04-15 18:13:07.534] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:13:07"}
-[2026-04-15 18:13:07.534] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:13:07.535] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=HCO3,suedtime
-[2026-04-15 18:13:07.636] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"HCO3":25,"suedtime":"2026-04-15 18:13:07"}
-[2026-04-15 18:13:08.537] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:13:08.539] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
-[2026-04-15 18:13:08.540] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"F":37.5}
-[2026-04-15 18:13:08.541] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:13:08"}
-[2026-04-15 18:13:08.542] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:13:08.543] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=F,suedtime
-[2026-04-15 18:13:08.644] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"F":37.5,"suedtime":"2026-04-15 18:13:08"}
-[2026-04-15 18:13:09.547] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:13:09.548] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
-[2026-04-15 18:13:09.549] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"A":1.234}
-[2026-04-15 18:13:09.550] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:13:09"}
-[2026-04-15 18:13:09.551] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:13:09.551] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=A,suedtime
-[2026-04-15 18:13:09.653] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"A":1.234,"suedtime":"2026-04-15 18:13:09"}
-[2026-04-15 18:13:10.557] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:13:10.558] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
-[2026-04-15 18:13:10.559] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"sysj":90}
-[2026-04-15 18:13:10.560] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:13:10"}
-[2026-04-15 18:13:10.560] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:13:10.561] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=sysj,suedtime
-[2026-04-15 18:13:10.652] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"sysj":90,"suedtime":"2026-04-15 18:13:10"}
-[2026-04-15 18:13:11.561] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:13:11.562] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
-[2026-04-15 18:13:11.563] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"C":0.5}
-[2026-04-15 18:13:11.564] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:13:11"}
-[2026-04-15 18:13:11.564] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:13:11.565] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=C,suedtime
-[2026-04-15 18:13:11.654] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"C":0.5,"suedtime":"2026-04-15 18:13:11"}
-[2026-04-15 18:13:12.572] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
-[2026-04-15 18:13:12.573] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
-[2026-04-15 18:13:12.574] [INFO] [APP] 指标分发 deviceId=JH-10235221005A channels=aliyun metric={"B":0.25}
-[2026-04-15 18:13:12.575] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:13:12"}
-[2026-04-15 18:13:12.576] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
-[2026-04-15 18:13:12.576] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=B,suedtime
-[2026-04-15 18:13:12.667] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"B":0.25,"suedtime":"2026-04-15 18:13:12"}
-[2026-04-15 18:13:12.779] [INFO] [TCP] 设备已断开 deviceId=JH-10235221005A ip=127.0.0.1 activeSessions=0
-[2026-04-15 18:13:17.269] [WARN] [APP] 收到 SIGINT,开始停止服务
-[2026-04-15 18:13:17.270] [INFO] [TCP] 开始停止 TCP 服务 activeSessions=0
-[2026-04-15 18:13:17.272] [INFO] [TCP] TCP 服务已停止
-[2026-04-15 18:13:17.272] [INFO] [ALIYUN] 开始停止阿里云服务 contexts=1
-[2026-04-15 18:13:17.317] [INFO] [ALIYUN] 连接关闭 deviceId=JH-10235221005A
-[2026-04-15 18:13:17.318] [INFO] [ALIYUN] 阿里云服务已停止
-[2026-04-15 18:13:17.319] [INFO] [APP] 服务已全部停止,进程退出
diff --git a/build/ncc/logs/jhm-service-20260430.log b/build/ncc/logs/jhm-service-20260430.log
new file mode 100644
index 0000000..74f2fdd
--- /dev/null
+++ b/build/ncc/logs/jhm-service-20260430.log
@@ -0,0 +1,7717 @@
+[2026-04-30 08:25:44.847] [INFO] [APP] 本地日志已启用 dir=D:\gitData\JHM\logs file=D:\gitData\JHM\logs\jhm-service-20260430.log level=info
+[2026-04-30 08:25:44.848] [INFO] [APP] 配置加载完成 tcp=0.0.0.0:9000 devices=3 channels=aliyun sendMode=batch flushIntervalMs=60000 alModel=D:\gitData\JHM\alModel.json
+[2026-04-30 08:25:44.850] [INFO] [APP] 正在启动阿里云通道
+[2026-04-30 08:25:44.851] [INFO] [ALIYUN] 阿里云服务已启用 tupleApi=https://things.icoldchain.cn/device/info/getAliyunDeviceSecret autoRegister=1 retryMs=60000
+[2026-04-30 08:25:44.884] [INFO] [TCP] 已开始监听 0.0.0.0:9000 devices=3 maxConnections=100
+[2026-04-30 08:25:44.885] [INFO] [APP] 所有服务已启动
+[2026-04-30 08:25:50.461] [INFO] [TCP] 设备已连接 deviceId=JH-10235221005A ip=127.0.0.1 port=63092 activeSessions=1
+[2026-04-30 08:25:50.465] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:25:50.467] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:25:50.468] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:25:51.470] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:25:51.471] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:25:51.472] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:25:52.475] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:25:52.476] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:25:52.477] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:25:53.479] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:25:53.480] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:25:53.481] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:25:54.491] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:25:54.493] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:25:54.493] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:25:55.492] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:25:55.493] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:25:55.494] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:25:56.493] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:25:56.494] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:25:56.495] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:25:57.508] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:25:57.509] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:25:57.510] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:25:58.522] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:25:58.524] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:25:58.526] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:25:59.534] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:25:59.536] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:25:59.538] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:26:00.547] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:00.549] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:26:00.550] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:26:01.558] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:01.559] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:26:01.560] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:26:02.560] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:02.561] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:26:02.562] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:26:03.575] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:03.576] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:26:03.576] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:26:04.575] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:26:04.576] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:26:04"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:26:04.577] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:26:04"}
+[2026-04-30 08:26:05.589] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:05.590] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:26:05.591] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:26:06.591] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:06.592] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:26:06.593] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:26:07.599] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:07.599] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:26:07.600] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:26:08.613] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:08.614] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:26:08.615] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:26:09.624] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:09.625] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:26:09.625] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:26:10.629] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:10.630] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:26:10.631] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:26:11.636] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:11.637] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:26:11.638] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:26:12.643] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:12.644] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:26:12.645] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:26:13.652] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:13.653] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:26:13.653] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:26:14.663] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:14.665] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:26:14.665] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:26:15.666] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:15.667] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:26:15.668] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:26:16.670] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:16.671] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:26:16.671] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:26:17.675] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:17.677] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:26:17.677] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:26:18.689] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:18.690] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:26:18.690] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:26:19.701] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:26:19.701] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:26:19"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:26:19.702] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:26:19"}
+[2026-04-30 08:26:20.704] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:20.704] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:26:20.705] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:26:21.713] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:21.714] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:26:21.714] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:26:22.725] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:22.726] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:26:22.727] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:26:23.724] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:23.726] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:26:23.727] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:26:24.734] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:24.735] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:26:24.736] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:26:25.749] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:25.751] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:26:25.752] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:26:26.757] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:26.759] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:26:26.760] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:26:27.761] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:27.762] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:26:27.763] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:26:28.769] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:28.770] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:26:28.771] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:26:29.780] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:29.781] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:26:29.782] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:26:30.790] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:30.791] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:26:30.791] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:26:31.793] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:31.794] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:26:31.795] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:26:32.806] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:32.807] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:26:32.807] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:26:33.818] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:33.819] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:26:33.820] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:26:34.824] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:26:34.825] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:26:34"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:26:34.825] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:26:34"}
+[2026-04-30 08:26:35.834] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:35.835] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:26:35.836] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:26:36.844] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:36.845] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:26:36.846] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:26:37.857] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:37.858] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:26:37.858] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:26:38.867] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:38.868] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:26:38.869] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:26:39.875] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:39.876] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:26:39.876] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:26:40.878] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:40.879] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:26:40.880] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:26:41.886] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:41.887] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:26:41.888] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:26:42.898] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:42.899] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:26:42.899] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:26:43.909] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:43.909] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:26:43.910] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:26:44.919] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:44.920] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:26:44.920] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:26:45.919] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:45.921] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:26:45.921] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:26:46.931] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:46.931] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:26:46.932] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:26:47.939] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:47.940] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:26:47.941] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:26:48.947] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:48.948] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:26:48.949] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:26:49.960] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:26:49.961] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:26:49"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:26:49.961] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:26:49"}
+[2026-04-30 08:26:50.959] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:50.960] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:26:50.961] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:26:51.960] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:51.960] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:26:51.961] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:26:52.971] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:52.971] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:26:52.972] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:26:53.983] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:53.984] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:26:53.984] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:26:54.993] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:54.995] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:26:54.995] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:26:55.998] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:55.999] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:26:56.000] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:26:57.002] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:57.003] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:26:57.004] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:26:58.011] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:58.013] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:26:58.014] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:26:59.017] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:26:59.018] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:26:59.018] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:27:00.011] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:26:49"}
+[2026-04-30 08:27:00.013] [INFO] [ALIYUN] 创建设备上下文 deviceId=JH-10235221005A
+[2026-04-30 08:27:00.014] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:26:49","suedtime":"2026-04-30 08:27:00"}
+[2026-04-30 08:27:00.016] [INFO] [ALIYUN] 开始请求三元组 deviceId=JH-10235221005A url=https://things.icoldchain.cn/device/info/getAliyunDeviceSecret
+[2026-04-30 08:27:00.176] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:00.178] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:27:00.178] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:27:00.435] [INFO] [ALIYUN] 三元组获取成功 deviceId=JH-10235221005A deviceName=JH-10235221005A
+[2026-04-30 08:27:00.436] [INFO] [ALIYUN] 开始创建设备连接 deviceId=JH-10235221005A deviceName=JH-10235221005A
+[2026-04-30 08:27:05.017] [INFO] [ALIYUN] 等待现有设备连接恢复 deviceId=JH-10235221005A
+[2026-04-30 08:27:05.024] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=32
+[2026-04-30 08:27:05.026] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:27:05.027] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:27:05.028] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:27:05.029] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:27:05.030] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:27:05.031] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:27:05.031] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:27:05.032] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:27:05.068] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:27:05.069] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:27:05"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:27:05.070] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:27:05"}
+[2026-04-30 08:27:05.155] [INFO] [ALIYUN] 设备连接成功 deviceId=JH-10235221005A
+[2026-04-30 08:27:05.157] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 08:27:05.302] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:26:49","suedtime":"2026-04-30 08:27:00"}
+[2026-04-30 08:27:06.077] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:06.078] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:27:06.079] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:27:07.087] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:07.088] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:27:07.089] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:27:08.097] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:08.098] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:27:08.098] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:27:09.105] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:09.106] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:27:09.107] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:27:10.113] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:10.114] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:27:10.114] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:27:11.127] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:11.128] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:27:11.129] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:27:12.136] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:12.137] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:27:12.138] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:27:13.141] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:13.142] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:27:13.143] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:27:14.142] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:14.144] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:27:14.144] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:27:15.145] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:15.146] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:27:15.147] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:27:16.145] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:16.146] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:27:16.147] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:27:17.147] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:17.148] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:27:17.148] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:27:18.149] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:18.150] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:27:18.151] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:27:19.151] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:19.153] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:27:19.154] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:27:20.166] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:27:20.181] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:27:20"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:27:20.196] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:27:20"}
+[2026-04-30 08:27:21.169] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:21.171] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:27:21.172] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:27:22.181] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:22.185] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:27:22.188] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:27:23.189] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:23.191] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:27:23.193] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:27:24.201] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:24.209] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:27:24.211] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:27:25.217] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:25.224] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:27:25.234] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:27:26.223] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:26.228] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:27:26.230] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:27:27.233] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:27.239] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:27:27.243] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:27:28.241] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:28.244] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:27:28.246] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:27:29.252] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:29.255] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:27:29.258] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:27:30.261] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:30.265] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:27:30.267] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:27:31.268] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:31.269] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:27:31.270] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:27:32.275] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:32.276] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:27:32.277] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:27:33.279] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:33.280] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:27:33.281] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:27:34.288] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:34.289] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:27:34.290] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:27:35.292] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:27:35.294] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:27:35"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:27:35.296] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:27:35"}
+[2026-04-30 08:27:36.303] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:36.305] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:27:36.306] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:27:37.309] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:37.311] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:27:37.312] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:27:38.310] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:38.311] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:27:38.312] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:27:39.318] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:39.320] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:27:39.322] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:27:40.322] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:40.324] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:27:40.325] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:27:41.328] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:41.329] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:27:41.330] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:27:42.331] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:42.333] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:27:42.334] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:27:43.339] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:43.340] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:27:43.342] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:27:44.350] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:44.351] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:27:44.352] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:27:45.358] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:45.359] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:27:45.360] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:27:46.366] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:46.367] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:27:46.368] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:27:47.377] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:47.378] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:27:47.379] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:27:48.385] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:48.387] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:27:48.388] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:27:49.394] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:49.395] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:27:49.396] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:27:50.402] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:27:50.403] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:27:50"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:27:50.405] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:27:50"}
+[2026-04-30 08:27:51.407] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:51.409] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:27:51.410] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:27:52.414] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:52.416] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:27:52.417] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:27:53.423] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:53.425] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:27:53.427] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:27:54.432] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:54.433] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:27:54.434] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:27:55.446] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:55.448] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:27:55.449] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:27:56.452] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:56.453] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:27:56.454] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:27:57.463] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:57.464] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:27:57.465] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:27:58.473] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:58.474] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:27:58.475] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:27:59.483] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:27:59.484] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:27:59.485] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:28:00.495] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:00.496] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:28:00.498] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:28:01.505] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:01.507] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:28:01.508] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:28:02.514] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:02.515] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:28:02.516] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:28:03.525] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:03.526] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:28:03.527] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:28:04.535] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:04.536] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:28:04.537] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:28:05.543] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:28:05.545] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:28:05"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:28:05.546] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:28:05"}
+[2026-04-30 08:28:06.546] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:06.548] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:28:06.549] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:28:07.551] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:07.553] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:28:07.554] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:28:08.555] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:08.557] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:28:08.558] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:28:09.564] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:09.565] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:28:09.566] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:28:10.564] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:10.566] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:28:10.567] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:28:11.565] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:11.568] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:28:11.569] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:28:12.576] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:12.578] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:28:12.579] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:28:13.581] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:13.583] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:28:13.584] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:28:14.588] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:14.590] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:28:14.591] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:28:15.595] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:15.597] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:28:15.598] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:28:16.602] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:16.604] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:28:16.605] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:28:17.617] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:17.618] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:28:17.619] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:28:18.630] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:18.632] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:28:18.633] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:28:19.645] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:19.646] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:28:19.647] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:28:20.647] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:28:20.649] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:28:20"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:28:20.650] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:28:20"}
+[2026-04-30 08:28:21.661] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:21.663] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:28:21.664] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:28:22.675] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:22.677] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:28:22.678] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:28:23.678] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:23.680] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:28:23.681] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:28:24.681] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:24.683] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:28:24.684] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:28:25.695] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:25.697] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:28:25.698] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:28:26.710] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:26.712] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:28:26.712] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:28:27.712] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:27.713] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:28:27.715] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:28:28.713] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:28.715] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:28:28.716] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:28:29.716] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:29.718] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:28:29.719] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:28:30.718] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:30.719] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:28:30.720] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:28:31.718] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:31.719] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:28:31.720] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:28:32.733] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:32.734] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:28:32.735] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:28:33.747] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:33.749] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:28:33.750] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:28:34.750] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:34.752] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:28:34.753] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:28:35.755] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:28:35.757] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:28:35"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:28:35.758] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:28:35"}
+[2026-04-30 08:28:36.767] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:36.768] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:28:36.769] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:28:37.776] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:37.778] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:28:37.779] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:28:38.791] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:38.793] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:28:38.794] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:28:39.805] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:39.806] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:28:39.807] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:28:40.810] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:40.811] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:28:40.812] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:28:41.810] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:41.812] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:28:41.813] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:28:42.812] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:42.813] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:28:42.815] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:28:43.814] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:43.815] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:28:43.817] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:28:44.815] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:44.817] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:28:44.818] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:28:45.831] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:45.832] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:28:45.833] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:28:46.846] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:46.847] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:28:46.848] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:28:47.861] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:47.862] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:28:47.863] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:28:48.862] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:48.863] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:28:48.865] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:28:49.862] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:49.865] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:28:49.866] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:28:50.878] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:28:50.879] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:28:50"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:28:50.880] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:28:50"}
+[2026-04-30 08:28:51.882] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:51.884] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:28:51.885] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:28:52.898] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:52.899] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:28:52.901] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:28:53.910] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:53.911] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:28:53.913] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:28:54.924] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:54.928] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:28:54.930] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:28:55.936] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:55.938] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:28:55.939] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:28:56.951] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:56.952] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:28:56.953] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:28:57.952] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:57.954] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:28:57.955] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:28:58.966] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:58.968] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:28:58.969] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:28:59.982] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:28:59.983] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:28:59.984] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:29:00.013] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:28:50"}
+[2026-04-30 08:29:00.014] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:28:50","suedtime":"2026-04-30 08:29:00"}
+[2026-04-30 08:29:00.016] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 08:29:00.018] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 08:29:00.123] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:28:50","suedtime":"2026-04-30 08:29:00"}
+[2026-04-30 08:29:00.988] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:00.990] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:29:00.991] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:29:01.990] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:01.991] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:29:01.992] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:29:02.996] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:02.997] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:29:02.998] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:29:04.000] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:04.001] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:29:04.002] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:29:05.001] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:05.003] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:29:05.004] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:29:06.014] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:29:06.016] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:29:06"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:29:06.018] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:29:06"}
+[2026-04-30 08:29:07.030] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:07.032] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:29:07.033] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:29:08.044] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:08.047] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:29:08.048] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:29:09.058] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:09.060] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:29:09.061] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:29:10.061] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:10.064] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:29:10.066] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:29:11.074] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:11.076] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:29:11.077] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:29:12.086] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:12.087] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:29:12.088] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:29:13.098] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:13.099] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:29:13.100] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:29:14.100] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:14.102] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:29:14.103] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:29:15.108] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:15.109] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:29:15.109] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:29:16.120] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:16.121] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:29:16.122] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:29:17.129] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:17.131] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:29:17.132] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:29:18.131] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:18.132] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:29:18.133] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:29:19.146] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:19.149] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:29:19.151] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:29:20.158] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:20.159] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:29:20.160] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:29:21.160] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:29:21.162] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:29:21"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:29:21.164] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:29:21"}
+[2026-04-30 08:29:22.173] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:22.174] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:29:22.176] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:29:23.182] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:23.183] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:29:23.183] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:29:24.198] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:24.200] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:29:24.201] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:29:25.208] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:25.209] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:29:25.210] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:29:26.222] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:26.224] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:29:26.225] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:29:27.236] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:27.237] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:29:27.238] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:29:28.244] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:28.245] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:29:28.246] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:29:29.259] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:29.260] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:29:29.261] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:29:30.259] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:30.260] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:29:30.261] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:29:31.260] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:31.261] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:29:31.262] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:29:32.261] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:32.262] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:29:32.263] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:29:33.271] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:33.272] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:29:33.272] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:29:34.272] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:34.274] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:29:34.274] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:29:35.286] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:35.287] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:29:35.288] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:29:36.300] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:29:36.301] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:29:36"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:29:36.302] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:29:36"}
+[2026-04-30 08:29:37.314] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:37.315] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:29:37.315] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:29:38.328] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:38.329] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:29:38.330] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:29:39.342] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:39.343] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:29:39.344] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:29:40.352] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:40.352] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:29:40.353] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:29:41.365] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:41.366] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:29:41.366] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:29:42.365] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:42.366] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:29:42.366] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:29:43.380] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:43.381] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:29:43.382] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:29:44.387] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:44.389] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:29:44.390] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:29:45.401] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:45.402] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:29:45.407] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:29:46.416] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:46.417] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:29:46.417] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:29:47.416] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:47.417] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:29:47.418] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:29:48.428] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:48.429] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:29:48.430] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:29:49.441] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:49.442] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:29:49.442] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:29:50.452] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:50.453] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:29:50.454] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:29:51.453] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:29:51.454] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:29:51"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:29:51.455] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:29:51"}
+[2026-04-30 08:29:52.468] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:52.469] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:29:52.470] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:29:53.468] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:53.469] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:29:53.470] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:29:54.482] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:54.483] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:29:54.484] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:29:55.497] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:55.498] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:29:55.498] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:29:56.513] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:56.514] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:29:56.515] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:29:57.527] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:57.528] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:29:57.529] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:29:58.539] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:58.540] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:29:58.541] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:29:59.552] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:29:59.552] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:29:59.553] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:30:00.565] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:00.566] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:30:00.568] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:30:01.579] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:01.580] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:30:01.580] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:30:02.580] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:02.581] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:30:02.582] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:30:03.593] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:03.594] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:30:03.595] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:30:04.607] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:04.608] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:30:04.608] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:30:05.608] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:05.609] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:30:05.610] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:30:06.623] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:30:06.624] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:30:06"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:30:06.625] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:30:06"}
+[2026-04-30 08:30:07.634] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:07.635] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:30:07.635] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:30:08.648] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:08.649] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:30:08.649] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:30:09.648] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:09.649] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:30:09.650] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:30:10.650] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:10.651] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:30:10.651] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:30:11.663] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:11.664] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:30:11.665] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:30:12.677] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:12.678] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:30:12.679] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:30:13.677] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:13.678] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:30:13.679] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:30:14.680] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:14.681] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:30:14.682] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:30:15.690] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:15.691] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:30:15.692] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:30:16.701] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:16.702] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:30:16.703] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:30:17.714] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:17.715] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:30:17.716] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:30:18.714] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:18.715] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:30:18.716] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:30:19.718] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:19.719] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:30:19.719] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:30:20.718] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:20.719] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:30:20.719] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:30:21.730] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:30:21.731] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:30:21"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:30:21.732] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:30:21"}
+[2026-04-30 08:30:22.732] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:22.733] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:30:22.734] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:30:23.750] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:23.751] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:30:23.752] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:30:24.760] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:24.761] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:30:24.762] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:30:25.764] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:25.765] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:30:25.766] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:30:26.779] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:26.781] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:30:26.781] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:30:27.793] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:27.794] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:30:27.795] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:30:28.805] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:28.806] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:30:28.807] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:30:29.816] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:29.817] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:30:29.817] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:30:30.817] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:30.818] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:30:30.818] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:30:31.817] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:31.818] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:30:31.818] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:30:32.830] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:32.831] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:30:32.832] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:30:33.844] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:33.845] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:30:33.846] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:30:34.855] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:34.856] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:30:34.857] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:30:35.868] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:35.869] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:30:35.870] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:30:36.882] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:30:36.883] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:30:36"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:30:36.883] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:30:36"}
+[2026-04-30 08:30:37.896] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:37.897] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:30:37.898] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:30:38.899] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:38.900] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:30:38.901] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:30:39.913] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:39.914] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:30:39.915] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:30:40.927] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:40.928] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:30:40.929] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:30:41.938] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:41.939] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:30:41.939] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:30:42.938] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:42.939] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:30:42.940] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:30:43.948] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:43.949] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:30:43.951] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:30:44.961] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:44.962] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:30:44.962] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:30:45.963] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:45.964] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:30:45.965] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:30:46.978] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:46.979] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:30:46.984] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:30:47.992] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:47.993] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:30:47.994] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:30:49.005] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:49.006] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:30:49.007] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:30:50.019] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:50.020] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:30:50.022] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:30:51.030] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:51.031] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:30:51.032] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:30:52.043] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:30:52.044] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:30:52"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:30:52.044] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:30:52"}
+[2026-04-30 08:30:53.057] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:53.058] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:30:53.059] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:30:54.068] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:54.069] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:30:54.070] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:30:55.083] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:55.084] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:30:55.087] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:30:56.094] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:56.095] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:30:56.096] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:30:57.112] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:57.114] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:30:57.115] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:30:58.125] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:58.126] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:30:58.127] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:30:59.137] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:30:59.139] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:30:59.139] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:31:00.012] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:30:52"}
+[2026-04-30 08:31:00.013] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:30:52","suedtime":"2026-04-30 08:31:00"}
+[2026-04-30 08:31:00.013] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 08:31:00.014] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 08:31:00.118] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:30:52","suedtime":"2026-04-30 08:31:00"}
+[2026-04-30 08:31:00.137] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:00.138] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:31:00.139] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:31:01.149] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:01.150] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:31:01.151] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:31:02.165] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:02.166] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:31:02.167] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:31:03.179] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:03.180] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:31:03.182] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:31:04.190] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:04.191] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:31:04.192] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:31:05.205] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:05.206] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:31:05.207] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:31:06.208] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:06.210] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:31:06.211] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:31:07.223] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:31:07.224] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:31:07"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:31:07.224] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:31:07"}
+[2026-04-30 08:31:08.237] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:08.238] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:31:08.239] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:31:09.237] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:09.239] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:31:09.240] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:31:10.251] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:10.252] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:31:10.253] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:31:11.261] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:11.263] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:31:11.263] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:31:12.276] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:12.277] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:31:12.278] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:31:13.289] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:13.290] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:31:13.291] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:31:14.290] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:14.291] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:31:14.292] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:31:15.304] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:15.305] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:31:15.306] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:31:16.311] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:16.312] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:31:16.313] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:31:17.312] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:17.314] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:31:17.314] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:31:18.325] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:18.325] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:31:18.326] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:31:19.339] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:19.339] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:31:19.340] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:31:20.342] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:20.343] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:31:20.344] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:31:21.356] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:21.357] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:31:21.358] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:31:22.367] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:31:22.368] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:31:22"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:31:22.369] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:31:22"}
+[2026-04-30 08:31:23.368] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:23.369] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:31:23.370] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:31:24.371] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:24.372] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:31:24.373] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:31:25.384] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:25.384] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:31:25.385] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:31:26.385] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:26.386] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:31:26.387] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:31:27.398] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:27.399] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:31:27.400] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:31:28.410] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:28.411] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:31:28.411] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:31:29.425] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:29.426] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:31:29.427] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:31:30.440] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:30.441] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:31:30.442] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:31:31.451] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:31.452] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:31:31.453] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:31:32.462] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:32.463] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:31:32.464] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:31:33.469] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:33.470] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:31:33.471] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:31:34.481] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:34.482] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:31:34.483] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:31:35.493] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:35.495] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:31:35.495] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:31:36.495] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:36.496] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:31:36.497] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:31:37.509] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:31:37.510] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:31:37"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:31:37.510] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:31:37"}
+[2026-04-30 08:31:38.523] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:38.525] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:31:38.526] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:31:39.525] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:39.526] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:31:39.526] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:31:40.539] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:40.540] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:31:40.541] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:31:41.541] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:41.542] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:31:41.543] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:31:42.556] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:42.557] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:31:42.557] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:31:43.557] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:43.559] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:31:43.560] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:31:44.561] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:44.562] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:31:44.563] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:31:45.567] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:45.568] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:31:45.569] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:31:46.572] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:46.573] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:31:46.573] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:31:47.585] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:47.586] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:31:47.586] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:31:48.594] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:48.596] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:31:48.596] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:31:49.609] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:49.611] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:31:49.611] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:31:50.623] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:50.624] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:31:50.624] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:31:51.636] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:51.636] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:31:51.637] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:31:52.651] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:31:52.652] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:31:52"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:31:52.652] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:31:52"}
+[2026-04-30 08:31:53.666] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:53.667] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:31:53.668] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:31:54.680] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:54.681] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:31:54.681] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:31:55.694] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:55.695] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:31:55.696] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:31:56.706] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:56.707] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:31:56.707] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:31:57.718] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:57.719] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:31:57.720] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:31:58.718] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:58.719] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:31:58.720] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:31:59.732] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:31:59.733] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:31:59.733] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:32:00.747] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:00.748] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:32:00.749] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:32:01.758] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:01.759] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:32:01.760] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:32:02.773] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:02.774] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:32:02.775] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:32:03.786] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:03.787] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:32:03.788] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:32:04.801] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:04.802] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:32:04.803] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:32:05.805] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:05.806] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:32:05.806] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:32:06.816] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:06.817] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:32:06.818] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:32:07.827] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:32:07.829] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:32:07"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:32:07.829] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:32:07"}
+[2026-04-30 08:32:08.828] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:08.829] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:32:08.830] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:32:09.841] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:09.842] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:32:09.843] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:32:10.855] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:10.856] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:32:10.858] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:32:11.868] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:11.869] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:32:11.870] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:32:12.883] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:12.884] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:32:12.884] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:32:13.897] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:13.898] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:32:13.899] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:32:14.905] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:14.905] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:32:14.906] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:32:15.915] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:15.917] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:32:15.918] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:32:16.930] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:16.931] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:32:16.932] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:32:17.932] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:17.933] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:32:17.934] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:32:18.947] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:18.948] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:32:18.949] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:32:19.948] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:19.950] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:32:19.951] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:32:20.963] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:20.964] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:32:20.970] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:32:21.977] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:21.978] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:32:21.979] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:32:22.977] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:32:22.978] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:32:22"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:32:22.979] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:32:22"}
+[2026-04-30 08:32:23.992] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:23.993] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:32:24.000] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:32:25.007] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:25.008] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:32:25.009] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:32:26.008] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:26.010] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:32:26.011] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:32:27.021] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:27.022] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:32:27.023] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:32:28.030] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:28.031] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:32:28.032] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:32:29.045] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:29.047] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:32:29.049] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:32:30.057] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:30.058] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:32:30.059] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:32:31.058] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:31.058] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:32:31.059] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:32:32.059] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:32.060] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:32:32.060] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:32:33.072] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:33.074] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:32:33.076] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:32:34.086] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:34.087] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:32:34.088] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:32:35.088] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:35.089] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:32:35.090] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:32:36.103] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:36.104] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:32:36.105] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:32:37.111] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:37.112] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:32:37.113] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:32:38.126] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:32:38.127] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:32:38"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:32:38.127] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:32:38"}
+[2026-04-30 08:32:39.141] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:39.142] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:32:39.143] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:32:40.156] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:40.158] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:32:40.158] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:32:41.156] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:41.157] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:32:41.158] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:32:42.160] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:42.161] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:32:42.161] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:32:43.175] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:43.176] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:32:43.177] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:32:44.188] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:44.189] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:32:44.189] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:32:45.202] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:45.203] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:32:45.204] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:32:46.231] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:46.233] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:32:46.233] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:32:47.239] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:47.240] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:32:47.242] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:32:48.242] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:48.244] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:32:48.245] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:32:49.257] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:49.258] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:32:49.259] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:32:50.272] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:50.273] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:32:50.274] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:32:51.286] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:51.287] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:32:51.288] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:32:52.286] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:52.287] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:32:52.289] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:32:53.301] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:32:53.302] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:32:53"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:32:53.302] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:32:53"}
+[2026-04-30 08:32:54.306] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:54.307] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:32:54.308] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:32:55.317] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:55.318] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:32:55.319] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:32:56.332] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:56.333] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:32:56.334] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:32:57.347] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:57.348] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:32:57.349] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:32:58.347] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:58.347] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:32:58.348] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:32:59.360] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:32:59.362] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:32:59.363] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:33:00.001] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:32:53"}
+[2026-04-30 08:33:00.002] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:32:53","suedtime":"2026-04-30 08:33:00"}
+[2026-04-30 08:33:00.003] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 08:33:00.004] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 08:33:00.120] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:32:53","suedtime":"2026-04-30 08:33:00"}
+[2026-04-30 08:33:00.360] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:00.361] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:33:00.362] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:33:01.363] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:01.365] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:33:01.366] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:33:02.374] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:02.375] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:33:02.376] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:33:03.387] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:03.388] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:33:03.388] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:33:04.402] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:04.403] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:33:04.403] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:33:05.418] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:05.419] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:33:05.419] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:33:06.419] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:06.419] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:33:06.420] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:33:07.431] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:07.432] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:33:07.433] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:33:08.445] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:33:08.446] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:33:08"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:33:08.446] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:33:08"}
+[2026-04-30 08:33:09.446] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:09.447] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:33:09.447] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:33:10.456] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:10.456] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:33:10.457] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:33:11.459] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:11.460] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:33:11.460] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:33:12.471] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:12.471] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:33:12.472] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:33:13.474] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:13.475] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:33:13.476] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:33:14.489] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:14.491] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:33:14.491] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:33:15.503] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:15.504] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:33:15.504] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:33:16.517] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:16.519] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:33:16.519] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:33:17.517] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:17.518] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:33:17.519] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:33:18.533] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:18.534] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:33:18.535] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:33:19.547] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:19.548] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:33:19.549] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:33:20.551] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:20.552] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:33:20.553] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:33:21.561] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:21.561] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:33:21.562] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:33:22.562] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:22.562] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:33:22.563] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:33:23.569] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:33:23.570] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:33:23"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:33:23.570] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:33:23"}
+[2026-04-30 08:33:24.582] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:24.583] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:33:24.584] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:33:25.585] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:25.586] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:33:25.587] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:33:26.592] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:26.593] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:33:26.594] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:33:27.596] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:27.596] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:33:27.597] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:33:28.598] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:28.599] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:33:28.600] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:33:29.612] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:29.613] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:33:29.614] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:33:30.613] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:30.614] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:33:30.616] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:33:31.614] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:31.615] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:33:31.615] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:33:32.626] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:32.626] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:33:32.627] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:33:33.627] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:33.628] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:33:33.628] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:33:34.630] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:34.631] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:33:34.632] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:33:35.636] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:35.637] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:33:35.638] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:33:36.649] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:36.650] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:33:36.650] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:33:37.660] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:37.661] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:33:37.662] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:33:38.663] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:33:38.664] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:33:38"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:33:38.665] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:33:38"}
+[2026-04-30 08:33:39.663] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:39.664] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:33:39.664] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:33:40.667] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:40.668] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:33:40.669] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:33:41.679] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:41.680] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:33:41.681] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:33:42.690] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:42.691] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:33:42.692] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:33:43.700] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:43.701] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:33:43.702] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:33:44.710] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:44.711] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:33:44.711] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:33:45.723] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:45.725] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:33:45.725] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:33:46.723] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:46.724] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:33:46.725] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:33:47.738] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:47.739] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:33:47.739] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:33:48.738] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:48.739] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:33:48.740] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:33:49.752] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:49.753] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:33:49.753] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:33:50.753] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:50.755] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:33:50.756] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:33:51.755] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:51.756] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:33:51.757] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:33:52.769] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:52.770] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:33:52.771] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:33:53.784] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:33:53.785] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:33:53"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:33:53.786] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:33:53"}
+[2026-04-30 08:33:54.796] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:54.797] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:33:54.798] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:33:55.798] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:55.799] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:33:55.799] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:33:56.812] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:56.813] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:33:56.814] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:33:57.825] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:57.826] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:33:57.827] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:33:58.824] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:58.826] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:33:58.827] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:33:59.840] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:33:59.841] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:33:59.845] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:34:00.842] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:00.843] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:34:00.844] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:34:01.855] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:01.856] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:34:01.857] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:34:02.856] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:02.857] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:34:02.858] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:34:03.857] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:03.858] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:34:03.859] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:34:04.872] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:04.873] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:34:04.873] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:34:05.887] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:05.888] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:34:05.888] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:34:06.901] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:06.903] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:34:06.903] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:34:07.914] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:07.915] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:34:07.916] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:34:08.916] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:34:08.917] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:34:08"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:34:08.919] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:34:08"}
+[2026-04-30 08:34:09.931] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:09.932] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:34:09.933] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:34:10.944] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:10.945] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:34:10.946] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:34:11.955] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:11.956] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:34:11.956] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:34:12.970] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:12.970] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:34:12.971] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:34:13.984] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:13.985] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:34:13.986] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:34:14.997] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:14.998] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:34:14.999] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:34:15.997] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:15.999] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:34:16.000] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:34:17.009] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:17.010] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:34:17.011] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:34:18.010] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:18.011] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:34:18.012] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:34:19.021] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:19.022] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:34:19.023] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:34:20.021] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:20.022] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:34:20.022] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:34:21.036] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:21.038] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:34:21.038] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:34:22.052] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:22.053] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:34:22.054] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:34:23.056] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:23.057] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:34:23.059] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:34:24.069] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:34:24.070] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:34:24"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:34:24.070] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:34:24"}
+[2026-04-30 08:34:25.082] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:25.083] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:34:25.083] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:34:26.082] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:26.083] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:34:26.084] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:34:27.096] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:27.097] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:34:27.098] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:34:28.098] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:28.099] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:34:28.099] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:34:29.102] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:29.102] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:34:29.103] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:34:30.117] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:30.118] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:34:30.118] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:34:31.131] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:31.131] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:34:31.132] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:34:32.131] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:32.132] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:34:32.133] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:34:33.132] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:33.134] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:34:33.134] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:34:34.133] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:34.135] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:34:34.135] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:34:35.135] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:35.136] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:34:35.137] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:34:36.149] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:36.150] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:34:36.150] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:34:37.164] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:37.165] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:34:37.173] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:34:38.164] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:38.166] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:34:38.167] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:34:39.178] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:34:39.179] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:34:39"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:34:39.183] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:34:39"}
+[2026-04-30 08:34:40.182] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:40.183] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:34:40.184] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:34:41.196] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:41.197] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:34:41.199] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:34:42.209] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:42.210] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:34:42.210] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:34:43.224] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:43.225] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:34:43.226] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:34:44.237] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:44.239] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:34:44.239] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:34:45.251] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:45.253] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:34:45.254] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:34:46.263] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:46.264] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:34:46.265] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:34:47.279] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:47.280] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:34:47.281] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:34:48.284] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:48.285] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:34:48.286] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:34:49.297] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:49.298] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:34:49.299] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:34:50.311] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:50.312] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:34:50.313] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:34:51.311] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:51.312] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:34:51.312] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:34:52.325] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:52.326] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:34:52.327] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:34:53.335] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:53.336] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:34:53.337] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:34:54.351] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:34:54.352] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:34:54"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:34:54.353] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:34:54"}
+[2026-04-30 08:34:55.364] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:55.365] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:34:55.366] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:34:56.377] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:56.378] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:34:56.378] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:34:57.392] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:57.393] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:34:57.393] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:34:58.406] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:58.407] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:34:58.410] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:34:59.418] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:34:59.419] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:34:59.420] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:35:00.005] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:34:54"}
+[2026-04-30 08:35:00.007] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:34:54","suedtime":"2026-04-30 08:35:00"}
+[2026-04-30 08:35:00.008] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 08:35:00.009] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 08:35:00.114] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:34:54","suedtime":"2026-04-30 08:35:00"}
+[2026-04-30 08:35:00.424] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:00.425] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:35:00.425] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:35:01.436] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:01.438] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:35:01.438] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:35:02.450] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:02.451] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:35:02.451] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:35:03.460] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:03.461] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:35:03.461] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:35:04.470] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:04.471] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:35:04.472] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:35:05.485] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:05.485] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:35:05.487] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:35:06.488] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:06.489] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:35:06.490] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:35:07.501] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:07.501] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:35:07.502] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:35:08.513] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:08.514] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:35:08.515] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:35:09.525] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:35:09.527] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:35:09"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:35:09.528] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:35:09"}
+[2026-04-30 08:35:10.526] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:10.526] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:35:10.527] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:35:11.538] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:11.539] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:35:11.540] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:35:12.540] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:12.542] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:35:12.542] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:35:13.553] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:13.554] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:35:13.554] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:35:14.567] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:14.568] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:35:14.568] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:35:15.571] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:15.572] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:35:15.572] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:35:16.581] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:16.582] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:35:16.582] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:35:17.588] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:17.589] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:35:17.590] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:35:18.599] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:18.600] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:35:18.600] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:35:19.600] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:19.601] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:35:19.602] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:35:20.616] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:20.617] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:35:20.619] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:35:21.629] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:21.630] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:35:21.630] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:35:22.641] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:22.641] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:35:22.642] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:35:23.656] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:23.657] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:35:23.658] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:35:24.669] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:35:24.669] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:35:24"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:35:24.670] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:35:24"}
+[2026-04-30 08:35:25.669] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:25.671] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:35:25.673] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:35:26.683] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:26.684] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:35:26.684] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:35:27.694] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:27.695] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:35:27.696] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:35:28.695] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:28.696] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:35:28.697] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:35:29.705] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:29.706] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:35:29.707] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:35:30.707] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:30.708] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:35:30.709] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:35:31.714] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:31.715] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:35:31.716] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:35:32.724] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:32.725] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:35:32.726] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:35:33.736] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:33.737] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:35:33.738] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:35:34.748] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:34.749] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:35:34.750] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:35:35.750] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:35.750] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:35:35.751] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:35:36.749] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:36.750] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:35:36.750] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:35:37.762] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:37.763] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:35:37.764] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:35:38.777] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:38.779] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:35:38.779] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:35:39.789] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:35:39.790] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:35:39"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:35:39.790] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:35:39"}
+[2026-04-30 08:35:40.804] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:40.806] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:35:40.807] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:35:41.816] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:41.817] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:35:41.818] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:35:42.819] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:42.821] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:35:42.822] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:35:43.832] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:43.833] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:35:43.834] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:35:44.831] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:44.833] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:35:44.833] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:35:45.847] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:45.848] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:35:45.848] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:35:46.863] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:46.864] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:35:46.865] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:35:47.865] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:47.867] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:35:47.867] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:35:48.878] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:48.879] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:35:48.879] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:35:49.879] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:49.880] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:35:49.880] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:35:50.878] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:50.879] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:35:50.880] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:35:51.882] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:51.883] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:35:51.884] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:35:52.883] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:52.885] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:35:52.885] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:35:53.899] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:53.900] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:35:53.901] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:35:54.911] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:35:54.912] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:35:54"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:35:54.913] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:35:54"}
+[2026-04-30 08:35:55.926] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:55.928] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:35:55.940] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:35:56.936] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:56.936] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:35:56.937] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:35:57.950] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:57.951] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:35:57.951] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:35:58.965] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:58.965] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:35:58.966] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:35:59.978] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:35:59.979] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:35:59.979] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:36:00.979] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:00.980] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:36:00.981] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:36:01.992] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:01.992] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:36:01.993] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:36:03.007] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:03.007] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:36:03.008] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:36:04.021] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:04.023] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:36:04.024] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:36:05.030] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:05.031] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:36:05.032] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:36:06.031] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:06.032] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:36:06.033] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:36:07.036] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:07.037] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:36:07.038] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:36:08.037] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:08.038] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:36:08.038] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:36:09.049] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:09.050] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:36:09.051] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:36:10.051] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:36:10.052] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:36:10"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:36:10.053] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:36:10"}
+[2026-04-30 08:36:11.058] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:11.060] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:36:11.061] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:36:12.074] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:12.075] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:36:12.076] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:36:13.088] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:13.090] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:36:13.090] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:36:14.102] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:14.103] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:36:14.104] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:36:15.112] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:15.113] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:36:15.114] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:36:16.126] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:16.127] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:36:16.128] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:36:17.135] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:17.136] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:36:17.137] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:36:18.149] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:18.150] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:36:18.151] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:36:19.159] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:19.160] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:36:19.160] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:36:20.160] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:20.161] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:36:20.162] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:36:21.162] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:21.164] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:36:21.165] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:36:22.177] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:22.178] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:36:22.179] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:36:23.187] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:23.188] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:36:23.188] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:36:24.201] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:24.202] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:36:24.202] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:36:25.212] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:36:25.213] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:36:25"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:36:25.214] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:36:25"}
+[2026-04-30 08:36:26.226] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:26.227] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:36:26.227] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:36:27.238] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:27.239] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:36:27.241] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:36:28.252] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:28.253] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:36:28.254] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:36:29.261] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:29.264] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:36:29.265] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:36:30.271] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:30.272] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:36:30.273] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:36:31.283] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:31.285] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:36:31.287] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:36:32.298] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:32.299] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:36:32.300] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:36:33.309] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:33.310] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:36:33.311] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:36:34.311] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:34.312] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:36:34.313] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:36:35.324] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:35.325] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:36:35.326] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:36:36.329] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:36.330] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:36:36.330] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:36:37.332] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:37.333] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:36:37.334] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:36:38.332] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:38.333] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:36:38.334] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:36:39.336] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:39.337] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:36:39.338] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:36:40.348] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:36:40.349] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:36:40"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:36:40.354] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:36:40"}
+[2026-04-30 08:36:41.360] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:41.361] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:36:41.363] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:36:42.361] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:42.362] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:36:42.363] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:36:43.376] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:43.378] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:36:43.381] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:36:44.386] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:44.387] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:36:44.389] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:36:45.400] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:45.401] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:36:45.401] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:36:46.412] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:46.413] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:36:46.414] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:36:47.413] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:47.413] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:36:47.414] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:36:48.428] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:48.429] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:36:48.430] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:36:49.428] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:49.429] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:36:49.429] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:36:50.429] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:50.430] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:36:50.431] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:36:51.438] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:51.439] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:36:51.439] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:36:52.451] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:52.452] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:36:52.453] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:36:53.454] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:53.455] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:36:53.456] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:36:54.470] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:54.470] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:36:54.471] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:36:55.482] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:36:55.483] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:36:55"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:36:55.483] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:36:55"}
+[2026-04-30 08:36:56.495] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:56.496] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:36:56.496] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:36:57.503] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:57.505] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:36:57.505] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:36:58.503] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:58.504] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:36:58.505] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:36:59.513] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:36:59.514] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:36:59.515] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:37:00.010] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:36:55"}
+[2026-04-30 08:37:00.012] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:36:55","suedtime":"2026-04-30 08:37:00"}
+[2026-04-30 08:37:00.013] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 08:37:00.014] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 08:37:00.117] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:36:55","suedtime":"2026-04-30 08:37:00"}
+[2026-04-30 08:37:00.525] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:00.526] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:37:00.526] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:37:01.540] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:01.541] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:37:01.542] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:37:02.556] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:02.557] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:37:02.557] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:37:03.567] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:03.568] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:37:03.569] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:37:04.583] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:04.584] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:37:04.585] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:37:05.595] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:05.596] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:37:05.597] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:37:06.609] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:06.611] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:37:06.611] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:37:07.625] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:07.625] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:37:07.626] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:37:08.639] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:08.640] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:37:08.641] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:37:09.645] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:09.646] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:37:09.647] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:37:10.659] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:37:10.661] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:37:10"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:37:10.661] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:37:10"}
+[2026-04-30 08:37:11.672] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:11.673] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:37:11.674] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:37:12.688] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:12.690] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:37:12.691] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:37:13.700] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:13.701] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:37:13.702] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:37:14.716] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:14.718] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:37:14.719] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:37:15.730] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:15.733] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:37:15.734] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:37:16.746] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:16.746] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:37:16.747] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:37:17.758] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:17.760] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:37:17.761] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:37:18.773] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:18.775] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:37:18.776] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:37:19.788] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:19.790] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:37:19.791] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:37:20.798] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:20.803] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:37:20.805] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:37:21.812] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:21.813] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:37:21.814] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:37:22.827] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:22.828] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:37:22.829] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:37:23.841] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:23.842] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:37:23.843] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:37:24.841] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:24.842] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:37:24.844] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:37:25.844] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:37:25.847] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:37:25"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:37:25.848] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:37:25"}
+[2026-04-30 08:37:26.856] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:26.857] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:37:26.859] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:37:27.868] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:27.869] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:37:27.871] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:37:28.879] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:28.881] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:37:28.883] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:37:29.894] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:29.895] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:37:29.896] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:37:30.896] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:30.897] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:37:30.898] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:37:31.898] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:31.907] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:37:31.913] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:37:32.911] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:32.914] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:37:32.915] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:37:33.926] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:33.929] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:37:33.930] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:37:34.939] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:34.940] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:37:34.942] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:37:35.954] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:35.956] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:37:35.957] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:37:36.969] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:36.971] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:37:36.972] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:37:37.982] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:37.984] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:37:37.985] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:37:38.991] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:38.993] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:37:38.996] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:37:40.005] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:40.006] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:37:40.008] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:37:41.004] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:37:41.010] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:37:41"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:37:41.012] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:37:41"}
+[2026-04-30 08:37:42.011] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:42.014] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:37:42.015] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:37:43.023] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:43.024] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:37:43.025] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:37:44.032] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:44.033] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:37:44.034] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:37:45.033] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:45.034] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:37:45.035] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:37:46.046] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:46.048] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:37:46.049] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:37:47.060] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:47.063] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:37:47.064] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:37:48.076] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:48.077] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:37:48.079] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:37:49.077] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:49.078] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:37:49.079] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:37:50.091] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:50.093] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:37:50.094] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:37:51.106] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:51.108] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:37:51.110] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:37:52.107] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:52.108] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:37:52.109] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:37:53.120] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:53.123] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:37:53.124] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:37:54.133] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:54.135] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:37:54.136] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:37:55.144] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:55.146] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:37:55.147] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:37:56.158] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:37:56.159] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:37:56"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:37:56.160] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:37:56"}
+[2026-04-30 08:37:57.175] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:57.182] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:37:57.185] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:37:58.183] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:58.184] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:37:58.185] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:37:59.196] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:37:59.197] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:37:59.198] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:38:00.197] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:00.198] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:38:00.199] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:38:01.207] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:01.211] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:38:01.212] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:38:02.220] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:02.222] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:38:02.223] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:38:03.238] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:03.242] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:38:03.243] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:38:04.240] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:04.241] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:38:04.242] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:38:05.256] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:05.257] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:38:05.258] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:38:06.271] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:06.272] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:38:06.273] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:38:07.285] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:07.286] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:38:07.286] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:38:08.297] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:08.301] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:38:08.302] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:38:09.312] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:09.314] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:38:09.316] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:38:10.313] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:10.315] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:38:10.316] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:38:11.328] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:38:11.330] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:38:11"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:38:11.331] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:38:11"}
+[2026-04-30 08:38:12.342] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:12.346] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:38:12.347] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:38:13.345] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:13.347] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:38:13.348] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:38:14.353] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:14.355] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:38:14.356] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:38:15.364] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:15.367] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:38:15.368] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:38:16.367] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:16.370] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:38:16.372] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:38:17.379] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:17.381] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:38:17.382] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:38:18.379] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:18.381] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:38:18.383] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:38:19.394] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:19.396] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:38:19.399] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:38:20.409] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:20.411] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:38:20.413] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:38:21.424] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:21.426] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:38:21.428] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:38:22.425] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:22.427] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:38:22.429] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:38:23.438] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:23.439] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:38:23.442] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:38:24.439] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:24.441] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:38:24.443] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:38:25.453] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:25.457] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:38:25.459] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:38:26.465] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:38:26.467] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:38:26"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:38:26.468] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:38:26"}
+[2026-04-30 08:38:27.479] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:27.480] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:38:27.481] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:38:28.479] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:28.481] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:38:28.483] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:38:29.495] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:29.500] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:38:29.501] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:38:30.498] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:30.499] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:38:30.500] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:38:31.510] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:31.511] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:38:31.513] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:38:32.522] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:32.524] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:38:32.525] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:38:33.536] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:33.537] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:38:33.538] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:38:34.548] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:34.549] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:38:34.550] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:38:35.560] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:35.562] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:38:35.563] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:38:36.571] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:36.573] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:38:36.574] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:38:37.583] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:37.585] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:38:37.586] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:38:38.588] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:38.589] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:38:38.591] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:38:39.603] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:39.605] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:38:39.606] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:38:40.617] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:40.619] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:38:40.620] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:38:41.629] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:38:41.630] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:38:41"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:38:41.631] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:38:41"}
+[2026-04-30 08:38:42.640] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:42.642] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:38:42.643] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:38:43.655] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:43.657] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:38:43.658] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:38:44.670] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:44.671] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:38:44.673] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:38:45.682] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:45.684] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:38:45.685] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:38:46.683] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:46.686] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:38:46.686] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:38:47.698] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:47.700] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:38:47.701] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:38:48.700] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:48.702] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:38:48.703] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:38:49.715] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:49.717] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:38:49.718] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:38:50.715] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:50.721] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:38:50.722] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:38:51.715] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:51.717] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:38:51.719] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:38:52.729] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:52.732] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:38:52.733] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:38:53.744] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:53.745] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:38:53.747] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:38:54.757] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:54.759] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:38:54.759] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:38:55.760] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:55.762] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:38:55.763] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:38:56.771] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:38:56.774] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:38:56"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:38:56.775] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:38:56"}
+[2026-04-30 08:38:57.772] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:57.773] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:38:57.774] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:38:58.773] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:58.774] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:38:58.775] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:38:59.785] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:38:59.786] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:38:59.787] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:39:00.003] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:38:56"}
+[2026-04-30 08:39:00.005] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:38:56","suedtime":"2026-04-30 08:39:00"}
+[2026-04-30 08:39:00.006] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 08:39:00.008] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 08:39:00.114] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:38:56","suedtime":"2026-04-30 08:39:00"}
+[2026-04-30 08:39:00.796] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:00.798] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:39:00.799] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:39:01.798] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:01.799] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:39:01.801] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:39:02.809] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:02.810] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:39:02.811] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:39:03.822] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:03.823] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:39:03.824] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:39:04.834] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:04.835] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:39:04.836] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:39:05.835] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:05.836] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:39:05.837] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:39:06.849] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:06.850] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:39:06.851] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:39:07.850] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:07.851] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:39:07.852] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:39:08.868] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:08.869] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:39:08.870] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:39:09.884] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:09.885] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:39:09.886] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:39:10.899] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:10.900] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:39:10.901] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:39:11.900] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:39:11.902] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:39:11"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:39:11.903] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:39:11"}
+[2026-04-30 08:39:12.912] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:12.913] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:39:12.914] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:39:13.921] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:13.923] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:39:13.924] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:39:14.923] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:14.924] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:39:14.927] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:39:15.925] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:15.927] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:39:15.928] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:39:16.925] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:16.928] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:39:16.930] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:39:17.930] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:17.932] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:39:17.933] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:39:18.932] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:18.935] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:39:18.937] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:39:19.944] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:19.947] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:39:19.948] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:39:20.958] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:20.959] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:39:20.960] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:39:21.969] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:21.970] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:39:21.972] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:39:22.984] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:22.990] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:39:22.992] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:39:23.998] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:24.000] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:39:24.001] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:39:25.012] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:25.013] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:39:25.014] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:39:26.025] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:26.027] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:39:26.029] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:39:27.036] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:39:27.038] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:39:27"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:39:27.040] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:39:27"}
+[2026-04-30 08:39:28.051] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:28.053] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:39:28.054] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:39:29.056] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:29.057] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:39:29.058] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:39:30.067] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:30.069] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:39:30.070] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:39:31.072] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:31.074] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:39:31.075] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:39:32.074] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:32.076] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:39:32.077] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:39:33.083] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:33.084] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:39:33.085] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:39:34.098] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:34.100] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:39:34.101] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:39:35.112] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:35.113] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:39:35.113] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:39:36.125] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:36.125] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:39:36.127] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:39:37.140] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:37.140] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:39:37.141] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:39:38.142] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:38.143] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:39:38.144] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:39:39.146] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:39.148] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:39:39.149] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:39:40.150] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:40.152] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:39:40.153] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:39:41.155] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:41.156] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:39:41.157] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:39:42.162] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:39:42.163] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:39:42"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:39:42.164] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:39:42"}
+[2026-04-30 08:39:43.161] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:43.163] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:39:43.164] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:39:44.175] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:44.176] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:39:44.177] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:39:45.177] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:45.179] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:39:45.180] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:39:46.181] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:46.182] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:39:46.183] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:39:47.194] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:47.199] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:39:47.203] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:39:48.195] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:48.198] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:39:48.199] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:39:49.208] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:49.209] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:39:49.209] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:39:50.220] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:50.224] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:39:50.225] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:39:51.220] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:51.221] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:39:51.222] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:39:52.235] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:52.236] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:39:52.237] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:39:53.248] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:53.250] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:39:53.252] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:39:54.259] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:54.261] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:39:54.262] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:39:55.270] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:55.272] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:39:55.273] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:39:56.285] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:56.287] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:39:56.289] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:39:57.297] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:39:57.300] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:39:57"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:39:57.301] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:39:57"}
+[2026-04-30 08:39:58.311] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:58.312] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:39:58.313] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:39:59.328] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:39:59.330] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:39:59.331] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:40:00.331] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:00.333] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:40:00.335] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:40:01.347] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:01.348] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:40:01.349] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:40:02.350] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:02.352] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:40:02.354] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:40:03.351] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:03.354] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:40:03.355] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:40:04.364] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:04.366] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:40:04.367] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:40:05.377] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:05.379] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:40:05.380] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:40:06.392] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:06.393] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:40:06.395] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:40:07.394] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:07.395] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:40:07.396] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:40:08.408] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:08.409] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:40:08.410] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:40:09.419] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:09.422] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:40:09.423] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:40:10.423] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:10.425] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:40:10.426] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:40:11.434] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:11.441] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:40:11.443] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:40:12.437] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:40:12.439] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:40:12"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:40:12.440] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:40:12"}
+[2026-04-30 08:40:13.451] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:13.453] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:40:13.455] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:40:14.466] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:14.468] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:40:14.472] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:40:15.466] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:15.468] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:40:15.470] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:40:16.469] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:16.471] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:40:16.472] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:40:17.481] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:17.483] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:40:17.484] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:40:18.481] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:18.483] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:40:18.484] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:40:19.496] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:19.498] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:40:19.499] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:40:20.512] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:20.515] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:40:20.517] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:40:21.525] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:21.527] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:40:21.528] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:40:22.528] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:22.529] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:40:22.530] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:40:23.529] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:23.531] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:40:23.533] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:40:24.541] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:24.543] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:40:24.544] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:40:25.542] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:25.545] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:40:25.546] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:40:26.554] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:26.556] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:40:26.557] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:40:27.570] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:40:27.578] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:40:27"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:40:27.580] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:40:27"}
+[2026-04-30 08:40:28.580] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:28.581] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:40:28.582] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:40:29.595] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:29.597] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:40:29.598] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:40:30.611] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:30.613] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:40:30.614] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:40:31.626] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:31.628] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:40:31.629] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:40:32.641] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:32.643] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:40:32.644] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:40:33.656] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:33.657] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:40:33.658] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:40:34.665] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:34.668] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:40:34.669] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:40:35.668] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:35.671] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:40:35.672] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:40:36.683] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:36.684] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:40:36.684] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:40:37.698] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:37.700] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:40:37.701] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:40:38.712] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:38.714] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:40:38.716] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:40:39.712] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:39.714] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:40:39.716] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:40:40.726] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:40.729] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:40:40.730] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:40:41.732] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:41.734] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:40:41.735] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:40:42.734] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:40:42.736] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:40:42"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:40:42.738] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:40:42"}
+[2026-04-30 08:40:43.748] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:43.750] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:40:43.752] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:40:44.763] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:44.764] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:40:44.766] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:40:45.777] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:45.781] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:40:45.783] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:40:46.790] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:46.791] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:40:46.792] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:40:47.792] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:47.794] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:40:47.795] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:40:48.793] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:48.795] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:40:48.797] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:40:49.806] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:49.809] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:40:49.810] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:40:50.821] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:50.824] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:40:50.825] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:40:51.821] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:51.822] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:40:51.823] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:40:52.823] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:52.824] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:40:52.825] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:40:53.838] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:53.839] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:40:53.841] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:40:54.851] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:54.852] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:40:54.853] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:40:55.867] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:55.868] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:40:55.869] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:40:56.869] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:56.872] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:40:56.873] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:40:57.884] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:40:57.885] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:40:57"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:40:57.886] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:40:57"}
+[2026-04-30 08:40:58.896] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:58.897] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:40:58.897] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:40:59.896] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:40:59.898] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:40:59.898] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:41:00.006] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:40:57"}
+[2026-04-30 08:41:00.008] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:40:57","suedtime":"2026-04-30 08:41:00"}
+[2026-04-30 08:41:00.009] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 08:41:00.011] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 08:41:00.111] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:40:57","suedtime":"2026-04-30 08:41:00"}
+[2026-04-30 08:41:00.917] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:00.918] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:41:00.920] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:41:01.931] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:01.935] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:41:01.937] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:41:02.934] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:02.935] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:41:02.936] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:41:03.948] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:03.949] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:41:03.950] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:41:04.962] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:04.964] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:41:04.966] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:41:05.978] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:05.979] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:41:05.982] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:41:06.981] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:06.986] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:41:06.987] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:41:07.995] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:07.998] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:41:07.999] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:41:08.998] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:08.999] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:41:09.000] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:41:10.012] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:10.012] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:41:10.013] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:41:11.014] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:11.015] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:41:11.015] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:41:12.025] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:12.026] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:41:12.027] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:41:13.039] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:41:13.041] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:41:13"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:41:13.042] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:41:13"}
+[2026-04-30 08:41:14.054] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:14.056] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:41:14.069] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:41:15.056] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:15.057] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:41:15.065] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:41:16.072] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:16.073] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:41:16.074] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:41:17.084] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:17.086] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:41:17.087] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:41:18.098] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:18.100] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:41:18.101] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:41:19.114] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:19.116] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:41:19.117] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:41:20.117] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:20.118] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:41:20.119] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:41:21.128] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:21.129] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:41:21.130] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:41:22.142] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:22.143] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:41:22.144] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:41:23.154] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:23.155] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:41:23.156] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:41:24.168] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:24.170] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:41:24.171] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:41:25.180] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:25.182] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:41:25.183] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:41:26.181] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:26.184] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:41:26.185] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:41:27.196] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:27.198] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:41:27.198] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:41:28.207] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:41:28.210] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:41:28"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:41:28.211] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:41:28"}
+[2026-04-30 08:41:29.209] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:29.212] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:41:29.213] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:41:30.209] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:30.210] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:41:30.211] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:41:31.223] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:31.225] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:41:31.227] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:41:32.237] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:32.240] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:41:32.242] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:41:33.251] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:33.252] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:41:33.253] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:41:34.267] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:34.269] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:41:34.270] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:41:35.270] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:35.274] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:41:35.275] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:41:36.271] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:36.272] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:41:36.272] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:41:37.272] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:37.273] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:41:37.274] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:41:38.275] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:38.278] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:41:38.279] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:41:39.288] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:39.291] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:41:39.292] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:41:40.303] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:40.304] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:41:40.305] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:41:41.303] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:41.305] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:41:41.307] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:41:42.317] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:42.318] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:41:42.333] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:41:43.332] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:41:43.334] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:41:43"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:41:43.336] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:41:43"}
+[2026-04-30 08:41:44.345] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:44.346] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:41:44.347] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:41:45.360] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:45.363] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:41:45.368] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:41:46.372] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:46.373] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:41:46.375] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:41:47.387] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:47.388] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:41:47.389] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:41:48.402] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:48.404] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:41:48.405] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:41:49.415] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:49.416] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:41:49.418] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:41:50.429] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:50.432] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:41:50.434] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:41:51.441] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:51.442] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:41:51.444] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:41:52.455] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:52.458] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:41:52.461] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:41:53.468] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:53.470] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:41:53.471] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:41:54.480] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:54.482] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:41:54.483] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:41:55.492] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:55.493] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:41:55.496] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:41:56.504] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:56.506] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:41:56.508] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:41:57.515] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:57.520] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:41:57.522] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:41:58.529] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:41:58.531] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:41:58"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:41:58.532] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:41:58"}
+[2026-04-30 08:41:59.540] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:41:59.541] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:41:59.543] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:42:00.545] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:00.546] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:42:00.548] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:42:01.546] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:01.549] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:42:01.552] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:42:02.552] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:02.556] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:42:02.558] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:42:03.568] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:03.569] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:42:03.570] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:42:04.572] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:04.574] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:42:04.575] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:42:05.586] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:05.588] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:42:05.589] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:42:06.596] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:06.597] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:42:06.599] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:42:07.596] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:07.598] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:42:07.599] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:42:08.610] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:08.612] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:42:08.613] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:42:09.624] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:09.626] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:42:09.628] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:42:10.639] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:10.641] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:42:10.643] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:42:11.650] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:11.652] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:42:11.654] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:42:12.661] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:12.662] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:42:12.663] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:42:13.676] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:42:13.678] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:42:13"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:42:13.679] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:42:13"}
+[2026-04-30 08:42:14.691] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:14.692] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:42:14.693] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:42:15.705] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:15.707] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:42:15.709] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:42:16.709] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:16.712] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:42:16.713] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:42:17.716] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:17.718] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:42:17.720] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:42:18.730] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:18.732] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:42:18.733] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:42:19.744] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:19.746] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:42:19.748] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:42:20.757] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:20.759] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:42:20.760] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:42:21.762] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:21.763] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:42:21.765] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:42:22.763] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:22.765] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:42:22.766] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:42:23.778] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:23.784] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:42:23.785] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:42:24.791] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:24.793] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:42:24.795] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:42:25.791] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:25.792] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:42:25.794] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:42:26.797] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:26.803] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:42:26.805] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:42:27.796] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:27.798] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:42:27.799] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:42:28.811] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:42:28.813] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:42:28"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:42:28.813] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:42:28"}
+[2026-04-30 08:42:29.824] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:29.825] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:42:29.826] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:42:30.827] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:30.830] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:42:30.832] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:42:31.826] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:31.829] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:42:31.830] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:42:32.833] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:32.834] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:42:32.835] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:42:33.848] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:33.850] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:42:33.851] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:42:34.850] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:34.851] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:42:34.853] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:42:35.865] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:35.868] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:42:35.870] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:42:36.879] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:36.881] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:42:36.883] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:42:37.891] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:37.892] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:42:37.895] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:42:38.909] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:38.911] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:42:38.912] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:42:39.921] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:39.922] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:42:39.923] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:42:40.933] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:40.937] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:42:40.938] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:42:41.942] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:41.944] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:42:41.945] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:42:42.953] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:42.956] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:42:42.957] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:42:43.967] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:42:43.968] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:42:43"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:42:43.969] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:42:43"}
+[2026-04-30 08:42:44.981] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:44.983] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:42:44.985] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:42:45.992] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:45.994] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:42:45.995] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:42:47.007] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:47.008] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:42:47.011] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:42:48.019] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:48.020] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:42:48.021] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:42:49.031] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:49.032] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:42:49.033] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:42:50.046] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:50.047] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:42:50.049] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:42:51.059] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:51.060] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:42:51.061] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:42:52.115] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:52.116] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:42:52.117] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:42:53.122] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:53.123] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:42:53.124] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:42:54.136] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:54.137] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:42:54.138] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:42:55.149] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:55.151] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:42:55.152] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:42:56.151] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:56.153] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:42:56.154] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:42:57.154] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:57.156] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:42:57.157] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:42:58.168] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:42:58.171] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:42:58.172] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:42:59.181] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:42:59.184] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:42:59"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:42:59.184] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:42:59"}
+[2026-04-30 08:43:00.003] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:42:59"}
+[2026-04-30 08:43:00.005] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:42:59","suedtime":"2026-04-30 08:43:00"}
+[2026-04-30 08:43:00.006] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 08:43:00.008] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 08:43:00.102] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:42:59","suedtime":"2026-04-30 08:43:00"}
+[2026-04-30 08:43:00.192] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:00.194] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:43:00.196] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:43:01.203] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:01.204] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:43:01.205] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:43:02.213] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:02.214] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:43:02.214] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:43:03.215] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:03.216] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:43:03.216] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:43:04.230] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:04.233] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:43:04.235] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:43:05.240] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:05.242] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:43:05.242] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:43:06.240] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:06.245] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:43:06.246] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:43:07.253] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:07.254] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:43:07.255] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:43:08.254] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:08.256] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:43:08.257] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:43:09.255] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:09.256] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:43:09.256] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:43:10.267] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:10.269] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:43:10.270] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:43:11.267] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:11.268] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:43:11.268] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:43:12.281] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:12.283] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:43:12.284] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:43:13.283] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:13.285] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:43:13.287] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:43:14.295] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:43:14.296] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:43:14"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:43:14.297] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:43:14"}
+[2026-04-30 08:43:15.307] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:15.308] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:43:15.309] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:43:16.309] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:16.311] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:43:16.312] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:43:17.320] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:17.321] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:43:17.322] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:43:18.336] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:18.339] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:43:18.340] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:43:19.336] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:19.340] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:43:19.341] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:43:20.349] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:20.350] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:43:20.352] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:43:21.360] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:21.361] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:43:21.362] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:43:22.401] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:22.403] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:43:22.404] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:43:23.412] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:23.414] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:43:23.415] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:43:24.425] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:24.426] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:43:24.427] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:43:25.425] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:25.427] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:43:25.428] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:43:26.441] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:26.442] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:43:26.443] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:43:27.452] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:27.454] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:43:27.455] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:43:28.454] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:28.456] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:43:28.457] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:43:29.468] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:43:29.469] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:43:29"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:43:29.470] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:43:29"}
+[2026-04-30 08:43:30.477] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:30.479] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:43:30.480] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:43:31.493] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:31.495] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:43:31.496] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:43:32.508] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:32.510] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:43:32.512] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:43:33.517] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:33.518] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:43:33.519] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:43:34.518] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:34.520] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:43:34.521] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:43:35.520] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:35.522] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:43:35.523] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:43:36.530] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:36.532] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:43:36.532] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:43:37.543] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:37.546] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:43:37.548] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:43:38.556] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:38.559] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:43:38.560] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:43:39.565] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:39.566] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:43:39.567] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:43:40.575] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:40.577] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:43:40.578] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:43:41.583] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:41.584] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:43:41.585] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:43:42.596] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:42.598] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:43:42.599] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:43:43.607] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:43.608] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:43:43.610] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:43:44.621] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:43:44.623] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:43:44"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:43:44.624] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:43:44"}
+[2026-04-30 08:43:45.637] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:45.639] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:43:45.643] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:43:46.648] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:46.650] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:43:46.651] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:43:47.657] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:47.659] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:43:47.660] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:43:48.672] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:48.674] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:43:48.676] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:43:49.686] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:49.688] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:43:49.689] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:43:50.698] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:50.701] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:43:50.702] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:43:51.699] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:51.700] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:43:51.702] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:43:52.710] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:52.712] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:43:52.713] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:43:53.721] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:53.722] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:43:53.723] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:43:54.732] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:54.734] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:43:54.735] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:43:55.747] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:55.748] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:43:55.748] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:43:56.758] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:56.761] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:43:56.763] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:43:57.769] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:57.770] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:43:57.771] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:43:58.770] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:43:58.772] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:43:58.773] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:43:59.782] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:43:59.784] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:43:59"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:43:59.785] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:43:59"}
+[2026-04-30 08:44:00.796] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:00.798] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:44:00.804] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:44:01.809] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:01.811] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:44:01.813] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:44:02.810] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:02.813] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:44:02.814] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:44:03.810] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:03.812] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:44:03.813] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:44:04.810] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:04.812] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:44:04.812] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:44:05.825] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:05.829] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:44:05.831] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:44:06.836] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:06.838] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:44:06.839] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:44:07.837] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:07.838] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:44:07.839] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:44:08.852] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:08.853] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:44:08.854] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:44:09.866] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:09.867] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:44:09.868] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:44:10.878] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:10.879] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:44:10.880] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:44:11.887] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:11.889] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:44:11.890] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:44:12.900] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:12.901] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:44:12.902] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:44:13.914] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:13.915] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:44:13.915] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:44:14.928] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:44:14.930] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:44:14"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:44:14.931] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:44:14"}
+[2026-04-30 08:44:15.941] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:15.942] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:44:15.943] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:44:16.955] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:16.955] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:44:16.956] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:44:17.966] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:17.968] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:44:17.969] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:44:18.981] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:18.982] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:44:18.983] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:44:19.984] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:19.985] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:44:19.986] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:44:20.998] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:21.000] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:44:21.001] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:44:22.011] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:22.012] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:44:22.013] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:44:23.022] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:23.024] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:44:23.026] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:44:24.023] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:24.026] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:44:24.027] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:44:25.039] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:25.040] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:44:25.041] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:44:26.055] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:26.056] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:44:26.058] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:44:27.069] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:27.070] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:44:27.071] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:44:28.083] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:28.086] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:44:28.087] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:44:29.084] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:29.089] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:44:29.090] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:44:30.097] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:44:30.098] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:44:30"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:44:30.100] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:44:30"}
+[2026-04-30 08:44:31.125] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:31.128] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:44:31.129] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:44:32.138] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:32.139] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:44:32.140] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:44:33.150] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:33.152] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:44:33.153] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:44:34.165] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:34.166] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:44:34.167] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:44:35.177] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:35.179] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:44:35.180] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:44:36.192] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:36.193] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:44:36.194] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:44:37.206] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:37.208] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:44:37.209] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:44:38.220] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:38.221] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:44:38.223] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:44:39.234] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:39.236] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:44:39.237] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:44:40.245] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:40.248] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:44:40.249] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:44:41.255] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:41.256] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:44:41.257] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:44:42.267] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:42.268] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:44:42.269] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:44:43.280] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:43.282] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:44:43.283] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:44:44.284] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:44.285] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:44:44.297] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:44:45.294] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:44:45.296] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:44:45"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:44:45.298] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:44:45"}
+[2026-04-30 08:44:46.309] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:46.310] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:44:46.311] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:44:47.312] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:47.313] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:44:47.314] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:44:48.323] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:48.324] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:44:48.324] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:44:49.323] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:49.324] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:44:49.326] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:44:50.336] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:50.338] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:44:50.339] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:44:51.351] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:51.354] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:44:51.356] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:44:52.363] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:52.365] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:44:52.367] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:44:53.378] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:53.380] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:44:53.381] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:44:54.391] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:54.393] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:44:54.394] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:44:55.427] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:55.446] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:44:55.447] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:44:56.439] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:56.440] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:44:56.441] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:44:57.448] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:57.450] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:44:57.452] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:44:58.462] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:58.465] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:44:58.466] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:44:59.476] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:44:59.478] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:44:59.479] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:45:00.007] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:44:45"}
+[2026-04-30 08:45:00.009] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:44:45","suedtime":"2026-04-30 08:45:00"}
+[2026-04-30 08:45:00.010] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 08:45:00.011] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 08:45:00.117] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:44:45","suedtime":"2026-04-30 08:45:00"}
+[2026-04-30 08:45:00.490] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:45:00.493] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:45:00"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:45:00.494] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:45:00"}
+[2026-04-30 08:45:01.505] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:01.506] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:45:01.508] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:45:02.507] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:02.509] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:45:02.509] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:45:03.518] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:03.519] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:45:03.520] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:45:04.532] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:04.533] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:45:04.534] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:45:05.545] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:05.546] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:45:05.547] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:45:06.558] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:06.565] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:45:06.566] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:45:07.572] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:07.574] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:45:07.575] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:45:08.586] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:08.588] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:45:08.589] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:45:09.601] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:09.602] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:45:09.603] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:45:10.603] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:10.604] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:45:10.606] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:45:11.617] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:11.619] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:45:11.620] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:45:12.617] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:12.619] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:45:12.620] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:45:13.634] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:13.636] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:45:13.637] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:45:14.634] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:14.636] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:45:14.637] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:45:15.648] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:45:15.650] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:45:15"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:45:15.651] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:45:15"}
+[2026-04-30 08:45:16.663] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:16.664] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:45:16.666] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:45:17.677] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:17.678] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:45:17.679] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:45:18.692] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:18.693] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:45:18.695] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:45:19.707] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:19.708] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:45:19.710] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:45:20.719] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:20.721] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:45:20.722] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:45:21.720] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:21.722] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:45:21.724] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:45:22.733] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:22.735] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:45:22.737] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:45:23.744] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:23.746] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:45:23.748] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:45:24.744] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:24.747] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:45:24.748] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:45:25.744] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:25.746] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:45:25.747] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:45:26.756] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:26.772] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:45:26.773] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:45:27.768] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:27.769] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:45:27.770] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:45:28.782] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:28.785] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:45:28.786] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:45:29.784] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:29.785] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:45:29.785] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:45:30.799] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:45:30.800] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:45:30"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:45:30.800] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:45:30"}
+[2026-04-30 08:45:31.814] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:31.814] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:45:31.815] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:45:32.831] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:32.835] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:45:32.836] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:45:33.843] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:33.844] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:45:33.845] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:45:34.845] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:34.846] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:45:34.847] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:45:35.861] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:35.862] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:45:35.863] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:45:36.871] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:36.873] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:45:36.873] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:45:37.886] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:37.887] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:45:37.888] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:45:38.900] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:38.902] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:45:38.905] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:45:39.902] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:39.903] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:45:39.903] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:45:40.916] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:40.917] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:45:40.917] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:45:41.930] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:41.931] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:45:41.933] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:45:42.945] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:42.946] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:45:42.946] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:45:43.945] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:43.947] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:45:43.948] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:45:44.959] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:44.961] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:45:44.962] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:45:45.960] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:45:45.962] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:45:45"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:45:45.963] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:45:45"}
+[2026-04-30 08:45:46.962] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:46.963] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:45:46.964] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:45:47.977] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:47.979] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:45:47.980] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:45:48.989] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:48.991] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:45:48.992] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:45:50.000] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:50.002] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:45:50.003] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:45:51.001] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:51.009] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:45:51.010] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:45:52.016] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:52.016] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:45:52.017] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:45:53.028] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:53.029] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:45:53.030] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:45:54.028] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:54.031] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:45:54.032] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:45:55.043] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:55.047] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:45:55.049] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:45:56.054] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:56.055] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:45:56.056] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:45:57.069] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:57.070] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:45:57.071] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:45:58.082] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:58.083] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:45:58.084] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:45:59.083] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:45:59.085] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:45:59.086] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:46:00.098] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:00.100] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:46:00.100] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:46:01.099] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:46:01.101] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:46:01"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:46:01.101] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:46:01"}
+[2026-04-30 08:46:02.100] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:02.102] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:46:02.104] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:46:03.115] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:03.117] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:46:03.118] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:46:04.129] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:04.131] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:46:04.131] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:46:05.143] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:05.144] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:46:05.145] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:46:06.155] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:06.156] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:46:06.157] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:46:07.168] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:07.170] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:46:07.171] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:46:08.169] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:08.170] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:46:08.171] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:46:09.169] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:09.170] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:46:09.172] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:46:10.180] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:10.183] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:46:10.184] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:46:11.193] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:11.194] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:46:11.195] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:46:12.209] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:12.211] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:46:12.212] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:46:13.211] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:13.212] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:46:13.213] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:46:14.226] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:14.228] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:46:14.228] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:46:15.227] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:15.230] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:46:15.231] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:46:16.243] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:46:16.244] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:46:16"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:46:16.245] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:46:16"}
+[2026-04-30 08:46:17.257] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:17.259] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:46:17.260] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:46:18.270] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:18.272] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:46:18.273] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:46:19.272] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:19.274] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:46:19.275] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:46:20.285] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:20.287] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:46:20.288] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:46:21.300] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:21.301] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:46:21.302] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:46:22.301] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:22.305] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:46:22.306] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:46:23.304] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:23.305] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:46:23.306] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:46:24.316] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:24.318] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:46:24.319] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:46:25.317] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:25.320] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:46:25.321] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:46:26.330] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:26.333] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:46:26.334] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:46:27.339] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:27.341] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:46:27.342] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:46:28.351] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:28.353] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:46:28.354] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:46:29.366] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:29.367] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:46:29.369] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:46:30.380] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:30.382] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:46:30.383] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:46:31.392] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:46:31.394] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:46:31"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:46:31.396] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:46:31"}
+[2026-04-30 08:46:32.400] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:32.401] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:46:32.401] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:46:33.411] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:33.412] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:46:33.413] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:46:34.412] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:34.413] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:46:34.414] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:46:35.426] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:35.428] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:46:35.429] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:46:36.440] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:36.441] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:46:36.444] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:46:37.454] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:37.455] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:46:37.455] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:46:38.469] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:38.470] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:46:38.471] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:46:39.471] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:39.472] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:46:39.473] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:46:40.486] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:40.488] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:46:40.488] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:46:41.497] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:41.498] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:46:41.499] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:46:42.511] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:42.512] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:46:42.512] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:46:43.525] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:43.525] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:46:43.526] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:46:44.527] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:44.528] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:46:44.529] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:46:45.542] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:45.543] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:46:45.543] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:46:46.557] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:46:46.558] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:46:46"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:46:46.559] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:46:46"}
+[2026-04-30 08:46:47.572] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:47.573] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:46:47.573] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:46:48.585] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:48.587] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:46:48.587] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:46:49.586] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:49.587] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:46:49.587] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:46:50.587] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:50.588] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:46:50.589] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:46:51.593] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:51.594] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:46:51.595] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:46:52.599] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:52.600] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:46:52.601] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:46:53.611] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:53.612] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:46:53.612] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:46:54.624] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:54.625] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:46:54.626] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:46:55.625] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:55.626] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:46:55.627] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:46:56.637] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:56.638] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:46:56.639] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:46:57.650] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:57.651] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:46:57.651] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:46:58.649] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:58.651] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:46:58.651] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:46:59.663] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:46:59.664] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:46:59.665] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:47:00.006] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:46:46"}
+[2026-04-30 08:47:00.008] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:46:46","suedtime":"2026-04-30 08:47:00"}
+[2026-04-30 08:47:00.008] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 08:47:00.009] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 08:47:00.116] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:46:46","suedtime":"2026-04-30 08:47:00"}
+[2026-04-30 08:47:00.665] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:00.666] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:47:00.666] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:47:01.667] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:47:01.669] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:47:01"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:47:01.669] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:47:01"}
+[2026-04-30 08:47:02.683] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:02.684] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:47:02.684] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:47:03.683] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:03.684] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:47:03.684] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:47:04.686] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:04.686] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:47:04.687] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:47:05.699] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:05.700] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:47:05.701] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:47:06.701] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:06.702] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:47:06.703] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:47:07.712] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:07.713] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:47:07.714] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:47:08.714] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:08.715] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:47:08.716] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:47:09.728] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:09.729] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:47:09.730] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:47:10.744] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:10.745] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:47:10.745] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:47:11.758] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:11.759] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:47:11.760] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:47:12.774] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:12.775] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:47:12.776] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:47:13.788] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:13.790] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:47:13.791] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:47:14.800] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:14.801] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:47:14.802] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:47:15.801] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:15.802] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:47:15.802] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:47:16.803] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:47:16.806] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:47:16"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:47:16.807] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:47:16"}
+[2026-04-30 08:47:17.817] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:17.818] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:47:17.820] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:47:18.831] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:18.832] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:47:18.833] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:47:19.832] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:19.834] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:47:19.835] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:47:20.845] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:20.846] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:47:20.846] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:47:21.846] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:21.848] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:47:21.850] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:47:22.860] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:22.862] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:47:22.864] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:47:23.874] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:23.875] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:47:23.876] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:47:24.890] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:24.892] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:47:24.893] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:47:25.906] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:25.909] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:47:25.910] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:47:26.909] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:26.910] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:47:26.911] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:47:27.911] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:27.912] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:47:27.912] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:47:28.927] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:28.928] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:47:28.929] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:47:29.927] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:29.928] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:47:29.929] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:47:30.941] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:30.943] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:47:30.944] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:47:31.956] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:47:31.959] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:47:31"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:47:31.961] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:47:31"}
+[2026-04-30 08:47:32.968] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:32.970] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:47:32.971] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:47:33.984] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:33.985] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:47:33.986] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:47:34.998] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:35.000] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:47:35.000] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:47:36.011] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:36.012] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:47:36.014] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:47:37.024] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:37.026] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:47:37.027] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:47:38.040] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:38.041] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:47:38.041] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:47:39.054] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:39.055] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:47:39.056] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:47:40.060] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:40.061] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:47:40.061] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:47:41.061] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:41.062] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:47:41.063] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:47:42.073] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:42.075] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:47:42.075] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:47:43.087] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:43.088] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:47:43.088] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:47:44.099] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:44.100] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:47:44.101] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:47:45.113] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:45.114] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:47:45.115] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:47:46.115] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:46.116] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:47:46.117] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:47:47.129] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:47:47.130] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:47:47"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:47:47.131] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:47:47"}
+[2026-04-30 08:47:48.140] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:48.141] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:47:48.142] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:47:49.153] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:49.154] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:47:49.155] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:47:50.165] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:50.167] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:47:50.168] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:47:51.180] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:51.181] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:47:51.181] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:47:52.196] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:52.197] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:47:52.197] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:47:53.208] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:53.209] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:47:53.210] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:47:54.209] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:54.210] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:47:54.211] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:47:55.223] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:55.224] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:47:55.224] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:47:56.236] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:56.237] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:47:56.238] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:47:57.245] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:57.246] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:47:57.247] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:47:58.260] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:58.262] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:47:58.273] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:47:59.276] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:47:59.278] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:47:59.278] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:48:00.292] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:00.293] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:48:00.294] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:48:01.293] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:01.294] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:48:01.295] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:48:02.295] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:48:02.297] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:48:02"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:48:02.298] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:48:02"}
+[2026-04-30 08:48:03.306] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:03.307] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:48:03.308] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:48:04.319] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:04.320] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:48:04.321] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:48:05.319] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:05.321] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:48:05.330] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:48:06.320] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:06.321] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:48:06.322] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:48:07.334] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:07.335] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:48:07.336] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:48:08.334] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:08.335] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:48:08.336] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:48:09.347] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:09.348] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:48:09.349] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:48:10.359] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:10.360] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:48:10.360] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:48:11.369] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:11.370] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:48:11.371] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:48:12.384] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:12.385] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:48:12.386] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:48:13.387] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:13.388] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:48:13.388] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:48:14.395] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:14.396] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:48:14.396] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:48:15.405] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:15.406] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:48:15.407] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:48:16.419] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:16.421] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:48:16.424] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:48:17.433] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:48:17.434] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:48:17"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:48:17.435] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:48:17"}
+[2026-04-30 08:48:18.447] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:18.448] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:48:18.449] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:48:19.448] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:19.449] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:48:19.450] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:48:20.458] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:20.459] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:48:20.463] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:48:21.472] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:21.472] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:48:21.473] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:48:22.476] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:22.477] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:48:22.478] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:48:23.488] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:23.489] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:48:23.490] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:48:24.502] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:24.502] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:48:24.503] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:48:25.514] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:25.515] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:48:25.516] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:48:26.529] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:26.530] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:48:26.531] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:48:27.542] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:27.543] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:48:27.543] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:48:28.556] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:28.557] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:48:28.558] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:48:29.570] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:29.571] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:48:29.571] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:48:30.570] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:30.571] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:48:30.572] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:48:31.583] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:31.584] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:48:31.585] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:48:32.599] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:48:32.600] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:48:32"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:48:32.602] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:48:32"}
+[2026-04-30 08:48:33.612] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:33.613] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:48:33.614] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:48:34.627] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:34.627] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:48:34.628] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:48:35.640] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:35.641] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:48:35.642] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:48:36.651] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:36.652] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:48:36.652] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:48:37.663] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:37.664] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:48:37.665] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:48:38.677] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:38.678] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:48:38.679] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:48:39.690] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:39.692] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:48:39.692] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:48:40.705] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:40.706] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:48:40.708] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:48:41.707] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:41.708] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:48:41.709] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:48:42.722] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:42.723] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:48:42.724] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:48:43.732] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:43.733] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:48:43.734] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:48:44.745] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:44.746] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:48:44.747] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:48:45.746] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:45.747] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:48:45.748] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:48:46.760] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:46.761] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:48:46.761] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:48:47.773] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:48:47.774] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:48:47"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:48:47.774] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:48:47"}
+[2026-04-30 08:48:48.786] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:48.787] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:48:48.788] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:48:49.789] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:49.790] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:48:49.791] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:48:50.790] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:50.790] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:48:50.791] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:48:51.791] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:51.792] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:48:51.793] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:48:52.801] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:52.802] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:48:52.803] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:48:53.813] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:53.814] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:48:53.815] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:48:54.826] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:54.828] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:48:54.828] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:48:55.840] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:55.841] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:48:55.842] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:48:56.853] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:56.854] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:48:56.855] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:48:57.861] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:57.862] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:48:57.862] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:48:58.869] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:58.870] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:48:58.871] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:48:59.873] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:48:59.874] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:48:59.874] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:49:00.014] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:48:47"}
+[2026-04-30 08:49:00.015] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:48:47","suedtime":"2026-04-30 08:49:00"}
+[2026-04-30 08:49:00.016] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 08:49:00.017] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 08:49:00.115] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:48:47","suedtime":"2026-04-30 08:49:00"}
+[2026-04-30 08:49:00.886] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:00.887] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:49:00.888] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:49:01.893] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:01.894] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:49:01.894] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:49:02.894] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:49:02.895] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:49:02"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:49:02.895] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:49:02"}
+[2026-04-30 08:49:03.909] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:03.910] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:49:03.911] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:49:04.912] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:04.913] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:49:04.914] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:49:05.928] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:05.929] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:49:05.930] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:49:06.938] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:06.939] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:49:06.940] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:49:07.954] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:07.955] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:49:07.955] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:49:08.967] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:08.968] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:49:08.969] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:49:09.969] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:09.970] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:49:09.972] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:49:10.971] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:10.971] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:49:10.973] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:49:11.985] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:11.987] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:49:11.988] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:49:12.999] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:13.001] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:49:13.001] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:49:13.999] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:14.000] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:49:14.001] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:49:15.014] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:15.015] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:49:15.016] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:49:16.026] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:16.027] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:49:16.029] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:49:17.038] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:17.039] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:49:17.039] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:49:18.052] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:49:18.053] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:49:18"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:49:18.053] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:49:18"}
+[2026-04-30 08:49:19.052] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:19.053] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:49:19.056] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:49:20.067] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:20.068] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:49:20.068] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:49:21.078] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:21.079] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:49:21.079] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:49:22.079] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:22.080] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:49:22.080] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:49:23.095] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:23.096] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:49:23.097] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:49:24.110] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:24.112] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:49:24.123] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:49:25.114] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:25.115] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:49:25.117] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:49:26.116] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:26.117] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:49:26.118] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:49:27.129] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:27.130] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:49:27.130] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:49:28.142] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:28.143] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:49:28.143] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:49:29.157] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:29.158] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:49:29.158] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:49:30.169] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:30.171] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:49:30.172] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:49:31.171] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:31.172] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:49:31.173] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:49:32.181] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:32.182] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:49:32.183] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:49:33.195] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:49:33.196] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:49:33"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:49:33.197] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:49:33"}
+[2026-04-30 08:49:34.196] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:34.197] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:49:34.199] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:49:35.211] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:35.212] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:49:35.212] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:49:36.225] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:36.226] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:49:36.226] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:49:37.234] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:37.235] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:49:37.235] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:49:38.243] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:38.244] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:49:38.244] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:49:39.248] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:39.249] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:49:39.250] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:49:40.260] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:40.261] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:49:40.262] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:49:41.275] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:41.276] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:49:41.276] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:49:42.289] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:42.291] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:49:42.291] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:49:43.300] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:43.301] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:49:43.303] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:49:44.301] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:44.302] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:49:44.303] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:49:45.312] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:45.313] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:49:45.314] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:49:46.327] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:46.328] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:49:46.329] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:49:47.338] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:47.339] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:49:47.340] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:49:48.340] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:49:48.340] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:49:48"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:49:48.341] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:49:48"}
+[2026-04-30 08:49:49.339] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:49.340] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:49:49.341] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:49:50.342] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:50.343] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:49:50.343] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:49:51.345] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:51.346] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:49:51.347] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:49:52.360] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:52.361] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:49:52.362] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:49:53.371] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:53.373] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:49:53.374] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:49:54.372] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:54.375] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:49:54.378] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:49:55.373] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:55.374] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:49:55.375] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:49:56.388] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:56.389] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:49:56.390] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:49:57.388] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:57.389] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:49:57.390] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:49:58.393] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:58.394] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:49:58.395] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:49:59.408] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:49:59.409] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:49:59.409] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:50:00.423] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:00.423] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:50:00.424] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:50:01.424] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:01.424] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:50:01.425] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:50:02.425] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:02.426] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:50:02.427] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:50:03.439] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:50:03.440] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:50:03"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:50:03.440] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:50:03"}
+[2026-04-30 08:50:04.453] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:04.454] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:50:04.455] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:50:05.465] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:05.466] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:50:05.466] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:50:06.478] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:06.479] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:50:06.479] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:50:07.483] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:07.485] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:50:07.485] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:50:08.497] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:08.498] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:50:08.501] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:50:09.510] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:09.511] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:50:09.512] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:50:10.513] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:10.514] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:50:10.515] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:50:11.528] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:11.529] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:50:11.529] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:50:12.538] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:12.539] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:50:12.540] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:50:13.542] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:13.543] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:50:13.544] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:50:14.558] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:14.558] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:50:14.559] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:50:15.569] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:15.570] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:50:15.571] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:50:16.571] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:16.572] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:50:16.573] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:50:17.574] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:17.575] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:50:17.576] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:50:18.575] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:50:18.575] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:50:18"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:50:18.576] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:50:18"}
+[2026-04-30 08:50:19.576] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:19.577] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:50:19.578] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:50:20.579] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:20.580] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:50:20.582] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:50:21.593] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:21.594] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:50:21.594] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:50:22.605] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:22.606] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:50:22.607] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:50:23.615] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:23.616] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:50:23.616] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:50:24.618] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:24.619] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:50:24.619] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:50:25.632] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:25.635] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:50:25.635] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:50:26.632] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:26.633] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:50:26.633] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:50:27.636] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:27.637] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:50:27.637] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:50:28.638] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:28.639] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:50:28.639] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:50:29.643] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:29.644] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:50:29.644] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:50:30.643] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:30.644] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:50:30.645] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:50:31.647] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:31.648] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:50:31.649] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:50:32.648] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:32.649] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:50:32.650] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:50:33.651] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:50:33.652] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:50:33"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:50:33.653] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:50:33"}
+[2026-04-30 08:50:34.662] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:34.662] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:50:34.663] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:50:35.669] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:35.670] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:50:35.670] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:50:36.671] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:36.672] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:50:36.673] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:50:37.684] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:37.685] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:50:37.686] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:50:38.691] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:38.692] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:50:38.693] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:50:39.693] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:39.694] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:50:39.695] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:50:40.694] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:40.695] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:50:40.695] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:50:41.702] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:41.703] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:50:41.704] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:50:42.707] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:42.707] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:50:42.708] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:50:43.719] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:43.719] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:50:43.720] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:50:44.736] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:44.737] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:50:44.737] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:50:45.739] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:45.740] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:50:45.741] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:50:46.743] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:46.744] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:50:46.745] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:50:47.748] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:47.748] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:50:47.749] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:50:48.749] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:50:48.750] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:50:48"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:50:48.750] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:50:48"}
+[2026-04-30 08:50:49.754] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:49.754] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:50:49.755] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:50:50.768] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:50.769] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:50:50.770] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:50:51.782] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:51.783] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:50:51.784] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:50:52.783] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:52.784] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:50:52.785] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:50:53.796] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:53.797] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:50:53.797] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:50:54.808] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:54.809] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:50:54.810] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:50:55.820] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:55.822] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:50:55.822] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:50:56.831] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:56.832] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:50:56.832] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:50:57.845] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:57.846] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:50:57.847] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:50:58.855] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:58.856] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:50:58.857] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:50:59.856] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:50:59.857] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:50:59.858] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:51:00.011] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:50:48"}
+[2026-04-30 08:51:00.012] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:50:48","suedtime":"2026-04-30 08:51:00"}
+[2026-04-30 08:51:00.013] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 08:51:00.014] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 08:51:00.106] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:50:48","suedtime":"2026-04-30 08:51:00"}
+[2026-04-30 08:51:00.870] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:00.871] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:51:00.872] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:51:01.883] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:01.884] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:51:01.885] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:51:02.898] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:02.899] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:51:02.899] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:51:03.906] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:51:03.907] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:51:03"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:51:03.908] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:51:03"}
+[2026-04-30 08:51:04.908] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:04.909] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:51:04.910] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:51:05.912] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:05.913] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:51:05.914] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:51:06.926] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:06.927] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:51:06.928] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:51:07.940] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:07.941] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:51:07.942] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:51:08.954] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:08.955] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:51:08.956] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:51:09.967] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:09.968] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:51:09.970] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:51:10.980] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:10.981] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:51:10.981] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:51:11.980] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:11.981] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:51:11.981] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:51:12.992] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:12.994] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:51:12.995] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:51:13.997] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:13.998] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:51:13.999] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:51:15.013] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:15.013] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:51:15.014] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:51:16.014] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:16.016] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:51:16.016] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:51:17.027] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:17.028] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:51:17.030] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:51:18.028] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:18.029] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:51:18.030] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:51:19.038] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:51:19.039] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:51:19"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:51:19.050] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:51:19"}
+[2026-04-30 08:51:20.053] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:20.054] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:51:20.054] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:51:21.054] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:21.055] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:51:21.056] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:51:22.070] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:22.071] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:51:22.082] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:51:23.083] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:23.084] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:51:23.085] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:51:24.095] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:24.096] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:51:24.096] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:51:25.103] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:25.104] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:51:25.105] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:51:26.118] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:26.119] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:51:26.120] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:51:27.121] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:27.122] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:51:27.123] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:51:28.131] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:28.132] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:51:28.132] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:51:29.144] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:29.145] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:51:29.145] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:51:30.156] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:30.157] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:51:30.158] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:51:31.156] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:31.157] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:51:31.157] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:51:32.167] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:32.168] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:51:32.169] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:51:33.170] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:33.171] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:51:33.171] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:51:34.178] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:51:34.179] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:51:34"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:51:34.180] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:51:34"}
+[2026-04-30 08:51:35.191] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:35.192] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:51:35.193] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:51:36.194] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:36.195] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:51:36.196] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:51:37.196] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:37.196] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:51:37.197] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:51:38.196] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:38.197] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:51:38.197] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:51:39.197] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:39.198] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:51:39.198] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:51:40.207] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:40.208] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:51:40.208] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:51:41.220] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:41.221] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:51:41.222] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:51:42.224] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:42.225] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:51:42.226] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:51:43.239] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:43.240] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:51:43.241] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:51:44.239] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:44.240] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:51:44.241] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:51:45.240] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:45.241] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:51:45.241] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:51:46.250] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:46.250] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:51:46.251] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:51:47.263] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:47.264] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:51:47.265] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:51:48.279] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:48.280] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:51:48.280] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:51:49.282] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:51:49.284] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:51:49"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:51:49.285] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:51:49"}
+[2026-04-30 08:51:50.294] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:50.295] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:51:50.295] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:51:51.309] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:51.310] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:51:51.311] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:51:52.314] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:52.315] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:51:52.315] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:51:53.320] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:53.321] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:51:53.321] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:51:54.322] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:54.323] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:51:54.324] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:51:55.335] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:55.336] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:51:55.337] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:51:56.336] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:56.337] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:51:56.337] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:51:57.345] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:57.347] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:51:57.347] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:51:58.346] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:58.346] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:51:58.347] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:51:59.349] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:51:59.350] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:51:59.350] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:52:00.360] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:00.361] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:52:00.361] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:52:01.371] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:01.372] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:52:01.373] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:52:02.379] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:02.380] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:52:02.381] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:52:03.394] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:03.395] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:52:03.396] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:52:04.399] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:52:04.400] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:52:04"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:52:04.401] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:52:04"}
+[2026-04-30 08:52:05.415] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:05.416] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:52:05.417] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:52:06.426] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:06.427] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:52:06.427] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:52:07.426] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:07.427] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:52:07.428] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:52:08.426] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:08.427] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:52:08.427] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:52:09.439] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:09.439] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:52:09.440] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:52:10.452] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:10.454] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:52:10.455] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:52:11.464] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:11.465] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:52:11.466] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:52:12.478] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:12.479] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:52:12.480] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:52:13.479] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:13.480] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:52:13.480] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:52:14.492] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:14.493] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:52:14.494] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:52:15.505] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:15.506] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:52:15.507] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:52:16.513] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:16.514] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:52:16.515] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:52:17.514] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:17.515] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:52:17.515] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:52:18.527] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:18.528] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:52:18.529] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:52:19.539] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:52:19.540] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:52:19"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:52:19.540] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:52:19"}
+[2026-04-30 08:52:20.551] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:20.552] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:52:20.552] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:52:21.560] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:21.561] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:52:21.562] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:52:22.575] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:22.576] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:52:22.576] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:52:23.574] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:23.575] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:52:23.576] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:52:24.576] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:24.577] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:52:24.578] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:52:25.590] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:25.591] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:52:25.592] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:52:26.592] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:26.593] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:52:26.593] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:52:27.604] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:27.606] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:52:27.607] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:52:28.605] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:28.606] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:52:28.606] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:52:29.619] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:29.620] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:52:29.621] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:52:30.631] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:30.633] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:52:30.634] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:52:31.635] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:31.636] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:52:31.637] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:52:32.647] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:32.649] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:52:32.650] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:52:33.663] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:33.664] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:52:33.665] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:52:34.676] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:52:34.677] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:52:34"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:52:34.678] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:52:34"}
+[2026-04-30 08:52:35.690] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:35.691] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:52:35.692] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:52:36.690] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:36.692] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:52:36.693] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:52:37.692] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:37.694] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:52:37.695] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:52:38.699] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:38.700] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:52:38.701] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:52:39.704] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:39.706] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:52:39.707] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:52:40.718] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:40.720] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:52:40.721] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:52:41.733] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:41.734] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:52:41.735] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:52:42.735] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:42.737] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:52:42.738] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:52:43.740] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:43.742] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:52:43.743] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:52:44.747] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:44.748] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:52:44.749] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:52:45.757] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:45.759] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:52:45.759] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:52:46.758] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:46.760] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:52:46.761] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:52:47.770] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:47.772] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:52:47.773] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:52:48.785] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:48.787] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:52:48.788] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:52:49.788] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:52:49.790] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:52:49"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:52:49.791] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:52:49"}
+[2026-04-30 08:52:50.800] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:50.802] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:52:50.803] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:52:51.802] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:51.804] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:52:51.804] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:52:52.807] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:52.809] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:52:52.810] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:52:53.812] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:53.814] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:52:53.815] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:52:54.814] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:54.816] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:52:54.818] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:52:55.818] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:55.820] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:52:55.821] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:52:56.830] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:56.832] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:52:56.833] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:52:57.847] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:57.848] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:52:57.850] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:52:58.859] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:58.860] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:52:58.861] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:52:59.858] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:52:59.860] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:52:59.861] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:53:00.014] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:52:49"}
+[2026-04-30 08:53:00.017] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:52:49","suedtime":"2026-04-30 08:53:00"}
+[2026-04-30 08:53:00.018] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 08:53:00.020] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 08:53:00.121] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:52:49","suedtime":"2026-04-30 08:53:00"}
+[2026-04-30 08:53:00.872] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:00.874] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:53:00.876] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:53:01.876] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:01.879] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:53:01.881] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:53:02.889] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:02.890] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:53:02.890] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:53:03.904] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:03.906] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:53:03.907] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:53:04.904] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:53:04.905] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:53:04"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:53:04.906] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:53:04"}
+[2026-04-30 08:53:05.919] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:05.921] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:53:05.922] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:53:06.919] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:06.920] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:53:06.921] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:53:07.925] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:07.926] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:53:07.926] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:53:08.933] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:08.936] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:53:08.938] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:53:09.943] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:09.944] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:53:09.945] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:53:10.945] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:10.946] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:53:10.947] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:53:11.954] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:11.956] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:53:11.958] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:53:12.955] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:12.957] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:53:12.958] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:53:13.967] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:13.968] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:53:13.969] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:53:14.980] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:14.981] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:53:14.982] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:53:15.994] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:15.996] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:53:15.997] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:53:16.996] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:16.997] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:53:16.997] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:53:18.012] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:18.014] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:53:18.016] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:53:19.024] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:19.027] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:53:19.029] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:53:20.024] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:53:20.026] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:53:20"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:53:20.027] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:53:20"}
+[2026-04-30 08:53:21.026] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:21.029] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:53:21.030] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:53:22.037] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:22.040] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:53:22.041] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:53:23.049] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:23.051] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:53:23.053] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:53:24.060] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:24.062] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:53:24.063] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:53:25.062] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:25.063] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:53:25.064] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:53:26.064] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:26.066] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:53:26.067] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:53:27.079] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:27.081] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:53:27.082] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:53:28.081] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:28.083] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:53:28.083] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:53:29.082] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:29.084] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:53:29.084] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:53:30.083] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:30.084] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:53:30.085] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:53:31.096] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:31.098] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:53:31.099] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:53:32.109] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:32.111] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:53:32.112] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:53:33.109] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:33.111] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:53:33.112] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:53:34.111] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:34.113] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:53:34.114] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:53:35.125] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:53:35.127] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:53:35"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:53:35.128] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:53:35"}
+[2026-04-30 08:53:36.140] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:36.142] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:53:36.143] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:53:37.141] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:37.142] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:53:37.143] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:53:38.144] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:38.146] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:53:38.147] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:53:39.151] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:39.152] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:53:39.153] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:53:40.157] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:40.158] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:53:40.159] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:53:41.159] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:41.160] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:53:41.161] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:53:42.174] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:42.175] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:53:42.176] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:53:43.189] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:43.190] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:53:43.191] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:53:44.202] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:44.204] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:53:44.205] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:53:45.205] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:45.207] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:53:45.208] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:53:46.209] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:46.211] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:53:46.211] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:53:47.224] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:47.226] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:53:47.227] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:53:48.227] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:48.228] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:53:48.229] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:53:49.229] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:49.231] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:53:49.232] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:53:50.231] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:53:50.233] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:53:50"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:53:50.234] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:53:50"}
+[2026-04-30 08:53:51.245] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:51.246] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:53:51.247] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:53:52.259] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:52.260] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:53:52.261] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:53:53.275] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:53.280] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:53:53.281] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:53:54.287] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:54.288] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:53:54.289] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:53:55.288] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:55.289] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:53:55.291] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:53:56.302] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:56.304] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:53:56.305] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:53:57.303] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:57.304] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:53:57.305] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:53:58.306] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:58.307] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:53:58.309] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:53:59.319] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:53:59.321] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:53:59.322] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:54:00.332] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:00.334] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:54:00.335] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:54:01.344] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:01.346] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:54:01.347] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:54:02.357] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:02.361] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:54:02.362] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:54:03.359] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:03.361] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:54:03.362] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:54:04.373] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:04.376] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:54:04.378] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:54:05.382] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:54:05.384] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:54:05"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:54:05.386] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:54:05"}
+[2026-04-30 08:54:06.383] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:06.384] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:54:06.385] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:54:07.391] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:07.395] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:54:07.396] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:54:08.402] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:08.403] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:54:08.404] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:54:09.418] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:09.418] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:54:09.419] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:54:10.433] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:10.434] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:54:10.434] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:54:11.446] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:11.447] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:54:11.448] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:54:12.456] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:12.458] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:54:12.459] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:54:13.469] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:13.470] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:54:13.471] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:54:14.470] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:14.471] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:54:14.473] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:54:15.485] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:15.486] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:54:15.487] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:54:16.496] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:16.496] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:54:16.498] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:54:17.511] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:17.512] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:54:17.513] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:54:18.524] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:18.526] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:54:18.527] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:54:19.537] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:19.538] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:54:19.539] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:54:20.537] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:54:20.538] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:54:20"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:54:20.540] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:54:20"}
+[2026-04-30 08:54:21.538] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:21.540] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:54:21.541] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:54:22.553] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:22.555] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:54:22.556] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:54:23.566] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:23.568] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:54:23.568] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:54:24.568] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:24.569] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:54:24.570] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:54:25.570] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:25.572] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:54:25.573] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:54:26.579] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:26.580] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:54:26.581] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:54:27.586] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:27.587] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:54:27.588] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:54:28.598] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:28.600] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:54:28.600] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:54:29.613] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:29.615] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:54:29.616] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:54:30.619] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:30.621] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:54:30.622] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:54:31.620] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:31.621] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:54:31.622] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:54:32.632] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:32.633] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:54:32.635] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:54:33.646] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:33.647] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:54:33.648] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:54:34.646] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:34.647] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:54:34.648] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:54:35.659] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:54:35.661] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:54:35"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:54:35.662] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:54:35"}
+[2026-04-30 08:54:36.673] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:36.675] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:54:36.676] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:54:37.685] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:37.686] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:54:37.687] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:54:38.696] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:38.698] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:54:38.699] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:54:39.698] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:39.699] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:54:39.700] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:54:40.712] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:40.713] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:54:40.714] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:54:41.726] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:41.728] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:54:41.728] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:54:42.729] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:42.730] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:54:42.732] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:54:43.742] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:43.743] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:54:43.744] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:54:44.759] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:44.765] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:54:44.768] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:54:45.773] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:45.774] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:54:45.775] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:54:46.785] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:46.787] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:54:46.788] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:54:47.799] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:47.801] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:54:47.802] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:54:48.801] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:48.803] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:54:48.804] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:54:49.815] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:49.816] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:54:49.817] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:54:50.814] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:54:50.816] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:54:50"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:54:50.817] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:54:50"}
+[2026-04-30 08:54:51.825] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:51.827] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:54:51.827] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:54:52.839] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:52.840] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:54:52.841] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:54:53.851] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:53.852] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:54:53.853] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:54:54.866] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:54.868] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:54:54.868] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:54:55.880] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:55.882] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:54:55.883] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:54:56.883] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:56.885] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:54:56.886] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:54:57.896] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:57.897] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:54:57.898] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:54:58.910] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:58.912] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:54:58.912] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:54:59.926] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:54:59.928] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:54:59.929] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:55:00.004] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:54:50"}
+[2026-04-30 08:55:00.006] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:54:50","suedtime":"2026-04-30 08:55:00"}
+[2026-04-30 08:55:00.007] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 08:55:00.008] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 08:55:00.100] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:54:50","suedtime":"2026-04-30 08:55:00"}
+[2026-04-30 08:55:00.925] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:00.927] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:55:00.928] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:55:01.935] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:01.937] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:55:01.938] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:55:02.947] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:02.948] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:55:02.950] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:55:03.958] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:03.959] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:55:03.960] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:55:04.973] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:04.974] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:55:04.975] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:55:05.985] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:55:05.988] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:55:05"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:55:05.990] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:55:05"}
+[2026-04-30 08:55:06.996] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:06.997] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:55:06.998] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:55:08.010] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:08.012] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:55:08.013] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:55:09.022] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:09.024] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:55:09.025] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:55:10.032] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:10.036] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:55:10.037] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:55:11.045] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:11.046] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:55:11.047] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:55:12.044] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:12.045] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:55:12.045] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:55:13.057] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:13.058] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:55:13.059] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:55:14.067] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:14.068] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:55:14.069] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:55:15.078] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:15.081] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:55:15.083] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:55:16.091] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:16.093] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:55:16.095] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:55:17.100] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:17.101] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:55:17.102] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:55:18.115] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:18.117] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:55:18.118] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:55:19.125] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:19.127] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:55:19.129] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:55:20.139] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:20.140] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:55:20.140] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:55:21.153] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:55:21.157] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:55:21"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:55:21.159] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:55:21"}
+[2026-04-30 08:55:22.168] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:22.170] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:55:22.178] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:55:23.180] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:23.182] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:55:23.184] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:55:24.191] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:24.192] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:55:24.193] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:55:25.204] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:25.205] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:55:25.205] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:55:26.217] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:26.218] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:55:26.219] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:55:27.230] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:27.233] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:55:27.234] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:55:28.241] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:28.246] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:55:28.248] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:55:29.243] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:29.246] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:55:29.248] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:55:30.255] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:30.258] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:55:30.259] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:55:31.269] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:31.272] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:55:31.274] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:55:32.270] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:32.272] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:55:32.273] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:55:33.283] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:33.285] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:55:33.287] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:55:34.296] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:34.299] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:55:34.300] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:55:35.307] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:35.311] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:55:35.312] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:55:36.315] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:55:36.316] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:55:36"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:55:36.317] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:55:36"}
+[2026-04-30 08:55:37.326] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:37.327] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:55:37.329] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:55:38.338] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:38.339] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:55:38.341] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:55:39.347] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:39.350] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:55:39.351] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:55:40.350] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:40.351] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:55:40.352] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:55:41.366] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:41.368] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:55:41.369] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:55:42.372] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:42.376] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:55:42.377] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:55:43.373] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:43.374] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:55:43.374] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:55:44.387] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:44.392] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:55:44.393] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:55:45.402] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:45.404] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:55:45.405] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:55:46.416] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:46.417] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:55:46.418] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:55:47.429] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:47.430] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:55:47.432] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:55:48.442] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:48.444] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:55:48.446] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:55:49.444] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:49.445] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:55:49.447] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:55:50.445] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:50.446] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:55:50.447] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:55:51.459] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:55:51.460] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:55:51"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:55:51.463] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:55:51"}
+[2026-04-30 08:55:52.475] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:52.476] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:55:52.478] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:55:53.486] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:53.488] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:55:53.489] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:55:54.494] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:54.496] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:55:54.497] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:55:55.494] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:55.496] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:55:55.498] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:55:56.503] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:56.505] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:55:56.507] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:55:57.513] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:57.515] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:55:57.517] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:55:58.527] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:58.529] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:55:58.531] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:55:59.543] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:55:59.544] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:55:59.545] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:56:00.555] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:00.558] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:56:00.560] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:56:01.569] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:01.571] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:56:01.573] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:56:02.569] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:02.571] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:56:02.573] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:56:03.570] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:03.571] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:56:03.572] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:56:04.582] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:04.584] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:56:04.585] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:56:05.594] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:05.595] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:56:05.596] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:56:06.606] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:56:06.608] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:56:06"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:56:06.609] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:56:06"}
+[2026-04-30 08:56:07.608] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:07.609] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:56:07.610] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:56:08.614] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:08.615] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:56:08.616] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:56:09.625] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:09.629] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:56:09.630] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:56:10.641] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:10.643] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:56:10.644] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:56:11.654] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:11.655] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:56:11.657] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:56:12.667] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:12.670] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:56:12.672] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:56:13.684] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:13.685] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:56:13.686] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:56:14.696] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:14.697] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:56:14.698] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:56:15.708] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:15.710] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:56:15.711] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:56:16.709] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:16.711] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:56:16.712] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:56:17.725] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:17.726] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:56:17.726] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:56:18.747] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:18.749] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:56:18.751] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:56:19.746] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:19.748] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:56:19.749] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:56:20.760] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:20.761] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:56:20.762] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:56:21.773] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:56:21.776] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:56:21"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:56:21.777] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:56:21"}
+[2026-04-30 08:56:22.786] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:22.787] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:56:22.787] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:56:23.786] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:23.789] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:56:23.790] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:56:24.798] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:24.799] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:56:24.800] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:56:25.814] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:25.816] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:56:25.816] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:56:26.829] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:26.830] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:56:26.831] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:56:27.842] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:27.843] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:56:27.845] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:56:28.844] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:28.845] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:56:28.845] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:56:29.858] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:29.859] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:56:29.860] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:56:30.863] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:30.863] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:56:30.864] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:56:31.869] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:31.870] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:56:31.870] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:56:32.883] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:32.884] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:56:32.885] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:56:33.898] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:33.898] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:56:33.899] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:56:34.911] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:34.912] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:56:34.912] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:56:35.926] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:35.927] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:56:35.937] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:56:36.942] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:56:36.943] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:56:36"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:56:36.944] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:56:36"}
+[2026-04-30 08:56:37.958] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:37.959] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:56:37.960] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:56:38.958] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:38.959] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:56:38.959] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:56:39.973] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:39.974] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:56:39.974] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:56:40.979] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:40.980] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:56:40.981] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:56:41.978] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:41.979] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:56:41.980] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:56:42.994] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:42.995] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:56:42.996] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:56:44.008] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:44.009] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:56:44.009] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:56:45.018] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:45.019] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:56:45.020] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:56:46.020] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:46.021] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:56:46.022] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:56:47.031] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:47.033] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:56:47.033] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:56:48.035] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:48.036] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:56:48.036] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:56:49.036] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:49.038] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:56:49.039] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:56:50.043] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:50.044] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:56:50.045] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:56:51.054] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:51.055] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:56:51.056] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:56:52.056] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:56:52.057] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:56:52"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:56:52.058] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:56:52"}
+[2026-04-30 08:56:53.057] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:53.058] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:56:53.059] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:56:54.070] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:54.071] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:56:54.072] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:56:55.084] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:55.085] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:56:55.085] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:56:56.084] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:56.085] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:56:56.086] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:56:57.098] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:57.099] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:56:57.100] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:56:58.112] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:58.114] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:56:58.114] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:56:59.125] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:56:59.126] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:56:59.126] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:57:00.014] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:56:52"}
+[2026-04-30 08:57:00.015] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:56:52","suedtime":"2026-04-30 08:57:00"}
+[2026-04-30 08:57:00.016] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 08:57:00.017] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 08:57:00.115] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:56:52","suedtime":"2026-04-30 08:57:00"}
+[2026-04-30 08:57:00.138] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:00.139] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:57:00.139] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:57:01.152] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:01.153] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:57:01.153] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:57:02.152] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:02.153] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:57:02.154] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:57:03.167] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:03.168] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:57:03.168] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:57:04.174] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:04.175] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:57:04.176] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:57:05.187] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:05.188] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:57:05.189] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:57:06.190] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:06.191] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:57:06.191] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:57:07.206] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:57:07.207] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:57:07"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:57:07.207] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:57:07"}
+[2026-04-30 08:57:08.210] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:08.212] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:57:08.213] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:57:09.212] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:09.213] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:57:09.214] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:57:10.226] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:10.227] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:57:10.228] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:57:11.240] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:11.241] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:57:11.241] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:57:12.239] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:12.240] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:57:12.241] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:57:13.254] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:13.255] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:57:13.256] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:57:14.271] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:14.272] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:57:14.272] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:57:15.286] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:15.287] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:57:15.288] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:57:16.298] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:16.299] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:57:16.300] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:57:17.309] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:17.310] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:57:17.310] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:57:18.309] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:18.310] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:57:18.310] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:57:19.322] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:19.322] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:57:19.323] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:57:20.337] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:20.338] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:57:20.339] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:57:21.349] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:21.350] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:57:21.350] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:57:22.349] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:57:22.350] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:57:22"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:57:22.351] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:57:22"}
+[2026-04-30 08:57:23.364] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:23.364] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:57:23.365] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:57:24.377] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:24.377] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:57:24.378] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:57:25.377] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:25.378] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:57:25.379] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:57:26.386] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:26.387] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:57:26.388] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:57:27.400] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:27.402] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:57:27.403] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:57:28.412] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:28.413] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:57:28.413] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:57:29.421] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:29.423] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:57:29.423] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:57:30.423] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:30.424] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:57:30.424] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:57:31.434] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:31.435] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:57:31.435] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:57:32.448] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:32.449] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:57:32.450] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:57:33.460] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:33.461] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:57:33.461] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:57:34.462] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:34.463] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:57:34.464] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:57:35.470] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:35.471] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:57:35.471] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:57:36.481] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:36.482] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:57:36.483] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:57:37.485] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:57:37.486] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:57:37"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:57:37.487] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:57:37"}
+[2026-04-30 08:57:38.486] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:38.486] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:57:38.488] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:57:39.499] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:39.500] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:57:39.501] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:57:40.513] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:40.515] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:57:40.516] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:57:41.523] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:41.524] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:57:41.524] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:57:42.531] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:42.531] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:57:42.532] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:57:43.533] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:43.534] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:57:43.535] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:57:44.537] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:44.538] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:57:44.539] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:57:45.552] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:45.553] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:57:45.553] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:57:46.564] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:46.565] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:57:46.565] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:57:47.577] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:47.578] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:57:47.579] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:57:48.591] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:48.592] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:57:48.593] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:57:49.595] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:49.597] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:57:49.597] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:57:50.606] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:50.607] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:57:50.607] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:57:51.621] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:51.622] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:57:51.622] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:57:52.634] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:57:52.635] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:57:52"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:57:52.637] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:57:52"}
+[2026-04-30 08:57:53.634] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:53.635] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:57:53.636] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:57:54.634] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:54.635] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:57:54.636] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:57:55.647] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:55.647] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:57:55.648] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:57:56.659] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:56.660] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:57:56.661] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:57:57.661] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:57.662] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:57:57.662] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:57:58.665] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:58.666] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:57:58.666] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:57:59.676] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:57:59.677] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:57:59.678] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:58:00.690] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:00.691] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:58:00.692] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:58:01.692] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:01.693] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:58:01.694] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:58:02.695] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:02.697] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:58:02.697] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:58:03.702] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:03.702] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:58:03.703] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:58:04.702] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:04.703] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:58:04.704] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:58:05.711] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:05.712] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:58:05.713] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:58:06.722] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:06.723] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:58:06.723] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:58:07.721] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:58:07.722] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:58:07"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:58:07.723] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:58:07"}
+[2026-04-30 08:58:08.723] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:08.724] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:58:08.725] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:58:09.729] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:09.730] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:58:09.731] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:58:10.731] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:10.732] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:58:10.732] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:58:11.746] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:11.748] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:58:11.748] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:58:12.762] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:12.763] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:58:12.773] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:58:13.773] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:13.774] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:58:13.775] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:58:14.782] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:14.783] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:58:14.786] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:58:15.793] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:15.794] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:58:15.795] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:58:16.794] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:16.796] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:58:16.796] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:58:17.808] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:17.808] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:58:17.809] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:58:18.819] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:18.820] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:58:18.821] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:58:19.820] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:19.820] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:58:19.821] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:58:20.824] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:20.825] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:58:20.826] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:58:21.828] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:21.829] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:58:21.830] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:58:22.841] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:58:22.842] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:58:22"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:58:22.842] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:58:22"}
+[2026-04-30 08:58:23.856] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:23.857] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:58:23.858] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:58:24.862] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:24.863] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:58:24.863] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:58:25.876] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:25.877] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:58:25.877] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:58:26.887] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:26.888] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:58:26.888] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:58:27.888] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:27.889] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:58:27.890] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:58:28.898] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:28.899] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:58:28.900] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:58:29.912] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:29.913] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:58:29.913] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:58:30.922] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:30.924] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:58:30.926] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:58:31.936] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:31.938] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:58:31.939] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:58:32.948] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:32.949] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:58:32.950] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:58:33.952] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:33.953] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:58:33.954] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:58:34.968] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:34.969] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:58:34.969] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:58:35.977] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:35.978] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:58:35.978] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:58:36.988] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:36.989] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:58:36.990] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:58:37.996] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:58:37.997] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:58:37"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:58:37.997] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:58:37"}
+[2026-04-30 08:58:39.008] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:39.009] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:58:39.010] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:58:40.022] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:40.023] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:58:40.024] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:58:41.031] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:41.032] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:58:41.032] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:58:42.047] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:42.048] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:58:42.048] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:58:43.046] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:43.047] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:58:43.048] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:58:44.059] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:44.060] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:58:44.060] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:58:45.070] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:45.070] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:58:45.071] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:58:46.083] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:46.084] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:58:46.084] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:58:47.095] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:47.096] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:58:47.097] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:58:48.108] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:48.109] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:58:48.109] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:58:49.122] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:49.123] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:58:49.123] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:58:50.132] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:50.132] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:58:50.135] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:58:51.144] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:51.145] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:58:51.146] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:58:52.158] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:52.159] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:58:52.159] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:58:53.171] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:58:53.172] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:58:53"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:58:53.172] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:58:53"}
+[2026-04-30 08:58:54.173] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:54.174] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:58:54.175] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:58:55.184] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:55.185] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:58:55.186] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:58:56.197] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:56.198] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:58:56.198] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:58:57.211] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:57.212] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:58:57.213] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:58:58.223] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:58.224] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:58:58.224] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:58:59.237] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:58:59.237] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:58:59.238] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:59:00.007] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:58:53"}
+[2026-04-30 08:59:00.008] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:58:53","suedtime":"2026-04-30 08:59:00"}
+[2026-04-30 08:59:00.009] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 08:59:00.010] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 08:59:00.116] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 08:58:53","suedtime":"2026-04-30 08:59:00"}
+[2026-04-30 08:59:00.241] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:00.242] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:59:00.243] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:59:01.251] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:01.251] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:59:01.252] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:59:02.264] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:02.265] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:59:02.265] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:59:03.277] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:03.278] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:59:03.279] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:59:04.283] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:04.284] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:59:04.284] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:59:05.284] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:05.285] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:59:05.285] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:59:06.284] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:06.285] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:59:06.286] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:59:07.292] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:07.293] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:59:07.294] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:59:08.297] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:59:08.298] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:59:08"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:59:08.299] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:59:08"}
+[2026-04-30 08:59:09.302] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:09.303] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:59:09.303] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:59:10.316] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:10.316] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:59:10.317] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:59:11.325] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:11.326] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:59:11.326] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:59:12.339] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:12.340] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:59:12.341] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:59:13.351] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:13.352] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:59:13.352] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:59:14.367] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:14.368] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:59:14.369] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:59:15.368] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:15.369] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:59:15.369] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:59:16.381] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:16.382] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:59:16.383] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:59:17.393] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:17.394] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:59:17.395] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:59:18.394] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:18.395] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:59:18.396] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:59:19.407] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:19.408] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:59:19.409] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:59:20.422] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:20.423] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:59:20.424] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:59:21.434] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:21.435] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:59:21.435] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:59:22.448] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:22.449] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:59:22.449] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:59:23.459] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:59:23.461] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:59:23"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:59:23.461] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:59:23"}
+[2026-04-30 08:59:24.461] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:24.462] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:59:24.462] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:59:25.471] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:25.472] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:59:25.473] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:59:26.485] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:26.486] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:59:26.486] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:59:27.498] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:27.499] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:59:27.500] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:59:28.513] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:28.514] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:59:28.514] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:59:29.515] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:29.516] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:59:29.516] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:59:30.529] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:30.530] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:59:30.532] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:59:31.530] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:31.531] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:59:31.531] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:59:32.544] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:32.545] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:59:32.548] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:59:33.544] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:33.545] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:59:33.545] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:59:34.558] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:34.559] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:59:34.559] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:59:35.571] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:35.572] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:59:35.572] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:59:36.572] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:36.573] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:59:36.573] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:59:37.587] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:37.587] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:59:37.589] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:59:38.601] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:59:38.602] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:59:38"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:59:38.603] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:59:38"}
+[2026-04-30 08:59:39.603] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:39.603] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:59:39.604] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:59:40.612] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:40.613] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:59:40.613] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:59:41.624] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:41.625] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:59:41.625] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:59:42.638] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:42.639] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:59:42.639] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:59:43.638] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:43.639] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:59:43.640] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:59:44.652] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:44.654] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:59:44.654] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 08:59:45.656] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:45.657] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 08:59:45.657] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 08:59:46.657] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:46.658] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 08:59:46.658] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 08:59:47.672] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:47.673] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 08:59:47.673] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 08:59:48.686] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:48.687] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 08:59:48.688] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 08:59:49.701] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:49.702] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 08:59:49.703] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 08:59:50.704] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:50.705] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 08:59:50.706] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 08:59:51.718] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:51.719] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 08:59:51.720] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 08:59:52.734] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:52.735] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 08:59:52.735] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 08:59:53.749] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 08:59:53.751] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:59:53"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 08:59:53.752] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 08:59:53"}
+[2026-04-30 08:59:54.762] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:54.763] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 08:59:54.764] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 08:59:55.775] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:55.776] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 08:59:55.777] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 08:59:56.775] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:56.776] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 08:59:56.777] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 08:59:57.779] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:57.780] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 08:59:57.781] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 08:59:58.781] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:58.782] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 08:59:58.783] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 08:59:59.793] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 08:59:59.795] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 08:59:59.796] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:00:00.807] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:00.807] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:00:00.808] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:00:01.819] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:01.820] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:00:01.820] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:00:02.820] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:02.821] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:00:02.822] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:00:03.834] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:03.836] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:00:03.836] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:00:04.847] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:04.848] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:00:04.849] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:00:05.847] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:05.849] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:00:05.850] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:00:06.851] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:06.852] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:00:06.853] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:00:07.852] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:07.853] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:00:07.856] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:00:08.863] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:00:08.864] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:00:08"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:00:08.865] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:00:08"}
+[2026-04-30 09:00:09.878] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:09.880] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:00:09.880] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:00:10.889] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:10.890] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:00:10.890] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:00:11.902] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:11.902] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:00:11.903] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:00:12.903] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:12.904] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:00:12.905] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:00:13.906] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:13.908] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:00:13.908] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:00:14.917] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:14.918] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:00:14.918] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:00:15.930] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:15.931] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:00:15.933] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:00:16.932] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:16.933] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:00:16.933] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:00:17.933] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:17.934] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:00:17.935] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:00:18.935] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:18.937] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:00:18.937] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:00:19.945] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:19.946] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:00:19.947] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:00:20.958] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:20.959] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:00:20.960] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:00:21.969] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:21.970] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:00:21.971] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:00:22.983] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:22.984] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:00:22.984] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:00:23.984] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:00:23.985] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:00:23"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:00:23.986] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:00:23"}
+[2026-04-30 09:00:24.987] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:24.988] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:00:24.989] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:00:25.988] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:25.988] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:00:25.989] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:00:26.999] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:27.000] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:00:27.000] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:00:28.010] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:28.011] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:00:28.023] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:00:29.024] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:29.025] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:00:29.026] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:00:30.038] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:30.039] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:00:30.050] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:00:31.050] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:31.050] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:00:31.051] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:00:32.051] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:32.052] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:00:32.052] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:00:33.051] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:33.052] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:00:33.053] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:00:34.062] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:34.063] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:00:34.063] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:00:35.065] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:35.066] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:00:35.067] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:00:36.075] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:36.076] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:00:36.077] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:00:37.076] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:37.078] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:00:37.078] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:00:38.091] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:38.092] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:00:38.092] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:00:39.104] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:00:39.105] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:00:39"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:00:39.105] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:00:39"}
+[2026-04-30 09:00:40.116] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:40.117] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:00:40.118] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:00:41.130] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:41.131] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:00:41.132] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:00:42.134] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:42.135] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:00:42.136] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:00:43.146] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:43.147] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:00:43.147] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:00:44.147] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:44.149] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:00:44.151] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:00:45.163] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:45.164] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:00:45.165] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:00:46.175] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:46.176] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:00:46.179] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:00:47.176] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:47.178] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:00:47.178] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:00:48.191] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:48.192] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:00:48.193] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:00:49.204] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:49.205] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:00:49.206] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:00:50.207] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:50.208] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:00:50.209] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:00:51.221] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:51.222] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:00:51.222] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:00:52.236] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:52.237] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:00:52.238] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:00:53.248] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:53.249] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:00:53.249] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:00:54.249] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:00:54.250] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:00:54"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:00:54.251] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:00:54"}
+[2026-04-30 09:00:55.261] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:55.262] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:00:55.263] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:00:56.263] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:56.264] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:00:56.265] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:00:57.275] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:57.276] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:00:57.277] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:00:58.276] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:58.277] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:00:58.278] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:00:59.291] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:00:59.292] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:00:59.293] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:01:00.008] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 09:00:54"}
+[2026-04-30 09:01:00.009] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 09:00:54","suedtime":"2026-04-30 09:01:00"}
+[2026-04-30 09:01:00.010] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 09:01:00.011] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 09:01:00.106] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 09:00:54","suedtime":"2026-04-30 09:01:00"}
+[2026-04-30 09:01:00.291] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:00.292] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:01:00.292] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:01:01.291] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:01.292] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:01:01.294] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:01:02.305] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:02.306] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:01:02.308] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:01:03.320] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:03.321] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:01:03.322] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:01:04.335] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:04.337] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:01:04.338] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:01:05.346] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:05.347] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:01:05.348] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:01:06.358] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:06.360] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:01:06.361] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:01:07.358] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:07.359] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:01:07.360] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:01:08.369] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:08.370] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:01:08.370] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:01:09.383] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:01:09.386] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:01:09"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:01:09.387] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:01:09"}
+[2026-04-30 09:01:10.397] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:10.398] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:01:10.400] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:01:11.409] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:11.412] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:01:11.413] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:01:12.425] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:12.426] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:01:12.427] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:01:13.438] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:13.441] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:01:13.441] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:01:14.454] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:14.455] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:01:14.457] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:01:15.453] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:15.455] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:01:15.456] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:01:16.467] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:16.470] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:01:16.470] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:01:17.467] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:17.469] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:01:17.470] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:01:18.477] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:18.479] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:01:18.480] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:01:19.488] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:19.490] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:01:19.491] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:01:20.489] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:20.490] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:01:20.491] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:01:21.501] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:21.503] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:01:21.504] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:01:22.516] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:22.517] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:01:22.518] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:01:23.527] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:23.529] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:01:23.532] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:01:24.543] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:01:24.544] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:01:24"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:01:24.546] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:01:24"}
+[2026-04-30 09:01:25.555] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:25.556] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:01:25.557] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:01:26.570] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:26.571] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:01:26.572] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:01:27.571] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:27.573] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:01:27.575] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:01:28.585] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:28.586] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:01:28.588] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:01:29.597] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:29.599] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:01:29.601] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:01:30.608] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:30.610] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:01:30.611] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:01:31.620] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:31.622] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:01:31.623] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:01:32.624] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:32.625] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:01:32.626] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:01:33.637] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:33.638] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:01:33.639] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:01:34.639] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:34.641] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:01:34.643] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:01:35.653] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:35.654] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:01:35.655] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:01:36.655] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:36.656] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:01:36.657] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:01:37.656] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:37.657] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:01:37.658] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:01:38.657] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:38.658] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:01:38.660] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:01:39.663] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:01:39.665] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:01:39"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:01:39.666] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:01:39"}
+[2026-04-30 09:01:40.664] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:40.666] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:01:40.667] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:01:41.670] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:41.674] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:01:41.676] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:01:42.671] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:42.672] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:01:42.673] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:01:43.676] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:43.677] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:01:43.678] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:01:44.680] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:44.682] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:01:44.684] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:01:45.690] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:45.692] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:01:45.694] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:01:46.701] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:46.702] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:01:46.703] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:01:47.710] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:47.711] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:01:47.713] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:01:48.724] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:48.725] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:01:48.726] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:01:49.732] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:49.734] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:01:49.735] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:01:50.743] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:50.746] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:01:50.747] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:01:51.752] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:51.753] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:01:51.755] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:01:52.764] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:52.765] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:01:52.766] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:01:53.772] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:53.773] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:01:53.774] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:01:54.780] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:01:54.781] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:01:54"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:01:54.782] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:01:54"}
+[2026-04-30 09:01:55.794] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:55.796] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:01:55.797] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:01:56.803] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:56.805] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:01:56.806] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:01:57.812] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:57.813] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:01:57.814] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:01:58.821] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:58.823] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:01:58.824] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:01:59.833] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:01:59.835] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:01:59.835] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:02:00.845] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:00.846] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:02:00.847] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:02:01.857] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:01.858] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:02:01.860] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:02:02.869] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:02.871] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:02:02.872] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:02:03.883] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:03.885] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:02:03.886] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:02:04.895] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:04.897] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:02:04.900] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:02:05.907] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:05.908] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:02:05.909] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:02:06.915] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:06.916] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:02:06.918] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:02:07.926] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:07.928] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:02:07.929] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:02:08.937] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:08.938] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:02:08.939] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:02:09.945] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:02:09.946] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:02:09"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:02:09.947] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:02:09"}
+[2026-04-30 09:02:10.955] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:10.956] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:02:10.957] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:02:11.964] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:11.966] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:02:11.967] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:02:12.972] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:12.974] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:02:12.975] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:02:13.981] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:13.983] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:02:13.984] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:02:14.986] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:14.987] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:02:14.989] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:02:15.994] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:15.995] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:02:15.996] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:02:17.001] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:17.003] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:02:17.006] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:02:18.011] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:18.013] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:02:18.014] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:02:19.015] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:19.016] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:02:19.017] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:02:20.021] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:20.023] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:02:20.024] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:02:21.023] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:21.024] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:02:21.025] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:02:22.037] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:22.039] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:02:22.040] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:02:23.041] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:23.043] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:02:23.045] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:02:24.046] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:24.047] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:02:24.049] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:02:25.048] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:02:25.049] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:02:25"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:02:25.052] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:02:25"}
+[2026-04-30 09:02:26.050] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:26.051] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:02:26.053] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:02:27.065] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:27.067] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:02:27.068] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:02:28.073] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:28.077] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:02:28.080] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:02:29.079] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:29.081] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:02:29.081] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:02:30.085] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:30.086] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:02:30.088] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:02:31.085] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:31.086] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:02:31.087] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:02:32.100] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:32.101] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:02:32.102] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:02:33.101] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:33.102] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:02:33.103] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:02:34.105] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:34.106] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:02:34.107] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:02:35.111] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:35.112] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:02:35.113] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:02:36.113] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:36.114] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:02:36.115] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:02:37.124] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:37.125] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:02:37.126] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:02:38.136] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:38.137] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:02:38.138] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:02:39.146] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:39.147] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:02:39.148] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:02:40.155] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:02:40.155] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:02:40"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:02:40.156] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:02:40"}
+[2026-04-30 09:02:41.169] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:41.170] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:02:41.170] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:02:42.171] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:42.172] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:02:42.172] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:02:43.185] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:43.186] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:02:43.187] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:02:44.192] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:44.192] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:02:44.193] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:02:45.199] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:45.200] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:02:45.200] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:02:46.201] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:46.202] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:02:46.203] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:02:47.208] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:47.210] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:02:47.210] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:02:48.223] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:48.224] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:02:48.224] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:02:49.238] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:49.240] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:02:49.240] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:02:50.248] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:50.249] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:02:50.250] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:02:51.258] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:51.259] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:02:51.260] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:02:52.262] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:52.263] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:02:52.264] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:02:53.273] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:53.274] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:02:53.274] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:02:54.286] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:54.287] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:02:54.288] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:02:55.290] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:02:55.292] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:02:55"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:02:55.293] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:02:55"}
+[2026-04-30 09:02:56.292] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:56.295] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:02:56.295] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:02:57.305] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:57.306] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:02:57.307] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:02:58.321] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:58.321] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:02:58.324] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:02:59.334] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:02:59.336] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:02:59.336] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:03:00.002] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 09:02:55"}
+[2026-04-30 09:03:00.004] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 09:02:55","suedtime":"2026-04-30 09:03:00"}
+[2026-04-30 09:03:00.004] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 09:03:00.005] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 09:03:00.099] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 09:02:55","suedtime":"2026-04-30 09:03:00"}
+[2026-04-30 09:03:00.346] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:00.347] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:03:00.348] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:03:01.361] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:01.362] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:03:01.362] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:03:02.374] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:02.374] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:03:02.375] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:03:03.389] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:03.390] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:03:03.391] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:03:04.400] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:04.402] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:03:04.404] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:03:05.402] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:05.403] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:03:05.404] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:03:06.418] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:06.419] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:03:06.420] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:03:07.431] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:07.432] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:03:07.432] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:03:08.431] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:08.432] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:03:08.433] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:03:09.432] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:09.433] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:03:09.434] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:03:10.434] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:03:10.435] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:03:10"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:03:10.436] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:03:10"}
+[2026-04-30 09:03:11.441] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:11.442] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:03:11.443] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:03:12.451] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:12.453] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:03:12.453] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:03:13.466] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:13.467] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:03:13.468] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:03:14.466] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:14.467] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:03:14.469] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:03:15.468] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:15.468] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:03:15.469] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:03:16.478] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:16.479] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:03:16.480] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:03:17.480] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:17.481] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:03:17.481] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:03:18.487] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:18.489] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:03:18.489] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:03:19.488] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:19.488] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:03:19.489] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:03:20.488] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:20.489] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:03:20.490] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:03:21.495] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:21.495] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:03:21.496] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:03:22.496] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:22.498] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:03:22.499] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:03:23.499] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:23.500] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:03:23.502] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:03:24.500] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:24.501] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:03:24.501] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:03:25.512] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:03:25.513] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:03:25"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:03:25.514] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:03:25"}
+[2026-04-30 09:03:26.524] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:26.525] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:03:26.525] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:03:27.536] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:27.537] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:03:27.537] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:03:28.539] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:28.539] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:03:28.540] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:03:29.539] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:29.540] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:03:29.541] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:03:30.543] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:30.544] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:03:30.545] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:03:31.544] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:31.546] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:03:31.547] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:03:32.552] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:32.554] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:03:32.555] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:03:33.557] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:33.559] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:03:33.560] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:03:34.568] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:34.569] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:03:34.570] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:03:35.580] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:35.581] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:03:35.582] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:03:36.581] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:36.583] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:03:36.584] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:03:37.583] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:37.587] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:03:37.588] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:03:38.585] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:38.588] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:03:38.589] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:03:39.601] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:39.602] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:03:39.603] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:03:40.608] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:03:40.609] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:03:40"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:03:40.610] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:03:40"}
+[2026-04-30 09:03:41.609] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:41.610] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:03:41.611] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:03:42.611] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:42.613] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:03:42.614] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:03:43.626] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:43.628] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:03:43.630] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:03:44.627] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:44.629] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:03:44.630] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:03:45.632] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:45.634] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:03:45.635] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:03:46.646] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:46.648] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:03:46.650] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:03:47.660] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:47.662] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:03:47.663] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:03:48.675] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:48.677] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:03:48.678] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:03:49.690] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:49.691] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:03:49.693] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:03:50.690] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:50.692] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:03:50.693] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:03:51.691] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:51.693] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:03:51.695] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:03:52.705] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:52.706] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:03:52.707] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:03:53.708] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:53.710] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:03:53.711] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:03:54.715] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:54.717] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:03:54.718] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:03:55.718] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:03:55.720] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:03:55"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:03:55.721] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:03:55"}
+[2026-04-30 09:03:56.723] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:56.725] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:03:56.726] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:03:57.726] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:57.727] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:03:57.729] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:03:58.741] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:58.743] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:03:58.744] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:03:59.746] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:03:59.748] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:03:59.750] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:04:00.746] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:00.747] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:04:00.747] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:04:01.762] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:01.764] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:04:01.765] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:04:02.774] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:02.776] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:04:02.777] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:04:03.789] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:03.790] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:04:03.791] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:04:04.803] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:04.805] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:04:04.806] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:04:05.804] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:05.806] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:04:05.809] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:04:06.805] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:06.807] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:04:06.808] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:04:07.816] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:07.818] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:04:07.818] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:04:08.826] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:08.827] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:04:08.827] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:04:09.827] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:09.828] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:04:09.829] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:04:10.836] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:04:10.838] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:04:10"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:04:10.839] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:04:10"}
+[2026-04-30 09:04:11.850] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:11.851] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:04:11.852] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:04:12.858] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:12.860] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:04:12.860] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:04:13.861] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:13.863] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:04:13.864] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:04:14.876] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:14.877] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:04:14.877] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:04:15.876] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:15.877] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:04:15.878] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:04:16.891] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:16.892] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:04:16.892] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:04:17.906] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:17.907] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:04:17.908] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:04:18.912] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:18.913] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:04:18.914] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:04:19.913] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:19.913] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:04:19.914] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:04:20.913] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:20.915] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:04:20.915] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:04:21.921] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:21.922] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:04:21.922] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:04:22.922] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:22.922] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:04:22.923] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:04:23.921] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:23.922] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:04:23.923] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:04:24.925] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:24.926] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:04:24.926] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:04:25.927] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:04:25.928] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:04:25"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:04:25.930] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:04:25"}
+[2026-04-30 09:04:26.935] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:26.937] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:04:26.938] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:04:27.951] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:27.952] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:04:27.953] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:04:28.951] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:28.953] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:04:28.954] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:04:29.952] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:29.953] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:04:29.954] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:04:30.963] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:30.965] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:04:30.966] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:04:31.978] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:31.980] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:04:31.981] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:04:32.980] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:32.981] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:04:32.982] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:04:33.983] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:33.984] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:04:33.985] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:04:34.987] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:34.988] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:04:34.989] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:04:36.002] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:36.004] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:04:36.005] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:04:37.013] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:37.014] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:04:37.017] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:04:38.024] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:38.026] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:04:38.027] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:04:39.033] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:39.035] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:04:39.036] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:04:40.041] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:40.043] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:04:40.045] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:04:41.052] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:04:41.054] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:04:41"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:04:41.055] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:04:41"}
+[2026-04-30 09:04:42.068] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:42.070] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:04:42.071] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:04:43.071] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:43.073] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:04:43.074] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:04:44.083] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:44.085] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:04:44.087] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:04:45.085] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:45.086] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:04:45.086] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:04:46.095] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:46.096] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:04:46.097] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:04:47.108] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:47.109] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:04:47.110] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:04:48.122] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:48.124] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:04:48.125] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:04:49.135] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:49.138] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:04:49.139] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:04:50.148] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:50.149] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:04:50.150] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:04:51.160] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:51.161] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:04:51.161] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:04:52.172] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:52.173] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:04:52.173] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:04:53.175] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:53.176] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:04:53.177] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:04:54.180] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:54.181] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:04:54.182] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:04:55.194] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:55.196] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:04:55.196] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:04:56.208] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:04:56.210] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:04:56"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:04:56.211] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:04:56"}
+[2026-04-30 09:04:57.221] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:57.223] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:04:57.223] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:04:58.236] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:58.237] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:04:58.238] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:04:59.247] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:04:59.248] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:04:59.249] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:05:00.012] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 09:04:56"}
+[2026-04-30 09:05:00.014] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 09:04:56","suedtime":"2026-04-30 09:05:00"}
+[2026-04-30 09:05:00.018] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 09:05:00.020] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 09:05:00.128] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 09:04:56","suedtime":"2026-04-30 09:05:00"}
+[2026-04-30 09:05:00.249] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:00.251] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:05:00.252] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:05:01.250] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:01.251] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:05:01.253] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:05:02.254] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:02.255] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:05:02.257] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:05:03.253] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:03.254] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:05:03.255] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:05:04.257] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:04.258] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:05:04.259] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:05:05.259] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:05.261] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:05:05.262] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:05:06.261] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:06.262] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:05:06.262] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:05:07.262] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:07.265] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:05:07.267] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:05:08.277] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:08.280] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:05:08.281] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:05:09.279] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:09.281] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:05:09.282] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:05:10.285] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:10.286] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:05:10.287] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:05:11.287] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:05:11.289] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:05:11"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:05:11.290] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:05:11"}
+[2026-04-30 09:05:12.296] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:12.297] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:05:12.298] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:05:13.311] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:13.315] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:05:13.317] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:05:14.323] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:14.325] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:05:14.327] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:05:15.324] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:15.330] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:05:15.331] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:05:16.326] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:16.327] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:05:16.328] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:05:17.329] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:17.330] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:05:17.330] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:05:18.342] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:18.346] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:05:18.348] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:05:19.354] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:19.355] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:05:19.357] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:05:20.368] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:20.371] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:05:20.372] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:05:21.384] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:21.386] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:05:21.387] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:05:22.397] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:22.399] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:05:22.400] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:05:23.413] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:23.415] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:05:23.417] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:05:24.420] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:24.422] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:05:24.423] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:05:25.426] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:25.429] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:05:25.430] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:05:26.426] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:05:26.428] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:05:26"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:05:26.434] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:05:26"}
+[2026-04-30 09:05:27.442] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:27.443] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:05:27.445] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:05:28.451] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:28.453] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:05:28.454] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:05:29.466] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:29.468] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:05:29.469] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:05:30.469] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:30.472] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:05:30.473] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:05:31.473] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:31.475] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:05:31.477] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:05:32.478] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:32.479] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:05:32.480] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:05:33.482] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:33.484] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:05:33.485] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:05:34.495] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:34.496] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:05:34.497] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:05:35.496] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:35.497] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:05:35.498] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:05:36.511] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:36.514] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:05:36.516] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:05:37.526] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:37.529] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:05:37.532] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:05:38.540] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:38.542] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:05:38.544] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:05:39.555] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:39.556] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:05:39.557] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:05:40.566] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:40.567] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:05:40.568] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:05:41.580] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:05:41.582] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:05:41"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:05:41.583] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:05:41"}
+[2026-04-30 09:05:42.595] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:42.596] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:05:42.597] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:05:43.607] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:43.608] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:05:43.610] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:05:44.610] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:44.613] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:05:44.614] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:05:45.612] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:45.614] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:05:45.616] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:05:46.626] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:46.627] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:05:46.629] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:05:47.638] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:47.643] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:05:47.645] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:05:48.642] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:48.644] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:05:48.646] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:05:49.645] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:49.647] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:05:49.649] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:05:50.658] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:50.660] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:05:50.661] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:05:51.671] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:51.672] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:05:51.673] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:05:52.682] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:52.683] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:05:52.685] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:05:53.686] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:53.688] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:05:53.689] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:05:54.696] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:54.698] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:05:54.699] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:05:55.709] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:55.711] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:05:55.712] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:05:56.719] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:05:56.721] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:05:56"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x08 0x19 0x45
+[2026-04-30 09:05:56.722] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:05:56"}
+[2026-04-30 09:05:57.719] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:57.721] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:05:57.722] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:05:58.733] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:58.736] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:05:58.737] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:05:59.736] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:05:59.738] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:05:59.740] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:06:00.740] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:06:00.742] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:06:00.743] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:06:01.750] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:06:01.751] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:06:01.752] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:06:02.757] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:06:02.758] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:06:02.759] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:06:03.759] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:06:03.762] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:06:03.764] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:06:04.766] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:06:04.767] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:06:04.767] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:06:05.781] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:06:05.781] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:06:05.782] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:06:06.014] [WARN] [APP] 收到 SIGINT,开始关闭服务
+[2026-04-30 09:06:06.015] [INFO] [TCP] 开始停止 TCP 服务 activeSessions=1
+[2026-04-30 09:06:06.017] [INFO] [TCP] TCP 服务已停止
+[2026-04-30 09:06:06.018] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=shutdown payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 09:05:56"}
+[2026-04-30 09:06:06.019] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 09:05:56","suedtime":"2026-04-30 09:06:06"}
+[2026-04-30 09:06:06.020] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 09:06:06.021] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 09:06:06.022] [INFO] [TCP] 设备已断开 deviceId=JH-10235221005A ip=127.0.0.1 activeSessions=0
+[2026-04-30 09:06:06.114] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 09:05:56","suedtime":"2026-04-30 09:06:06"}
+[2026-04-30 09:06:06.115] [INFO] [ALIYUN] 开始停止阿里云服务 contexts=1
+[2026-04-30 09:06:06.154] [INFO] [ALIYUN] 连接关闭 deviceId=JH-10235221005A
+[2026-04-30 09:06:06.156] [INFO] [ALIYUN] 阿里云服务已停止
+[2026-04-30 09:06:06.157] [INFO] [APP] 服务已完成关闭
+[2026-04-30 09:06:27.480] [INFO] [APP] 本地日志已启用 dir=D:\gitData\JHM\logs file=D:\gitData\JHM\logs\jhm-service-20260430.log level=info
+[2026-04-30 09:06:27.481] [INFO] [APP] 配置加载完成 tcp=0.0.0.0:9000 devices=3 channels=aliyun sendMode=batch flushIntervalMs=60000 alModel=D:\gitData\JHM\alModel.json
+[2026-04-30 09:06:27.482] [INFO] [APP] 正在启动阿里云通道
+[2026-04-30 09:06:27.483] [INFO] [ALIYUN] 阿里云服务已启用 tupleApi=https://things.icoldchain.cn/device/info/getAliyunDeviceSecret autoRegister=1 retryMs=60000
+[2026-04-30 09:06:27.517] [INFO] [TCP] 已开始监听 0.0.0.0:9000 devices=3 maxConnections=100
+[2026-04-30 09:06:27.518] [INFO] [APP] 所有服务已启动
+[2026-04-30 09:06:59.569] [WARN] [APP] 收到 SIGINT,开始关闭服务
+[2026-04-30 09:06:59.570] [INFO] [TCP] 开始停止 TCP 服务 activeSessions=0
+[2026-04-30 09:06:59.573] [INFO] [TCP] TCP 服务已停止
+[2026-04-30 09:06:59.574] [INFO] [ALIYUN] 开始停止阿里云服务 contexts=0
+[2026-04-30 09:06:59.575] [INFO] [ALIYUN] 阿里云服务已停止
+[2026-04-30 09:06:59.576] [INFO] [APP] 服务已完成关闭
+[2026-04-30 09:17:16.941] [INFO] [APP] 本地日志已启用 dir=D:\gitData\JHM\logs file=D:\gitData\JHM\logs\jhm-service-20260430.log level=info
+[2026-04-30 09:17:16.942] [INFO] [APP] 配置加载完成 tcp=0.0.0.0:9000 devices=3 channels=aliyun sendMode=batch flushIntervalMs=60000 alModel=D:\gitData\JHM\alModel.json
+[2026-04-30 09:17:16.943] [INFO] [APP] 正在启动阿里云通道
+[2026-04-30 09:17:16.944] [INFO] [ALIYUN] 阿里云服务已启用 tupleApi=https://things.icoldchain.cn/device/info/getAliyunDeviceSecret autoRegister=1 retryMs=60000
+[2026-04-30 09:17:16.977] [INFO] [TCP] 已开始监听 0.0.0.0:9000 devices=3 maxConnections=100
+[2026-04-30 09:17:16.978] [INFO] [APP] 所有服务已启动
+[2026-04-30 09:17:24.481] [INFO] [TCP] 设备已连接 deviceId=JH-10235221005A ip=127.0.0.1 port=52746 activeSessions=1
+[2026-04-30 09:17:24.485] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:24.487] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:17:24.488] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:17:25.495] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:25.497] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:17:25.498] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:17:26.511] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:26.512] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:17:26.513] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:17:27.524] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:27.525] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:17:27.526] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:17:28.524] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:28.525] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:17:28.526] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:17:29.537] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:29.538] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:17:29.539] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:17:30.537] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:30.538] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:17:30.539] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:17:31.552] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:31.553] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:17:31.554] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:17:32.567] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:32.568] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:17:32.569] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:17:33.583] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:33.585] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:17:33.586] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:17:34.597] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:34.599] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:17:34.601] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:17:35.609] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:35.610] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:17:35.622] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:17:36.625] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:36.626] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:17:36.627] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:17:37.641] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:37.644] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:17:37.646] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:17:38.642] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:17:38.644] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:17:38"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x09 0x11 0x3E
+[2026-04-30 09:17:38.645] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:17:38"}
+[2026-04-30 09:17:39.656] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:39.657] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:17:39.658] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:17:40.658] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:40.660] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:17:40.661] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:17:41.667] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:41.669] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:17:41.670] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:17:42.678] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:42.680] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:17:42.681] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:17:43.689] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:43.691] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:17:43.692] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:17:44.697] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:44.698] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:17:44.699] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:17:45.705] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:45.707] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:17:45.708] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:17:46.710] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:46.715] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:17:46.720] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:17:47.723] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:47.725] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:17:47.726] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:17:48.727] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:48.729] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:17:48.730] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:17:49.749] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:49.751] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:17:49.753] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:17:50.757] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:50.759] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:17:50.760] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:17:51.770] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:51.772] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:17:51.773] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:17:52.785] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:52.787] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:17:52.788] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:17:53.787] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:17:53.788] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:17:53"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x09 0x11 0x3E
+[2026-04-30 09:17:53.790] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:17:53"}
+[2026-04-30 09:17:54.798] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:54.801] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:17:54.802] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:17:55.810] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:55.811] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:17:55.812] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:17:56.825] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:56.827] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:17:56.828] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:17:57.836] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:57.837] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:17:57.838] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:17:58.849] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:58.850] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:17:58.851] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:17:59.862] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:17:59.862] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:17:59.863] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:18:00.863] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:00.865] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:18:00.866] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:18:01.875] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:01.878] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:18:01.879] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:18:02.883] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:02.884] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:18:02.885] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:18:03.892] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:03.894] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:18:03.895] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:18:04.905] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:04.906] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:18:04.907] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:18:05.918] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:05.920] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:18:05.922] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:18:06.928] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:06.931] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:18:06.945] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:18:07.940] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:07.941] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:18:07.942] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:18:08.949] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:18:08.951] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:18:08"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x09 0x11 0x3E
+[2026-04-30 09:18:08.952] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:18:08"}
+[2026-04-30 09:18:09.962] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:09.964] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:18:09.965] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:18:10.977] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:10.978] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:18:10.981] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:18:11.986] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:11.988] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:18:11.989] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:18:12.997] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:12.998] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:18:13.001] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:18:13.998] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:14.000] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:18:14.001] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:18:15.002] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:15.003] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:18:15.004] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:18:16.009] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:16.010] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:18:16.011] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:18:17.015] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:17.019] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:18:17.021] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:18:18.023] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:18.025] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:18:18.027] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:18:19.050] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:19.058] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:18:19.067] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:18:20.063] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:20.065] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:18:20.067] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:18:21.077] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:21.078] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:18:21.081] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:18:22.094] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:22.098] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:18:22.111] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:18:23.128] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:23.132] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:18:23.141] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:18:24.129] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:18:24.131] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:18:24"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x09 0x11 0x3E
+[2026-04-30 09:18:24.132] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:18:24"}
+[2026-04-30 09:18:25.134] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:25.135] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:18:25.136] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:18:26.148] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:26.150] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:18:26.151] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:18:27.150] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:27.152] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:18:27.153] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:18:28.164] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:28.166] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:18:28.167] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:18:29.167] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:29.168] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:18:29.170] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:18:30.167] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:30.173] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:18:30.185] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:18:31.180] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:31.183] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:18:31.185] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:18:32.193] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:32.196] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:18:32.198] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:18:33.207] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:33.208] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:18:33.209] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:18:34.214] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:34.216] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:18:34.217] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:18:35.221] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:35.223] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:18:35.225] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:18:36.235] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:36.239] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:18:36.241] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:18:37.251] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:37.253] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:18:37.254] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:18:38.266] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:38.268] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:18:38.269] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:18:39.279] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:18:39.281] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:18:39"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x09 0x11 0x3E
+[2026-04-30 09:18:39.282] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:18:39"}
+[2026-04-30 09:18:40.289] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:40.291] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:18:40.293] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:18:41.302] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:41.305] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:18:41.309] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:18:42.316] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:42.317] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:18:42.318] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:18:43.326] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:43.327] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:18:43.327] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:18:44.341] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:44.342] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:18:44.342] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:18:45.352] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:45.354] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:18:45.355] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:18:46.366] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:46.367] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:18:46.368] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:18:47.381] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:47.382] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:18:47.394] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:18:48.395] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:48.397] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:18:48.398] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:18:49.407] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:49.410] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:18:49.412] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:18:50.420] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:50.422] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:18:50.423] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:18:51.432] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:51.434] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:18:51.435] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:18:52.433] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:52.435] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:18:52.437] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:18:53.447] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:53.449] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:18:53.450] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:18:54.461] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:18:54.464] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:18:54"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x09 0x11 0x3E
+[2026-04-30 09:18:54.466] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:18:54"}
+[2026-04-30 09:18:55.474] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:55.478] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:18:55.479] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:18:56.485] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:56.487] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:18:56.488] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:18:57.486] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:57.489] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:18:57.491] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:18:58.500] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:58.502] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:18:58.503] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:18:59.510] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:18:59.512] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:18:59.513] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:19:00.011] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 09:18:54"}
+[2026-04-30 09:19:00.014] [INFO] [ALIYUN] 创建设备上下文 deviceId=JH-10235221005A
+[2026-04-30 09:19:00.015] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 09:18:54","suedtime":"2026-04-30 09:19:00"}
+[2026-04-30 09:19:00.018] [INFO] [ALIYUN] 开始请求三元组 deviceId=JH-10235221005A url=https://things.icoldchain.cn/device/info/getAliyunDeviceSecret
+[2026-04-30 09:19:00.375] [INFO] [ALIYUN] 三元组获取成功 deviceId=JH-10235221005A deviceName=JH-10235221005A
+[2026-04-30 09:19:00.377] [INFO] [ALIYUN] 开始创建设备连接 deviceId=JH-10235221005A deviceName=JH-10235221005A
+[2026-04-30 09:19:00.811] [INFO] [ALIYUN] 等待现有设备连接恢复 deviceId=JH-10235221005A
+[2026-04-30 09:19:00.822] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:00.823] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:19:00.824] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:19:00.930] [INFO] [ALIYUN] 设备连接成功 deviceId=JH-10235221005A
+[2026-04-30 09:19:00.932] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 09:19:01.058] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 09:18:54","suedtime":"2026-04-30 09:19:00"}
+[2026-04-30 09:19:01.527] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:01.530] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:19:01.532] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:19:02.541] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:02.543] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:19:02.545] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:19:03.546] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:03.547] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:19:03.548] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:19:04.554] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:04.556] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:19:04.557] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:19:05.556] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:05.557] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:19:05.559] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:19:06.568] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:06.569] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:19:06.571] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:19:07.571] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:07.573] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:19:07.574] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:19:08.587] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:08.589] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:19:08.590] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:19:09.602] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:19:09.604] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:19:09"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x09 0x11 0x3E
+[2026-04-30 09:19:09.607] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:19:09"}
+[2026-04-30 09:19:10.602] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:10.604] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:19:10.605] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:19:11.607] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:11.608] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:19:11.609] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:19:12.620] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:12.622] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:19:12.624] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:19:13.623] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:13.624] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:19:13.625] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:19:14.623] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:14.624] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:19:14.625] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:19:15.623] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:15.625] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:19:15.626] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:19:16.639] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:16.641] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"D":320} raw=0xEE 0x55 0x08 0x00 0x00 0x01 0x40 0x49
+[2026-04-30 09:19:16.643] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"D":320}
+[2026-04-30 09:19:17.653] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:17.655] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"H":-100} raw=0xEE 0x55 0x09 0x01 0x00 0x00 0x64 0x6E
+[2026-04-30 09:19:17.656] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"H":-100}
+[2026-04-30 09:19:18.655] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:18.656] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"o":120} raw=0xEE 0x55 0x0A 0x00 0x00 0x00 0x78 0x82
+[2026-04-30 09:19:18.657] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"o":120}
+[2026-04-30 09:19:19.670] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:19.671] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"J":-80} raw=0xEE 0x55 0x0B 0x01 0x00 0x00 0x50 0x5C
+[2026-04-30 09:19:19.671] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"J":-80}
+[2026-04-30 09:19:20.672] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:20.673] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"U":2048} raw=0xEE 0x55 0x0C 0x00 0x00 0x08 0x00 0x14
+[2026-04-30 09:19:20.674] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"U":2048}
+[2026-04-30 09:19:21.685] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:21.686] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"G":12.3} raw=0xEE 0x55 0x0D 0x00 0x00 0x00 0x7B 0x88
+[2026-04-30 09:19:21.687] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"G":12.3}
+[2026-04-30 09:19:22.689] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:22.690] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"Na":140} raw=0xEE 0x55 0x0E 0x00 0x00 0x00 0x8C 0x9A
+[2026-04-30 09:19:22.691] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"Na":140}
+[2026-04-30 09:19:23.692] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:23.693] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"HCO3":25} raw=0xEE 0x55 0x0F 0x00 0x00 0x00 0x19 0x28
+[2026-04-30 09:19:23.694] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"HCO3":25}
+[2026-04-30 09:19:24.694] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=14
+[2026-04-30 09:19:24.695] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:19:24"} raw=0xAA 0x55 0x0E 0xBA 0x00 0x78 0x50 0x59 0x1A 0x04 0x1E 0x09 0x11 0x3E
+[2026-04-30 09:19:24.696] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"N":120,"O":80,"P":89,"M":"2026-04-30 09:19:24"}
+[2026-04-30 09:19:25.697] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:25.698] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"F":37.5} raw=0xEE 0x55 0x01 0x00 0x00 0x01 0x77 0x79
+[2026-04-30 09:19:25.699] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"F":37.5}
+[2026-04-30 09:19:26.698] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:26.700] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"A":1.234} raw=0xEE 0x55 0x03 0x00 0x00 0x04 0xD2 0xD9
+[2026-04-30 09:19:26.700] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"A":1.234}
+[2026-04-30 09:19:27.710] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:27.712] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"sysj":90} raw=0xEE 0x55 0x04 0x00 0x01 0x00 0x1E 0x23
+[2026-04-30 09:19:27.712] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"sysj":90}
+[2026-04-30 09:19:28.710] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:28.711] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"C":0.5} raw=0xEE 0x55 0x05 0x00 0x00 0x01 0xF4 0xFA
+[2026-04-30 09:19:28.712] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"C":0.5}
+[2026-04-30 09:19:29.715] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:29.716] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"B":0.25} raw=0xEE 0x55 0x06 0x00 0x00 0x00 0xFA 0x00
+[2026-04-30 09:19:29.717] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"B":0.25}
+[2026-04-30 09:19:30.715] [INFO] [TCP] 收到原始数据 deviceId=JH-10235221005A bytes=8
+[2026-04-30 09:19:30.716] [INFO] [TCP] 收到指标 deviceId=JH-10235221005A metric={"L":600} raw=0xEE 0x55 0x07 0x00 0x00 0x02 0x58 0x61
+[2026-04-30 09:19:30.717] [INFO] [APP] 指标已缓存 deviceId=JH-10235221005A mode=batch metric={"L":600}
+[2026-04-30 09:19:31.481] [INFO] [TCP] 设备已断开 deviceId=JH-10235221005A ip=127.0.0.1 activeSessions=0
+[2026-04-30 09:21:00.006] [INFO] [APP] 开始批量分发 deviceId=JH-10235221005A channels=aliyun reason=timer payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 09:19:24"}
+[2026-04-30 09:21:00.008] [INFO] [ALIYUN] 收到发送请求 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 09:19:24","suedtime":"2026-04-30 09:21:00"}
+[2026-04-30 09:21:00.008] [INFO] [ALIYUN] 复用已连接设备 deviceId=JH-10235221005A
+[2026-04-30 09:21:00.009] [INFO] [ALIYUN] 开始属性上报 deviceId=JH-10235221005A keys=n,F,A,sysj,C,B,L,D,H,o,J,U,G,Na,HCO3,N,O,P,M,suedtime
+[2026-04-30 09:21:00.080] [INFO] [ALIYUN] 属性上报成功 deviceId=JH-10235221005A payload={"n":"JH-10235221005A","F":37.5,"A":1.234,"sysj":90,"C":0.5,"B":0.25,"L":600,"D":320,"H":-100,"o":120,"J":-80,"U":2048,"G":12.3,"Na":140,"HCO3":25,"N":120,"O":80,"P":89,"M":"2026-04-30 09:19:24","suedtime":"2026-04-30 09:21:00"}
diff --git a/build/pkg/bundle/index.cjs b/build/pkg/bundle/index.cjs
index 83c5471..ab4b510 100644
--- a/build/pkg/bundle/index.cjs
+++ b/build/pkg/bundle/index.cjs
@@ -67332,7 +67332,7 @@
     const normalized = this.normalizeEventPayload(errorLike);
 
     if (normalized instanceof Error) {
-      return normalized.message || normalized.name || 'unknown-error';
+      return normalized.message || normalized.name || '未知错误';
     }
 
     if (Array.isArray(normalized)) {
@@ -67340,7 +67340,7 @@
         .map((item) => this.formatErrorMessage(item))
         .filter(Boolean);
 
-      return parts.length > 0 ? parts.join(' | ') : 'unknown-error';
+      return parts.length > 0 ? parts.join(' | ') : '未知错误';
     }
 
     if (normalized && typeof normalized === 'object') {
@@ -67356,7 +67356,7 @@
     }
 
     if (normalized === undefined || normalized === null || normalized === '') {
-      return 'unknown-error';
+      return '未知错误';
     }
 
     return String(normalized);
@@ -67408,7 +67408,7 @@
       return this.aliyunSdk;
     }
 
-    // eslint-disable-next-line global-require
+    // 延迟加载 SDK,避免未启用阿里云时引入额外依赖。
     this.aliyunSdk = __nccwpck_require__(9871);
     return this.aliyunSdk;
   }
@@ -67488,7 +67488,7 @@
     try {
       responseBody = JSON.parse(rawText);
     } catch (_error) {
-      throw new Error('三元组接口返回不是有效 JSON');
+      throw new Error('三元组接口返回的不是有效 JSON');
     }
 
     return this.extractTuple(responseBody, deviceId);
@@ -67510,7 +67510,7 @@
 
     if (context.lastRegisterAttempt > 0 && (now - context.lastRegisterAttempt) < retryMs && context.lastRegisterError) {
       this.logger.warn(`[ALIYUN] 三元组请求冷却中 deviceId=${device.deviceId} retryMs=${retryMs} lastError=${context.lastRegisterError}`);
-      throw new Error(`阿里云三元组重试冷却中 ${context.lastRegisterError}`);
+      throw new Error(`阿里云三元组重试冷却中: ${context.lastRegisterError}`);
     }
 
     context.lastRegisterAttempt = now;
@@ -67774,6 +67774,7 @@
   error: 40,
 };
 
+// 统一生成本地日志时间,兼顾控制台和文件日志格式。
 function formatLocalTimestamp(date = new Date()) {
   const year = date.getFullYear();
   const month = String(date.getMonth() + 1).padStart(2, '0');
@@ -67860,7 +67861,7 @@
       try {
         fs.appendFileSync(logFilePath, `${line}\n`, 'utf8');
       } catch (error) {
-        console.error(`[LOGGER] Failed to append log file: ${error.message}`);
+        console.error(`[LOGGER] 写入日志文件失败: ${error.message}`);
       }
     }
   }
@@ -67909,23 +67910,23 @@
 }
 
 function printHelp() {
-  console.log(`JHM TCP Socket Gateway
+  console.log(`JHM TCP Socket 网关服务
 
-Usage:
+用法:
   node app.js
   node app.js --config ./config.json
   jhm-service.exe --config .\\runtime\\config.json
   ./jhm-service --config ./runtime/config.json
 
-Options:
-  --config <path>    set config file path
-  --help, -h         show help
+参数:
+  --config <path>    指定配置文件路径
+  --help, -h         显示帮助
 `);
 }
 
 function loadConfig(configPath) {
   if (!fs.existsSync(configPath)) {
-    throw new Error(`config file not found: ${configPath}`);
+    throw new Error(`未找到配置文件: ${configPath}`);
   }
 
   const content = fs.readFileSync(configPath, 'utf8');
@@ -67967,66 +67968,67 @@
 
   return {
     publishTime: bloodPressure ? bloodPressure.publishTime !== false : true,
+    flushImmediately: bloodPressure ? bloodPressure.flushImmediately !== false : true,
   };
 }
 
 function validateConfig(config) {
   if (!config.tcp || !Array.isArray(config.devices)) {
-    throw new Error('config.json must include tcp and devices');
+    throw new Error('config.json 必须包含 tcp 和 devices');
   }
 
   if (!config.tcp.host || !config.tcp.port) {
-    throw new Error('config.json must include tcp.host and tcp.port');
+    throw new Error('config.json 必须包含 tcp.host 和 tcp.port');
   }
 
   const channels = getSendChannels(config);
 
   if (channels.length === 0) {
-    throw new Error('config.json send.channels must enable at least one channel');
+    throw new Error('config.json 的 send.channels 至少要启用一个通道');
   }
 
   if (channels.includes('mqtt')) {
     if (!config.mqtt) {
-      throw new Error('config.json enabled mqtt but missing mqtt config');
+      throw new Error('config.json 已启用 mqtt,但缺少 mqtt 配置');
     }
 
     const hasBrokerUrl = Boolean(config.mqtt.brokerUrl);
     const hasHostMode = Boolean(config.mqtt.protocol && config.mqtt.host && config.mqtt.port);
 
     if (!hasBrokerUrl && !hasHostMode) {
-      throw new Error('config.json mqtt requires brokerUrl or protocol/host/port');
+      throw new Error('config.json 的 mqtt 必须配置 brokerUrl 或 protocol/host/port');
     }
 
     if (!config.mqtt.topicTemplate && !config.mqtt.defaultTopicPrefix) {
-      throw new Error('config.json mqtt requires topicTemplate or defaultTopicPrefix');
+      throw new Error('config.json 的 mqtt 必须配置 topicTemplate 或 defaultTopicPrefix');
     }
   }
 
   if (channels.includes('aliyun')) {
     if (!config.aliyun) {
-      throw new Error('config.json enabled aliyun but missing aliyun config');
+      throw new Error('config.json 已启用 aliyun,但缺少 aliyun 配置');
     }
 
     if (!config.aliyun.tupleApiBaseUrl && !config.aliyun.tupleApiUrl) {
-      throw new Error('config.json aliyun requires tupleApiBaseUrl or tupleApiUrl');
+      throw new Error('config.json 的 aliyun 必须配置 tupleApiBaseUrl 或 tupleApiUrl');
     }
   }
 
   if (!config.protocol || !config.protocol.alModelPath) {
-    throw new Error('config.json protocol.alModelPath is required');
+    throw new Error('config.json 必须配置 protocol.alModelPath');
   }
 
   const sendOptions = getSendOptions(config);
 
   if (sendOptions.flushIntervalMs <= 0) {
-    throw new Error('config.json send.flushIntervalMs must be > 0');
+    throw new Error('config.json 的 send.flushIntervalMs 必须大于 0');
   }
 
   if (config.logging && config.logging.level) {
     const supportedLevels = ['debug', 'info', 'warn', 'error'];
 
     if (!supportedLevels.includes(String(config.logging.level).toLowerCase())) {
-      throw new Error(`config.json logging.level only supports ${supportedLevels.join(', ')}`);
+      throw new Error(`config.json 的 logging.level 仅支持 ${supportedLevels.join('、')}`);
     }
   }
 }
@@ -68037,6 +68039,29 @@
   }
 
   return path.join(path.dirname(configFilePath), targetPath);
+}
+
+function createOnMetricHandler({ logger, aggregator, sendOptions, bloodPressureOptions }) {
+  return function onMetric(device, metric, result) {
+    logger.info(`[APP] 指标已缓存 deviceId=${device.deviceId} mode=${sendOptions.mode} metric=${JSON.stringify(metric)}`);
+    return aggregator.ingest(device, metric)
+      .then(() => {
+        if (
+          sendOptions.mode === 'batch'
+          && bloodPressureOptions.flushImmediately
+          && result
+          && result.protocol === 'blood-pressure'
+        ) {
+          logger.info(`[APP] 血压报文触发整包立即发送 deviceId=${device.deviceId}`);
+          return aggregator.flush({ reason: 'blood-pressure', deviceId: device.deviceId });
+        }
+
+        return null;
+      })
+      .catch((error) => {
+        logger.error(`[APP] 指标处理失败 deviceId=${device.deviceId}: ${error.message}`);
+      });
+  };
 }
 
 async function main() {
@@ -68051,7 +68076,7 @@
     enabled: false,
     console: true,
   });
-  bootstrapLogger.info(`[APP] Startup arguments parsed config=${options.configPath}`);
+  bootstrapLogger.info(`[APP] 启动参数解析完成 config=${options.configPath}`);
 
   const config = loadConfig(options.configPath);
   const logDir = resolveConfigPath(options.configPath, (config.logging && config.logging.dir) || './logs');
@@ -68065,21 +68090,22 @@
   const alModelPath = resolveConfigPath(options.configPath, config.protocol.alModelPath);
 
   if (config.logging && config.logging.enabled === false) {
-    logger.info('[APP] File logging is disabled; console output only');
+    logger.info('[APP] 文件日志已禁用,仅输出到控制台');
   } else {
-    logger.info(`[APP] Local logging enabled dir=${logDir} file=${logger.getLogFilePath()} level=${normalizeLogLevel(config.logging && config.logging.level)}`);
+    logger.info(`[APP] 本地日志已启用 dir=${logDir} file=${logger.getLogFilePath()} level=${normalizeLogLevel(config.logging && config.logging.level)}`);
   }
 
-  logger.info(`[APP] Config loaded tcp=${config.tcp.host}:${config.tcp.port} devices=${config.devices.length} channels=${sendChannels.join(',')} sendMode=${sendOptions.mode} flushIntervalMs=${sendOptions.flushIntervalMs} alModel=${alModelPath}`);
+  logger.info(`[APP] 配置加载完成 tcp=${config.tcp.host}:${config.tcp.port} devices=${config.devices.length} channels=${sendChannels.join(',')} sendMode=${sendOptions.mode} flushIntervalMs=${sendOptions.flushIntervalMs} alModel=${alModelPath}`);
 
   const mqttService = sendChannels.includes('mqtt') ? new MqttService(config.mqtt, logger) : null;
   const aliyunService = sendChannels.includes('aliyun') ? new AliyunService(config.aliyun, logger) : null;
 
+  // 聚合器负责把多次单点指标合并成一次完整物模型上报。
   const aggregator = new MetricAggregator({
     logger,
     ...sendOptions,
     onFlush: async (device, payload, meta) => {
-      logger.info(`[APP] Batch dispatch deviceId=${device.deviceId} channels=${sendChannels.join(',')} reason=${meta.reason} payload=${JSON.stringify(payload)}`);
+      logger.info(`[APP] 开始批量分发 deviceId=${device.deviceId} channels=${sendChannels.join(',')} reason=${meta.reason} payload=${JSON.stringify(payload)}`);
 
       let ok = true;
 
@@ -68088,7 +68114,7 @@
           mqttService.publish(device, payload);
         } catch (error) {
           ok = false;
-          logger.error(`[APP] MQTT batch dispatch failed deviceId=${device.deviceId}: ${error.message}`);
+          logger.error(`[APP] MQTT 批量分发失败 deviceId=${device.deviceId}: ${error.message}`);
         }
       }
 
@@ -68098,14 +68124,14 @@
 
           if (result && result.skipped) {
             ok = false;
-            logger.warn(`[APP] Aliyun batch dispatch skipped deviceId=${device.deviceId} reason=${result.reason}`);
+            logger.warn(`[APP] 阿里云批量分发已跳过 deviceId=${device.deviceId} reason=${result.reason}`);
           } else if (result && result.ok === false) {
             ok = false;
-            logger.error(`[APP] Aliyun batch dispatch failed deviceId=${device.deviceId}: ${result.reason}`);
+            logger.error(`[APP] 阿里云批量分发失败 deviceId=${device.deviceId}: ${result.reason}`);
           }
         } catch (error) {
           ok = false;
-          logger.error(`[APP] Aliyun batch dispatch exception deviceId=${device.deviceId}: ${error.message}`);
+          logger.error(`[APP] 阿里云批量分发异常 deviceId=${device.deviceId}: ${error.message}`);
         }
       }
 
@@ -68119,27 +68145,27 @@
     alModelPath,
     publishBloodPressureTime: bloodPressureOptions.publishTime,
     logger,
-    onMetric(device, metric) {
-      logger.info(`[APP] Metric cached deviceId=${device.deviceId} mode=${sendOptions.mode} metric=${JSON.stringify(metric)}`);
-      aggregator.ingest(device, metric).catch((error) => {
-        logger.error(`[APP] Metric cache failed deviceId=${device.deviceId}: ${error.message}`);
-      });
-    },
+    onMetric: createOnMetricHandler({
+      logger,
+      aggregator,
+      sendOptions,
+      bloodPressureOptions,
+    }),
   });
 
   if (mqttService) {
-    logger.info('[APP] Starting MQTT channel');
+    logger.info('[APP] 正在启动 MQTT 通道');
     mqttService.start();
   }
 
   if (aliyunService) {
-    logger.info('[APP] Starting Aliyun channel');
+    logger.info('[APP] 正在启动阿里云通道');
     aliyunService.start();
   }
 
   aggregator.start();
   await tcpService.start();
-  logger.info('[APP] All services started');
+  logger.info('[APP] 所有服务已启动');
 
   let shuttingDown = false;
 
@@ -68149,7 +68175,7 @@
     }
 
     shuttingDown = true;
-    logger.warn(`[APP] Received ${signal}, shutting down`);
+    logger.warn(`[APP] 收到 ${signal},开始关闭服务`);
 
     await tcpService.stop();
     await aggregator.stop();
@@ -68162,7 +68188,7 @@
       await aliyunService.stop();
     }
 
-    logger.info('[APP] Service shutdown completed');
+    logger.info('[APP] 服务已完成关闭');
     await logger.close();
     process.exit(0);
   }
@@ -68176,11 +68202,11 @@
   });
 
   process.on('uncaughtException', (error) => {
-    logger.error(`[APP] Uncaught exception: ${error.stack || error.message}`);
+    logger.error(`[APP] 未捕获异常: ${error.stack || error.message}`);
   });
 
   process.on('unhandledRejection', (reason) => {
-    logger.error(`[APP] Unhandled promise rejection: ${reason}`);
+    logger.error(`[APP] 未处理的 Promise 拒绝: ${reason}`);
   });
 }
 
@@ -68199,6 +68225,7 @@
   getSendOptions,
   loadConfig,
   main,
+  createOnMetricHandler,
   normalizeLogLevel,
   parseArgs,
   printHelp,
@@ -68605,7 +68632,7 @@
     this.timer = null;
     this.started = false;
     this.flushing = false;
-    this.flushQueued = false;
+    this.queuedFlushOptions = null;
   }
 
   start() {
@@ -68640,8 +68667,15 @@
 
     const entry = this.getOrCreateEntry(device);
     entry.device = device;
+    const now = Date.now();
+
+    // 首次进入脏状态时记录时间,便于控制“缓存满一轮再发送”。
+    if (!entry.dirty) {
+      entry.dirtySinceAt = now;
+    }
+
     entry.dirty = true;
-    entry.lastUpdateAt = Date.now();
+    entry.lastUpdateAt = now;
 
     if (this.includeDeviceIdField) {
       entry.payload[this.deviceIdField] = device.deviceId;
@@ -68662,6 +68696,7 @@
         device,
         payload: {},
         dirty: false,
+        dirtySinceAt: 0,
         firstSeenAt: Date.now(),
         lastUpdateAt: 0,
         lastFlushAt: 0,
@@ -68691,7 +68726,7 @@
 
     this.timer = setTimeout(() => {
       this.flush({ reason: 'timer' }).catch((error) => {
-        this.logger.error(`[APP] Aggregator flush failed: ${error.message}`);
+        this.logger.error(`[APP] 聚合器刷新失败: ${error.message}`);
       });
     }, this.computeDelayMs());
 
@@ -68700,12 +68735,36 @@
     }
   }
 
+  mergeQueuedFlushOptions(options = {}) {
+    const nextOptions = {
+      reason: options.reason || 'manual',
+      deviceId: options.deviceId || '',
+    };
+
+    if (!this.queuedFlushOptions) {
+      this.queuedFlushOptions = nextOptions;
+      return;
+    }
+
+    const currentOptions = this.queuedFlushOptions;
+    const currentIsTimer = currentOptions.reason === 'timer' || currentOptions.reason === 'queued';
+    const nextIsTimer = nextOptions.reason === 'timer' || nextOptions.reason === 'queued';
+
+    if (currentIsTimer && !nextIsTimer) {
+      currentOptions.reason = nextOptions.reason;
+    }
+
+    if (!currentOptions.deviceId || !nextOptions.deviceId || currentOptions.deviceId !== nextOptions.deviceId) {
+      currentOptions.deviceId = '';
+    }
+  }
+
   async flush(options = {}) {
     const reason = options.reason || 'manual';
     const deviceId = options.deviceId || '';
 
     if (this.flushing) {
-      this.flushQueued = true;
+      this.mergeQueuedFlushOptions({ reason, deviceId });
       return false;
     }
 
@@ -68726,10 +68785,20 @@
           return false;
         }
 
+        // 定时触发时要求数据至少缓存满一个周期,避免刚收到就被单独发出。
+        if ((reason === 'timer' || reason === 'queued') && entry.dirtySinceAt > 0) {
+          const dirtyAgeMs = Date.now() - entry.dirtySinceAt;
+
+          if (dirtyAgeMs < this.flushIntervalMs) {
+            return false;
+          }
+        }
+
         return true;
       });
 
       for (const entry of entries) {
+        const flushUpdateAt = entry.lastUpdateAt;
         const payload = {
           ...entry.payload,
         };
@@ -68750,10 +68819,14 @@
             continue;
           }
 
-          entry.dirty = false;
+          if (entry.lastUpdateAt === flushUpdateAt) {
+            entry.dirty = false;
+            entry.dirtySinceAt = 0;
+          }
+
           entry.lastFlushAt = Date.now();
         } catch (error) {
-          this.logger.error(`[APP] Aggregator device flush failed deviceId=${entry.device.deviceId}: ${error.message}`);
+          this.logger.error(`[APP] 聚合器设备刷新失败 deviceId=${entry.device.deviceId}: ${error.message}`);
         }
       }
 
@@ -68765,9 +68838,10 @@
         this.scheduleNextFlush();
       }
 
-      if (this.flushQueued) {
-        this.flushQueued = false;
-        await this.flush({ reason: 'queued' });
+      if (this.queuedFlushOptions) {
+        const queuedOptions = this.queuedFlushOptions;
+        this.queuedFlushOptions = null;
+        await this.flush(queuedOptions);
       }
     }
   }
@@ -71058,6 +71132,7 @@
 const fs = __nccwpck_require__(9896);
 const path = __nccwpck_require__(6928);
 
+// 按候选路径顺序寻找默认配置文件,兼容源码运行和打包运行两种场景。
 function fileExists(filePath) {
   try {
     return fs.statSync(filePath).isFile();
@@ -71154,7 +71229,7 @@
 
       map.set(normalizeIp(device.ip), {
         ...device,
-        name: device.name || device['备注'] || device.deviceId,
+        name: device.name || device.备注 || device['澶囨敞'] || device.deviceId,
       });
     }
 
@@ -71173,7 +71248,7 @@
     this.server.maxConnections = this.tcpConfig.maxConnections || 100;
 
     this.server.on('error', (error) => {
-      this.logger.error(`[TCP] 服务错误: ${error.message}`);
+      this.logger.error(`[TCP] 服务异常: ${error.message}`);
     });
 
     await new Promise((resolve, reject) => {
@@ -71186,7 +71261,7 @@
       });
     });
 
-    this.logger.info(`[TCP] 已监听 ${this.tcpConfig.host}:${this.tcpConfig.port} devices=${this.deviceMap.size} maxConnections=${this.server.maxConnections}`);
+    this.logger.info(`[TCP] 已开始监听 ${this.tcpConfig.host}:${this.tcpConfig.port} devices=${this.deviceMap.size} maxConnections=${this.server.maxConnections}`);
   }
 
   handleConnection(socket) {
@@ -71250,7 +71325,7 @@
     const results = session.decoder.push(chunk);
 
     if (results.length === 0) {
-      this.logger.warn(`[TCP] 当前数据片段未形成完整报文 deviceId=${session.device.deviceId} bytes=${chunk.length}`);
+      this.logger.warn(`[TCP] 当前数据片段尚未组成完整报文 deviceId=${session.device.deviceId} bytes=${chunk.length}`);
     }
 
     for (const result of results) {
diff --git a/jh2028-new-service/.gitignore b/jh2028-new-service/.gitignore
new file mode 100644
index 0000000..8c85302
--- /dev/null
+++ b/jh2028-new-service/.gitignore
@@ -0,0 +1,5 @@
+node_modules/
+build/
+dist/
+logs/
+*.log
diff --git a/jh2028-new-service/README.md b/jh2028-new-service/README.md
new file mode 100644
index 0000000..8617942
--- /dev/null
+++ b/jh2028-new-service/README.md
@@ -0,0 +1,288 @@
+# JH2028 新协议 TCP 网关服务
+
+这是一个独立的新项目,用于适配设备厂商 2026-05-11 版 JH2028 对外接口通讯协议。
+
+服务通过 TCP 接收串口透传盒子发来的数据,按来源 IP 匹配设备编号,解析新版 `55 AA` 协议帧,为每台设备缓存最后一次完整数据,并在收到实时数据或血压数据后立即上报到 MQTT 和/或阿里云。
+
+老项目不参与本项目运行;本项目也不兼容旧版 `EE 55` 协议。
+
+## 协议格式
+
+新版帧格式:
+
+```text
+55 AA LEN TT CMDTYPE CMDID CMDDATA CRC8
+```
+
+字段说明:
+
+```text
+55 AA     固定帧头
+LEN       帧总长度,包含帧头和 CRC
+TT        发送序列号,仅记录,不回复
+CMDTYPE   命令类型
+CMDID     命令 ID
+CMDDATA   命令数据
+CRC8      从帧头开始计算的 CRC8 校验
+```
+
+当前支持的命令:
+
+```text
+CMDTYPE=01 CMDID=00  设备实时数据
+CMDTYPE=01 CMDID=01  血压数据
+```
+
+服务端不回复 ACK。多字节字段按 PDF 文档要求使用小端解析。
+
+## 字段映射
+
+实时数据 `CMDTYPE=01, CMDID=00`:
+
+```text
+AF      设定温度,原始值 / 10
+F       当前透析液温度,原始值 / 10
+A       设定超滤总量,单位 mL
+C       超滤率,单位 mL/h
+B       超滤量,单位 mL
+K       剩余时间,单位分钟
+L       透析液流量,单位 mL/min
+D       有效血流量,单位 mL/min
+H       静脉压,int16,单位 mmHg
+o       动脉压,int16,单位 mmHg
+J       跨膜压,int16,单位 mmHg
+U       累计血流量,单位 mL
+G       电导率,单位 mS/cm
+Na      钠,单位 mmol/L
+HCO3    碳酸氢根,单位 mmol/L
+O2Sat   血氧饱和度,原始值 / 10
+Hct     红细胞比容,原始值 / 10
+Hb      血红蛋白,原始值 / 10
+Tblood  血液温度,原始值 / 10
+ktv     Kt/V,原始值 / 10
+```
+
+血压数据 `CMDTYPE=01, CMDID=01`:
+
+```text
+N       收缩压
+O       舒张压
+P       心率
+M       血压监测时间,使用服务端接收时间,格式 yyyy-mm-dd HH:mm:ss
+```
+
+以下字段不上传、不处理:
+
+```text
+平均压
+心率不齐
+血压错误码
+```
+
+如果收到血压错误码报文,服务只记录日志,不更新缓存,不上报血压字段。
+
+## 运行行为
+
+每台设备都会维护一份最后状态缓存。
+
+收到实时数据时:
+
+```text
+1. 解码实时数据
+2. 更新该设备缓存
+3. 立即上传完整缓存
+```
+
+收到血压数据时:
+
+```text
+1. 解码 N/O/P
+2. 写入 M=服务端接收时间
+3. 合并到该设备缓存
+4. 立即上传完整缓存
+```
+
+上传失败只记录日志,不做补发。
+
+## 配置说明
+
+主配置文件是 `config.json`。打包后主要维护 `runtime/config.json`。
+
+大屏配置:
+
+```json
+{
+  "dashboard": {
+    "enabled": true,
+    "host": "0.0.0.0",
+    "port": 9100,
+    "title": "JH2028 设备中央监测大屏",
+    "staleDataMs": 180000
+  }
+}
+```
+
+服务启动后,在浏览器打开:
+
+```text
+本机访问:http://127.0.0.1:9100
+局域网访问:http://服务器真实IP:9100
+```
+
+注意:`0.0.0.0` 只表示服务监听所有网卡,不是浏览器访问地址。不要在浏览器里打开 `http://0.0.0.0:9100`。
+
+大屏会展示设备在线/离线状态、数据是否超时、最近实时数据、最近血压数据和当前缓存指标。
+
+设备按 TCP 来源 IP 匹配:
+
+```json
+{
+  "deviceId": "JH-001",
+  "ip": "192.168.1.10",
+  "name": "1号透析机"
+}
+```
+
+上报通道通过 `send.channels` 控制:
+
+```json
+{
+  "send": {
+    "channels": ["mqtt", "aliyun"]
+  }
+}
+```
+
+可选组合:
+
+```text
+["mqtt"]           只上报 MQTT
+["aliyun"]         只上报阿里云
+["mqtt","aliyun"]  同时上报 MQTT 和阿里云
+```
+
+MQTT Topic 沿用老项目规则:
+
+```text
+defaultTopicPrefix/deviceId
+```
+
+例如:
+
+```text
+touxiji/JH-001
+```
+
+阿里云三元组获取规则也沿用老项目:
+
+```text
+deviceName = deviceId
+```
+
+## 常用命令
+
+安装依赖:
+
+```powershell
+npm install
+```
+
+启动服务:
+
+```powershell
+npm start
+```
+
+指定配置文件启动:
+
+```powershell
+node app.js --config ./config.json
+```
+
+运行模拟器:
+
+```powershell
+npm run start:simulator -- --host 127.0.0.1 --port 9000
+
+# 如果只想发送一轮后断开:
+npm run start:simulator:once -- --host 127.0.0.1 --port 9000
+```
+
+只打印模拟报文,不连接 TCP 服务:
+
+```powershell
+npm run print:simulator
+```
+
+运行测试:
+
+```powershell
+npm test
+npm run verify
+```
+
+打包 Windows 和 Linux:
+
+```powershell
+npm run build
+```
+
+只打包 Windows:
+
+```powershell
+npm run build:win
+```
+
+只打包 Linux:
+
+```powershell
+npm run build:linux
+```
+
+## 打包产物
+
+打包后目录结构:
+
+```text
+dist/
+  win-x64/
+    jh2028-service.exe
+    runtime/
+      config.json
+      alModel.json
+    logs/
+  linux-x64/
+    jh2028-service
+    runtime/
+      config.json
+      alModel.json
+    logs/
+```
+
+Windows 试运行:
+
+```powershell
+cd dist\win-x64
+.\jh2028-service.exe --config .\runtime\config.json
+```
+
+Linux 试运行:
+
+```bash
+cd dist/linux-x64
+chmod +x ./jh2028-service
+./jh2028-service --config ./runtime/config.json
+```
+
+## 联调建议
+
+目前项目使用模拟报文完成了协议验证。因为暂时没有厂家真实报文,现场联调时建议优先向厂家确认或抓取以下报文:
+
+```text
+实时数据正常报文 1 条
+血压正常报文 1 条
+包含负压力的实时数据报文 1 条
+血压错误码报文 1 条
+```
+
+拿到真实报文后,建议先用 `decoder.js` 增加验证用例,确认 CRC8、小端、有符号数和单位换算全部一致,再部署到现场。
diff --git a/jh2028-new-service/alModel.json b/jh2028-new-service/alModel.json
new file mode 100644
index 0000000..f36d3e9
--- /dev/null
+++ b/jh2028-new-service/alModel.json
@@ -0,0 +1,30 @@
+{
+  "properties": [
+    { "identifier": "n", "name": "device id" },
+    { "identifier": "AF", "name": "set dialysate temperature" },
+    { "identifier": "F", "name": "dialysate temperature" },
+    { "identifier": "A", "name": "set ultrafiltration total" },
+    { "identifier": "C", "name": "ultrafiltration rate" },
+    { "identifier": "B", "name": "ultrafiltration volume" },
+    { "identifier": "K", "name": "remaining time" },
+    { "identifier": "L", "name": "dialysate flow" },
+    { "identifier": "D", "name": "effective blood flow" },
+    { "identifier": "H", "name": "venous pressure" },
+    { "identifier": "o", "name": "arterial pressure" },
+    { "identifier": "J", "name": "transmembrane pressure" },
+    { "identifier": "U", "name": "cumulative blood volume" },
+    { "identifier": "G", "name": "conductivity" },
+    { "identifier": "Na", "name": "sodium" },
+    { "identifier": "HCO3", "name": "bicarbonate" },
+    { "identifier": "O2Sat", "name": "oxygen saturation" },
+    { "identifier": "Hct", "name": "hematocrit" },
+    { "identifier": "Hb", "name": "hemoglobin" },
+    { "identifier": "Tblood", "name": "blood temperature" },
+    { "identifier": "ktv", "name": "Kt/V" },
+    { "identifier": "N", "name": "systolic pressure" },
+    { "identifier": "O", "name": "diastolic pressure" },
+    { "identifier": "P", "name": "pulse" },
+    { "identifier": "M", "name": "blood pressure receive time" },
+    { "identifier": "suedtime", "name": "upload time" }
+  ]
+}
diff --git a/jh2028-new-service/aliyun-service.js b/jh2028-new-service/aliyun-service.js
new file mode 100644
index 0000000..273fc1a
--- /dev/null
+++ b/jh2028-new-service/aliyun-service.js
@@ -0,0 +1,343 @@
+const { EventEmitter } = require('events');
+const { formatUploadTime } = require('./mqtt-service');
+
+class AliyunService {
+  constructor(config = {}, logger = console, options = {}) {
+    this.config = config;
+    this.logger = logger;
+    this.fetchImpl = options.fetchImpl || global.fetch;
+    this.aliyunSdk = options.aliyunSdk || null;
+    this.contexts = new Map();
+    this.started = false;
+  }
+
+  start() {
+    if (!this.config.enabled) {
+      this.logger.info('[ALIYUN] 阿里云通道未启用');
+      this.started = false;
+      return;
+    }
+
+    if (typeof this.fetchImpl !== 'function') {
+      throw new Error('当前 Node.js 运行环境不支持 fetch,无法请求三元组接口');
+    }
+
+    this.started = true;
+    this.logger.info(`[ALIYUN] 阿里云通道已启用 三元组接口=${this.getTupleUrl()} 自动注册=${this.config.autoRegister === false ? 0 : 1}`);
+  }
+
+  async stop() {
+    const closeTasks = [];
+
+    for (const context of this.contexts.values()) {
+      this.clearConnectWaiter(context);
+      context.tuplePromise = null;
+
+      if (context.iotDevice && typeof context.iotDevice.end === 'function') {
+        closeTasks.push(new Promise((resolve) => {
+          try {
+            context.iotDevice.end(false, resolve);
+          } catch (_error) {
+            resolve();
+          }
+        }));
+      }
+    }
+
+    await Promise.all(closeTasks);
+    this.contexts.clear();
+    this.started = false;
+    this.logger.info('[ALIYUN] 阿里云通道已停止');
+  }
+
+  buildPayload(message) {
+    return {
+      ...(message || {}),
+      suedtime: formatUploadTime(),
+    };
+  }
+
+  getTupleUrl() {
+    if (this.config.tupleApiUrl) {
+      return this.config.tupleApiUrl;
+    }
+
+    const baseUrl = String(this.config.tupleApiBaseUrl || '').replace(/\/$/, '');
+    const apiPath = this.config.tupleApiPath || '/device/info/getAliyunDeviceSecret';
+    return `${baseUrl}${apiPath}`;
+  }
+
+  getAliyunSdk() {
+    if (!this.aliyunSdk) {
+      this.aliyunSdk = require('aliyun-iot-device-sdk');
+    }
+
+    return this.aliyunSdk;
+  }
+
+  getContext(device) {
+    const deviceId = device.deviceId;
+
+    if (!this.contexts.has(deviceId)) {
+      this.contexts.set(deviceId, {
+        deviceId,
+        tuple: null,
+        tuplePromise: null,
+        iotDevice: null,
+        connected: false,
+        connectPromise: null,
+        resolveConnectPromise: null,
+        rejectConnectPromise: null,
+        connectTimer: null,
+        lastRegisterAttempt: 0,
+        lastRegisterError: '',
+      });
+      this.logger.info(`[ALIYUN] 创建设备上下文 设备=${deviceId}`);
+    }
+
+    return this.contexts.get(deviceId);
+  }
+
+  extractTuple(responseBody, deviceId) {
+    const data = responseBody && typeof responseBody === 'object'
+      ? (responseBody.data || responseBody.result || responseBody)
+      : null;
+
+    if (!data || typeof data !== 'object') {
+      throw new Error('三元组接口返回为空');
+    }
+
+    const tuple = {
+      productKey: data.productKey || data.ProductKey || '',
+      deviceName: data.deviceName || data.DeviceName || deviceId,
+      deviceSecret: data.deviceSecret || data.DeviceSecret || '',
+    };
+
+    if (!tuple.productKey || !tuple.deviceName || !tuple.deviceSecret) {
+      throw new Error('三元组字段不完整');
+    }
+
+    return tuple;
+  }
+
+  async requestTuple(deviceId) {
+    const formData = new URLSearchParams();
+    formData.set('isAutoRegister', this.config.autoRegister === false ? '0' : '1');
+    formData.set('deviceName', deviceId);
+
+    const url = this.getTupleUrl();
+    this.logger.info(`[ALIYUN] 请求三元组 设备=${deviceId} 地址=${url}`);
+
+    const response = await this.fetchImpl(url, {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/x-www-form-urlencoded',
+      },
+      body: formData.toString(),
+    });
+
+    if (!response.ok) {
+      throw new Error(`三元组接口请求失败 HTTP ${response.status}`);
+    }
+
+    const text = await response.text();
+    let body;
+
+    try {
+      body = JSON.parse(text);
+    } catch (_error) {
+      throw new Error('三元组接口返回不是有效 JSON');
+    }
+
+    return this.extractTuple(body, deviceId);
+  }
+
+  async ensureTuple(context, device) {
+    if (context.tuple) {
+      return context.tuple;
+    }
+
+    if (context.tuplePromise) {
+      return context.tuplePromise;
+    }
+
+    const retryMs = this.config.registerRetryMs || 60000;
+    const now = Date.now();
+
+    if (context.lastRegisterAttempt > 0 && (now - context.lastRegisterAttempt) < retryMs && context.lastRegisterError) {
+      throw new Error(`三元组请求重试冷却中: ${context.lastRegisterError}`);
+    }
+
+    context.lastRegisterAttempt = now;
+    context.tuplePromise = (async () => {
+      try {
+        const tuple = await this.requestTuple(device.deviceId);
+        context.tuple = tuple;
+        context.lastRegisterError = '';
+        this.logger.info(`[ALIYUN] 三元组获取成功 设备=${device.deviceId} 阿里云设备名=${tuple.deviceName}`);
+        return tuple;
+      } catch (error) {
+        context.lastRegisterError = error.message;
+        this.logger.error(`[ALIYUN] 三元组获取失败 设备=${device.deviceId}: ${error.message}`);
+        throw error;
+      } finally {
+        context.tuplePromise = null;
+      }
+    })();
+
+    return context.tuplePromise;
+  }
+
+  createIotDevice(tuple) {
+    const sdk = this.getAliyunSdk();
+
+    if (!sdk || typeof sdk.device !== 'function') {
+      throw new Error('aliyun-iot-device-sdk 不可用');
+    }
+
+    return sdk.device({
+      ProductKey: tuple.productKey,
+      DeviceName: tuple.deviceName,
+      DeviceSecret: tuple.deviceSecret,
+    });
+  }
+
+  clearConnectWaiter(context) {
+    if (context.connectTimer) {
+      clearTimeout(context.connectTimer);
+    }
+
+    context.connectPromise = null;
+    context.resolveConnectPromise = null;
+    context.rejectConnectPromise = null;
+    context.connectTimer = null;
+  }
+
+  resolveConnectWaiter(context, iotDevice) {
+    if (context.connectPromise && context.resolveConnectPromise) {
+      const resolve = context.resolveConnectPromise;
+      this.clearConnectWaiter(context);
+      resolve(iotDevice);
+    }
+  }
+
+  rejectConnectWaiter(context, error) {
+    if (context.connectPromise && context.rejectConnectPromise) {
+      const reject = context.rejectConnectPromise;
+      this.clearConnectWaiter(context);
+      reject(error instanceof Error ? error : new Error(String(error)));
+    }
+  }
+
+  bindIotDeviceEvents(context, device, iotDevice) {
+    const isCurrentDevice = () => context.iotDevice === iotDevice;
+
+    iotDevice.on('connect', () => {
+      if (!isCurrentDevice()) {
+        return;
+      }
+
+      context.connected = true;
+      this.logger.info(`[ALIYUN] 设备连接成功 设备=${device.deviceId}`);
+      this.resolveConnectWaiter(context, iotDevice);
+    });
+
+    iotDevice.on('error', (error) => {
+      if (!isCurrentDevice()) {
+        return;
+      }
+
+      context.connected = false;
+      this.logger.error(`[ALIYUN] 设备连接异常 设备=${device.deviceId}: ${error.message || error}`);
+      this.rejectConnectWaiter(context, error);
+    });
+
+    iotDevice.on('offline', () => {
+      if (isCurrentDevice()) {
+        context.connected = false;
+        this.logger.warn(`[ALIYUN] 设备离线 设备=${device.deviceId}`);
+      }
+    });
+
+    iotDevice.on('close', () => {
+      if (isCurrentDevice()) {
+        context.connected = false;
+        this.logger.warn(`[ALIYUN] 连接已关闭 设备=${device.deviceId}`);
+      }
+    });
+  }
+
+  async ensureIotDevice(context, device) {
+    if (context.iotDevice && context.connected) {
+      return context.iotDevice;
+    }
+
+    if (context.connectPromise) {
+      return context.connectPromise;
+    }
+
+    if (!context.iotDevice) {
+      const tuple = await this.ensureTuple(context, device);
+      const iotDevice = this.createIotDevice(tuple);
+      context.iotDevice = iotDevice;
+      this.bindIotDeviceEvents(context, device, iotDevice);
+      this.logger.info(`[ALIYUN] 创建 SDK 设备实例 设备=${device.deviceId}`);
+    }
+
+    if (context.connected) {
+      return context.iotDevice;
+    }
+
+    const connectTimeoutMs = this.config.connectTimeoutMs || 15000;
+    context.connectPromise = new Promise((resolve, reject) => {
+      context.resolveConnectPromise = resolve;
+      context.rejectConnectPromise = reject;
+      context.connectTimer = setTimeout(() => {
+        this.rejectConnectWaiter(context, new Error('阿里云连接超时'));
+      }, connectTimeoutMs);
+    });
+
+    return context.connectPromise;
+  }
+
+  async publish(device, message) {
+    if (!this.started || !this.config.enabled) {
+      this.logger.warn(`[ALIYUN] 跳过上报 设备=${device.deviceId} 原因=通道未启用`);
+      return { skipped: true, reason: 'disabled' };
+    }
+
+    const context = this.getContext(device);
+    const payload = this.buildPayload(message);
+
+    try {
+      const iotDevice = await this.ensureIotDevice(context, device);
+      this.logger.info(`[ALIYUN] 开始属性上报 设备=${device.deviceId} 字段=${Object.keys(payload).join(',')}`);
+      await new Promise((resolve, reject) => {
+        iotDevice.postProps(payload, (result) => {
+          if (result && (result.message === 'success' || result.success === true || result.code === 200)) {
+            resolve(result);
+            return;
+          }
+
+          reject(new Error(result && (result.message || result.code) ? String(result.message || result.code) : '属性上报失败'));
+        });
+      });
+      this.logger.info(`[ALIYUN] 属性上报成功 设备=${device.deviceId} 数据=${JSON.stringify(payload)}`);
+      return { ok: true, payload };
+    } catch (error) {
+      this.logger.error(`[ALIYUN] 上报失败 设备=${device.deviceId}: ${error.message}`);
+      return { ok: false, reason: error.message, payload };
+    }
+  }
+}
+
+class FakeAliyunDevice extends EventEmitter {
+  postProps(payload, callback) {
+    callback({ message: 'success', payload });
+  }
+}
+
+module.exports = {
+  AliyunService,
+  FakeAliyunDevice,
+};
diff --git a/jh2028-new-service/app.js b/jh2028-new-service/app.js
new file mode 100644
index 0000000..041e723
--- /dev/null
+++ b/jh2028-new-service/app.js
@@ -0,0 +1,283 @@
+#!/usr/bin/env node
+
+const fs = require('fs');
+const path = require('path');
+const { createLogger, normalizeLogLevel } = require('./logger');
+const { getDefaultConfigPath } = require('./runtime-paths');
+const { TcpService } = require('./tcp-service');
+const { StateCache } = require('./state-cache');
+const { MqttService } = require('./mqtt-service');
+const { AliyunService } = require('./aliyun-service');
+const { DashboardService, buildDashboardSnapshot } = require('./dashboard-service');
+
+function parseArgs(argv) {
+  const options = {
+    configPath: getDefaultConfigPath(),
+  };
+
+  for (let index = 2; index < argv.length; index += 1) {
+    const arg = argv[index];
+    const value = argv[index + 1];
+
+    if (arg === '--config' && value) {
+      options.configPath = path.resolve(value);
+      index += 1;
+    } else if (arg === '--help' || arg === '-h') {
+      options.help = true;
+    }
+  }
+
+  return options;
+}
+
+function printHelp() {
+  console.log(`JH2028 TCP 网关服务
+
+用法:
+  node app.js
+  node app.js --config ./config.json
+  jh2028-service.exe --config .\\runtime\\config.json
+  ./jh2028-service --config ./runtime/config.json
+
+参数:
+  --config <path>    指定配置文件路径
+  --help, -h         显示帮助
+`);
+}
+
+function loadConfig(configPath) {
+  if (!fs.existsSync(configPath)) {
+    throw new Error(`未找到配置文件: ${configPath}`);
+  }
+
+  const content = fs.readFileSync(configPath, 'utf8');
+  const config = JSON.parse(content);
+  validateConfig(config);
+  return config;
+}
+
+function resolveConfigPath(configFilePath, targetPath) {
+  if (path.isAbsolute(targetPath)) {
+    return targetPath;
+  }
+
+  return path.join(path.dirname(configFilePath), targetPath);
+}
+
+function getSendChannels(config) {
+  const channels = Array.isArray(config.send && config.send.channels)
+    ? config.send.channels
+    : ['mqtt'];
+
+  return Array.from(new Set(channels
+    .map((item) => String(item || '').trim().toLowerCase())
+    .filter(Boolean)));
+}
+
+function getSendOptions(config) {
+  const send = config.send || {};
+  return {
+    includeDeviceIdField: send.includeDeviceIdField !== false,
+    deviceIdField: send.deviceIdField || 'n',
+  };
+}
+
+function validateConfig(config) {
+  if (!config.tcp || !Array.isArray(config.devices)) {
+    throw new Error('config.json 必须包含 tcp 和 devices');
+  }
+
+  if (!config.tcp.host || !config.tcp.port) {
+    throw new Error('config.json 必须包含 tcp.host 和 tcp.port');
+  }
+
+  if (!config.protocol || !config.protocol.alModelPath) {
+    throw new Error('config.json 必须包含 protocol.alModelPath');
+  }
+
+  const channels = getSendChannels(config);
+  if (channels.length === 0) {
+    throw new Error('config.json 的 send.channels 至少要启用一个通道');
+  }
+
+  if (channels.includes('mqtt')) {
+    if (!config.mqtt) {
+      throw new Error('已启用 MQTT 通道,但缺少 mqtt 配置');
+    }
+
+    const hasBrokerUrl = Boolean(config.mqtt.brokerUrl);
+    const hasHostMode = Boolean(config.mqtt.protocol && config.mqtt.host && config.mqtt.port);
+
+    if (!hasBrokerUrl && !hasHostMode) {
+      throw new Error('mqtt 必须配置 brokerUrl 或 protocol/host/port');
+    }
+
+    if (!config.mqtt.topicTemplate && !config.mqtt.defaultTopicPrefix) {
+      throw new Error('mqtt 必须配置 topicTemplate 或 defaultTopicPrefix');
+    }
+  }
+
+  if (channels.includes('aliyun')) {
+    if (!config.aliyun) {
+      throw new Error('已启用阿里云通道,但缺少 aliyun 配置');
+    }
+
+    if (!config.aliyun.tupleApiBaseUrl && !config.aliyun.tupleApiUrl) {
+      throw new Error('aliyun 必须配置 tupleApiBaseUrl 或 tupleApiUrl');
+    }
+  }
+}
+
+function createOnMetricHandler({ logger, cache, mqttService, aliyunService, dashboardService }) {
+  return async function onMetric(device, metric, result) {
+    const payload = cache.update(device, metric, result);
+    logger.info(`[APP] 缓存已更新 设备=${device.deviceId} 类型=${result.messageType} 数据=${JSON.stringify(payload)}`);
+
+    if (dashboardService) {
+      dashboardService.broadcastSnapshot();
+    }
+
+    const tasks = [];
+
+    if (mqttService) {
+      tasks.push(mqttService.publish(device, payload).catch((error) => {
+        logger.error(`[APP] MQTT 上报失败 设备=${device.deviceId}: ${error.message}`);
+        return { ok: false, reason: error.message };
+      }));
+    }
+
+    if (aliyunService) {
+      tasks.push(aliyunService.publish(device, payload).catch((error) => {
+        logger.error(`[APP] 阿里云上报失败 设备=${device.deviceId}: ${error.message}`);
+        return { ok: false, reason: error.message };
+      }));
+    }
+
+    await Promise.all(tasks);
+  };
+}
+
+async function main() {
+  const options = parseArgs(process.argv);
+
+  if (options.help) {
+    printHelp();
+    return;
+  }
+
+  const config = loadConfig(options.configPath);
+  const logDir = resolveConfigPath(options.configPath, (config.logging && config.logging.dir) || './logs');
+  const logger = createLogger({
+    ...(config.logging || {}),
+    dir: logDir,
+  });
+  const sendChannels = getSendChannels(config);
+  const sendOptions = getSendOptions(config);
+  const alModelPath = resolveConfigPath(options.configPath, config.protocol.alModelPath);
+
+  logger.info(`[APP] 配置加载完成 TCP=${config.tcp.host}:${config.tcp.port} 设备数量=${config.devices.length} 上报通道=${sendChannels.join(',')} 物模型=${alModelPath} 日志级别=${normalizeLogLevel(config.logging && config.logging.level)}`);
+
+  const cache = new StateCache(sendOptions);
+  const mqttService = sendChannels.includes('mqtt') ? new MqttService(config.mqtt, logger) : null;
+  const aliyunService = sendChannels.includes('aliyun') ? new AliyunService(config.aliyun, logger) : null;
+  let tcpService = null;
+  const dashboardService = new DashboardService({
+    config: config.dashboard || {},
+    logger,
+    getSnapshot: () => buildDashboardSnapshot({
+      devices: config.devices,
+      cache,
+      tcpService,
+      config: config.dashboard || {},
+    }),
+  });
+
+  if (mqttService) {
+    mqttService.start();
+  }
+
+  if (aliyunService) {
+    aliyunService.start();
+  }
+
+  tcpService = new TcpService({
+    tcpConfig: config.tcp,
+    devices: config.devices,
+    alModelPath,
+    logger,
+    logRawHex: config.logging && config.logging.logRawHex,
+    onConnectionChange: () => {
+      dashboardService.broadcastSnapshot();
+    },
+    onMetric: createOnMetricHandler({
+      logger,
+      cache,
+      mqttService,
+      aliyunService,
+      dashboardService,
+    }),
+  });
+
+  await dashboardService.start();
+  await tcpService.start();
+
+  let shuttingDown = false;
+
+  async function shutdown(signal) {
+    if (shuttingDown) {
+      return;
+    }
+
+    shuttingDown = true;
+    logger.warn(`[APP] 收到关闭信号 信号=${signal}`);
+    await tcpService.stop();
+    await dashboardService.stop();
+
+    if (mqttService) {
+      await mqttService.stop();
+    }
+
+    if (aliyunService) {
+      await aliyunService.stop();
+    }
+
+    logger.info('[APP] 服务已停止');
+    await logger.close();
+    process.exit(0);
+  }
+
+  process.on('SIGINT', () => {
+    shutdown('SIGINT');
+  });
+
+  process.on('SIGTERM', () => {
+    shutdown('SIGTERM');
+  });
+
+  process.on('uncaughtException', (error) => {
+    logger.error(`[APP] 未捕获异常: ${error.stack || error.message}`);
+  });
+
+  process.on('unhandledRejection', (reason) => {
+    logger.error(`[APP] 未处理的 Promise 拒绝: ${reason}`);
+  });
+}
+
+if (require.main === module) {
+  main().catch((error) => {
+    console.error(error.message);
+    process.exit(1);
+  });
+}
+
+module.exports = {
+  createOnMetricHandler,
+  getSendChannels,
+  getSendOptions,
+  loadConfig,
+  main,
+  parseArgs,
+  printHelp,
+  resolveConfigPath,
+  validateConfig,
+};
diff --git a/jh2028-new-service/config.json b/jh2028-new-service/config.json
new file mode 100644
index 0000000..f3c8506
--- /dev/null
+++ b/jh2028-new-service/config.json
@@ -0,0 +1,68 @@
+{
+  "send": {
+    "channels": [
+      "mqtt",
+      "aliyun"
+    ],
+    "includeDeviceIdField": true,
+    "deviceIdField": "n"
+  },
+  "logging": {
+    "enabled": true,
+    "console": true,
+    "dir": "./logs",
+    "filePrefix": "jh2028-service",
+    "level": "info",
+    "logRawHex": false
+  },
+  "tcp": {
+    "host": "0.0.0.0",
+    "port": 9000,
+    "maxConnections": 100,
+    "socketTimeoutMs": 120000,
+    "keepAlive": true,
+    "keepAliveDelayMs": 10000,
+    "noDelay": true,
+    "backlog": 128,
+    "maxBufferBytes": 8192
+  },
+  "dashboard": {
+    "enabled": true,
+    "host": "0.0.0.0",
+    "port": 9100,
+    "title": "JH2028 设备中央监测大屏",
+    "staleDataMs": 180000
+  },
+ "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": {
+    "name": "jh2028-20260511",
+    "alModelPath": "./alModel.json"
+  },
+  "devices": [
+    {
+      "deviceId": "JH-TEST-001",
+      "ip": "127.0.0.1",
+      "name": "测试设备001"
+    },
+    {
+      "deviceId": "JH-TEST-002",
+      "ip": "127.0.0.2",
+      "name": "测试设备002"
+    }
+  ]
+}
diff --git a/jh2028-new-service/dashboard-service.js b/jh2028-new-service/dashboard-service.js
new file mode 100644
index 0000000..b52f89a
--- /dev/null
+++ b/jh2028-new-service/dashboard-service.js
@@ -0,0 +1,228 @@
+const fs = require('fs');
+const http = require('http');
+const path = require('path');
+
+const CONTENT_TYPES = {
+  '.html': 'text/html; charset=utf-8',
+  '.css': 'text/css; charset=utf-8',
+  '.js': 'application/javascript; charset=utf-8',
+  '.json': 'application/json; charset=utf-8',
+};
+
+function getDashboardDir(options = {}) {
+  if (options.dashboardDir) {
+    return options.dashboardDir;
+  }
+
+  if (process.pkg) {
+    return path.join(path.dirname(process.execPath), 'runtime', 'dashboard');
+  }
+
+  return path.join(__dirname, 'dashboard');
+}
+
+function nowIso() {
+  return new Date().toISOString();
+}
+
+function buildDashboardSnapshot({ devices = [], cache, tcpService, config = {} }) {
+  const connectionMap = new Map();
+  const cacheMap = cache && typeof cache.getSnapshotMap === 'function'
+    ? cache.getSnapshotMap()
+    : new Map();
+  const staleDataMs = Number(config.staleDataMs) > 0 ? Number(config.staleDataMs) : 180000;
+  const now = Date.now();
+
+  if (tcpService && typeof tcpService.getConnectionSnapshot === 'function') {
+    for (const item of tcpService.getConnectionSnapshot()) {
+      connectionMap.set(item.deviceId, item);
+    }
+  }
+
+  const deviceSnapshots = devices.map((device) => {
+    const connection = connectionMap.get(device.deviceId) || null;
+    const cacheEntry = cacheMap.get(device.deviceId) || null;
+    const lastUpdateAt = cacheEntry ? cacheEntry.lastUpdateAt : 0;
+    const ageMs = lastUpdateAt > 0 ? now - lastUpdateAt : null;
+    const dataStatus = !lastUpdateAt
+      ? 'waiting'
+      : (ageMs <= staleDataMs ? 'active' : 'stale');
+
+    return {
+      deviceId: device.deviceId,
+      name: device.name || device.deviceId,
+      ip: device.ip,
+      online: Boolean(connection),
+      dataStatus,
+      dataAgeMs: ageMs,
+      connectedAt: connection ? connection.connectedAt : 0,
+      lastSocketDataAt: connection ? connection.lastDataAt : 0,
+      lastUpdateAt,
+      lastRealtimeAt: cacheEntry ? cacheEntry.lastRealtimeAt : 0,
+      lastBloodPressureAt: cacheEntry ? cacheEntry.lastBloodPressureAt : 0,
+      payload: cacheEntry ? cacheEntry.payload : {},
+    };
+  });
+
+  const onlineCount = deviceSnapshots.filter((item) => item.online).length;
+  const activeCount = deviceSnapshots.filter((item) => item.dataStatus === 'active').length;
+  const waitingCount = deviceSnapshots.filter((item) => item.dataStatus === 'waiting').length;
+  const staleCount = deviceSnapshots.filter((item) => item.dataStatus === 'stale').length;
+
+  return {
+    title: config.title || 'JH2028 设备中央监测大屏',
+    generatedAt: now,
+    generatedAtText: nowIso(),
+    totals: {
+      devices: deviceSnapshots.length,
+      online: onlineCount,
+      offline: deviceSnapshots.length - onlineCount,
+      active: activeCount,
+      waiting: waitingCount,
+      stale: staleCount,
+    },
+    devices: deviceSnapshots,
+  };
+}
+
+class DashboardService {
+  constructor(options = {}) {
+    this.config = options.config || {};
+    this.logger = options.logger || console;
+    this.getSnapshot = typeof options.getSnapshot === 'function' ? options.getSnapshot : () => ({ devices: [] });
+    this.dashboardDir = getDashboardDir(options);
+    this.server = null;
+    this.clients = new Set();
+  }
+
+  async start() {
+    if (this.config.enabled === false) {
+      this.logger.info('[DASHBOARD] 大屏服务未启用');
+      return;
+    }
+
+    this.server = http.createServer((request, response) => {
+      this.handleRequest(request, response);
+    });
+
+    await new Promise((resolve, reject) => {
+      this.server.once('listening', resolve);
+      this.server.once('error', reject);
+      this.server.listen({
+        host: this.config.host || '0.0.0.0',
+        port: this.config.port || 9100,
+      });
+    });
+
+    const host = this.config.host || '0.0.0.0';
+    const port = this.config.port || 9100;
+    const localUrl = `http://127.0.0.1:${port}`;
+    const listenText = host === '0.0.0.0'
+      ? '监听所有网卡,局域网访问请使用服务器真实 IP'
+      : `监听地址=${host}`;
+
+    this.logger.info(`[DASHBOARD] 大屏服务已启动 ${listenText} 本机访问=${localUrl}`);
+  }
+
+  async stop() {
+    for (const client of this.clients) {
+      client.end();
+    }
+
+    this.clients.clear();
+
+    if (!this.server) {
+      return;
+    }
+
+    await new Promise((resolve) => {
+      this.server.close(resolve);
+    });
+    this.server = null;
+    this.logger.info('[DASHBOARD] 大屏服务已停止');
+  }
+
+  handleRequest(request, response) {
+    const url = new URL(request.url, 'http://localhost');
+
+    if (url.pathname === '/api/snapshot') {
+      this.sendJson(response, this.getSnapshot());
+      return;
+    }
+
+    if (url.pathname === '/events') {
+      this.handleEvents(response);
+      return;
+    }
+
+    const pathname = url.pathname === '/' ? '/index.html' : url.pathname;
+    this.serveStatic(pathname, response);
+  }
+
+  handleEvents(response) {
+    response.writeHead(200, {
+      'Content-Type': 'text/event-stream; charset=utf-8',
+      'Cache-Control': 'no-cache',
+      Connection: 'keep-alive',
+      'Access-Control-Allow-Origin': '*',
+    });
+    response.write('\n');
+    this.clients.add(response);
+    this.writeEvent(response, this.getSnapshot());
+
+    response.on('close', () => {
+      this.clients.delete(response);
+    });
+  }
+
+  broadcastSnapshot() {
+    const snapshot = this.getSnapshot();
+
+    for (const client of this.clients) {
+      this.writeEvent(client, snapshot);
+    }
+  }
+
+  writeEvent(response, snapshot) {
+    response.write(`event: snapshot\n`);
+    response.write(`data: ${JSON.stringify(snapshot)}\n\n`);
+  }
+
+  sendJson(response, payload) {
+    response.writeHead(200, {
+      'Content-Type': 'application/json; charset=utf-8',
+      'Cache-Control': 'no-cache',
+    });
+    response.end(JSON.stringify(payload));
+  }
+
+  serveStatic(pathname, response) {
+    const normalizedPath = path.normalize(pathname.replace(/^\/+/, ''));
+
+    if (path.isAbsolute(normalizedPath) || normalizedPath.startsWith('..')) {
+      response.writeHead(403);
+      response.end('Forbidden');
+      return;
+    }
+
+    const filePath = path.join(this.dashboardDir, normalizedPath);
+
+    if (!fs.existsSync(filePath) || !fs.statSync(filePath).isFile()) {
+      response.writeHead(404);
+      response.end('Not Found');
+      return;
+    }
+
+    const extension = path.extname(filePath).toLowerCase();
+    response.writeHead(200, {
+      'Content-Type': CONTENT_TYPES[extension] || 'application/octet-stream',
+    });
+    fs.createReadStream(filePath).pipe(response);
+  }
+}
+
+module.exports = {
+  DashboardService,
+  buildDashboardSnapshot,
+  getDashboardDir,
+};
diff --git a/jh2028-new-service/dashboard/app.js b/jh2028-new-service/dashboard/app.js
new file mode 100644
index 0000000..76b5f23
--- /dev/null
+++ b/jh2028-new-service/dashboard/app.js
@@ -0,0 +1,264 @@
+const state = {
+  snapshot: null,
+  selectedDeviceId: '',
+};
+
+const metricGroups = [
+  {
+    title: '温度与治疗参数',
+    keys: [
+      ['AF', '设定温度'],
+      ['F', '当前温度'],
+      ['A', '设定超滤总量'],
+      ['C', '超滤率'],
+      ['B', '超滤量'],
+      ['K', '剩余时间'],
+    ],
+  },
+  {
+    title: '流量与压力',
+    keys: [
+      ['L', '透析液流量'],
+      ['D', '有效血流量'],
+      ['H', '静脉压'],
+      ['o', '动脉压'],
+      ['J', '跨膜压'],
+      ['U', '累计血流量'],
+    ],
+  },
+  {
+    title: '电解质与血液监测',
+    keys: [
+      ['G', '电导率'],
+      ['Na', '钠'],
+      ['HCO3', '碳酸氢根'],
+      ['O2Sat', '血氧饱和度'],
+      ['Hct', '红细胞比容'],
+      ['Hb', '血红蛋白'],
+      ['Tblood', '血液温度'],
+      ['ktv', 'Kt/V'],
+    ],
+  },
+  {
+    title: '血压数据',
+    keys: [
+      ['N', '收缩压'],
+      ['O', '舒张压'],
+      ['P', '心率'],
+      ['M', '血压监测时间'],
+    ],
+  },
+];
+
+function $(selector) {
+  return document.querySelector(selector);
+}
+
+function formatClock(date = new Date()) {
+  return date.toLocaleTimeString('zh-CN', { hour12: false });
+}
+
+function formatTime(value) {
+  if (!value) {
+    return '暂无';
+  }
+
+  return new Date(value).toLocaleString('zh-CN', { hour12: false });
+}
+
+function formatAge(ageMs) {
+  if (ageMs === null || ageMs === undefined) {
+    return '暂无数据';
+  }
+
+  const seconds = Math.max(0, Math.floor(ageMs / 1000));
+  if (seconds < 60) {
+    return `${seconds} 秒前`;
+  }
+
+  const minutes = Math.floor(seconds / 60);
+  if (minutes < 60) {
+    return `${minutes} 分钟前`;
+  }
+
+  return `${Math.floor(minutes / 60)} 小时前`;
+}
+
+function getDataStatusText(status) {
+  if (status === 'active') {
+    return '数据正常';
+  }
+
+  if (status === 'stale') {
+    return '数据超时';
+  }
+
+  return '等待数据';
+}
+
+function setText(id, value) {
+  const element = $(id);
+  if (element) {
+    element.textContent = value;
+  }
+}
+
+function render(snapshot) {
+  state.snapshot = snapshot;
+
+  if (!state.selectedDeviceId && snapshot.devices.length > 0) {
+    state.selectedDeviceId = snapshot.devices[0].deviceId;
+  }
+
+  if (state.selectedDeviceId && !snapshot.devices.some((device) => device.deviceId === state.selectedDeviceId)) {
+    state.selectedDeviceId = snapshot.devices[0] ? snapshot.devices[0].deviceId : '';
+  }
+
+  setText('#dashboard-title', snapshot.title || '设备中央监测大屏');
+  setText('#refresh-time', `最后刷新 ${formatTime(snapshot.generatedAt)}`);
+  setText('#online-count', snapshot.totals.online);
+  setText('#offline-count', snapshot.totals.offline);
+  setText('#active-count', snapshot.totals.active);
+  setText('#stale-count', snapshot.totals.waiting + snapshot.totals.stale);
+  setText('#device-total', `${snapshot.totals.devices} 台设备`);
+
+  renderDeviceList(snapshot.devices);
+  renderDetail(snapshot.devices.find((device) => device.deviceId === state.selectedDeviceId));
+}
+
+function renderDeviceList(devices) {
+  const container = $('#device-list');
+
+  container.innerHTML = '';
+
+  for (const device of devices) {
+    const button = document.createElement('button');
+    button.type = 'button';
+    button.className = `device-card ${device.deviceId === state.selectedDeviceId ? 'selected' : ''}`;
+    button.innerHTML = `
+      <div>
+        <div class="device-name">${escapeHtml(device.name)}</div>
+        <div class="device-meta">${escapeHtml(device.deviceId)} | ${escapeHtml(device.ip)} | ${formatAge(device.dataAgeMs)}</div>
+      </div>
+      <div class="badges">
+        <span class="badge ${device.online ? 'online' : 'offline'}">${device.online ? '在线' : '离线'}</span>
+        <span class="badge ${device.dataStatus}">${getDataStatusText(device.dataStatus)}</span>
+      </div>
+    `;
+    button.addEventListener('click', () => {
+      state.selectedDeviceId = device.deviceId;
+      render(state.snapshot);
+    });
+    container.appendChild(button);
+  }
+}
+
+function renderDetail(device) {
+  const body = $('#detail-body');
+
+  if (!device) {
+    $('#detail-title').textContent = '设备数据状态';
+    $('#detail-state').textContent = '未选择';
+    body.className = 'detail-body empty';
+    body.innerHTML = '<p>等待设备数据接入</p>';
+    return;
+  }
+
+  $('#detail-title').textContent = `${device.name} 数据状态`;
+  $('#detail-state').textContent = `${device.online ? '在线' : '离线'} / ${getDataStatusText(device.dataStatus)}`;
+  body.className = 'detail-body';
+  body.innerHTML = `
+    <div class="timeline">
+      ${renderTimeBox('最近连接', device.connectedAt)}
+      ${renderTimeBox('最近实时数据', device.lastRealtimeAt)}
+      ${renderTimeBox('最近血压数据', device.lastBloodPressureAt)}
+    </div>
+    ${metricGroups.map((group) => renderMetricGroup(group, device.payload || {})).join('')}
+  `;
+}
+
+function renderTimeBox(label, value) {
+  return `
+    <div class="timebox">
+      <span>${label}</span>
+      <strong>${formatTime(value)}</strong>
+    </div>
+  `;
+}
+
+function renderMetricGroup(group, payload) {
+  return `
+    <section class="metric-group">
+      <h3>${group.title}</h3>
+      <div class="metric-grid">
+        ${group.keys.map(([key, label]) => renderMetric(key, label, payload[key])).join('')}
+      </div>
+    </section>
+  `;
+}
+
+function renderMetric(key, label, value) {
+  const text = value === undefined || value === null || value === '' ? '--' : value;
+  return `
+    <div class="metric">
+      <label>${label} (${key})</label>
+      <strong>${escapeHtml(String(text))}</strong>
+    </div>
+  `;
+}
+
+function escapeHtml(value) {
+  return value
+    .replace(/&/g, '&amp;')
+    .replace(/</g, '&lt;')
+    .replace(/>/g, '&gt;')
+    .replace(/"/g, '&quot;')
+    .replace(/'/g, '&#039;');
+}
+
+async function fetchSnapshot() {
+  const response = await fetch('/api/snapshot', { cache: 'no-store' });
+  if (!response.ok) {
+    throw new Error(`HTTP ${response.status}`);
+  }
+
+  return response.json();
+}
+
+function startEvents() {
+  if (!window.EventSource) {
+    return false;
+  }
+
+  const events = new EventSource('/events');
+  events.addEventListener('snapshot', (event) => {
+    render(JSON.parse(event.data));
+  });
+  events.onerror = () => {
+    events.close();
+    startPolling();
+  };
+  return true;
+}
+
+function startPolling() {
+  const load = () => {
+    fetchSnapshot()
+      .then(render)
+      .catch(() => {
+        setText('#refresh-time', '连接大屏服务失败');
+      });
+  };
+
+  load();
+  setInterval(load, 3000);
+}
+
+setInterval(() => {
+  setText('#now-time', formatClock());
+}, 1000);
+setText('#now-time', formatClock());
+
+if (!startEvents()) {
+  startPolling();
+}
diff --git a/jh2028-new-service/dashboard/index.html b/jh2028-new-service/dashboard/index.html
new file mode 100644
index 0000000..8cfe1d7
--- /dev/null
+++ b/jh2028-new-service/dashboard/index.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<html lang="zh-CN">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <title>JH2028 设备中央监测大屏</title>
+    <link rel="stylesheet" href="./styles.css">
+  </head>
+  <body>
+    <main class="shell">
+      <header class="topbar">
+        <div>
+          <p class="eyebrow">JH2028 TCP Gateway</p>
+          <h1 id="dashboard-title">设备中央监测大屏</h1>
+        </div>
+        <div class="clock">
+          <span id="now-time">--:--:--</span>
+          <small id="refresh-time">等待数据</small>
+        </div>
+      </header>
+
+      <section class="summary" aria-label="设备总览">
+        <article class="summary-item online">
+          <span>在线设备</span>
+          <strong id="online-count">0</strong>
+        </article>
+        <article class="summary-item offline">
+          <span>离线设备</span>
+          <strong id="offline-count">0</strong>
+        </article>
+        <article class="summary-item active">
+          <span>数据正常</span>
+          <strong id="active-count">0</strong>
+        </article>
+        <article class="summary-item stale">
+          <span>等待/超时</span>
+          <strong id="stale-count">0</strong>
+        </article>
+      </section>
+
+      <section class="layout">
+        <section class="device-list" aria-label="设备列表">
+          <div class="section-head">
+            <h2>设备连接状态</h2>
+            <span id="device-total">0 台设备</span>
+          </div>
+          <div id="device-list" class="device-grid"></div>
+        </section>
+
+        <section class="detail" aria-label="设备数据详情">
+          <div class="section-head">
+            <h2 id="detail-title">设备数据状态</h2>
+            <span id="detail-state">未选择</span>
+          </div>
+          <div id="detail-body" class="detail-body empty">
+            <p>等待设备数据接入</p>
+          </div>
+        </section>
+      </section>
+    </main>
+
+    <script src="./app.js"></script>
+  </body>
+</html>
diff --git a/jh2028-new-service/dashboard/styles.css b/jh2028-new-service/dashboard/styles.css
new file mode 100644
index 0000000..f820b9e
--- /dev/null
+++ b/jh2028-new-service/dashboard/styles.css
@@ -0,0 +1,361 @@
+:root {
+  --bg: #071015;
+  --panel: rgba(18, 34, 41, 0.92);
+  --panel-strong: rgba(21, 44, 52, 0.98);
+  --line: rgba(137, 174, 183, 0.24);
+  --text: #eef7f5;
+  --muted: #9fb6b7;
+  --cyan: #4bd4d2;
+  --green: #50d890;
+  --amber: #e9c46a;
+  --red: #ff6b6b;
+  --blue: #78a6ff;
+  --shadow: 0 24px 60px rgba(0, 0, 0, 0.35);
+}
+
+* {
+  box-sizing: border-box;
+}
+
+body {
+  min-height: 100vh;
+  margin: 0;
+  color: var(--text);
+  font-family: "Aptos Display", "Microsoft YaHei UI", "Segoe UI", sans-serif;
+  background:
+    radial-gradient(circle at top left, rgba(75, 212, 210, 0.18), transparent 34rem),
+    linear-gradient(135deg, #061014 0%, #0f2228 46%, #111b1f 100%);
+}
+
+body::before {
+  position: fixed;
+  inset: 0;
+  z-index: -1;
+  content: "";
+  background-image:
+    linear-gradient(rgba(255, 255, 255, 0.035) 1px, transparent 1px),
+    linear-gradient(90deg, rgba(255, 255, 255, 0.035) 1px, transparent 1px);
+  background-size: 36px 36px;
+  mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.88), rgba(0, 0, 0, 0.2));
+}
+
+.shell {
+  width: min(1760px, calc(100vw - 40px));
+  margin: 0 auto;
+  padding: 28px 0 34px;
+}
+
+.topbar,
+.summary,
+.layout {
+  display: grid;
+  gap: 18px;
+}
+
+.topbar {
+  grid-template-columns: 1fr auto;
+  align-items: end;
+  margin-bottom: 20px;
+}
+
+.eyebrow {
+  margin: 0 0 8px;
+  color: var(--cyan);
+  font-size: 13px;
+  letter-spacing: 0;
+  text-transform: uppercase;
+}
+
+h1,
+h2,
+p {
+  margin: 0;
+}
+
+h1 {
+  font-size: 32px;
+  font-weight: 760;
+}
+
+h2 {
+  font-size: 18px;
+  font-weight: 700;
+}
+
+.clock {
+  min-width: 220px;
+  padding: 14px 18px;
+  text-align: right;
+  background: rgba(255, 255, 255, 0.07);
+  border: 1px solid var(--line);
+  border-radius: 8px;
+}
+
+.clock span {
+  display: block;
+  font-size: 24px;
+  font-weight: 760;
+}
+
+.clock small {
+  color: var(--muted);
+}
+
+.summary {
+  grid-template-columns: repeat(4, minmax(0, 1fr));
+  margin-bottom: 18px;
+}
+
+.summary-item {
+  min-height: 116px;
+  padding: 20px;
+  background: var(--panel);
+  border: 1px solid var(--line);
+  border-left: 4px solid var(--cyan);
+  border-radius: 8px;
+  box-shadow: var(--shadow);
+}
+
+.summary-item span {
+  display: block;
+  color: var(--muted);
+  font-size: 14px;
+}
+
+.summary-item strong {
+  display: block;
+  margin-top: 12px;
+  font-size: 44px;
+  line-height: 1;
+}
+
+.summary-item.online {
+  border-left-color: var(--green);
+}
+
+.summary-item.offline {
+  border-left-color: var(--red);
+}
+
+.summary-item.active {
+  border-left-color: var(--blue);
+}
+
+.summary-item.stale {
+  border-left-color: var(--amber);
+}
+
+.layout {
+  grid-template-columns: minmax(420px, 0.86fr) minmax(520px, 1.14fr);
+  align-items: start;
+}
+
+.device-list,
+.detail {
+  min-height: 520px;
+  padding: 18px;
+  background: var(--panel);
+  border: 1px solid var(--line);
+  border-radius: 8px;
+  box-shadow: var(--shadow);
+}
+
+.section-head {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  gap: 16px;
+  padding-bottom: 14px;
+  border-bottom: 1px solid var(--line);
+}
+
+.section-head span {
+  color: var(--muted);
+  font-size: 13px;
+}
+
+.device-grid {
+  display: grid;
+  gap: 12px;
+  margin-top: 16px;
+}
+
+.device-card {
+  display: grid;
+  grid-template-columns: 1fr auto;
+  gap: 10px;
+  width: 100%;
+  padding: 14px;
+  color: inherit;
+  text-align: left;
+  background: rgba(255, 255, 255, 0.055);
+  border: 1px solid transparent;
+  border-radius: 8px;
+  cursor: pointer;
+}
+
+.device-card:hover,
+.device-card.selected {
+  border-color: rgba(75, 212, 210, 0.7);
+  background: rgba(75, 212, 210, 0.09);
+}
+
+.device-name {
+  overflow: hidden;
+  font-size: 16px;
+  font-weight: 720;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.device-meta {
+  margin-top: 7px;
+  color: var(--muted);
+  font-size: 13px;
+}
+
+.badges {
+  display: flex;
+  align-items: flex-start;
+  gap: 8px;
+}
+
+.badge {
+  display: inline-flex;
+  min-width: 56px;
+  justify-content: center;
+  padding: 5px 8px;
+  color: #041015;
+  font-size: 12px;
+  font-weight: 760;
+  border-radius: 999px;
+}
+
+.badge.online,
+.badge.active {
+  background: var(--green);
+}
+
+.badge.offline {
+  background: var(--red);
+}
+
+.badge.waiting,
+.badge.stale {
+  background: var(--amber);
+}
+
+.detail-body {
+  padding-top: 16px;
+}
+
+.detail-body.empty {
+  display: grid;
+  min-height: 420px;
+  place-items: center;
+  color: var(--muted);
+  border: 1px dashed var(--line);
+  border-radius: 8px;
+}
+
+.metric-group {
+  margin-bottom: 18px;
+}
+
+.metric-group h3 {
+  margin: 0 0 10px;
+  color: var(--cyan);
+  font-size: 14px;
+  font-weight: 720;
+}
+
+.metric-grid {
+  display: grid;
+  grid-template-columns: repeat(4, minmax(118px, 1fr));
+  gap: 10px;
+}
+
+.metric {
+  min-height: 74px;
+  padding: 12px;
+  background: rgba(255, 255, 255, 0.055);
+  border: 1px solid var(--line);
+  border-radius: 8px;
+}
+
+.metric label {
+  display: block;
+  min-height: 18px;
+  color: var(--muted);
+  font-size: 12px;
+}
+
+.metric strong {
+  display: block;
+  margin-top: 7px;
+  overflow-wrap: anywhere;
+  font-size: 20px;
+  line-height: 1.2;
+}
+
+.timeline {
+  display: grid;
+  grid-template-columns: repeat(3, minmax(0, 1fr));
+  gap: 10px;
+  margin-bottom: 18px;
+}
+
+.timebox {
+  padding: 12px;
+  background: var(--panel-strong);
+  border: 1px solid var(--line);
+  border-radius: 8px;
+}
+
+.timebox span {
+  display: block;
+  color: var(--muted);
+  font-size: 12px;
+}
+
+.timebox strong {
+  display: block;
+  margin-top: 6px;
+  font-size: 14px;
+}
+
+@media (max-width: 1180px) {
+  .summary {
+    grid-template-columns: repeat(2, minmax(0, 1fr));
+  }
+
+  .layout {
+    grid-template-columns: 1fr;
+  }
+}
+
+@media (max-width: 720px) {
+  .shell {
+    width: min(100vw - 24px, 1760px);
+    padding-top: 18px;
+  }
+
+  .topbar {
+    grid-template-columns: 1fr;
+  }
+
+  .clock {
+    width: 100%;
+    text-align: left;
+  }
+
+  .summary,
+  .metric-grid,
+  .timeline {
+    grid-template-columns: 1fr;
+  }
+
+  h1 {
+    font-size: 26px;
+  }
+}
diff --git a/jh2028-new-service/decoder.js b/jh2028-new-service/decoder.js
new file mode 100644
index 0000000..190b29c
--- /dev/null
+++ b/jh2028-new-service/decoder.js
@@ -0,0 +1,347 @@
+const fs = require('fs');
+const path = require('path');
+
+const HEADER_1 = 0x55;
+const HEADER_2 = 0xAA;
+const MIN_FRAME_LENGTH = 7;
+const CMDTYPE_DATA_SYNC = 0x01;
+const CMDID_REALTIME = 0x00;
+const CMDID_BLOOD_PRESSURE = 0x01;
+const REALTIME_PAYLOAD_LENGTH = 46;
+const BLOOD_PRESSURE_PAYLOAD_LENGTH = 5;
+
+const REALTIME_FIELDS = [
+  { identifier: 'AF', offset: 0, read: readInt16LE, scale: 10 },
+  { identifier: 'F', offset: 2, read: readInt16LE, scale: 10 },
+  { identifier: 'A', offset: 4, read: readUInt16LE },
+  { identifier: 'C', offset: 6, read: readUInt16LE },
+  { identifier: 'B', offset: 8, read: readUInt16LE },
+  { identifier: 'K', offset: 10, read: readUInt16LE },
+  { identifier: 'L', offset: 12, read: readUInt16LE },
+  { identifier: 'D', offset: 14, read: readUInt16LE },
+  { identifier: 'H', offset: 16, read: readInt16LE },
+  { identifier: 'o', offset: 18, read: readInt16LE },
+  { identifier: 'J', offset: 20, read: readInt16LE },
+  { identifier: 'U', offset: 22, read: readUInt32LE },
+  { identifier: 'G', offset: 26, read: readUInt16LE },
+  { identifier: 'Na', offset: 28, read: readUInt16LE },
+  { identifier: 'HCO3', offset: 30, read: readUInt16LE },
+  { identifier: 'O2Sat', offset: 36, read: readUInt16LE, scale: 10 },
+  { identifier: 'Hct', offset: 38, read: readUInt16LE, scale: 10 },
+  { identifier: 'Hb', offset: 40, read: readUInt16LE, scale: 10 },
+  { identifier: 'Tblood', offset: 42, read: readUInt16LE, scale: 10 },
+  { identifier: 'ktv', offset: 44, read: readUInt16LE, scale: 10 },
+];
+
+function toHex(value) {
+  return `0x${value.toString(16).toUpperCase().padStart(2, '0')}`;
+}
+
+function bytesToHex(buffer) {
+  return Array.from(buffer, toHex).join(' ');
+}
+
+function crc8(bytes) {
+  let crc = 0;
+
+  for (const value of bytes) {
+    crc ^= value;
+
+    for (let index = 0; index < 8; index += 1) {
+      if ((crc & 0x01) !== 0) {
+        crc = ((crc >> 1) ^ 0x8C) & 0xFF;
+      } else {
+        crc = (crc >> 1) & 0xFF;
+      }
+    }
+  }
+
+  return crc & 0xFF;
+}
+
+function readUInt16LE(buffer, offset) {
+  return buffer.readUInt16LE(offset);
+}
+
+function readInt16LE(buffer, offset) {
+  return buffer.readInt16LE(offset);
+}
+
+function readUInt32LE(buffer, offset) {
+  return buffer.readUInt32LE(offset);
+}
+
+function scaled(value, scale) {
+  if (!scale) {
+    return value;
+  }
+
+  return Number((value / scale).toFixed(1));
+}
+
+function resolveFilePath(filePath) {
+  if (path.isAbsolute(filePath)) {
+    return filePath;
+  }
+
+  return path.join(process.cwd(), filePath);
+}
+
+function loadAlModelMap(filePath) {
+  const resolvedPath = resolveFilePath(filePath);
+  const content = fs.readFileSync(resolvedPath, 'utf8');
+  const model = JSON.parse(content);
+  const map = new Map();
+
+  for (const item of model.properties || []) {
+    if (item && item.identifier) {
+      map.set(item.identifier, item.name || item.identifier);
+    }
+  }
+
+  return map;
+}
+
+class Jh2028Decoder {
+  constructor(options = {}) {
+    this.buffer = Buffer.alloc(0);
+    this.maxBufferBytes = options.maxBufferBytes || 8192;
+    this.alModelMap = loadAlModelMap(options.alModelPath || './alModel.json');
+  }
+
+  push(chunk) {
+    if (!Buffer.isBuffer(chunk) || chunk.length === 0) {
+      return [];
+    }
+
+    this.buffer = Buffer.concat([this.buffer, chunk]);
+
+    if (this.buffer.length > this.maxBufferBytes) {
+      this.buffer = Buffer.alloc(0);
+      return [{ ok: false, publish: false, reason: 'buffer-overflow' }];
+    }
+
+    const results = [];
+
+    while (this.buffer.length >= 2) {
+      const headerIndex = this.findHeader();
+
+      if (headerIndex < 0) {
+        this.buffer = this.buffer.slice(Math.max(0, this.buffer.length - 1));
+        break;
+      }
+
+      if (headerIndex > 0) {
+        this.buffer = this.buffer.slice(headerIndex);
+      }
+
+      if (this.buffer.length < 3) {
+        break;
+      }
+
+      const frameLength = this.buffer[2];
+
+      if (frameLength < MIN_FRAME_LENGTH) {
+        this.buffer = this.buffer.slice(1);
+        continue;
+      }
+
+      if (this.buffer.length < frameLength) {
+        break;
+      }
+
+      const frame = this.buffer.slice(0, frameLength);
+      this.buffer = this.buffer.slice(frameLength);
+      results.push(this.parseFrame(frame));
+    }
+
+    return results;
+  }
+
+  findHeader() {
+    for (let index = 0; index <= this.buffer.length - 2; index += 1) {
+      if (this.buffer[index] === HEADER_1 && this.buffer[index + 1] === HEADER_2) {
+        return index;
+      }
+    }
+
+    return -1;
+  }
+
+  parseFrame(frame) {
+    const frameLength = frame[2];
+    const timestamp = frame[3];
+    const commandType = frame[4];
+    const commandId = frame[5];
+    const payload = frame.slice(6, frame.length - 1);
+    const receivedCrc = frame[frame.length - 1];
+    const expectedCrc = crc8(frame.slice(0, -1));
+    const rawHex = bytesToHex(frame);
+
+    if (frameLength !== frame.length) {
+      return this.buildErrorResult('length-invalid', frame, {
+        timestamp,
+        commandType,
+        commandId,
+        rawHex,
+      });
+    }
+
+    if (receivedCrc !== expectedCrc) {
+      return this.buildErrorResult('crc-invalid', frame, {
+        timestamp,
+        commandType,
+        commandId,
+        rawHex,
+        receivedCrc,
+        expectedCrc,
+      });
+    }
+
+    if (commandType !== CMDTYPE_DATA_SYNC) {
+      return this.buildSkipResult('unsupported-command-type', {
+        timestamp,
+        commandType,
+        commandId,
+        rawHex,
+      });
+    }
+
+    if (commandId === CMDID_REALTIME) {
+      return this.parseRealtimeFrame(payload, {
+        timestamp,
+        commandType,
+        commandId,
+        rawHex,
+      });
+    }
+
+    if (commandId === CMDID_BLOOD_PRESSURE) {
+      return this.parseBloodPressureFrame(payload, {
+        timestamp,
+        commandType,
+        commandId,
+        rawHex,
+      });
+    }
+
+    return this.buildSkipResult('unsupported-command-id', {
+      timestamp,
+      commandType,
+      commandId,
+      rawHex,
+    });
+  }
+
+  parseRealtimeFrame(payload, meta) {
+    if (payload.length < REALTIME_PAYLOAD_LENGTH) {
+      return this.buildErrorResult('payload-too-short', payload, meta);
+    }
+
+    const metric = {};
+
+    for (const field of REALTIME_FIELDS) {
+      const rawValue = field.read(payload, field.offset);
+      metric[field.identifier] = scaled(rawValue, field.scale);
+    }
+
+    return this.buildMetricResult(metric, {
+      ...meta,
+      protocol: 'jh2028-20260511',
+      messageType: 'realtime',
+    });
+  }
+
+  parseBloodPressureFrame(payload, meta) {
+    if (payload.length < BLOOD_PRESSURE_PAYLOAD_LENGTH) {
+      return this.buildErrorResult('payload-too-short', payload, meta);
+    }
+
+    const systolicOrErrorCode = payload[0];
+    const diastolic = payload[1];
+    const pulse = payload[2];
+    const irregularPulse = payload[3];
+    const meanPressure = payload[4];
+    const hasError = systolicOrErrorCode > 0
+      && diastolic === 0
+      && pulse === 0
+      && irregularPulse === 0;
+
+    if (hasError) {
+      return this.buildSkipResult('blood-pressure-error-code', {
+        ...meta,
+        protocol: 'jh2028-20260511',
+        messageType: 'blood-pressure',
+        errorCode: systolicOrErrorCode,
+      });
+    }
+
+    return this.buildMetricResult({
+      N: systolicOrErrorCode,
+      O: diastolic,
+      P: pulse,
+    }, {
+      ...meta,
+      protocol: 'jh2028-20260511',
+      messageType: 'blood-pressure',
+      ignored: {
+        irregularPulse,
+        meanPressure,
+      },
+    });
+  }
+
+  buildMetricResult(metric, meta) {
+    const entries = Object.entries(metric)
+      .filter(([, value]) => value !== undefined && value !== null)
+      .filter(([identifier]) => this.alModelMap.has(identifier));
+
+    if (entries.length === 0) {
+      return this.buildSkipResult('identifier-not-in-almodel', meta);
+    }
+
+    return {
+      ok: true,
+      publish: true,
+      reason: 'ok',
+      metric: Object.fromEntries(entries),
+      identifiers: entries.map(([identifier]) => identifier),
+      ...meta,
+    };
+  }
+
+  buildErrorResult(reason, _frame, meta = {}) {
+    return {
+      ok: false,
+      publish: false,
+      reason,
+      ...meta,
+    };
+  }
+
+  buildSkipResult(reason, meta = {}) {
+    return {
+      ok: true,
+      publish: false,
+      reason,
+      ...meta,
+    };
+  }
+}
+
+module.exports = {
+  BLOOD_PRESSURE_PAYLOAD_LENGTH,
+  CMDID_BLOOD_PRESSURE,
+  CMDID_REALTIME,
+  CMDTYPE_DATA_SYNC,
+  HEADER_1,
+  HEADER_2,
+  Jh2028Decoder,
+  MIN_FRAME_LENGTH,
+  REALTIME_FIELDS,
+  REALTIME_PAYLOAD_LENGTH,
+  bytesToHex,
+  crc8,
+  loadAlModelMap,
+  toHex,
+};
diff --git a/jh2028-new-service/logger.js b/jh2028-new-service/logger.js
new file mode 100644
index 0000000..99298cd
--- /dev/null
+++ b/jh2028-new-service/logger.js
@@ -0,0 +1,119 @@
+const fs = require('fs');
+const path = require('path');
+
+const LOG_LEVELS = {
+  debug: 10,
+  info: 20,
+  warn: 30,
+  error: 40,
+};
+
+function formatLocalTimestamp(date = new Date()) {
+  const year = date.getFullYear();
+  const month = String(date.getMonth() + 1).padStart(2, '0');
+  const day = String(date.getDate()).padStart(2, '0');
+  const hour = String(date.getHours()).padStart(2, '0');
+  const minute = String(date.getMinutes()).padStart(2, '0');
+  const second = String(date.getSeconds()).padStart(2, '0');
+  const millisecond = String(date.getMilliseconds()).padStart(3, '0');
+  return `${year}-${month}-${day} ${hour}:${minute}:${second}.${millisecond}`;
+}
+
+function normalizeLogLevel(level) {
+  const normalized = String(level || 'info').trim().toLowerCase();
+  return LOG_LEVELS[normalized] ? normalized : 'info';
+}
+
+function createLogger(loggingConfig = {}) {
+  const settings = {
+    enabled: loggingConfig.enabled !== false,
+    console: loggingConfig.console !== false,
+    dir: loggingConfig.dir || path.join(process.cwd(), 'logs'),
+    filePrefix: loggingConfig.filePrefix || 'jh2028-service',
+    level: normalizeLogLevel(loggingConfig.level),
+  };
+  let currentDate = '';
+  let currentFilePath = '';
+
+  function getDatePart(date = new Date()) {
+    const year = date.getFullYear();
+    const month = String(date.getMonth() + 1).padStart(2, '0');
+    const day = String(date.getDate()).padStart(2, '0');
+    return `${year}${month}${day}`;
+  }
+
+  function ensureLogFilePath() {
+    if (!settings.enabled) {
+      return null;
+    }
+
+    const today = getDatePart();
+    if (currentFilePath && currentDate === today) {
+      return currentFilePath;
+    }
+
+    fs.mkdirSync(settings.dir, { recursive: true });
+    currentDate = today;
+    currentFilePath = path.join(settings.dir, `${settings.filePrefix}-${today}.log`);
+    return currentFilePath;
+  }
+
+  function shouldWrite(level) {
+    return LOG_LEVELS[level] >= LOG_LEVELS[settings.level];
+  }
+
+  function write(level, message) {
+    const normalizedLevel = normalizeLogLevel(level);
+    if (!shouldWrite(normalizedLevel)) {
+      return;
+    }
+
+    const line = `[${formatLocalTimestamp()}] [${normalizedLevel.toUpperCase()}] ${message}`;
+
+    if (settings.console) {
+      if (normalizedLevel === 'error') {
+        console.error(line);
+      } else if (normalizedLevel === 'warn') {
+        console.warn(line);
+      } else {
+        console.log(line);
+      }
+    }
+
+    const logFilePath = ensureLogFilePath();
+    if (logFilePath) {
+      try {
+        fs.appendFileSync(logFilePath, `${line}\n`, 'utf8');
+      } catch (error) {
+        console.error(`[LOGGER] 写入日志文件失败: ${error.message}`);
+      }
+    }
+  }
+
+  return {
+    debug(message) {
+      write('debug', message);
+    },
+    info(message) {
+      write('info', message);
+    },
+    warn(message) {
+      write('warn', message);
+    },
+    error(message) {
+      write('error', message);
+    },
+    getLogFilePath() {
+      return ensureLogFilePath();
+    },
+    async close() {
+      currentDate = '';
+    },
+  };
+}
+
+module.exports = {
+  createLogger,
+  formatLocalTimestamp,
+  normalizeLogLevel,
+};
diff --git a/jh2028-new-service/mqtt-service.js b/jh2028-new-service/mqtt-service.js
new file mode 100644
index 0000000..b252c84
--- /dev/null
+++ b/jh2028-new-service/mqtt-service.js
@@ -0,0 +1,137 @@
+const mqtt = require('mqtt');
+
+function formatUploadTime(date = new Date()) {
+  const year = date.getFullYear();
+  const month = String(date.getMonth() + 1).padStart(2, '0');
+  const day = String(date.getDate()).padStart(2, '0');
+  const hour = String(date.getHours()).padStart(2, '0');
+  const minute = String(date.getMinutes()).padStart(2, '0');
+  const second = String(date.getSeconds()).padStart(2, '0');
+  return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
+}
+
+class MqttService {
+  constructor(config = {}, logger = console) {
+    this.config = config;
+    this.logger = logger;
+    this.client = null;
+    this.connected = false;
+  }
+
+  getBrokerUrl() {
+    if (this.config.brokerUrl) {
+      return this.config.brokerUrl;
+    }
+
+    return `${this.config.protocol || 'mqtt'}://${this.config.host}:${this.config.port}`;
+  }
+
+  getClientId() {
+    if (this.config.clientId) {
+      return this.config.clientId;
+    }
+
+    const hostName = String(this.config.host || 'broker').replace(/[^a-zA-Z0-9]/g, '_');
+    return `jh2028_gateway_${hostName}`;
+  }
+
+  buildTopic(device) {
+    if (this.config.topicTemplate) {
+      return this.config.topicTemplate
+        .replace('{deviceId}', device.deviceId)
+        .replace('{ip}', device.ip)
+        .replace('{name}', device.name || device.deviceId);
+    }
+
+    return `${this.config.defaultTopicPrefix || 'device'}/${device.deviceId}`;
+  }
+
+  buildPayload(message) {
+    return {
+      ...(message || {}),
+      suedtime: formatUploadTime(),
+    };
+  }
+
+  start() {
+    const brokerUrl = this.getBrokerUrl();
+    const clientId = this.getClientId();
+
+    this.logger.info(`[MQTT] 正在连接 服务地址=${brokerUrl} 客户端ID=${clientId}`);
+    this.client = mqtt.connect(brokerUrl, {
+      clientId,
+      username: this.config.username || undefined,
+      password: this.config.password || undefined,
+      reconnectPeriod: this.config.reconnectPeriod || 5000,
+      connectTimeout: this.config.connectTimeoutMs || 30000,
+    });
+
+    this.client.on('connect', () => {
+      this.connected = true;
+      this.logger.info(`[MQTT] 已连接 服务地址=${brokerUrl}`);
+    });
+
+    this.client.on('reconnect', () => {
+      this.connected = false;
+      this.logger.warn('[MQTT] 正在重连');
+    });
+
+    this.client.on('close', () => {
+      this.connected = false;
+      this.logger.warn('[MQTT] 连接已关闭');
+    });
+
+    this.client.on('error', (error) => {
+      this.logger.error(`[MQTT] 连接异常: ${error.message}`);
+    });
+  }
+
+  publish(device, message) {
+    if (!this.client) {
+      return Promise.reject(new Error('MQTT service is not started'));
+    }
+
+    const topic = this.buildTopic(device);
+    const payloadObject = this.buildPayload(message);
+    const payload = JSON.stringify(payloadObject);
+
+    if (!this.connected) {
+      this.logger.warn(`[MQTT] 当前未连接,消息将进入客户端队列 主题=${topic}`);
+    }
+
+    return new Promise((resolve, reject) => {
+      this.client.publish(topic, payload, {
+        qos: this.config.qos || 0,
+        retain: Boolean(this.config.retain),
+      }, (error) => {
+        if (error) {
+          this.logger.error(`[MQTT] 发布失败 主题=${topic}: ${error.message}`);
+          reject(error);
+          return;
+        }
+
+        this.logger.info(`[MQTT] 发布成功 主题=${topic} 数据=${payload}`);
+        resolve({ ok: true, topic, payload: payloadObject });
+      });
+    });
+  }
+
+  async stop() {
+    if (!this.client) {
+      return;
+    }
+
+    this.logger.info('[MQTT] 正在停止');
+    await new Promise((resolve) => {
+      this.client.end(false, resolve);
+    });
+    this.connected = false;
+    this.client = null;
+    this.logger.info('[MQTT] 已停止');
+  }
+}
+
+module.exports = {
+  MqttService,
+  formatUploadTime,
+};
diff --git a/jh2028-new-service/package-lock.json b/jh2028-new-service/package-lock.json
new file mode 100644
index 0000000..724b51a
--- /dev/null
+++ b/jh2028-new-service/package-lock.json
@@ -0,0 +1,4250 @@
+{
+  "name": "jh2028-new-service",
+  "version": "1.0.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "jh2028-new-service",
+      "version": "1.0.0",
+      "license": "ISC",
+      "dependencies": {
+        "aliyun-iot-device-sdk": "^1.0.1",
+        "mqtt": "^5.15.1"
+      },
+      "devDependencies": {
+        "@vercel/ncc": "^0.38.4",
+        "mocha": "^11.7.5",
+        "pkg": "^5.8.1"
+      }
+    },
+    "node_modules/@babel/generator": {
+      "version": "7.18.2",
+      "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.18.2.tgz",
+      "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.18.2",
+        "@jridgewell/gen-mapping": "^0.3.0",
+        "jsesc": "^2.5.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-string-parser": {
+      "version": "7.27.1",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+      "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-identifier": {
+      "version": "7.28.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+      "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/parser": {
+      "version": "7.18.4",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.18.4.tgz",
+      "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/runtime": {
+      "version": "7.29.2",
+      "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.29.2.tgz",
+      "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/types": {
+      "version": "7.19.0",
+      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.19.0.tgz",
+      "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.18.10",
+        "@babel/helper-validator-identifier": "^7.18.6",
+        "to-fast-properties": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@isaacs/cliui": {
+      "version": "8.0.2",
+      "resolved": "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz",
+      "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "string-width": "^5.1.2",
+        "string-width-cjs": "npm:string-width@^4.2.0",
+        "strip-ansi": "^7.0.1",
+        "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+        "wrap-ansi": "^8.1.0",
+        "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.13",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+      "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.0",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.5",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+      "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.31",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+      "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@pkgjs/parseargs": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+      "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@types/node": {
+      "version": "25.7.0",
+      "resolved": "https://registry.npmmirror.com/@types/node/-/node-25.7.0.tgz",
+      "integrity": "sha512-z+pdZyxE+RTQE9AcboAZCb4otwcrvgHD+GlBpPgn0emDVt0ohrTMhAwlr2Wd9nZ+nihhYFxO2pThz3C5qSu2Eg==",
+      "license": "MIT",
+      "dependencies": {
+        "undici-types": "~7.21.0"
+      }
+    },
+    "node_modules/@types/readable-stream": {
+      "version": "4.0.23",
+      "resolved": "https://registry.npmmirror.com/@types/readable-stream/-/readable-stream-4.0.23.tgz",
+      "integrity": "sha512-wwXrtQvbMHxCbBgjHaMGEmImFTQxxpfMOR/ZoQnXxB1woqkUbdLGFDgauo00Py9IudiaqSeiBiulSV9i6XIPig==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*"
+      }
+    },
+    "node_modules/@types/ws": {
+      "version": "8.18.1",
+      "resolved": "https://registry.npmmirror.com/@types/ws/-/ws-8.18.1.tgz",
+      "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*"
+      }
+    },
+    "node_modules/@vercel/ncc": {
+      "version": "0.38.4",
+      "resolved": "https://registry.npmmirror.com/@vercel/ncc/-/ncc-0.38.4.tgz",
+      "integrity": "sha512-8LwjnlP39s08C08J5NstzriPvW1SP8Zfpp1BvC2sI35kPeZnHfxVkCwu4/+Wodgnd60UtT1n8K8zw+Mp7J9JmQ==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "ncc": "dist/ncc/cli.js"
+      }
+    },
+    "node_modules/abort-controller": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/abort-controller/-/abort-controller-3.0.0.tgz",
+      "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+      "license": "MIT",
+      "dependencies": {
+        "event-target-shim": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=6.5"
+      }
+    },
+    "node_modules/agent-base": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz",
+      "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6.0.0"
+      }
+    },
+    "node_modules/agent-base/node_modules/debug": {
+      "version": "4.4.3",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz",
+      "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/agent-base/node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/aliyun-iot-device-sdk": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/aliyun-iot-device-sdk/-/aliyun-iot-device-sdk-1.0.1.tgz",
+      "integrity": "sha512-yOumqYt+6jSZiorK5xb2ArL5/QzNFCWM4kTzp3BpPcoik7EQYwCMbQbzW5h1cnE+zyPIRCQgpYBKachM9r57zw==",
+      "deprecated": "aliyun-iot-device-sdk has change package name,please using alibabacloud-iot-devi;5Dce-sdk instead",
+      "license": "MIT",
+      "dependencies": {
+        "axios": "^0.18.0",
+        "mqtt": "^2.15.0",
+        "qs": "^6.6.0"
+      }
+    },
+    "node_modules/aliyun-iot-device-sdk/node_modules/bl": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/bl/-/bl-1.2.3.tgz",
+      "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==",
+      "license": "MIT",
+      "dependencies": {
+        "readable-stream": "^2.3.5",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "node_modules/aliyun-iot-device-sdk/node_modules/commist": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/commist/-/commist-1.1.0.tgz",
+      "integrity": "sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==",
+      "license": "MIT",
+      "dependencies": {
+        "leven": "^2.1.0",
+        "minimist": "^1.1.0"
+      }
+    },
+    "node_modules/aliyun-iot-device-sdk/node_modules/concat-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz",
+      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+      "engines": [
+        "node >= 0.8"
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "node_modules/aliyun-iot-device-sdk/node_modules/help-me": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/help-me/-/help-me-1.1.0.tgz",
+      "integrity": "sha512-P/IZ8yOMne3SCTHbVY429NZ67B/2bVQlcYGZh2iPPbdLrEQ/qY5aGChn0YTDmt7Sb4IKRI51fypItav+lNl76w==",
+      "license": "MIT",
+      "dependencies": {
+        "callback-stream": "^1.0.2",
+        "glob-stream": "^6.1.0",
+        "through2": "^2.0.1",
+        "xtend": "^4.0.0"
+      }
+    },
+    "node_modules/aliyun-iot-device-sdk/node_modules/mqtt": {
+      "version": "2.18.9",
+      "resolved": "https://registry.npmmirror.com/mqtt/-/mqtt-2.18.9.tgz",
+      "integrity": "sha512-ufywki8VAQ8YAERiunbj77TnXgaeVYVlyebnj4o9vhPUQFRjo+d3oUf0rft8kWi7YPYf4O8rkwPkeFc7ndWESg==",
+      "license": "MIT",
+      "dependencies": {
+        "commist": "^1.0.0",
+        "concat-stream": "^1.6.2",
+        "end-of-stream": "^1.4.1",
+        "es6-map": "^0.1.5",
+        "help-me": "^1.0.1",
+        "inherits": "^2.0.3",
+        "minimist": "^1.2.0",
+        "mqtt-packet": "^5.6.0",
+        "pump": "^3.0.0",
+        "readable-stream": "^2.3.6",
+        "reinterval": "^1.1.0",
+        "split2": "^2.1.1",
+        "websocket-stream": "~5.2.0",
+        "xtend": "^4.0.1"
+      },
+      "bin": {
+        "mqtt": "mqtt.js",
+        "mqtt_pub": "bin/pub.js",
+        "mqtt_sub": "bin/sub.js"
+      },
+      "engines": {
+        "node": ">=4.0.0"
+      }
+    },
+    "node_modules/aliyun-iot-device-sdk/node_modules/mqtt-packet": {
+      "version": "5.6.1",
+      "resolved": "https://registry.npmmirror.com/mqtt-packet/-/mqtt-packet-5.6.1.tgz",
+      "integrity": "sha512-eaF9rO2uFrIYEHomJxziuKTDkbWW5psLBaIGCazQSKqYsTaB3n4SpvJ1PexKaDBiPnMLPIFWBIiTYT3IfEJfww==",
+      "license": "MIT",
+      "dependencies": {
+        "bl": "^1.2.1",
+        "inherits": "^2.0.3",
+        "process-nextick-args": "^2.0.0",
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "node_modules/aliyun-iot-device-sdk/node_modules/readable-stream": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+      "license": "MIT",
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "node_modules/aliyun-iot-device-sdk/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "license": "MIT"
+    },
+    "node_modules/aliyun-iot-device-sdk/node_modules/split2": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/split2/-/split2-2.2.0.tgz",
+      "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
+      "license": "ISC",
+      "dependencies": {
+        "through2": "^2.0.2"
+      }
+    },
+    "node_modules/aliyun-iot-device-sdk/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "node_modules/ansi-regex": {
+      "version": "6.2.2",
+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.2.2.tgz",
+      "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+      }
+    },
+    "node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/argparse": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz",
+      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+      "dev": true,
+      "license": "Python-2.0"
+    },
+    "node_modules/array-union": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz",
+      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/async-limiter": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/async-limiter/-/async-limiter-1.0.1.tgz",
+      "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
+      "license": "MIT"
+    },
+    "node_modules/at-least-node": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz",
+      "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">= 4.0.0"
+      }
+    },
+    "node_modules/axios": {
+      "version": "0.18.1",
+      "resolved": "https://registry.npmmirror.com/axios/-/axios-0.18.1.tgz",
+      "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==",
+      "deprecated": "Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410",
+      "license": "MIT",
+      "dependencies": {
+        "follow-redirects": "1.5.10",
+        "is-buffer": "^2.0.2"
+      }
+    },
+    "node_modules/balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+      "license": "MIT"
+    },
+    "node_modules/base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/bl": {
+      "version": "6.1.6",
+      "resolved": "https://registry.npmmirror.com/bl/-/bl-6.1.6.tgz",
+      "integrity": "sha512-jLsPgN/YSvPUg9UX0Kd73CXpm2Psg9FxMeCSXnk3WBO3CMT10JMwijubhGfHCnFu6TPn1ei3b975dxv7K2pWVg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/readable-stream": "^4.0.0",
+        "buffer": "^6.0.3",
+        "inherits": "^2.0.4",
+        "readable-stream": "^4.2.0"
+      }
+    },
+    "node_modules/brace-expansion": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.1.0.tgz",
+      "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/braces": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz",
+      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fill-range": "^7.1.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/broker-factory": {
+      "version": "3.1.14",
+      "resolved": "https://registry.npmmirror.com/broker-factory/-/broker-factory-3.1.14.tgz",
+      "integrity": "sha512-L45k5HMbPIrMid0nTOZ/UPXG/c0aRuQKVrSDFIb1zOkvfiyHgYmIjc3cSiN1KwQIvRDOtKE0tfb3I9EZ3CmpQQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.29.2",
+        "fast-unique-numbers": "^9.0.27",
+        "tslib": "^2.8.1",
+        "worker-factory": "^7.0.49"
+      }
+    },
+    "node_modules/browser-stdout": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmmirror.com/browser-stdout/-/browser-stdout-1.3.1.tgz",
+      "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/buffer": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz",
+      "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.2.1"
+      }
+    },
+    "node_modules/buffer-from": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
+      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+      "license": "MIT"
+    },
+    "node_modules/call-bind-apply-helpers": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/call-bound": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz",
+      "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.2",
+        "get-intrinsic": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/callback-stream": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/callback-stream/-/callback-stream-1.1.0.tgz",
+      "integrity": "sha512-sAZ9kODla+mGACBZ1IpTCAisKoGnv6PykW7fPk1LrM+mMepE18Yz0515yoVcrZy7dQsTUp3uZLQ/9Sx1RnLoHw==",
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.1",
+        "readable-stream": "> 1.0.0 < 3.0.0"
+      }
+    },
+    "node_modules/callback-stream/node_modules/readable-stream": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+      "license": "MIT",
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "node_modules/callback-stream/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "license": "MIT"
+    },
+    "node_modules/callback-stream/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "node_modules/camelcase": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz",
+      "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/chalk/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/chokidar": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.3.tgz",
+      "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "readdirp": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 14.16.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "node_modules/chownr": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz",
+      "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/cliui": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz",
+      "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.1",
+        "wrap-ansi": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/cliui/node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/cliui/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/cliui/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/cliui/node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/cliui/node_modules/wrap-ansi": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/commist": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmmirror.com/commist/-/commist-3.2.0.tgz",
+      "integrity": "sha512-4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw==",
+      "license": "MIT"
+    },
+    "node_modules/concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+      "license": "MIT"
+    },
+    "node_modules/concat-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/concat-stream/-/concat-stream-2.0.0.tgz",
+      "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
+      "engines": [
+        "node >= 6.0"
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^3.0.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "node_modules/concat-stream/node_modules/readable-stream": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz",
+      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/core-util-is": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz",
+      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+      "license": "MIT"
+    },
+    "node_modules/cross-spawn": {
+      "version": "7.0.6",
+      "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz",
+      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/d": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/d/-/d-1.0.2.tgz",
+      "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
+      "license": "ISC",
+      "dependencies": {
+        "es5-ext": "^0.10.64",
+        "type": "^2.7.2"
+      },
+      "engines": {
+        "node": ">=0.12"
+      }
+    },
+    "node_modules/debug": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-3.1.0.tgz",
+      "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/decamelize": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-4.0.0.tgz",
+      "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/decompress-response": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz",
+      "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "mimic-response": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/deep-extend": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmmirror.com/deep-extend/-/deep-extend-0.6.0.tgz",
+      "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4.0.0"
+      }
+    },
+    "node_modules/detect-libc": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.1.2.tgz",
+      "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/diff": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/diff/-/diff-7.0.0.tgz",
+      "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.3.1"
+      }
+    },
+    "node_modules/dir-glob": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz",
+      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "path-type": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/dunder-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
+      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.2.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/duplexify": {
+      "version": "3.7.1",
+      "resolved": "https://registry.npmmirror.com/duplexify/-/duplexify-3.7.1.tgz",
+      "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+      "license": "MIT",
+      "dependencies": {
+        "end-of-stream": "^1.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
+    "node_modules/duplexify/node_modules/readable-stream": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+      "license": "MIT",
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "node_modules/duplexify/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "license": "MIT"
+    },
+    "node_modules/duplexify/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "node_modules/eastasianwidth": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+      "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/emoji-regex": {
+      "version": "9.2.2",
+      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz",
+      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/end-of-stream": {
+      "version": "1.4.5",
+      "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.5.tgz",
+      "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
+      "license": "MIT",
+      "dependencies": {
+        "once": "^1.4.0"
+      }
+    },
+    "node_modules/es-define-property": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz",
+      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-object-atoms": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es5-ext": {
+      "version": "0.10.64",
+      "resolved": "https://registry.npmmirror.com/es5-ext/-/es5-ext-0.10.64.tgz",
+      "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
+      "hasInstallScript": true,
+      "license": "ISC",
+      "dependencies": {
+        "es6-iterator": "^2.0.3",
+        "es6-symbol": "^3.1.3",
+        "esniff": "^2.0.1",
+        "next-tick": "^1.1.0"
+      },
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/es6-iterator": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/es6-iterator/-/es6-iterator-2.0.3.tgz",
+      "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
+      "license": "MIT",
+      "dependencies": {
+        "d": "1",
+        "es5-ext": "^0.10.35",
+        "es6-symbol": "^3.1.1"
+      }
+    },
+    "node_modules/es6-map": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmmirror.com/es6-map/-/es6-map-0.1.5.tgz",
+      "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==",
+      "license": "MIT",
+      "dependencies": {
+        "d": "1",
+        "es5-ext": "~0.10.14",
+        "es6-iterator": "~2.0.1",
+        "es6-set": "~0.1.5",
+        "es6-symbol": "~3.1.1",
+        "event-emitter": "~0.3.5"
+      }
+    },
+    "node_modules/es6-set": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmmirror.com/es6-set/-/es6-set-0.1.6.tgz",
+      "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==",
+      "license": "ISC",
+      "dependencies": {
+        "d": "^1.0.1",
+        "es5-ext": "^0.10.62",
+        "es6-iterator": "~2.0.3",
+        "es6-symbol": "^3.1.3",
+        "event-emitter": "^0.3.5",
+        "type": "^2.7.2"
+      },
+      "engines": {
+        "node": ">=0.12"
+      }
+    },
+    "node_modules/es6-symbol": {
+      "version": "3.1.4",
+      "resolved": "https://registry.npmmirror.com/es6-symbol/-/es6-symbol-3.1.4.tgz",
+      "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
+      "license": "ISC",
+      "dependencies": {
+        "d": "^1.0.2",
+        "ext": "^1.7.0"
+      },
+      "engines": {
+        "node": ">=0.12"
+      }
+    },
+    "node_modules/escalade": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",
+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/escape-string-regexp": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/esniff": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/esniff/-/esniff-2.0.1.tgz",
+      "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
+      "license": "ISC",
+      "dependencies": {
+        "d": "^1.0.1",
+        "es5-ext": "^0.10.62",
+        "event-emitter": "^0.3.5",
+        "type": "^2.7.2"
+      },
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/event-emitter": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmmirror.com/event-emitter/-/event-emitter-0.3.5.tgz",
+      "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
+      "license": "MIT",
+      "dependencies": {
+        "d": "1",
+        "es5-ext": "~0.10.14"
+      }
+    },
+    "node_modules/event-target-shim": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/event-target-shim/-/event-target-shim-5.0.1.tgz",
+      "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/events": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz",
+      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.8.x"
+      }
+    },
+    "node_modules/expand-template": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/expand-template/-/expand-template-2.0.3.tgz",
+      "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
+      "dev": true,
+      "license": "(MIT OR WTFPL)",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/ext": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmmirror.com/ext/-/ext-1.7.0.tgz",
+      "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
+      "license": "ISC",
+      "dependencies": {
+        "type": "^2.7.2"
+      }
+    },
+    "node_modules/extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+      "license": "MIT"
+    },
+    "node_modules/fast-glob": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz",
+      "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.8"
+      },
+      "engines": {
+        "node": ">=8.6.0"
+      }
+    },
+    "node_modules/fast-unique-numbers": {
+      "version": "9.0.27",
+      "resolved": "https://registry.npmmirror.com/fast-unique-numbers/-/fast-unique-numbers-9.0.27.tgz",
+      "integrity": "sha512-nDA9ADeINN8SA2u2wCtU+siWFTTDqQR37XvgPIDDmboWQeExz7X0mImxuaN+kJddliIqy2FpVRmnvRZ+j8i1/A==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.29.2",
+        "tslib": "^2.8.1"
+      },
+      "engines": {
+        "node": ">=18.2.0"
+      }
+    },
+    "node_modules/fastq": {
+      "version": "1.20.1",
+      "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.20.1.tgz",
+      "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "reusify": "^1.0.4"
+      }
+    },
+    "node_modules/fill-range": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
+      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "to-regex-range": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/find-up": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz",
+      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "locate-path": "^6.0.0",
+        "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/flat": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz",
+      "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "bin": {
+        "flat": "cli.js"
+      }
+    },
+    "node_modules/follow-redirects": {
+      "version": "1.5.10",
+      "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.5.10.tgz",
+      "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
+      "license": "MIT",
+      "dependencies": {
+        "debug": "=3.1.0"
+      },
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/foreground-child": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.3.1.tgz",
+      "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "cross-spawn": "^7.0.6",
+        "signal-exit": "^4.0.1"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/from2": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/from2/-/from2-2.3.0.tgz",
+      "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
+      }
+    },
+    "node_modules/from2/node_modules/readable-stream": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "node_modules/from2/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/from2/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "node_modules/fs-constants": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz",
+      "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/fs-extra": {
+      "version": "9.1.0",
+      "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz",
+      "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "at-least-node": "^1.0.0",
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+      "license": "ISC"
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz",
+      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": "6.* || 8.* || >= 10.*"
+      }
+    },
+    "node_modules/get-intrinsic": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.2",
+        "es-define-property": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.1.1",
+        "function-bind": "^1.1.2",
+        "get-proto": "^1.0.1",
+        "gopd": "^1.2.0",
+        "has-symbols": "^1.1.0",
+        "hasown": "^2.0.2",
+        "math-intrinsics": "^1.1.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",
+      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+      "license": "MIT",
+      "dependencies": {
+        "dunder-proto": "^1.0.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/github-from-package": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmmirror.com/github-from-package/-/github-from-package-0.0.0.tgz",
+      "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/glob": {
+      "version": "10.4.5",
+      "resolved": "https://registry.npmmirror.com/glob/-/glob-10.4.5.tgz",
+      "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^3.1.2",
+        "minimatch": "^9.0.4",
+        "minipass": "^7.1.2",
+        "package-json-from-dist": "^1.0.0",
+        "path-scurry": "^1.11.1"
+      },
+      "bin": {
+        "glob": "dist/esm/bin.mjs"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/glob-stream": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmmirror.com/glob-stream/-/glob-stream-6.1.0.tgz",
+      "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==",
+      "license": "MIT",
+      "dependencies": {
+        "extend": "^3.0.0",
+        "glob": "^7.1.1",
+        "glob-parent": "^3.1.0",
+        "is-negated-glob": "^1.0.0",
+        "ordered-read-streams": "^1.0.0",
+        "pumpify": "^1.3.5",
+        "readable-stream": "^2.1.5",
+        "remove-trailing-separator": "^1.0.1",
+        "to-absolute-glob": "^2.0.0",
+        "unique-stream": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/glob-stream/node_modules/brace-expansion": {
+      "version": "1.1.14",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.14.tgz",
+      "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==",
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/glob-stream/node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/glob-stream/node_modules/glob-parent": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-3.1.0.tgz",
+      "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^3.1.0",
+        "path-dirname": "^1.0.0"
+      }
+    },
+    "node_modules/glob-stream/node_modules/is-glob": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz",
+      "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
+      "license": "MIT",
+      "dependencies": {
+        "is-extglob": "^2.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/glob-stream/node_modules/minimatch": {
+      "version": "3.1.5",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.5.tgz",
+      "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/glob-stream/node_modules/readable-stream": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+      "license": "MIT",
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "node_modules/glob-stream/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "license": "MIT"
+    },
+    "node_modules/glob-stream/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "node_modules/globby": {
+      "version": "11.1.0",
+      "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz",
+      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "array-union": "^2.1.0",
+        "dir-glob": "^3.0.1",
+        "fast-glob": "^3.2.9",
+        "ignore": "^5.2.0",
+        "merge2": "^1.4.1",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/gopd": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
+      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/graceful-fs": {
+      "version": "4.2.11",
+      "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
+      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/has": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/has/-/has-1.0.4.tgz",
+      "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/has-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",
+      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/hasown": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.3.tgz",
+      "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==",
+      "license": "MIT",
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/he": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz",
+      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "he": "bin/he"
+      }
+    },
+    "node_modules/help-me": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/help-me/-/help-me-5.0.0.tgz",
+      "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==",
+      "license": "MIT"
+    },
+    "node_modules/https-proxy-agent": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+      "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "agent-base": "6",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/https-proxy-agent/node_modules/debug": {
+      "version": "4.4.3",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz",
+      "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/https-proxy-agent/node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/ignore": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz",
+      "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 4"
+      }
+    },
+    "node_modules/inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+      "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+      "license": "ISC",
+      "dependencies": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+      "license": "ISC"
+    },
+    "node_modules/ini": {
+      "version": "1.3.8",
+      "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz",
+      "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/into-stream": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/into-stream/-/into-stream-6.0.0.tgz",
+      "integrity": "sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "from2": "^2.3.0",
+        "p-is-promise": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ip-address": {
+      "version": "10.2.0",
+      "resolved": "https://registry.npmmirror.com/ip-address/-/ip-address-10.2.0.tgz",
+      "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 12"
+      }
+    },
+    "node_modules/is-absolute": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/is-absolute/-/is-absolute-1.0.0.tgz",
+      "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+      "license": "MIT",
+      "dependencies": {
+        "is-relative": "^1.0.0",
+        "is-windows": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-buffer": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz",
+      "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/is-core-module": {
+      "version": "2.9.0",
+      "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.9.0.tgz",
+      "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has": "^1.0.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-extglob": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-negated-glob": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
+      "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-number": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.12.0"
+      }
+    },
+    "node_modules/is-path-inside": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz",
+      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-plain-obj": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+      "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-relative": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/is-relative/-/is-relative-1.0.0.tgz",
+      "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+      "license": "MIT",
+      "dependencies": {
+        "is-unc-path": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-unc-path": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/is-unc-path/-/is-unc-path-1.0.0.tgz",
+      "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+      "license": "MIT",
+      "dependencies": {
+        "unc-path-regex": "^0.1.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-unicode-supported": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+      "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-windows": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz",
+      "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+      "license": "MIT"
+    },
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/jackspeak": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmmirror.com/jackspeak/-/jackspeak-3.4.3.tgz",
+      "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "dependencies": {
+        "@isaacs/cliui": "^8.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      },
+      "optionalDependencies": {
+        "@pkgjs/parseargs": "^0.11.0"
+      }
+    },
+    "node_modules/js-sdsl": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/js-sdsl/-/js-sdsl-4.3.0.tgz",
+      "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/js-sdsl"
+      }
+    },
+    "node_modules/js-yaml": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.1.tgz",
+      "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
+    },
+    "node_modules/jsesc": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz",
+      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/json-stable-stringify-without-jsonify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+      "license": "MIT"
+    },
+    "node_modules/jsonfile": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.1.tgz",
+      "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "universalify": "^2.0.0"
+      },
+      "optionalDependencies": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "node_modules/leven": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/leven/-/leven-2.1.0.tgz",
+      "integrity": "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/locate-path": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz",
+      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "p-locate": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/log-symbols": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz",
+      "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.1.0",
+        "is-unicode-supported": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/lru-cache": {
+      "version": "10.4.3",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.4.3.tgz",
+      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+      "license": "ISC"
+    },
+    "node_modules/math-intrinsics": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/micromatch": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz",
+      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "braces": "^3.0.3",
+        "picomatch": "^2.3.1"
+      },
+      "engines": {
+        "node": ">=8.6"
+      }
+    },
+    "node_modules/mimic-response": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz",
+      "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/minimatch": {
+      "version": "9.0.9",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.9.tgz",
+      "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.2"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/minimist": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/minipass": {
+      "version": "7.1.3",
+      "resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.1.3.tgz",
+      "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      }
+    },
+    "node_modules/mkdirp-classic": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmmirror.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+      "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/mocha": {
+      "version": "11.7.5",
+      "resolved": "https://registry.npmmirror.com/mocha/-/mocha-11.7.5.tgz",
+      "integrity": "sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "browser-stdout": "^1.3.1",
+        "chokidar": "^4.0.1",
+        "debug": "^4.3.5",
+        "diff": "^7.0.0",
+        "escape-string-regexp": "^4.0.0",
+        "find-up": "^5.0.0",
+        "glob": "^10.4.5",
+        "he": "^1.2.0",
+        "is-path-inside": "^3.0.3",
+        "js-yaml": "^4.1.0",
+        "log-symbols": "^4.1.0",
+        "minimatch": "^9.0.5",
+        "ms": "^2.1.3",
+        "picocolors": "^1.1.1",
+        "serialize-javascript": "^6.0.2",
+        "strip-json-comments": "^3.1.1",
+        "supports-color": "^8.1.1",
+        "workerpool": "^9.2.0",
+        "yargs": "^17.7.2",
+        "yargs-parser": "^21.1.1",
+        "yargs-unparser": "^2.0.0"
+      },
+      "bin": {
+        "_mocha": "bin/_mocha",
+        "mocha": "bin/mocha.js"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
+    "node_modules/mocha/node_modules/debug": {
+      "version": "4.4.3",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz",
+      "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/mocha/node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/mqtt": {
+      "version": "5.15.1",
+      "resolved": "https://registry.npmmirror.com/mqtt/-/mqtt-5.15.1.tgz",
+      "integrity": "sha512-V1WnkGuJh3ec9QXzy5Iylw8OOBK+Xu1WhxcQ9mMpLThG+/JZIMV1PgLNRgIiqXhZnvnVLsuyxHl5A/3bHHbcAA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/readable-stream": "^4.0.21",
+        "@types/ws": "^8.18.1",
+        "commist": "^3.2.0",
+        "concat-stream": "^2.0.0",
+        "debug": "^4.4.1",
+        "help-me": "^5.0.0",
+        "lru-cache": "^10.4.3",
+        "minimist": "^1.2.8",
+        "mqtt-packet": "^9.0.2",
+        "number-allocator": "^1.0.14",
+        "readable-stream": "^4.7.0",
+        "rfdc": "^1.4.1",
+        "socks": "^2.8.6",
+        "split2": "^4.2.0",
+        "worker-timers": "^8.0.23",
+        "ws": "^8.18.3"
+      },
+      "bin": {
+        "mqtt": "build/bin/mqtt.js",
+        "mqtt_pub": "build/bin/pub.js",
+        "mqtt_sub": "build/bin/sub.js"
+      },
+      "engines": {
+        "node": ">=16.0.0"
+      }
+    },
+    "node_modules/mqtt-packet": {
+      "version": "9.0.2",
+      "resolved": "https://registry.npmmirror.com/mqtt-packet/-/mqtt-packet-9.0.2.tgz",
+      "integrity": "sha512-MvIY0B8/qjq7bKxdN1eD+nrljoeaai+qjLJgfRn3TiMuz0pamsIWY2bFODPZMSNmabsLANXsLl4EMoWvlaTZWA==",
+      "license": "MIT",
+      "dependencies": {
+        "bl": "^6.0.8",
+        "debug": "^4.3.4",
+        "process-nextick-args": "^2.0.1"
+      }
+    },
+    "node_modules/mqtt-packet/node_modules/debug": {
+      "version": "4.4.3",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz",
+      "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/mqtt-packet/node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "license": "MIT"
+    },
+    "node_modules/mqtt/node_modules/debug": {
+      "version": "4.4.3",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz",
+      "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/mqtt/node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "license": "MIT"
+    },
+    "node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "license": "MIT"
+    },
+    "node_modules/multistream": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/multistream/-/multistream-4.1.0.tgz",
+      "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "once": "^1.4.0",
+        "readable-stream": "^3.6.0"
+      }
+    },
+    "node_modules/multistream/node_modules/readable-stream": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz",
+      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/napi-build-utils": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
+      "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/next-tick": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz",
+      "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
+      "license": "ISC"
+    },
+    "node_modules/node-abi": {
+      "version": "3.92.0",
+      "resolved": "https://registry.npmmirror.com/node-abi/-/node-abi-3.92.0.tgz",
+      "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "semver": "^7.3.5"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/node-fetch": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz",
+      "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "whatwg-url": "^5.0.0"
+      },
+      "engines": {
+        "node": "4.x || >=6.0.0"
+      },
+      "peerDependencies": {
+        "encoding": "^0.1.0"
+      },
+      "peerDependenciesMeta": {
+        "encoding": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/number-allocator": {
+      "version": "1.0.14",
+      "resolved": "https://registry.npmmirror.com/number-allocator/-/number-allocator-1.0.14.tgz",
+      "integrity": "sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==",
+      "license": "MIT",
+      "dependencies": {
+        "debug": "^4.3.1",
+        "js-sdsl": "4.3.0"
+      }
+    },
+    "node_modules/number-allocator/node_modules/debug": {
+      "version": "4.4.3",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz",
+      "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/number-allocator/node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "license": "MIT"
+    },
+    "node_modules/object-inspect": {
+      "version": "1.13.4",
+      "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz",
+      "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz",
+      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+      "license": "ISC",
+      "dependencies": {
+        "wrappy": "1"
+      }
+    },
+    "node_modules/ordered-read-streams": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
+      "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==",
+      "license": "MIT",
+      "dependencies": {
+        "readable-stream": "^2.0.1"
+      }
+    },
+    "node_modules/ordered-read-streams/node_modules/readable-stream": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+      "license": "MIT",
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "node_modules/ordered-read-streams/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "license": "MIT"
+    },
+    "node_modules/ordered-read-streams/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "node_modules/p-is-promise": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/p-is-promise/-/p-is-promise-3.0.0.tgz",
+      "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/p-limit": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz",
+      "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "yocto-queue": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/p-locate": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz",
+      "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "p-limit": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/package-json-from-dist": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+      "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+      "dev": true,
+      "license": "BlueOak-1.0.0"
+    },
+    "node_modules/path-dirname": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/path-dirname/-/path-dirname-1.0.2.tgz",
+      "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==",
+      "license": "MIT"
+    },
+    "node_modules/path-exists": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz",
+      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/path-scurry": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.11.1.tgz",
+      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "dependencies": {
+        "lru-cache": "^10.2.0",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/path-type": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz",
+      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/picocolors": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/picomatch": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.2.tgz",
+      "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/pkg": {
+      "version": "5.8.1",
+      "resolved": "https://registry.npmmirror.com/pkg/-/pkg-5.8.1.tgz",
+      "integrity": "sha512-CjBWtFStCfIiT4Bde9QpJy0KeH19jCfwZRJqHFDFXfhUklCx8JoFmMj3wgnEYIwGmZVNkhsStPHEOnrtrQhEXA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/generator": "7.18.2",
+        "@babel/parser": "7.18.4",
+        "@babel/types": "7.19.0",
+        "chalk": "^4.1.2",
+        "fs-extra": "^9.1.0",
+        "globby": "^11.1.0",
+        "into-stream": "^6.0.0",
+        "is-core-module": "2.9.0",
+        "minimist": "^1.2.6",
+        "multistream": "^4.1.0",
+        "pkg-fetch": "3.4.2",
+        "prebuild-install": "7.1.1",
+        "resolve": "^1.22.0",
+        "stream-meter": "^1.0.4"
+      },
+      "bin": {
+        "pkg": "lib-es5/bin.js"
+      },
+      "peerDependencies": {
+        "node-notifier": ">=9.0.1"
+      },
+      "peerDependenciesMeta": {
+        "node-notifier": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/pkg-fetch": {
+      "version": "3.4.2",
+      "resolved": "https://registry.npmmirror.com/pkg-fetch/-/pkg-fetch-3.4.2.tgz",
+      "integrity": "sha512-0+uijmzYcnhC0hStDjm/cl2VYdrmVVBpe7Q8k9YBojxmR5tG8mvR9/nooQq3QSXiQqORDVOTY3XqMEqJVIzkHA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.1.2",
+        "fs-extra": "^9.1.0",
+        "https-proxy-agent": "^5.0.0",
+        "node-fetch": "^2.6.6",
+        "progress": "^2.0.3",
+        "semver": "^7.3.5",
+        "tar-fs": "^2.1.1",
+        "yargs": "^16.2.0"
+      },
+      "bin": {
+        "pkg-fetch": "lib-es5/bin.js"
+      }
+    },
+    "node_modules/pkg-fetch/node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/pkg-fetch/node_modules/cliui": {
+      "version": "7.0.4",
+      "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz",
+      "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^7.0.0"
+      }
+    },
+    "node_modules/pkg-fetch/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/pkg-fetch/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/pkg-fetch/node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/pkg-fetch/node_modules/wrap-ansi": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/pkg-fetch/node_modules/yargs": {
+      "version": "16.2.0",
+      "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz",
+      "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cliui": "^7.0.2",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.0",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^20.2.2"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/pkg-fetch/node_modules/yargs-parser": {
+      "version": "20.2.9",
+      "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz",
+      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/prebuild-install": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmmirror.com/prebuild-install/-/prebuild-install-7.1.1.tgz",
+      "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "detect-libc": "^2.0.0",
+        "expand-template": "^2.0.3",
+        "github-from-package": "0.0.0",
+        "minimist": "^1.2.3",
+        "mkdirp-classic": "^0.5.3",
+        "napi-build-utils": "^1.0.1",
+        "node-abi": "^3.3.0",
+        "pump": "^3.0.0",
+        "rc": "^1.2.7",
+        "simple-get": "^4.0.0",
+        "tar-fs": "^2.0.0",
+        "tunnel-agent": "^0.6.0"
+      },
+      "bin": {
+        "prebuild-install": "bin.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz",
+      "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6.0"
+      }
+    },
+    "node_modules/process-nextick-args": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+      "license": "MIT"
+    },
+    "node_modules/progress": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz",
+      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/pump": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.4.tgz",
+      "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==",
+      "license": "MIT",
+      "dependencies": {
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
+      }
+    },
+    "node_modules/pumpify": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmmirror.com/pumpify/-/pumpify-1.5.1.tgz",
+      "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+      "license": "MIT",
+      "dependencies": {
+        "duplexify": "^3.6.0",
+        "inherits": "^2.0.3",
+        "pump": "^2.0.0"
+      }
+    },
+    "node_modules/pumpify/node_modules/pump": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/pump/-/pump-2.0.1.tgz",
+      "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+      "license": "MIT",
+      "dependencies": {
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
+      }
+    },
+    "node_modules/qs": {
+      "version": "6.15.1",
+      "resolved": "https://registry.npmmirror.com/qs/-/qs-6.15.1.tgz",
+      "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "side-channel": "^1.1.0"
+      },
+      "engines": {
+        "node": ">=0.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/randombytes": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz",
+      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "node_modules/rc": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmmirror.com/rc/-/rc-1.2.8.tgz",
+      "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+      "dev": true,
+      "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
+      "dependencies": {
+        "deep-extend": "^0.6.0",
+        "ini": "~1.3.0",
+        "minimist": "^1.2.0",
+        "strip-json-comments": "~2.0.1"
+      },
+      "bin": {
+        "rc": "cli.js"
+      }
+    },
+    "node_modules/rc/node_modules/strip-json-comments": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+      "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/readable-stream": {
+      "version": "4.7.0",
+      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-4.7.0.tgz",
+      "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
+      "license": "MIT",
+      "dependencies": {
+        "abort-controller": "^3.0.0",
+        "buffer": "^6.0.3",
+        "events": "^3.3.0",
+        "process": "^0.11.10",
+        "string_decoder": "^1.3.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
+    "node_modules/readdirp": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.1.2.tgz",
+      "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 14.18.0"
+      },
+      "funding": {
+        "type": "individual",
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "node_modules/reinterval": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/reinterval/-/reinterval-1.1.0.tgz",
+      "integrity": "sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==",
+      "license": "MIT"
+    },
+    "node_modules/remove-trailing-separator": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+      "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
+      "license": "ISC"
+    },
+    "node_modules/require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/resolve": {
+      "version": "1.22.12",
+      "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.12.tgz",
+      "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "is-core-module": "^2.16.1",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/resolve/node_modules/is-core-module": {
+      "version": "2.16.2",
+      "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.2.tgz",
+      "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "hasown": "^2.0.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/reusify": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz",
+      "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "iojs": ">=1.0.0",
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/rfdc": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz",
+      "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+      "license": "MIT"
+    },
+    "node_modules/run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "queue-microtask": "^1.2.2"
+      }
+    },
+    "node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/semver": {
+      "version": "7.8.0",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.8.0.tgz",
+      "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/serialize-javascript": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+      "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "randombytes": "^2.1.0"
+      }
+    },
+    "node_modules/shebang-command": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "shebang-regex": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/side-channel": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz",
+      "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "object-inspect": "^1.13.3",
+        "side-channel-list": "^1.0.0",
+        "side-channel-map": "^1.0.1",
+        "side-channel-weakmap": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-list": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.1.tgz",
+      "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "object-inspect": "^1.13.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-map": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz",
+      "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.2",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.5",
+        "object-inspect": "^1.13.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-weakmap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+      "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.2",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.5",
+        "object-inspect": "^1.13.3",
+        "side-channel-map": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/signal-exit": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz",
+      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/simple-concat": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/simple-concat/-/simple-concat-1.0.1.tgz",
+      "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/simple-get": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/simple-get/-/simple-get-4.0.1.tgz",
+      "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "decompress-response": "^6.0.0",
+        "once": "^1.3.1",
+        "simple-concat": "^1.0.0"
+      }
+    },
+    "node_modules/slash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz",
+      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/smart-buffer": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz",
+      "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 6.0.0",
+        "npm": ">= 3.0.0"
+      }
+    },
+    "node_modules/socks": {
+      "version": "2.8.9",
+      "resolved": "https://registry.npmmirror.com/socks/-/socks-2.8.9.tgz",
+      "integrity": "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==",
+      "license": "MIT",
+      "dependencies": {
+        "ip-address": "^10.1.1",
+        "smart-buffer": "^4.2.0"
+      },
+      "engines": {
+        "node": ">= 10.0.0",
+        "npm": ">= 3.0.0"
+      }
+    },
+    "node_modules/split2": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmmirror.com/split2/-/split2-4.2.0.tgz",
+      "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
+      "license": "ISC",
+      "engines": {
+        "node": ">= 10.x"
+      }
+    },
+    "node_modules/stream-meter": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/stream-meter/-/stream-meter-1.0.4.tgz",
+      "integrity": "sha512-4sOEtrbgFotXwnEuzzsQBYEV1elAeFSO8rSGeTwabuX1RRn/kEq9JVH7I0MRBhKVRR0sJkr0M0QCH7yOLf9fhQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "readable-stream": "^2.1.4"
+      }
+    },
+    "node_modules/stream-meter/node_modules/readable-stream": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "node_modules/stream-meter/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/stream-meter/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "node_modules/stream-shift": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.3.tgz",
+      "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==",
+      "license": "MIT"
+    },
+    "node_modules/string_decoder": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz",
+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "~5.2.0"
+      }
+    },
+    "node_modules/string-width": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz",
+      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "eastasianwidth": "^0.2.0",
+        "emoji-regex": "^9.2.2",
+        "strip-ansi": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/string-width-cjs": {
+      "name": "string-width",
+      "version": "4.2.3",
+      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/string-width-cjs/node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/string-width-cjs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/string-width-cjs/node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-ansi": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.2.0.tgz",
+      "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^6.2.2"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+      }
+    },
+    "node_modules/strip-ansi-cjs": {
+      "name": "strip-ansi",
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-json-comments": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/supports-color": {
+      "version": "8.1.1",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz",
+      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
+    },
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/tar-fs": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmmirror.com/tar-fs/-/tar-fs-2.1.4.tgz",
+      "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chownr": "^1.1.1",
+        "mkdirp-classic": "^0.5.2",
+        "pump": "^3.0.0",
+        "tar-stream": "^2.1.4"
+      }
+    },
+    "node_modules/tar-stream": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz",
+      "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "bl": "^4.0.3",
+        "end-of-stream": "^1.4.1",
+        "fs-constants": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^3.1.1"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/tar-stream/node_modules/bl": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz",
+      "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "buffer": "^5.5.0",
+        "inherits": "^2.0.4",
+        "readable-stream": "^3.4.0"
+      }
+    },
+    "node_modules/tar-stream/node_modules/buffer": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz",
+      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.1.13"
+      }
+    },
+    "node_modules/tar-stream/node_modules/readable-stream": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz",
+      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/through2": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz",
+      "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+      "license": "MIT",
+      "dependencies": {
+        "readable-stream": "~2.3.6",
+        "xtend": "~4.0.1"
+      }
+    },
+    "node_modules/through2-filter": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/through2-filter/-/through2-filter-3.0.0.tgz",
+      "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==",
+      "license": "MIT",
+      "dependencies": {
+        "through2": "~2.0.0",
+        "xtend": "~4.0.0"
+      }
+    },
+    "node_modules/through2/node_modules/readable-stream": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+      "license": "MIT",
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "node_modules/through2/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "license": "MIT"
+    },
+    "node_modules/through2/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "node_modules/to-absolute-glob": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
+      "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==",
+      "license": "MIT",
+      "dependencies": {
+        "is-absolute": "^1.0.0",
+        "is-negated-glob": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/to-fast-properties": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+      "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/to-regex-range": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-number": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=8.0"
+      }
+    },
+    "node_modules/tr46": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz",
+      "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/tslib": {
+      "version": "2.8.1",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz",
+      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+      "license": "0BSD"
+    },
+    "node_modules/tunnel-agent": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+      "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "safe-buffer": "^5.0.1"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/type": {
+      "version": "2.7.3",
+      "resolved": "https://registry.npmmirror.com/type/-/type-2.7.3.tgz",
+      "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==",
+      "license": "ISC"
+    },
+    "node_modules/typedarray": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz",
+      "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
+      "license": "MIT"
+    },
+    "node_modules/unc-path-regex": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmmirror.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+      "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/undici-types": {
+      "version": "7.21.0",
+      "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-7.21.0.tgz",
+      "integrity": "sha512-w9IMgQrz4O0YN1LtB7K5P63vhlIOvC7opSmouCJ+ZywlPAlO9gIkJ+otk6LvGpAs2wg4econaCz3TvQ9xPoyuQ==",
+      "license": "MIT"
+    },
+    "node_modules/unique-stream": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmmirror.com/unique-stream/-/unique-stream-2.4.0.tgz",
+      "integrity": "sha512-V6QarSfeSgDipGA9EZdoIzu03ZDlOFkk+FbEP5cwgrZXN3iIkYR91IjU2EnM6rB835kGQsqHX8qncObTXV+6KA==",
+      "license": "MIT",
+      "dependencies": {
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "through2-filter": "3.0.0"
+      }
+    },
+    "node_modules/universalify": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz",
+      "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 10.0.0"
+      }
+    },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+      "license": "MIT"
+    },
+    "node_modules/webidl-conversions": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+      "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+      "dev": true,
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/websocket-stream": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmmirror.com/websocket-stream/-/websocket-stream-5.2.0.tgz",
+      "integrity": "sha512-2ZfiWuEK/bTi8AhXdYh/lFEUwXtGVcbO4vWUy5XJhf7F6nCMAC8hbXXTarxrmv2BFSwdk3P3bhvgiA9wzT+GFQ==",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "duplexify": "^3.6.1",
+        "inherits": "^2.0.1",
+        "readable-stream": "^3.0.0",
+        "safe-buffer": "^5.1.2",
+        "ws": "^6.1.2",
+        "xtend": "^4.0.0"
+      }
+    },
+    "node_modules/websocket-stream/node_modules/readable-stream": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz",
+      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/websocket-stream/node_modules/ws": {
+      "version": "6.2.3",
+      "resolved": "https://registry.npmmirror.com/ws/-/ws-6.2.3.tgz",
+      "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==",
+      "license": "MIT",
+      "dependencies": {
+        "async-limiter": "~1.0.0"
+      }
+    },
+    "node_modules/whatwg-url": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz",
+      "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "tr46": "~0.0.3",
+        "webidl-conversions": "^3.0.0"
+      }
+    },
+    "node_modules/which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/worker-factory": {
+      "version": "7.0.49",
+      "resolved": "https://registry.npmmirror.com/worker-factory/-/worker-factory-7.0.49.tgz",
+      "integrity": "sha512-lW7tpgy6aUv2dFsQhv1yv+XFzdkCf/leoKRTGMPVK5/die6RrUjqgJHJf556qO+ZfytNG6wPXc17E8zzsOLUDw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.29.2",
+        "fast-unique-numbers": "^9.0.27",
+        "tslib": "^2.8.1"
+      }
+    },
+    "node_modules/worker-timers": {
+      "version": "8.0.31",
+      "resolved": "https://registry.npmmirror.com/worker-timers/-/worker-timers-8.0.31.tgz",
+      "integrity": "sha512-ngkq5S6JuZyztom8tDgBzorLo9byhBMko/sXfgiUD945AuzKGg1GCgDMCC3NaYkicLpGKXutONM36wEX8UbBCA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.29.2",
+        "tslib": "^2.8.1",
+        "worker-timers-broker": "^8.0.16",
+        "worker-timers-worker": "^9.0.14"
+      }
+    },
+    "node_modules/worker-timers-broker": {
+      "version": "8.0.16",
+      "resolved": "https://registry.npmmirror.com/worker-timers-broker/-/worker-timers-broker-8.0.16.tgz",
+      "integrity": "sha512-JyP3AvUGyPGbBGW7XiUewm2+0pN/aYo1QpVf5kdXAfkDZcN3p7NbWrG6XnyDEpDIvfHk/+LCnOW/NsuiU9riYA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.29.2",
+        "broker-factory": "^3.1.14",
+        "fast-unique-numbers": "^9.0.27",
+        "tslib": "^2.8.1",
+        "worker-timers-worker": "^9.0.14"
+      }
+    },
+    "node_modules/worker-timers-worker": {
+      "version": "9.0.14",
+      "resolved": "https://registry.npmmirror.com/worker-timers-worker/-/worker-timers-worker-9.0.14.tgz",
+      "integrity": "sha512-/qF06C60sXmSLfUl7WglvrDIbspmPOM8UrG63Dnn4bi2x4/DfqHS/+dxF5B+MdHnYO5tVuZYLHdAodrKdabTIg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.29.2",
+        "tslib": "^2.8.1",
+        "worker-factory": "^7.0.49"
+      }
+    },
+    "node_modules/workerpool": {
+      "version": "9.3.4",
+      "resolved": "https://registry.npmmirror.com/workerpool/-/workerpool-9.3.4.tgz",
+      "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==",
+      "dev": true,
+      "license": "Apache-2.0"
+    },
+    "node_modules/wrap-ansi": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+      "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^6.1.0",
+        "string-width": "^5.0.1",
+        "strip-ansi": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/wrap-ansi-cjs": {
+      "name": "wrap-ansi",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/wrap-ansi/node_modules/ansi-styles": {
+      "version": "6.2.3",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.3.tgz",
+      "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+      "license": "ISC"
+    },
+    "node_modules/ws": {
+      "version": "8.20.0",
+      "resolved": "https://registry.npmmirror.com/ws/-/ws-8.20.0.tgz",
+      "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "peerDependencies": {
+        "bufferutil": "^4.0.1",
+        "utf-8-validate": ">=5.0.2"
+      },
+      "peerDependenciesMeta": {
+        "bufferutil": {
+          "optional": true
+        },
+        "utf-8-validate": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/xtend": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz",
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4"
+      }
+    },
+    "node_modules/y18n": {
+      "version": "5.0.8",
+      "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz",
+      "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/yargs": {
+      "version": "17.7.2",
+      "resolved": "https://registry.npmmirror.com/yargs/-/yargs-17.7.2.tgz",
+      "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cliui": "^8.0.1",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.3",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^21.1.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/yargs-parser": {
+      "version": "21.1.1",
+      "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz",
+      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/yargs-unparser": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+      "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "camelcase": "^6.0.0",
+        "decamelize": "^4.0.0",
+        "flat": "^5.0.2",
+        "is-plain-obj": "^2.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/yargs/node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/yargs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/yargs/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/yargs/node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/yocto-queue": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz",
+      "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    }
+  }
+}
diff --git a/jh2028-new-service/package.json b/jh2028-new-service/package.json
new file mode 100644
index 0000000..d0dd53a
--- /dev/null
+++ b/jh2028-new-service/package.json
@@ -0,0 +1,34 @@
+{
+  "name": "jh2028-new-service",
+  "version": "1.0.0",
+  "description": "JH2028 20260511 TCP gateway service",
+  "license": "ISC",
+  "type": "commonjs",
+  "main": "app.js",
+  "scripts": {
+    "start": "node app.js",
+    "start:simulator": "node tcp-simulator.js --host 127.0.0.1 --port 9000 --repeat 0",
+    "start:simulator:once": "node tcp-simulator.js --host 127.0.0.1 --port 9000 --repeat 1",
+    "print:simulator": "node tcp-simulator.js --mode both --print-only",
+    "test": "mocha \"test/**/*.test.js\"",
+    "verify": "node verify-protocol.js",
+    "build": "node scripts/build-executables.js",
+    "build:win": "node scripts/build-executables.js --target win-x64",
+    "build:linux": "node scripts/build-executables.js --target linux-x64"
+  },
+  "dependencies": {
+    "aliyun-iot-device-sdk": "^1.0.1",
+    "mqtt": "^5.15.1"
+  },
+  "devDependencies": {
+    "@vercel/ncc": "^0.38.4",
+    "pkg": "^5.8.1",
+    "mocha": "^11.7.5"
+  },
+  "pkg": {
+    "assets": [
+      "config.json",
+      "alModel.json"
+    ]
+  }
+}
diff --git a/jh2028-new-service/runtime-paths.js b/jh2028-new-service/runtime-paths.js
new file mode 100644
index 0000000..99255d3
--- /dev/null
+++ b/jh2028-new-service/runtime-paths.js
@@ -0,0 +1,42 @@
+const fs = require('fs');
+const path = require('path');
+
+function fileExists(filePath) {
+  try {
+    return fs.statSync(filePath).isFile();
+  } catch (_error) {
+    return false;
+  }
+}
+
+function getDefaultConfigCandidates(options = {}) {
+  const packaged = options.packaged !== undefined ? options.packaged : Boolean(process.pkg);
+  const cwd = options.cwd || process.cwd();
+  const appDir = options.appDir || __dirname;
+  const execPath = options.execPath || process.execPath;
+
+  if (packaged) {
+    const execDir = path.dirname(execPath);
+    return [
+      path.join(execDir, 'runtime', 'config.json'),
+      path.join(execDir, 'config.json'),
+      path.join(cwd, 'config.json'),
+    ];
+  }
+
+  return [
+    path.join(cwd, 'config.json'),
+    path.join(appDir, 'config.json'),
+  ];
+}
+
+function getDefaultConfigPath(options = {}) {
+  const candidates = getDefaultConfigCandidates(options);
+  return candidates.find(fileExists) || candidates[0];
+}
+
+module.exports = {
+  fileExists,
+  getDefaultConfigCandidates,
+  getDefaultConfigPath,
+};
diff --git a/jh2028-new-service/scripts/build-executables.js b/jh2028-new-service/scripts/build-executables.js
new file mode 100644
index 0000000..43be375
--- /dev/null
+++ b/jh2028-new-service/scripts/build-executables.js
@@ -0,0 +1,202 @@
+#!/usr/bin/env node
+
+const fs = require('fs');
+const path = require('path');
+const { spawnSync } = require('child_process');
+
+const rootDir = path.join(__dirname, '..');
+const buildDir = path.join(rootDir, 'build');
+const distDir = path.join(rootDir, 'dist');
+const bundleDir = path.join(buildDir, 'ncc');
+const pkgProjectDir = path.join(buildDir, 'pkg');
+const runtimeAssets = [
+  'config.json',
+  'alModel.json',
+];
+const distDocs = [
+  '配置说明.md',
+  '实施部署文档.md',
+];
+const targets = {
+  'win-x64': {
+    pkgTarget: 'node18-win-x64',
+    outputName: 'jh2028-service.exe',
+    executableMode: null,
+  },
+  'linux-x64': {
+    pkgTarget: 'node18-linux-x64',
+    outputName: 'jh2028-service',
+    executableMode: 0o755,
+  },
+};
+
+function parseArgs(argv) {
+  const selectedTargets = new Set(Object.keys(targets));
+
+  for (let index = 2; index < argv.length; index += 1) {
+    const arg = argv[index];
+    const value = argv[index + 1];
+
+    if (arg === '--target' && value) {
+      selectedTargets.clear();
+
+      for (const item of value.split(',').map((entry) => entry.trim()).filter(Boolean)) {
+        if (!targets[item]) {
+          throw new Error(`不支持的打包目标: ${item}`);
+        }
+
+        selectedTargets.add(item);
+      }
+
+      index += 1;
+    }
+  }
+
+  return Array.from(selectedTargets);
+}
+
+function runNode(scriptPath, args) {
+  const result = spawnSync(process.execPath, [scriptPath, ...args], {
+    cwd: rootDir,
+    stdio: 'inherit',
+  });
+
+  if (result.status !== 0) {
+    throw new Error(`命令执行失败: node ${scriptPath} ${args.join(' ')}`);
+  }
+}
+
+function ensureCleanWorkspace() {
+  fs.rmSync(buildDir, { recursive: true, force: true });
+  fs.rmSync(distDir, { recursive: true, force: true });
+  fs.mkdirSync(buildDir, { recursive: true });
+  fs.mkdirSync(distDir, { recursive: true });
+}
+
+function buildBundle() {
+  const nccCli = require.resolve('@vercel/ncc/dist/ncc/cli');
+  runNode(nccCli, ['build', 'app.js', '-o', bundleDir, '--target', 'es2019']);
+  fs.rmSync(path.join(bundleDir, 'logs'), { recursive: true, force: true });
+}
+
+function preparePkgProject() {
+  const pkgBundleDir = path.join(pkgProjectDir, 'bundle');
+  const pkgEntryPath = path.join(pkgProjectDir, 'entry.js');
+  const pkgConfigPath = path.join(pkgProjectDir, 'package.json');
+  const bundleSourcePath = path.join(bundleDir, 'index.js');
+  const bundleTargetPath = path.join(pkgBundleDir, 'index.cjs');
+  const bootstrapSource = `#!/usr/bin/env node
+
+const fs = require('fs');
+const path = require('path');
+const Module = require('module');
+
+const bundlePath = path.join(__dirname, 'bundle', 'index.cjs');
+const source = fs.readFileSync(bundlePath, 'utf8');
+const bundledModule = new Module(bundlePath);
+
+bundledModule.filename = bundlePath;
+bundledModule.id = '.';
+bundledModule.paths = Module._nodeModulePaths(path.dirname(bundlePath));
+Module._cache[bundlePath] = bundledModule;
+process.mainModule = bundledModule;
+require.main = bundledModule;
+
+bundledModule._compile(source, bundlePath);
+`;
+  const pkgConfig = {
+    name: 'jh2028-pkg-bootstrap',
+    version: '1.0.0',
+    private: true,
+    type: 'commonjs',
+    bin: 'entry.js',
+    pkg: {
+      assets: [
+        'bundle/index.cjs',
+      ],
+    },
+  };
+
+  fs.mkdirSync(pkgBundleDir, { recursive: true });
+  fs.copyFileSync(bundleSourcePath, bundleTargetPath);
+  fs.writeFileSync(pkgEntryPath, bootstrapSource, 'utf8');
+  fs.writeFileSync(pkgConfigPath, `${JSON.stringify(pkgConfig, null, 2)}\n`, 'utf8');
+}
+
+function buildExecutable(targetKey, targetConfig) {
+  const pkgCli = require.resolve('pkg/lib-es5/bin.js');
+  const targetDir = path.join(distDir, targetKey);
+  const outputPath = path.join(targetDir, targetConfig.outputName);
+
+  fs.mkdirSync(targetDir, { recursive: true });
+
+  runNode(pkgCli, [
+    pkgProjectDir,
+    '--targets',
+    targetConfig.pkgTarget,
+    '--output',
+    outputPath,
+    '--public',
+    '--public-packages',
+    '*',
+    '--no-bytecode',
+  ]);
+
+  if (!fs.existsSync(outputPath)) {
+    throw new Error(`未生成预期的可执行文件: ${outputPath}`);
+  }
+
+  if (targetConfig.executableMode) {
+    fs.chmodSync(outputPath, targetConfig.executableMode);
+  }
+}
+
+function copyRuntimeAssets(targetDir) {
+  const runtimeDir = path.join(targetDir, 'runtime');
+  const logsDir = path.join(targetDir, 'logs');
+  const dashboardSourceDir = path.join(rootDir, 'dashboard');
+  const dashboardTargetDir = path.join(runtimeDir, 'dashboard');
+
+  fs.mkdirSync(runtimeDir, { recursive: true });
+  fs.mkdirSync(logsDir, { recursive: true });
+
+  for (const assetName of runtimeAssets) {
+    const sourcePath = path.join(rootDir, assetName);
+
+    if (!fs.existsSync(sourcePath)) {
+      continue;
+    }
+
+    fs.copyFileSync(sourcePath, path.join(runtimeDir, assetName));
+  }
+
+  if (fs.existsSync(dashboardSourceDir)) {
+    fs.cpSync(dashboardSourceDir, dashboardTargetDir, { recursive: true });
+  }
+
+  for (const docName of distDocs) {
+    const sourcePath = path.join(rootDir, docName);
+
+    if (!fs.existsSync(sourcePath)) {
+      continue;
+    }
+
+    fs.copyFileSync(sourcePath, path.join(targetDir, docName));
+  }
+}
+
+function main() {
+  const selectedTargets = parseArgs(process.argv);
+  ensureCleanWorkspace();
+  buildBundle();
+  preparePkgProject();
+
+  for (const targetKey of selectedTargets) {
+    buildExecutable(targetKey, targets[targetKey]);
+    copyRuntimeAssets(path.join(distDir, targetKey));
+  }
+
+  console.log('[BUILD] 打包完成');
+}
+
+main();
diff --git a/jh2028-new-service/state-cache.js b/jh2028-new-service/state-cache.js
new file mode 100644
index 0000000..954ed4c
--- /dev/null
+++ b/jh2028-new-service/state-cache.js
@@ -0,0 +1,101 @@
+function cloneObject(value) {
+  return JSON.parse(JSON.stringify(value || {}));
+}
+
+class StateCache {
+  constructor(options = {}) {
+    this.includeDeviceIdField = options.includeDeviceIdField !== false;
+    this.deviceIdField = options.deviceIdField || 'n';
+    this.entries = new Map();
+  }
+
+  update(device, metric = {}, meta = {}) {
+    if (!device || !device.deviceId) {
+      throw new Error('设备缺少 deviceId');
+    }
+
+    const entry = this.getOrCreateEntry(device);
+    entry.device = device;
+    entry.lastUpdateAt = Date.now();
+
+    if (meta.messageType === 'realtime') {
+      entry.lastRealtimeAt = entry.lastUpdateAt;
+    }
+
+    if (meta.messageType === 'blood-pressure') {
+      entry.lastBloodPressureAt = entry.lastUpdateAt;
+    }
+
+    Object.assign(entry.payload, metric);
+
+    if (this.includeDeviceIdField) {
+      entry.payload[this.deviceIdField] = device.deviceId;
+    }
+
+    return this.getPayload(device.deviceId);
+  }
+
+  getOrCreateEntry(device) {
+    if (!this.entries.has(device.deviceId)) {
+      const payload = {};
+
+      if (this.includeDeviceIdField) {
+        payload[this.deviceIdField] = device.deviceId;
+      }
+
+      this.entries.set(device.deviceId, {
+        device,
+        payload,
+        firstSeenAt: Date.now(),
+        lastUpdateAt: 0,
+        lastRealtimeAt: 0,
+        lastBloodPressureAt: 0,
+      });
+    }
+
+    return this.entries.get(device.deviceId);
+  }
+
+  getPayload(deviceId) {
+    const entry = this.entries.get(deviceId);
+    if (!entry) {
+      return null;
+    }
+
+    return cloneObject(entry.payload);
+  }
+
+  getSnapshot(deviceId) {
+    if (deviceId) {
+      const entry = this.entries.get(deviceId);
+      if (!entry) {
+        return null;
+      }
+
+      return {
+        deviceId,
+        payload: cloneObject(entry.payload),
+        firstSeenAt: entry.firstSeenAt,
+        lastUpdateAt: entry.lastUpdateAt,
+        lastRealtimeAt: entry.lastRealtimeAt,
+        lastBloodPressureAt: entry.lastBloodPressureAt,
+      };
+    }
+
+    return Array.from(this.entries.keys()).map((key) => this.getSnapshot(key));
+  }
+
+  getSnapshotMap() {
+    const map = new Map();
+
+    for (const item of this.getSnapshot()) {
+      map.set(item.deviceId, item);
+    }
+
+    return map;
+  }
+}
+
+module.exports = {
+  StateCache,
+};
diff --git a/jh2028-new-service/tcp-service.js b/jh2028-new-service/tcp-service.js
new file mode 100644
index 0000000..5d1a565
--- /dev/null
+++ b/jh2028-new-service/tcp-service.js
@@ -0,0 +1,227 @@
+const net = require('net');
+const { Jh2028Decoder, bytesToHex } = require('./decoder');
+
+function normalizeIp(address) {
+  if (!address) {
+    return '';
+  }
+
+  if (address.startsWith('::ffff:')) {
+    return address.slice(7);
+  }
+
+  return address;
+}
+
+function formatReceivedTimestamp(date = new Date()) {
+  const year = date.getFullYear();
+  const month = String(date.getMonth() + 1).padStart(2, '0');
+  const day = String(date.getDate()).padStart(2, '0');
+  const hour = String(date.getHours()).padStart(2, '0');
+  const minute = String(date.getMinutes()).padStart(2, '0');
+  const second = String(date.getSeconds()).padStart(2, '0');
+  return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
+}
+
+class TcpService {
+  constructor(options = {}) {
+    this.tcpConfig = options.tcpConfig || {};
+    this.devices = options.devices || [];
+    this.alModelPath = options.alModelPath;
+    this.logger = options.logger || console;
+    this.logRawHex = Boolean(options.logRawHex);
+    this.onMetric = typeof options.onMetric === 'function' ? options.onMetric : async () => {};
+    this.onConnectionChange = typeof options.onConnectionChange === 'function' ? options.onConnectionChange : () => {};
+    this.server = null;
+    this.sessions = new Map();
+    this.socketsByDeviceId = new Map();
+    this.deviceMap = this.buildDeviceMap(this.devices);
+  }
+
+  buildDeviceMap(devices) {
+    const map = new Map();
+
+    for (const device of devices) {
+      if (!device || !device.ip || !device.deviceId) {
+        continue;
+      }
+
+      map.set(normalizeIp(device.ip), {
+        ...device,
+        name: device.name || device.deviceId,
+      });
+    }
+
+    return map;
+  }
+
+  async start() {
+    this.server = net.createServer((socket) => {
+      this.handleConnection(socket);
+    });
+
+    this.server.maxConnections = this.tcpConfig.maxConnections || 100;
+    this.server.on('error', (error) => {
+      this.logger.error(`[TCP] 服务异常: ${error.message}`);
+    });
+
+    await new Promise((resolve, reject) => {
+      this.server.once('listening', resolve);
+      this.server.once('error', reject);
+      this.server.listen({
+        host: this.tcpConfig.host,
+        port: this.tcpConfig.port,
+        backlog: this.tcpConfig.backlog || 128,
+      });
+    });
+
+    this.logger.info(`[TCP] 已开始监听 ${this.tcpConfig.host}:${this.tcpConfig.port} 设备数量=${this.deviceMap.size}`);
+  }
+
+  handleConnection(socket) {
+    const clientIp = normalizeIp(socket.remoteAddress);
+    const device = this.deviceMap.get(clientIp);
+
+    if (!device) {
+      this.logger.warn(`[TCP] 未配置设备接入 IP=${clientIp} 端口=${socket.remotePort},连接将关闭`);
+      socket.destroy();
+      return;
+    }
+
+    const oldSocket = this.socketsByDeviceId.get(device.deviceId);
+    if (oldSocket && oldSocket !== socket) {
+      this.logger.warn(`[TCP] 同设备新连接接入,将关闭旧连接 设备=${device.deviceId} IP=${clientIp}`);
+      oldSocket.destroy();
+    }
+
+    const decoder = new Jh2028Decoder({
+      alModelPath: this.alModelPath,
+      maxBufferBytes: this.tcpConfig.maxBufferBytes || 8192,
+    });
+
+    this.sessions.set(socket, {
+      clientIp,
+      device,
+      decoder,
+      connectedAt: Date.now(),
+      lastDataAt: 0,
+      remotePort: socket.remotePort,
+    });
+    this.socketsByDeviceId.set(device.deviceId, socket);
+
+    if (this.tcpConfig.keepAlive) {
+      socket.setKeepAlive(true, this.tcpConfig.keepAliveDelayMs || 10000);
+    }
+
+    socket.setNoDelay(Boolean(this.tcpConfig.noDelay));
+    socket.setTimeout(this.tcpConfig.socketTimeoutMs || 120000);
+
+    this.logger.info(`[TCP] 设备已连接 设备=${device.deviceId} IP=${clientIp} 端口=${socket.remotePort}`);
+    this.notifyConnectionChange(device);
+
+    socket.on('data', (chunk) => {
+      this.handleData(socket, chunk);
+    });
+
+    socket.on('timeout', () => {
+      this.logger.warn(`[TCP] 连接超时 设备=${device.deviceId} IP=${clientIp}`);
+      socket.destroy();
+    });
+
+    socket.on('error', (error) => {
+      this.logger.error(`[TCP] 连接异常 设备=${device.deviceId} IP=${clientIp}: ${error.message}`);
+    });
+
+    socket.on('close', () => {
+      this.sessions.delete(socket);
+      if (this.socketsByDeviceId.get(device.deviceId) === socket) {
+        this.socketsByDeviceId.delete(device.deviceId);
+      }
+      this.logger.info(`[TCP] 设备已断开 设备=${device.deviceId} IP=${clientIp}`);
+      this.notifyConnectionChange(device);
+    });
+  }
+
+  handleData(socket, chunk) {
+    const session = this.sessions.get(socket);
+    if (!session) {
+      return;
+    }
+
+    this.logger.info(`[TCP] 收到原始数据 设备=${session.device.deviceId} 字节数=${chunk.length}`);
+    session.lastDataAt = Date.now();
+    if (this.logRawHex) {
+      this.logger.debug(`[TCP] 原始报文 设备=${session.device.deviceId} ${bytesToHex(chunk)}`);
+    }
+
+    const results = session.decoder.push(chunk);
+    if (results.length === 0) {
+      this.logger.warn(`[TCP] 当前数据片段尚未组成完整报文 设备=${session.device.deviceId} 字节数=${chunk.length}`);
+      return;
+    }
+
+    for (const result of results) {
+      if (!result.publish) {
+        const level = result.ok ? 'warn' : 'warn';
+        this.logger[level](`[TCP] 跳过未发布报文 设备=${session.device.deviceId} 原因=${result.reason} 原始报文=${result.rawHex || ''}`);
+        continue;
+      }
+
+      const metric = { ...result.metric };
+      if (result.messageType === 'blood-pressure') {
+        metric.M = formatReceivedTimestamp();
+      }
+
+      this.logger.info(`[TCP] 解析到指标 设备=${session.device.deviceId} 类型=${result.messageType} 指标=${JSON.stringify(metric)}`);
+      Promise.resolve(this.onMetric(session.device, metric, result)).catch((error) => {
+        this.logger.error(`[TCP] 指标处理失败 设备=${session.device.deviceId}: ${error.message}`);
+      });
+    }
+  }
+
+  async stop() {
+    this.logger.info(`[TCP] 正在停止 TCP 服务 当前连接数=${this.sessions.size}`);
+
+    for (const socket of this.sessions.keys()) {
+      socket.destroy();
+    }
+
+    this.sessions.clear();
+    this.socketsByDeviceId.clear();
+
+    if (!this.server) {
+      return;
+    }
+
+    await new Promise((resolve) => {
+      this.server.close(resolve);
+    });
+
+    this.server = null;
+    this.logger.info('[TCP] TCP 服务已停止');
+  }
+
+  notifyConnectionChange(device) {
+    Promise.resolve(this.onConnectionChange(device, this.getConnectionSnapshot())).catch((error) => {
+      this.logger.error(`[TCP] 连接状态通知失败 设备=${device.deviceId}: ${error.message}`);
+    });
+  }
+
+  getConnectionSnapshot() {
+    return Array.from(this.sessions.values()).map((session) => ({
+      deviceId: session.device.deviceId,
+      ip: session.clientIp,
+      name: session.device.name || session.device.deviceId,
+      remotePort: session.remotePort,
+      connectedAt: session.connectedAt,
+      lastDataAt: session.lastDataAt,
+      online: true,
+    }));
+  }
+}
+
+module.exports = {
+  TcpService,
+  formatReceivedTimestamp,
+  normalizeIp,
+};
diff --git a/jh2028-new-service/tcp-simulator.js b/jh2028-new-service/tcp-simulator.js
new file mode 100644
index 0000000..0773242
--- /dev/null
+++ b/jh2028-new-service/tcp-simulator.js
@@ -0,0 +1,296 @@
+#!/usr/bin/env node
+
+const net = require('net');
+const { crc8 } = require('./decoder');
+
+const COMMAND_TYPE_DATA_SYNC = 0x01;
+const COMMAND_ID_REALTIME = 0x00;
+const COMMAND_ID_BLOOD_PRESSURE = 0x01;
+
+function parseArgs(argv) {
+  const options = {
+    host: '127.0.0.1',
+    port: 9000,
+    localAddress: '',
+    repeat: 1,
+    intervalMs: 500,
+    mode: 'both',
+    printOnly: false,
+  };
+
+  for (let index = 2; index < argv.length; index += 1) {
+    const arg = argv[index];
+    const value = argv[index + 1];
+
+    if (arg === '--host' && value) {
+      options.host = value;
+      index += 1;
+    } else if (arg === '--port' && value) {
+      options.port = Number(value);
+      index += 1;
+    } else if (arg === '--local-address' && value) {
+      options.localAddress = value;
+      index += 1;
+    } else if (arg === '--repeat' && value) {
+      options.repeat = Number(value);
+      index += 1;
+    } else if (arg === '--interval' && value) {
+      options.intervalMs = Number(value);
+      index += 1;
+    } else if (arg === '--mode' && value) {
+      options.mode = value.trim().toLowerCase();
+      index += 1;
+    } else if (arg === '--print-only') {
+      options.printOnly = true;
+    } else if (arg === '--help' || arg === '-h') {
+      options.help = true;
+    }
+  }
+
+  return options;
+}
+
+function printHelp() {
+  console.log(`JH2028 新协议 TCP 模拟器
+
+说明:
+  本脚本只生成新版 2026-05-11 协议报文,帧头固定为 55 AA。
+  不发送旧版 EE 55 协议,也不发送旧版 AA 55 血压扩展协议。
+
+用法:
+  node tcp-simulator.js --host 127.0.0.1 --port 9000
+  node tcp-simulator.js --mode realtime --print-only
+  node tcp-simulator.js --mode blood-pressure --print-only
+
+参数:
+  --host <ip>                 TCP 服务地址,默认 127.0.0.1
+  --port <number>             TCP 服务端口,默认 9000
+  --local-address <ip>        绑定本地源 IP,用于模拟设备来源 IP
+  --repeat <number>           发送轮数,默认 1,0 表示一直循环
+  --interval <ms>             发送间隔,默认 500
+  --mode <realtime|blood-pressure|both>
+                              realtime 只发送实时数据
+                              blood-pressure 只发送血压数据
+                              both 先发送实时数据,再发送血压数据
+  --print-only                只打印报文,不连接 TCP 服务
+`);
+}
+
+function buildFrame(timestamp, commandType, commandId, payload) {
+  const frameLength = 7 + payload.length;
+  const frameWithoutCrc = Buffer.from([
+    0x55,
+    0xAA,
+    frameLength,
+    timestamp & 0xFF,
+    commandType & 0xFF,
+    commandId & 0xFF,
+    ...payload,
+  ]);
+
+  return Buffer.concat([frameWithoutCrc, Buffer.from([crc8(frameWithoutCrc)])]);
+}
+
+function writeInt16LE(value) {
+  const buffer = Buffer.alloc(2);
+  buffer.writeInt16LE(value, 0);
+  return Array.from(buffer);
+}
+
+function writeUInt16LE(value) {
+  const buffer = Buffer.alloc(2);
+  buffer.writeUInt16LE(value, 0);
+  return Array.from(buffer);
+}
+
+function writeUInt32LE(value) {
+  const buffer = Buffer.alloc(4);
+  buffer.writeUInt32LE(value, 0);
+  return Array.from(buffer);
+}
+
+function buildRealtimePayload() {
+  return Buffer.from([
+    ...writeInt16LE(365),
+    ...writeInt16LE(368),
+    ...writeUInt16LE(2000),
+    ...writeUInt16LE(500),
+    ...writeUInt16LE(250),
+    ...writeUInt16LE(90),
+    ...writeUInt16LE(500),
+    ...writeUInt16LE(320),
+    ...writeInt16LE(-100),
+    ...writeInt16LE(120),
+    ...writeInt16LE(-80),
+    ...writeUInt32LE(2048),
+    ...writeUInt16LE(138),
+    ...writeUInt16LE(140),
+    ...writeUInt16LE(25),
+    ...writeUInt16LE(0),
+    ...writeUInt16LE(0),
+    ...writeUInt16LE(987),
+    ...writeUInt16LE(365),
+    ...writeUInt16LE(132),
+    ...writeUInt16LE(367),
+    ...writeUInt16LE(15),
+  ]);
+}
+
+function buildBloodPressurePayload() {
+  return Buffer.from([120, 80, 76, 0, 93]);
+}
+
+function bufferToHex(buffer) {
+  return Array.from(buffer, (value) => value.toString(16).toUpperCase().padStart(2, '0')).join(' ');
+}
+
+function describeFrame(frame) {
+  return {
+    header: bufferToHex(frame.slice(0, 2)),
+    length: frame[2],
+    timestamp: frame[3],
+    commandType: `0x${frame[4].toString(16).toUpperCase().padStart(2, '0')}`,
+    commandId: `0x${frame[5].toString(16).toUpperCase().padStart(2, '0')}`,
+    crc: `0x${frame[frame.length - 1].toString(16).toUpperCase().padStart(2, '0')}`,
+    rawHex: bufferToHex(frame),
+  };
+}
+
+function prepareFrames(mode) {
+  const frames = [];
+  let timestamp = 1;
+
+  if (mode === 'realtime' || mode === 'both') {
+    frames.push({
+      name: '实时数据',
+      frame: buildFrame(timestamp, COMMAND_TYPE_DATA_SYNC, COMMAND_ID_REALTIME, buildRealtimePayload()),
+    });
+    timestamp += 1;
+  }
+
+  if (mode === 'blood-pressure' || mode === 'both') {
+    frames.push({
+      name: '血压数据',
+      frame: buildFrame(timestamp, COMMAND_TYPE_DATA_SYNC, COMMAND_ID_BLOOD_PRESSURE, buildBloodPressurePayload()),
+    });
+  }
+
+  return frames;
+}
+
+function printFrames(frames) {
+  for (const item of frames) {
+    const frameInfo = describeFrame(item.frame);
+    console.log(`[SIM] ${item.name} 帧头=${frameInfo.header} 长度=${frameInfo.length} 命令类型=${frameInfo.commandType} 命令ID=${frameInfo.commandId} CRC=${frameInfo.crc}`);
+    console.log(`[SIM] ${frameInfo.rawHex}`);
+  }
+}
+
+function main() {
+  const options = parseArgs(process.argv);
+
+  if (options.help) {
+    printHelp();
+    return;
+  }
+
+  const frames = prepareFrames(options.mode);
+
+  if (frames.length === 0) {
+    throw new Error(`不支持的模拟模式: ${options.mode}`);
+  }
+
+  if (options.printOnly) {
+    printFrames(frames);
+    return;
+  }
+
+  const socketOptions = {
+    host: options.host,
+    port: options.port,
+  };
+
+  if (options.localAddress) {
+    socketOptions.localAddress = options.localAddress;
+  }
+
+  const socket = net.createConnection(socketOptions);
+  let round = 0;
+  let index = 0;
+  let timer = null;
+
+  function stop(reason) {
+    if (timer) {
+      clearInterval(timer);
+      timer = null;
+    }
+
+    if (!socket.destroyed) {
+      socket.end();
+      socket.destroy();
+    }
+
+    if (reason) {
+      console.log(reason);
+    }
+  }
+
+  function sendNext() {
+    const item = frames[index];
+    const frameInfo = describeFrame(item.frame);
+    socket.write(item.frame);
+    console.log(`[SIM] 已发送 ${item.name} 轮次=${round + 1} 帧序号=${index + 1} 帧头=${frameInfo.header} 命令类型=${frameInfo.commandType} 命令ID=${frameInfo.commandId}`);
+    console.log(`[SIM] ${frameInfo.rawHex}`);
+
+    index += 1;
+
+    if (index >= frames.length) {
+      index = 0;
+      round += 1;
+
+      if (options.repeat > 0 && round >= options.repeat) {
+        stop(`[SIM] 已完成 轮数=${options.repeat}`);
+      }
+    }
+  }
+
+  socket.on('connect', () => {
+    console.log(`[SIM] 已连接 ${options.host}:${options.port}`);
+    sendNext();
+    timer = setInterval(sendNext, options.intervalMs);
+  });
+
+  socket.on('error', (error) => {
+    stop(`[SIM] 连接异常: ${error.message}`);
+    process.exitCode = 1;
+  });
+
+  socket.on('close', () => {
+    if (timer) {
+      stop('[SIM] 连接已关闭');
+    }
+  });
+
+  process.on('SIGINT', () => {
+    stop('[SIM] 收到 SIGINT,停止发送');
+    process.exit(0);
+  });
+
+  process.on('SIGTERM', () => {
+    stop('[SIM] 收到 SIGTERM,停止发送');
+    process.exit(0);
+  });
+}
+
+if (require.main === module) {
+  main();
+}
+
+module.exports = {
+  buildBloodPressurePayload,
+  buildFrame,
+  buildRealtimePayload,
+  describeFrame,
+  parseArgs,
+  prepareFrames,
+};
diff --git a/jh2028-new-service/test/app.test.js b/jh2028-new-service/test/app.test.js
new file mode 100644
index 0000000..d9d1930
--- /dev/null
+++ b/jh2028-new-service/test/app.test.js
@@ -0,0 +1,74 @@
+const assert = require('assert');
+const {
+  createOnMetricHandler,
+  getSendChannels,
+  getSendOptions,
+  validateConfig,
+} = require('../app');
+const { StateCache } = require('../state-cache');
+
+describe('app', () => {
+  it('normalizes send channels and options', () => {
+    assert.deepStrictEqual(getSendChannels({ send: { channels: ['mqtt', 'aliyun', 'mqtt'] } }), ['mqtt', 'aliyun']);
+    assert.deepStrictEqual(getSendOptions({}), {
+      includeDeviceIdField: true,
+      deviceIdField: 'n',
+    });
+  });
+
+  it('validates minimal config', () => {
+    assert.doesNotThrow(() => validateConfig({
+      send: { channels: ['mqtt'] },
+      tcp: { host: '0.0.0.0', port: 9000 },
+      mqtt: {
+        protocol: 'mqtt',
+        host: '127.0.0.1',
+        port: 1883,
+        defaultTopicPrefix: 'touxiji',
+      },
+      protocol: { alModelPath: './alModel.json' },
+      devices: [{ deviceId: 'JH-001', ip: '127.0.0.1' }],
+    }));
+  });
+
+  it('updates cache and publishes complete payload to enabled channels', async () => {
+    const calls = [];
+    const cache = new StateCache();
+    const handler = createOnMetricHandler({
+      logger: { info() {}, error() {} },
+      cache,
+      mqttService: {
+        publish: async (device, payload) => {
+          calls.push({ channel: 'mqtt', deviceId: device.deviceId, payload });
+        },
+      },
+      aliyunService: {
+        publish: async (device, payload) => {
+          calls.push({ channel: 'aliyun', deviceId: device.deviceId, payload });
+        },
+      },
+    });
+
+    await handler(
+      { deviceId: 'JH-001' },
+      { F: 36.8 },
+      { messageType: 'realtime' },
+    );
+    await handler(
+      { deviceId: 'JH-001' },
+      { N: 120, O: 80, P: 76, M: '2026-05-12 10:20:30' },
+      { messageType: 'blood-pressure' },
+    );
+
+    assert.strictEqual(calls.length, 4);
+    assert.deepStrictEqual(calls[2].payload, {
+      n: 'JH-001',
+      F: 36.8,
+      N: 120,
+      O: 80,
+      P: 76,
+      M: '2026-05-12 10:20:30',
+    });
+    assert.deepStrictEqual(calls[3].payload, calls[2].payload);
+  });
+});
diff --git a/jh2028-new-service/test/dashboard-service.test.js b/jh2028-new-service/test/dashboard-service.test.js
new file mode 100644
index 0000000..de3f874
--- /dev/null
+++ b/jh2028-new-service/test/dashboard-service.test.js
@@ -0,0 +1,46 @@
+const assert = require('assert');
+const { buildDashboardSnapshot } = require('../dashboard-service');
+const { StateCache } = require('../state-cache');
+
+describe('dashboard-service', () => {
+  it('builds device status snapshot from configured devices, cache, and TCP sessions', () => {
+    const cache = new StateCache();
+    const device = { deviceId: 'JH-001', ip: '127.0.0.1', name: '1号机' };
+
+    cache.update(device, { F: 36.8, N: 120 }, { messageType: 'realtime' });
+
+    const snapshot = buildDashboardSnapshot({
+      devices: [device, { deviceId: 'JH-002', ip: '192.168.1.2', name: '2号机' }],
+      cache,
+      tcpService: {
+        getConnectionSnapshot() {
+          return [{
+            deviceId: 'JH-001',
+            ip: '127.0.0.1',
+            connectedAt: Date.now(),
+            lastDataAt: Date.now(),
+            online: true,
+          }];
+        },
+      },
+      config: {
+        title: '测试大屏',
+        staleDataMs: 180000,
+      },
+    });
+
+    assert.strictEqual(snapshot.title, '测试大屏');
+    assert.strictEqual(snapshot.totals.devices, 2);
+    assert.strictEqual(snapshot.totals.online, 1);
+    assert.strictEqual(snapshot.totals.offline, 1);
+    assert.strictEqual(snapshot.devices[0].online, true);
+    assert.strictEqual(snapshot.devices[0].dataStatus, 'active');
+    assert.deepStrictEqual(snapshot.devices[0].payload, {
+      n: 'JH-001',
+      F: 36.8,
+      N: 120,
+    });
+    assert.strictEqual(snapshot.devices[1].online, false);
+    assert.strictEqual(snapshot.devices[1].dataStatus, 'waiting');
+  });
+});
diff --git a/jh2028-new-service/test/decoder.test.js b/jh2028-new-service/test/decoder.test.js
new file mode 100644
index 0000000..b03329b
--- /dev/null
+++ b/jh2028-new-service/test/decoder.test.js
@@ -0,0 +1,103 @@
+const assert = require('assert');
+const {
+  Jh2028Decoder,
+  crc8,
+} = require('../decoder');
+const {
+  buildBloodPressurePayload,
+  buildFrame,
+  buildRealtimePayload,
+} = require('../tcp-simulator');
+
+describe('Jh2028Decoder', () => {
+  it('parses realtime frame with little-endian fields and scale rules', () => {
+    const decoder = new Jh2028Decoder({ alModelPath: './alModel.json' });
+    const frame = buildFrame(1, 0x01, 0x00, buildRealtimePayload());
+    const [result] = decoder.push(frame);
+
+    assert.strictEqual(result.publish, true);
+    assert.strictEqual(result.messageType, 'realtime');
+    assert.deepStrictEqual(result.metric, {
+      AF: 36.5,
+      F: 36.8,
+      A: 2000,
+      C: 500,
+      B: 250,
+      K: 90,
+      L: 500,
+      D: 320,
+      H: -100,
+      o: 120,
+      J: -80,
+      U: 2048,
+      G: 138,
+      Na: 140,
+      HCO3: 25,
+      O2Sat: 98.7,
+      Hct: 36.5,
+      Hb: 13.2,
+      Tblood: 36.7,
+      ktv: 1.5,
+    });
+  });
+
+  it('parses blood pressure frame and ignores mean pressure and irregular pulse', () => {
+    const decoder = new Jh2028Decoder({ alModelPath: './alModel.json' });
+    const frame = buildFrame(2, 0x01, 0x01, buildBloodPressurePayload());
+    const [result] = decoder.push(frame);
+
+    assert.strictEqual(result.publish, true);
+    assert.strictEqual(result.messageType, 'blood-pressure');
+    assert.deepStrictEqual(result.metric, {
+      N: 120,
+      O: 80,
+      P: 76,
+    });
+    assert.deepStrictEqual(result.ignored, {
+      irregularPulse: 0,
+      meanPressure: 93,
+    });
+  });
+
+  it('skips blood pressure error code frames', () => {
+    const decoder = new Jh2028Decoder({ alModelPath: './alModel.json' });
+    const frame = buildFrame(3, 0x01, 0x01, Buffer.from([2, 0, 0, 0, 0]));
+    const [result] = decoder.push(frame);
+
+    assert.strictEqual(result.publish, false);
+    assert.strictEqual(result.ok, true);
+    assert.strictEqual(result.reason, 'blood-pressure-error-code');
+    assert.strictEqual(result.errorCode, 2);
+  });
+
+  it('rejects invalid CRC frames', () => {
+    const decoder = new Jh2028Decoder({ alModelPath: './alModel.json' });
+    const frame = Buffer.from(buildFrame(1, 0x01, 0x00, buildRealtimePayload()));
+    frame[frame.length - 1] ^= 0xFF;
+    const [result] = decoder.push(frame);
+
+    assert.strictEqual(result.publish, false);
+    assert.strictEqual(result.ok, false);
+    assert.strictEqual(result.reason, 'crc-invalid');
+  });
+
+  it('handles sticky packets and split packets', () => {
+    const decoder = new Jh2028Decoder({ alModelPath: './alModel.json' });
+    const realtimeFrame = buildFrame(1, 0x01, 0x00, buildRealtimePayload());
+    const bpFrame = buildFrame(2, 0x01, 0x01, buildBloodPressurePayload());
+    const firstPart = realtimeFrame.slice(0, 10);
+    const secondPart = Buffer.concat([realtimeFrame.slice(10), bpFrame]);
+
+    assert.deepStrictEqual(decoder.push(firstPart), []);
+    const results = decoder.push(secondPart);
+
+    assert.strictEqual(results.length, 2);
+    assert.strictEqual(results[0].messageType, 'realtime');
+    assert.strictEqual(results[1].messageType, 'blood-pressure');
+  });
+
+  it('calculates CRC8 from the PDF algorithm', () => {
+    const frameWithoutCrc = Buffer.from([0x55, 0xAA, 0x07, 0x01, 0x01, 0x7F]);
+    assert.strictEqual(crc8(frameWithoutCrc), 0x1B);
+  });
+});
diff --git a/jh2028-new-service/test/mqtt-service.test.js b/jh2028-new-service/test/mqtt-service.test.js
new file mode 100644
index 0000000..ca28c6c
--- /dev/null
+++ b/jh2028-new-service/test/mqtt-service.test.js
@@ -0,0 +1,16 @@
+const assert = require('assert');
+const { MqttService } = require('../mqtt-service');
+
+describe('MqttService', () => {
+  it('builds topic with default prefix', () => {
+    const service = new MqttService({ defaultTopicPrefix: 'touxiji' });
+
+    assert.strictEqual(service.buildTopic({ deviceId: 'JH-001', ip: '127.0.0.1' }), 'touxiji/JH-001');
+  });
+
+  it('builds topic with template', () => {
+    const service = new MqttService({ topicTemplate: 'site/{deviceId}/{ip}' });
+
+    assert.strictEqual(service.buildTopic({ deviceId: 'JH-001', ip: '127.0.0.1' }), 'site/JH-001/127.0.0.1');
+  });
+});
diff --git a/jh2028-new-service/test/state-cache.test.js b/jh2028-new-service/test/state-cache.test.js
new file mode 100644
index 0000000..018215e
--- /dev/null
+++ b/jh2028-new-service/test/state-cache.test.js
@@ -0,0 +1,53 @@
+const assert = require('assert');
+const { StateCache } = require('../state-cache');
+
+describe('StateCache', () => {
+  it('merges realtime and blood pressure metrics into one complete payload', () => {
+    const cache = new StateCache();
+    const device = { deviceId: 'JH-001', ip: '127.0.0.1' };
+
+    const realtimePayload = cache.update(device, {
+      F: 36.8,
+      A: 2000,
+    }, { messageType: 'realtime' });
+
+    assert.deepStrictEqual(realtimePayload, {
+      n: 'JH-001',
+      F: 36.8,
+      A: 2000,
+    });
+
+    const bloodPressurePayload = cache.update(device, {
+      N: 120,
+      O: 80,
+      P: 76,
+      M: '2026-05-12 10:20:30',
+    }, { messageType: 'blood-pressure' });
+
+    assert.deepStrictEqual(bloodPressurePayload, {
+      n: 'JH-001',
+      F: 36.8,
+      A: 2000,
+      N: 120,
+      O: 80,
+      P: 76,
+      M: '2026-05-12 10:20:30',
+    });
+  });
+
+  it('keeps devices isolated', () => {
+    const cache = new StateCache();
+
+    cache.update({ deviceId: 'JH-001' }, { F: 36.8 }, { messageType: 'realtime' });
+    cache.update({ deviceId: 'JH-002' }, { F: 37.1 }, { messageType: 'realtime' });
+
+    assert.deepStrictEqual(cache.getPayload('JH-001'), {
+      n: 'JH-001',
+      F: 36.8,
+    });
+    assert.deepStrictEqual(cache.getPayload('JH-002'), {
+      n: 'JH-002',
+      F: 37.1,
+    });
+  });
+});
diff --git a/jh2028-new-service/test/tcp-service.test.js b/jh2028-new-service/test/tcp-service.test.js
new file mode 100644
index 0000000..2165fdf
--- /dev/null
+++ b/jh2028-new-service/test/tcp-service.test.js
@@ -0,0 +1,49 @@
+const assert = require('assert');
+const { formatReceivedTimestamp, normalizeIp, TcpService } = require('../tcp-service');
+const { buildFrame, buildBloodPressurePayload } = require('../tcp-simulator');
+
+describe('tcp-service', () => {
+  it('normalizes IPv4 mapped addresses', () => {
+    assert.strictEqual(normalizeIp('::ffff:192.168.1.10'), '192.168.1.10');
+    assert.strictEqual(normalizeIp('127.0.0.1'), '127.0.0.1');
+  });
+
+  it('formats receive timestamp', () => {
+    assert.strictEqual(formatReceivedTimestamp(new Date('2026-05-12T10:20:30')), '2026-05-12 10:20:30');
+  });
+
+  it('adds M when blood pressure frame is handled', async () => {
+    let receivedMetric = null;
+    const service = new TcpService({
+      tcpConfig: { maxBufferBytes: 8192 },
+      devices: [],
+      alModelPath: './alModel.json',
+      logger: { info() {}, warn() {}, error() {}, debug() {} },
+      onMetric(_device, metric) {
+        receivedMetric = metric;
+      },
+    });
+    const fakeSocket = {};
+
+    service.sessions.set(fakeSocket, {
+      device: { deviceId: 'JH-001', ip: '127.0.0.1' },
+      decoder: {
+        push() {
+          return [{
+            ok: true,
+            publish: true,
+            messageType: 'blood-pressure',
+            metric: { N: 120, O: 80, P: 76 },
+          }];
+        },
+      },
+    });
+
+    service.handleData(fakeSocket, buildFrame(1, 0x01, 0x01, buildBloodPressurePayload()));
+
+    assert.strictEqual(receivedMetric.N, 120);
+    assert.strictEqual(receivedMetric.O, 80);
+    assert.strictEqual(receivedMetric.P, 76);
+    assert.match(receivedMetric.M, /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/);
+  });
+});
diff --git a/jh2028-new-service/verify-protocol.js b/jh2028-new-service/verify-protocol.js
new file mode 100644
index 0000000..cd3ce78
--- /dev/null
+++ b/jh2028-new-service/verify-protocol.js
@@ -0,0 +1,52 @@
+#!/usr/bin/env node
+
+const assert = require('assert');
+const { Jh2028Decoder } = require('./decoder');
+const { buildFrame, buildRealtimePayload, buildBloodPressurePayload } = require('./tcp-simulator');
+
+function main() {
+  const decoder = new Jh2028Decoder({ alModelPath: './alModel.json' });
+
+  const realtimeFrame = buildFrame(1, 0x01, 0x00, buildRealtimePayload());
+  const realtimeResult = decoder.push(realtimeFrame)[0];
+
+  assert.ok(realtimeResult);
+  assert.strictEqual(realtimeResult.publish, true);
+  assert.deepStrictEqual(realtimeResult.metric, {
+    AF: 36.5,
+    F: 36.8,
+    A: 2000,
+    C: 500,
+    B: 250,
+    K: 90,
+    L: 500,
+    D: 320,
+    H: -100,
+    o: 120,
+    J: -80,
+    U: 2048,
+    G: 138,
+    Na: 140,
+    HCO3: 25,
+    O2Sat: 98.7,
+    Hct: 36.5,
+    Hb: 13.2,
+    Tblood: 36.7,
+    ktv: 1.5,
+  });
+
+  const bpFrame = buildFrame(2, 0x01, 0x01, buildBloodPressurePayload());
+  const bpResult = decoder.push(bpFrame)[0];
+
+  assert.ok(bpResult);
+  assert.strictEqual(bpResult.publish, true);
+  assert.deepStrictEqual(bpResult.metric, {
+    N: 120,
+    O: 80,
+    P: 76,
+  });
+
+  console.log('协议验证通过');
+}
+
+main();
diff --git "a/jh2028-new-service/\345\256\236\346\226\275\351\203\250\347\275\262\346\226\207\346\241\243.md" "b/jh2028-new-service/\345\256\236\346\226\275\351\203\250\347\275\262\346\226\207\346\241\243.md"
new file mode 100644
index 0000000..807c36f
--- /dev/null
+++ "b/jh2028-new-service/\345\256\236\346\226\275\351\203\250\347\275\262\346\226\207\346\241\243.md"
@@ -0,0 +1,622 @@
+# JH2028 新协议 TCP 网关服务实施部署文档
+
+## 1. 文档目的
+
+本文档用于指导现场实施人员部署已经打包完成的 JH2028 新协议 TCP 网关服务。
+
+本项目部署后承担以下职责:
+
+- 作为 TCP 服务端接收设备数据盒子上报的数据。
+- 按设备数据盒子的来源 IP 匹配设备编号。
+- 解析 JH2028 2026-05-11 版 `55 AA` 新协议报文。
+- 将解析后的数据上报到 MQTT 和/或阿里云。
+- 提供设备中央监测大屏页面。
+
+说明:
+
+- 本服务是独立新项目,不依赖老项目运行。
+- 本服务不兼容旧版 `EE 55` 协议。
+- 现场部署优先使用 `dist` 目录下已经打包好的可执行文件,不需要在现场安装 Node.js 或执行 `npm install`。
+
+## 2. 部署包说明
+
+当前项目已经生成 Windows 和 Linux 两类部署包:
+
+```text
+dist/
+  win-x64/
+    jh2028-service.exe
+    配置说明.md
+    runtime/
+      config.json
+      alModel.json
+      dashboard/
+    logs/
+  linux-x64/
+    jh2028-service
+    配置说明.md
+    runtime/
+      config.json
+      alModel.json
+      dashboard/
+    logs/
+```
+
+目录说明:
+
+| 路径 | 说明 |
+| --- | --- |
+| `jh2028-service.exe` | Windows 服务程序 |
+| `jh2028-service` | Linux 服务程序 |
+| `runtime/config.json` | 主配置文件,现场主要修改此文件 |
+| `runtime/alModel.json` | 阿里云物模型字段文件,一般不修改 |
+| `runtime/dashboard/` | 大屏静态页面文件 |
+| `logs/` | 日志目录 |
+| `配置说明.md` | 配置字段说明 |
+
+## 3. 部署前准备
+
+部署前请确认以下信息:
+
+| 项目 | 说明 |
+| --- | --- |
+| 服务器系统 | Windows x64 或 Linux x64 |
+| 服务器固定 IP | 设备数据盒子需要连接该 IP |
+| TCP 服务端口 | 默认 `9000`,设备数据盒子连接此端口 |
+| 大屏访问端口 | 默认 `9100`,浏览器访问此端口 |
+| 设备数据盒子 IP | 每台设备数据盒子的来源 IP 需要写入配置 |
+| MQTT 地址 | 如启用 MQTT,需要确认地址、端口、账号、密码、Topic 前缀 |
+| 阿里云三元组接口 | 如启用阿里云,需要确认接口域名和路径 |
+| 防火墙策略 | 服务器需要放通 TCP 服务端口和大屏端口 |
+
+建议现场网络关系:
+
+```text
+设备数据盒子  --->  服务器IP:9000  --->  JH2028 TCP 网关服务
+浏览器        --->  服务器IP:9100  --->  设备中央监测大屏
+网关服务      --->  MQTT / 阿里云平台
+```
+
+## 4. Windows 部署
+
+### 4.1 上传部署包
+
+将 `dist/win-x64` 整个目录上传到服务器,例如:
+
+```text
+D:\jh2028-service\win-x64
+```
+
+不要只复制 `jh2028-service.exe`,必须同时保留 `runtime` 目录。
+
+### 4.2 修改配置
+
+编辑:
+
+```text
+D:\jh2028-service\win-x64\runtime\config.json
+```
+
+现场通常需要修改:
+
+```text
+tcp.port
+dashboard.port
+devices
+mqtt.host
+mqtt.port
+mqtt.username
+mqtt.password
+mqtt.defaultTopicPrefix
+aliyun.tupleApiBaseUrl
+aliyun.tupleApiPath
+```
+
+设备配置示例:
+
+```json
+{
+  "devices": [
+    {
+      "deviceId": "JH-001",
+      "ip": "192.168.1.10",
+      "name": "1号透析机"
+    },
+    {
+      "deviceId": "JH-002",
+      "ip": "192.168.1.11",
+      "name": "2号透析机"
+    }
+  ]
+}
+```
+
+注意:
+
+- `ip` 是设备数据盒子的来源 IP,不是服务器 IP。
+- 同一个 IP 不要配置给多台设备。
+- 当前服务按来源 IP 匹配设备,不从报文中解析设备编号。
+
+### 4.3 手动启动
+
+打开 PowerShell,执行:
+
+```powershell
+cd D:\jh2028-service\win-x64
+.\jh2028-service.exe --config .\runtime\config.json
+```
+
+看到类似日志表示启动成功:
+
+```text
+[APP] 配置加载完成 TCP=0.0.0.0:9000
+[TCP] 已开始监听 0.0.0.0:9000
+[DASHBOARD] 已开始监听 0.0.0.0:9100
+```
+
+### 4.4 配置 Windows 开机自启
+
+推荐使用 NSSM 或 Windows 任务计划程序托管进程。
+
+#### 方案一:NSSM
+
+安装服务:
+
+```powershell
+nssm install jh2028-service
+```
+
+在弹窗中填写:
+
+```text
+Path: D:\jh2028-service\win-x64\jh2028-service.exe
+Startup directory: D:\jh2028-service\win-x64
+Arguments: --config .\runtime\config.json
+```
+
+启动服务:
+
+```powershell
+nssm start jh2028-service
+```
+
+停止服务:
+
+```powershell
+nssm stop jh2028-service
+```
+
+删除服务:
+
+```powershell
+nssm remove jh2028-service confirm
+```
+
+#### 方案二:任务计划程序
+
+可创建一个“计算机启动时”触发的任务:
+
+```text
+程序: D:\jh2028-service\win-x64\jh2028-service.exe
+参数: --config .\runtime\config.json
+起始于: D:\jh2028-service\win-x64
+```
+
+### 4.5 Windows 防火墙放通
+
+以管理员 PowerShell 执行:
+
+```powershell
+New-NetFirewallRule -DisplayName "JH2028 TCP 9000" -Direction Inbound -Protocol TCP -LocalPort 9000 -Action Allow
+New-NetFirewallRule -DisplayName "JH2028 Dashboard 9100" -Direction Inbound -Protocol TCP -LocalPort 9100 -Action Allow
+```
+
+如现场修改了端口,请替换为实际端口。
+
+## 5. Linux 部署
+
+### 5.1 上传部署包
+
+将 `dist/linux-x64` 整个目录上传到服务器,例如:
+
+```text
+/opt/jh2028-service/linux-x64
+```
+
+不要只复制 `jh2028-service`,必须同时保留 `runtime` 目录。
+
+### 5.2 修改配置
+
+编辑:
+
+```bash
+vi /opt/jh2028-service/linux-x64/runtime/config.json
+```
+
+配置内容与 Windows 相同,重点确认:
+
+- `tcp.port`
+- `dashboard.port`
+- `devices`
+- `mqtt`
+- `aliyun`
+- `send.channels`
+
+### 5.3 手动启动
+
+执行:
+
+```bash
+cd /opt/jh2028-service/linux-x64
+chmod +x ./jh2028-service
+./jh2028-service --config ./runtime/config.json
+```
+
+看到类似日志表示启动成功:
+
+```text
+[APP] 配置加载完成 TCP=0.0.0.0:9000
+[TCP] 已开始监听 0.0.0.0:9000
+[DASHBOARD] 已开始监听 0.0.0.0:9100
+```
+
+### 5.4 配置 systemd 服务
+
+创建服务文件:
+
+```bash
+sudo vi /etc/systemd/system/jh2028-service.service
+```
+
+写入:
+
+```ini
+[Unit]
+Description=JH2028 TCP Gateway Service
+After=network-online.target
+Wants=network-online.target
+
+[Service]
+Type=simple
+WorkingDirectory=/opt/jh2028-service/linux-x64
+ExecStart=/opt/jh2028-service/linux-x64/jh2028-service --config ./runtime/config.json
+Restart=always
+RestartSec=5
+StandardOutput=journal
+StandardError=journal
+
+[Install]
+WantedBy=multi-user.target
+```
+
+加载并启动:
+
+```bash
+sudo systemctl daemon-reload
+sudo systemctl enable jh2028-service
+sudo systemctl start jh2028-service
+```
+
+查看状态:
+
+```bash
+sudo systemctl status jh2028-service
+```
+
+查看实时日志:
+
+```bash
+journalctl -u jh2028-service -f
+```
+
+停止服务:
+
+```bash
+sudo systemctl stop jh2028-service
+```
+
+重启服务:
+
+```bash
+sudo systemctl restart jh2028-service
+```
+
+### 5.5 Linux 防火墙放通
+
+如使用 firewalld:
+
+```bash
+sudo firewall-cmd --add-port=9000/tcp --permanent
+sudo firewall-cmd --add-port=9100/tcp --permanent
+sudo firewall-cmd --reload
+```
+
+如使用 ufw:
+
+```bash
+sudo ufw allow 9000/tcp
+sudo ufw allow 9100/tcp
+```
+
+如现场修改了端口,请替换为实际端口。
+
+## 6. 配置重点说明
+
+### 6.1 TCP 服务配置
+
+```json
+{
+  "tcp": {
+    "host": "0.0.0.0",
+    "port": 9000
+  }
+}
+```
+
+建议:
+
+- `host` 保持 `0.0.0.0`,表示监听服务器所有网卡。
+- `port` 与设备数据盒子连接端口保持一致。
+
+### 6.2 大屏配置
+
+```json
+{
+  "dashboard": {
+    "enabled": true,
+    "host": "0.0.0.0",
+    "port": 9100
+  }
+}
+```
+
+浏览器访问:
+
+```text
+本机访问:http://127.0.0.1:9100
+局域网访问:http://服务器真实IP:9100
+```
+
+不要在浏览器打开:
+
+```text
+http://0.0.0.0:9100
+```
+
+`0.0.0.0` 只表示服务监听地址,不是浏览器访问地址。
+
+### 6.3 上报通道配置
+
+```json
+{
+  "send": {
+    "channels": ["mqtt", "aliyun"]
+  }
+}
+```
+
+可选值:
+
+```text
+["mqtt"]           只上报 MQTT
+["aliyun"]         只上报阿里云
+["mqtt","aliyun"]  同时上报 MQTT 和阿里云
+```
+
+注意:上传失败只记录日志,不做补发。
+
+### 6.4 日志配置
+
+```json
+{
+  "logging": {
+    "dir": "./logs",
+    "level": "info",
+    "logRawHex": false
+  }
+}
+```
+
+说明:
+
+- 日志文件按日期生成,例如 `jh2028-service-20260519.log`。
+- 当启动命令使用 `--config ./runtime/config.json` 时,`./logs` 会按 `runtime` 目录计算。
+- 联调排查原始报文时,可临时将 `logRawHex` 改为 `true`,排查完成后建议改回 `false`。
+
+## 7. 部署验证
+
+### 7.1 检查进程
+
+Windows:
+
+```powershell
+Get-Process | Where-Object { $_.ProcessName -like "*jh2028*" }
+```
+
+Linux:
+
+```bash
+ps -ef | grep jh2028-service
+```
+
+### 7.2 检查端口监听
+
+Windows:
+
+```powershell
+netstat -ano | findstr ":9000"
+netstat -ano | findstr ":9100"
+```
+
+Linux:
+
+```bash
+ss -lntp | grep -E "9000|9100"
+```
+
+### 7.3 检查大屏
+
+浏览器打开:
+
+```text
+http://服务器真实IP:9100
+```
+
+验证点:
+
+- 页面能正常打开。
+- 设备列表显示正确。
+- 设备连接后状态变为在线。
+- 收到数据后指标刷新。
+
+### 7.4 检查设备接入
+
+设备数据盒子连接服务器后,日志应出现:
+
+```text
+[TCP] 设备已连接 设备=JH-001 IP=192.168.1.10
+[TCP] 收到原始数据 设备=JH-001 字节数=...
+[TCP] 解析到指标 设备=JH-001 类型=...
+```
+
+如果出现以下日志,说明设备 IP 未配置或配置不一致:
+
+```text
+[TCP] 未配置设备接入 IP=...
+```
+
+### 7.5 检查上报
+
+MQTT 上报成功时,日志中会出现 MQTT 发布相关记录。
+
+阿里云上报失败时,日志中会出现:
+
+```text
+[APP] 阿里云上报失败 设备=...
+```
+
+MQTT 上报失败时,日志中会出现:
+
+```text
+[APP] MQTT 上报失败 设备=...
+```
+
+## 8. 常见问题处理
+
+### 8.1 服务启动失败:未找到配置文件
+
+现象:
+
+```text
+未找到配置文件: ...
+```
+
+处理:
+
+- 确认启动命令中的 `--config` 路径正确。
+- 确认当前工作目录是部署包目录。
+- Windows 推荐在 `win-x64` 目录下执行启动命令。
+- Linux systemd 需要正确设置 `WorkingDirectory`。
+
+### 8.2 服务启动失败:端口被占用
+
+现象:
+
+```text
+EADDRINUSE
+```
+
+处理:
+
+- 检查 `9000` 或 `9100` 是否已被其他程序占用。
+- 停止占用端口的程序,或修改 `runtime/config.json` 中的端口。
+- 修改端口后同步调整防火墙和设备数据盒子连接配置。
+
+### 8.3 设备无法连接
+
+处理顺序:
+
+1. 确认设备数据盒子连接的是服务器真实 IP 和 `tcp.port`。
+2. 确认服务器防火墙已放通 TCP 端口。
+3. 确认设备数据盒子和服务器网络互通。
+4. 确认 `devices[].ip` 是设备数据盒子的来源 IP。
+5. 查看日志是否出现“未配置设备接入”。
+
+### 8.4 大屏打不开
+
+处理顺序:
+
+1. 确认服务已启动。
+2. 确认 `dashboard.enabled` 为 `true`。
+3. 确认 `dashboard.port` 未被占用。
+4. 确认防火墙放通大屏端口。
+5. 使用 `http://服务器真实IP:9100` 访问,不要使用 `http://0.0.0.0:9100`。
+
+### 8.5 收到数据但没有上报
+
+处理顺序:
+
+1. 确认 `send.channels` 已启用对应通道。
+2. 确认 MQTT 或阿里云配置正确。
+3. 查看日志中的 MQTT / 阿里云失败信息。
+4. 确认服务器可以访问 MQTT 或阿里云接口地址。
+5. 如需排查原始报文,临时开启 `logging.logRawHex=true`。
+
+## 9. 升级部署
+
+升级前建议备份:
+
+```text
+runtime/config.json
+runtime/alModel.json
+logs/
+```
+
+升级步骤:
+
+1. 停止当前服务。
+2. 备份当前部署目录。
+3. 上传新的 `win-x64` 或 `linux-x64` 部署包。
+4. 将旧版本 `runtime/config.json` 中的现场配置迁移到新版本。
+5. 如物模型有调整,再确认 `runtime/alModel.json`。
+6. 启动服务。
+7. 按“部署验证”章节完成验证。
+
+注意:
+
+- 不建议直接覆盖整个 `runtime` 目录,避免覆盖现场配置。
+- 如果新版本配置字段有变化,以新版本 `config.json` 为准,将现场值迁移进去。
+
+## 10. 回滚方案
+
+如升级后现场异常,可按以下步骤回滚:
+
+1. 停止新版本服务。
+2. 恢复升级前备份的部署目录。
+3. 启动旧版本服务。
+4. 检查端口监听、大屏访问、设备连接和上报日志。
+
+建议每次升级保留至少一个可用旧版本目录,例如:
+
+```text
+D:\jh2028-service\backup\win-x64-20260519
+/opt/jh2028-service/backup/linux-x64-20260519
+```
+
+## 11. 交付检查清单
+
+| 检查项 | 结果 |
+| --- | --- |
+| 部署包完整,包含可执行文件、`runtime`、`logs` |  |
+| `runtime/config.json` 已按现场设备和平台信息修改 |  |
+| TCP 端口已放通 |  |
+| 大屏端口已放通 |  |
+| 服务已配置开机自启 |  |
+| 服务进程运行正常 |  |
+| TCP 端口监听正常 |  |
+| 大屏可以通过服务器真实 IP 访问 |  |
+| 设备连接日志正常 |  |
+| 数据解析日志正常 |  |
+| MQTT 或阿里云上报验证正常 |  |
+| 已备份最终配置文件 |  |
+
diff --git "a/jh2028-new-service/\346\234\215\345\212\241\351\200\232\350\256\257\345\212\237\350\203\275\346\265\201\347\250\213\345\233\276.md" "b/jh2028-new-service/\346\234\215\345\212\241\351\200\232\350\256\257\345\212\237\350\203\275\346\265\201\347\250\213\345\233\276.md"
new file mode 100644
index 0000000..005af2f
--- /dev/null
+++ "b/jh2028-new-service/\346\234\215\345\212\241\351\200\232\350\256\257\345\212\237\350\203\275\346\265\201\347\250\213\345\233\276.md"
@@ -0,0 +1,191 @@
+# JH2028 新协议服务通讯功能流程图
+
+本文档描述 `jh2028-new-service` 的服务通讯主流程,覆盖 TCP 接收、设备识别、协议解码、本地缓存、大屏展示、MQTT 上报和阿里云上报。
+
+## 0. 通讯角色说明
+
+现场通讯里需要先区分两个角色:
+
+- **本程序是 TCP 服务端**:本程序监听固定 IP 和端口,等待设备数据盒子主动连接。
+- **设备数据盒子是 TCP 客户端**:盒子连接本程序后,持续发送设备透传数据。
+
+因此,从 TCP 连接方向看:
+
+```text
+设备数据盒子 TCP 客户端  --->  本程序 TCP 服务端
+```
+
+从数据流方向看:
+
+```text
+设备/透传盒  --->  本程序  --->  MQTT / 阿里云 / 监测大屏
+```
+
+本程序启动后监听 `config.tcp.host` 和 `config.tcp.port`。设备列表中维护每台设备盒子的 `ip`、`deviceId`、`name`,程序根据 TCP 来源 IP 匹配设备编号。
+
+## 1. 总体通讯流程
+
+```mermaid
+flowchart TD
+    A[JH2028 设备] --> B[串口透传盒子]
+    B -->|主动连接 TCP 服务端<br/>持续发送数据| C[本程序 TCP 服务端<br/>tcp-service.js]
+
+    C --> D{来源 IP 是否在<br/>config.devices 中}
+    D -->|否| D1[记录未知设备日志<br/>丢弃本包数据]
+    D -->|是| E[绑定设备编号 deviceId]
+
+    E --> F[接收二进制数据流]
+    F --> G[按 55 AA 帧头和 LEN 拆包]
+    G --> H{是否完整帧}
+    H -->|否| H1[继续缓存等待后续数据]
+    H -->|是| I[CRC8 校验]
+
+    I --> J{CRC 是否正确}
+    J -->|否| J1[记录校验失败日志<br/>丢弃该帧]
+    J -->|是| K[协议解码<br/>decoder.js]
+
+    K --> L{帧类型}
+    L -->|实时数据<br/>CMDTYPE=01 CMDID=00| M[解析治疗/温度/压力/血液指标]
+    L -->|血压数据<br/>CMDTYPE=01 CMDID=01| N[解析 N/O/P<br/>写入 M=接收时间]
+    L -->|血压错误码| N1[只记录日志<br/>不更新缓存/不上报]
+    L -->|未知命令| L1[记录不支持命令日志]
+
+    M --> O[更新设备本地缓存<br/>state-cache.js]
+    N --> O
+
+    O --> P[生成完整上报数据<br/>包含最后一次实时数据和血压数据]
+    P --> Q[刷新大屏快照<br/>dashboard-service.js]
+    Q --> Q1[浏览器大屏<br/>SSE 实时更新/轮询兜底]
+
+    P --> R{上报通道配置<br/>send.channels}
+    R -->|mqtt| S[MQTT 上报<br/>mqtt-service.js]
+    R -->|aliyun| T[阿里云上报<br/>aliyun-service.js]
+    R -->|mqtt + aliyun| S
+    R -->|mqtt + aliyun| T
+
+    S --> U{上报结果}
+    T --> U
+    U -->|成功| U1[记录成功日志]
+    U -->|失败| U2[记录失败日志<br/>不补发]
+```
+
+## 2. 服务启动流程
+
+```mermaid
+flowchart TD
+    A[启动 app.js] --> B[读取 config.json]
+    B --> C[校验 tcp/devices/protocol/send 配置]
+    C --> D[初始化日志 logger]
+    D --> E[加载物模型 alModel.json]
+    E --> F[初始化 StateCache]
+
+    F --> G{send.channels}
+    G -->|包含 mqtt| H[初始化 MQTT 服务]
+    G -->|包含 aliyun| I[初始化阿里云服务]
+    G --> J[初始化 DashboardService]
+
+    H --> K[启动 TCP 服务]
+    I --> K
+    J --> K
+
+    K --> L[监听 TCP 端口<br/>默认 9000]
+    J --> M[监听大屏端口<br/>默认 9100]
+
+    L --> N[等待设备盒子接入]
+    M --> O[等待浏览器访问]
+```
+
+## 3. 单包数据处理时序
+
+```mermaid
+sequenceDiagram
+    participant Device as JH2028设备/透传盒子
+    participant TCP as TCP服务
+    participant Decoder as 协议解码器
+    participant Cache as 本地状态缓存
+    participant UI as 监测大屏
+    participant MQTT as MQTT服务
+    participant Aliyun as 阿里云服务
+
+    Device->>TCP: 主动建立 TCP 连接
+    Device->>TCP: 持续发送 55 AA 新协议数据帧
+    TCP->>TCP: 根据来源 IP 匹配 deviceId
+    TCP->>TCP: 数据流拆包,得到完整帧
+    TCP->>Decoder: CRC8 校验并解码
+    Decoder-->>TCP: 返回 realtime 或 bloodPressure 数据
+    TCP->>Cache: 合并到设备最后一次完整缓存
+    Cache-->>TCP: 返回完整 payload
+    TCP->>UI: 推送最新设备状态和指标
+    TCP->>MQTT: 按原 Topic 规则立即上报完整 payload
+    TCP->>Aliyun: 获取/复用三元组并立即上报完整 payload
+    MQTT-->>TCP: 返回上报结果
+    Aliyun-->>TCP: 返回上报结果
+    TCP->>TCP: 成功/失败均记录日志,失败不补发
+```
+
+## 4. 设备连接状态流程
+
+```mermaid
+stateDiagram-v2
+    [*] --> 未连接
+    未连接 --> 已连接: 设备盒子主动连接
+    已连接 --> 等待数据: 已匹配设备 IP
+    等待数据 --> 数据正常: 收到并成功解码一帧
+    数据正常 --> 数据正常: 持续收到有效数据
+    数据正常 --> 数据超时: 超过 staleDataMs 未更新
+    数据超时 --> 数据正常: 再次收到有效数据
+    已连接 --> 离线: socket close/error/timeout
+    等待数据 --> 离线: socket close/error/timeout
+    数据正常 --> 离线: socket close/error/timeout
+    数据超时 --> 离线: socket close/error/timeout
+    离线 --> 已连接: 设备盒子重新连接
+```
+
+## 5. 阿里云上报子流程
+
+```mermaid
+flowchart TD
+    A[收到完整 payload] --> B{是否启用 aliyun 通道}
+    B -->|否| B1[跳过阿里云上报]
+    B -->|是| C{设备是否已有可用连接}
+
+    C -->|有| H[调用 postProps 上报属性]
+    C -->|没有| D[按 deviceId 请求三元组接口]
+
+    D --> E{三元组是否完整}
+    E -->|否| E1[记录失败日志<br/>本次不补发]
+    E -->|是| F[创建阿里云 IoT Device 实例]
+    F --> G[等待/复用连接]
+    G --> H
+
+    H --> I{postProps 是否成功}
+    I -->|成功| I1[记录上报成功]
+    I -->|失败| I2[记录失败原因<br/>不补发]
+```
+
+## 6. 大屏数据来源
+
+```mermaid
+flowchart LR
+    A[config.devices<br/>设备清单] --> D[大屏快照]
+    B[TCP 连接会话<br/>在线/离线/连接时间] --> D
+    C[StateCache<br/>最后一次完整 payload] --> D
+
+    D --> E[/api/snapshot]
+    D --> F[/events SSE]
+    E --> G[浏览器大屏]
+    F --> G
+```
+
+## 7. 当前关键规则
+
+- 本程序是 TCP 服务端,设备数据盒子作为 TCP 客户端主动连接本程序。
+- 设备身份按 `config.devices` 中配置的来源 IP 匹配,不从报文中解析设备编号。
+- 服务端不回复设备,设备会持续主动发送数据。
+- 收到实时数据或血压数据后,立即合并缓存并上传完整 payload。
+- 血压数据接收时写入 `M`,值为服务端接收时间。
+- 平均压、心率不齐、血压错误码不上传;血压错误码只记录日志。
+- MQTT Topic 沿用老项目规则。
+- 阿里云三元组获取规则沿用老项目,`deviceName = deviceId`。
+- 上报失败只记录日志,不做补发。
+- 大屏只读取内存状态,不影响 TCP 接收和上报链路。
diff --git "a/jh2028-new-service/\351\205\215\347\275\256\350\257\264\346\230\216.md" "b/jh2028-new-service/\351\205\215\347\275\256\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..7634ba3
--- /dev/null
+++ "b/jh2028-new-service/\351\205\215\347\275\256\350\257\264\346\230\216.md"
@@ -0,0 +1,303 @@
+# JH2028 新协议服务配置说明
+
+本文档用于说明打包产物中的 `runtime/config.json` 应该如何配置。
+
+## 1. 目录说明
+
+Windows 打包目录示例:
+
+```text
+win-x64/
+  jh2028-service.exe        服务程序
+  配置说明.md               本说明文件
+  runtime/
+    config.json             主配置文件,现场主要修改这个文件
+    alModel.json            阿里云物模型字段,不建议随意修改
+    dashboard/              设备中央监测大屏页面文件
+  logs/                     预留日志目录
+```
+
+Linux 打包目录示例:
+
+```text
+linux-x64/
+  jh2028-service            服务程序
+  配置说明.md               本说明文件
+  runtime/
+    config.json             主配置文件,现场主要修改这个文件
+    alModel.json            阿里云物模型字段,不建议随意修改
+    dashboard/              设备中央监测大屏页面文件
+  logs/                     预留日志目录
+```
+
+注意:如果启动命令指定 `--config ./runtime/config.json`,则 `config.json` 中相对路径会按 `runtime/` 目录计算。
+
+## 2. TCP 服务配置
+
+```json
+{
+  "tcp": {
+    "host": "0.0.0.0",
+    "port": 9000,
+    "maxConnections": 100,
+    "socketTimeoutMs": 120000,
+    "keepAlive": true,
+    "keepAliveDelayMs": 10000,
+    "noDelay": true,
+    "backlog": 128,
+    "maxBufferBytes": 8192
+  }
+}
+```
+
+字段说明:
+
+- `host`:服务监听地址。一般保持 `0.0.0.0`,表示监听所有网卡。
+- `port`:TCP 服务端口,设备数据盒子需要连接这个端口。
+- `maxConnections`:最大连接数。
+- `socketTimeoutMs`:连接长时间无数据后的超时时间,单位毫秒。
+- `keepAlive`:是否启用 TCP KeepAlive。
+- `maxBufferBytes`:单连接缓存区上限,防止异常数据撑爆内存。
+
+当前通讯角色:
+
+```text
+本程序 = TCP 服务端
+设备数据盒子 = TCP 客户端
+设备数据盒子主动连接 本程序IP:9000
+```
+
+## 3. 设备列表配置
+
+```json
+{
+  "devices": [
+    {
+      "deviceId": "JH-001",
+      "ip": "192.168.1.10",
+      "name": "1号透析机"
+    }
+  ]
+}
+```
+
+字段说明:
+
+- `deviceId`:设备编号,也是 MQTT Topic 和阿里云 `deviceName` 使用的设备标识。
+- `ip`:设备数据盒子的来源 IP。程序收到 TCP 连接后按这个 IP 匹配设备。
+- `name`:大屏展示名称。
+
+现场新增设备时,在 `devices` 数组中增加一项即可。
+
+注意:
+
+- 当前不从报文中解析设备编号。
+- 同一个 IP 不要配置给多台设备。
+- 设备盒子 IP 变化后,需要同步修改这里的 `ip`。
+
+## 4. 大屏配置
+
+```json
+{
+  "dashboard": {
+    "enabled": true,
+    "host": "0.0.0.0",
+    "port": 9100,
+    "title": "JH2028 设备中央监测大屏",
+    "staleDataMs": 180000
+  }
+}
+```
+
+字段说明:
+
+- `enabled`:是否启用大屏。
+- `host`:大屏监听地址,一般保持 `0.0.0.0`。
+- `port`:大屏访问端口。
+- `title`:页面标题。
+- `staleDataMs`:超过多久没收到数据后,大屏显示数据超时。
+
+浏览器访问地址:
+
+```text
+本机访问:http://127.0.0.1:9100
+局域网访问:http://服务器真实IP:9100
+```
+
+不要在浏览器里打开:
+
+```text
+http://0.0.0.0:9100
+```
+
+`0.0.0.0` 只表示服务监听所有网卡,不是浏览器访问地址。
+
+## 5. 上报通道配置
+
+```json
+{
+  "send": {
+    "channels": ["mqtt", "aliyun"],
+    "includeDeviceIdField": true,
+    "deviceIdField": "n"
+  }
+}
+```
+
+字段说明:
+
+- `channels`:启用哪些上报通道。
+- `includeDeviceIdField`:上报数据中是否包含设备编号字段。
+- `deviceIdField`:设备编号字段名,当前沿用老项目字段 `n`。
+
+可选组合:
+
+```text
+["mqtt"]           只上报 MQTT
+["aliyun"]         只上报阿里云
+["mqtt","aliyun"]  同时上报 MQTT 和阿里云
+```
+
+上传失败只记录日志,不做补发。
+
+## 6. MQTT 配置
+
+```json
+{
+  "mqtt": {
+    "protocol": "mqtt",
+    "host": "mqtt.ihemodialysis.com",
+    "port": 62283,
+    "username": "data",
+    "password": "data#2018",
+    "defaultTopicPrefix": "touxiji"
+  }
+}
+```
+
+字段说明:
+
+- `protocol`:通常为 `mqtt`。
+- `host`:MQTT 服务器地址。
+- `port`:MQTT 端口。
+- `username` / `password`:MQTT 账号密码。
+- `defaultTopicPrefix`:默认 Topic 前缀。
+
+当前 Topic 规则沿用老项目:
+
+```text
+defaultTopicPrefix/deviceId
+```
+
+例如:
+
+```text
+touxiji/JH-001
+```
+
+## 7. 阿里云配置
+
+```json
+{
+  "aliyun": {
+    "enabled": true,
+    "tupleApiBaseUrl": "https://things.icoldchain.cn",
+    "tupleApiPath": "/device/info/getAliyunDeviceSecret",
+    "autoRegister": true,
+    "registerRetryMs": 60000,
+    "connectTimeoutMs": 15000
+  }
+}
+```
+
+字段说明:
+
+- `tupleApiBaseUrl`:获取阿里云三元组接口域名。
+- `tupleApiPath`:获取阿里云三元组接口路径。
+- `autoRegister`:是否允许后端自动注册设备。
+- `registerRetryMs`:获取三元组失败后的重试间隔。
+- `connectTimeoutMs`:阿里云连接超时时间。
+
+阿里云设备名规则:
+
+```text
+deviceName = deviceId
+```
+
+## 8. 日志配置
+
+```json
+{
+  "logging": {
+    "enabled": true,
+    "console": true,
+    "dir": "./logs",
+    "filePrefix": "jh2028-service",
+    "level": "info",
+    "logRawHex": false
+  }
+}
+```
+
+字段说明:
+
+- `enabled`:是否启用日志。
+- `console`:是否输出到控制台。
+- `dir`:日志目录。相对路径会按配置文件所在目录计算。
+- `filePrefix`:日志文件名前缀。
+- `level`:日志级别,常用 `info`。
+- `logRawHex`:是否记录原始十六进制报文。联调排查时可临时改为 `true`。
+
+## 9. 协议配置
+
+```json
+{
+  "protocol": {
+    "name": "jh2028-20260511",
+    "alModelPath": "./alModel.json"
+  }
+}
+```
+
+字段说明:
+
+- `name`:协议名称,仅用于标识。
+- `alModelPath`:物模型字段文件路径。
+
+一般不需要修改。
+
+## 10. 启动命令
+
+Windows:
+
+```powershell
+cd dist\win-x64
+.\jh2028-service.exe --config .\runtime\config.json
+```
+
+Linux:
+
+```bash
+cd dist/linux-x64
+chmod +x ./jh2028-service
+./jh2028-service --config ./runtime/config.json
+```
+
+## 11. 现场最常修改项
+
+通常只需要改这些字段:
+
+```text
+tcp.port
+dashboard.port
+devices
+mqtt.host
+mqtt.port
+mqtt.username
+mqtt.password
+mqtt.defaultTopicPrefix
+aliyun.tupleApiBaseUrl
+aliyun.tupleApiPath
+```
+
+其余字段建议保持默认,除非现场网络或平台规则有明确变化。
diff --git a/jhm2028-service.js b/jhm2028-service.js
index 916225e..4db08c3 100644
--- a/jhm2028-service.js
+++ b/jhm2028-service.js
@@ -1,19 +1,19 @@
 #!/usr/bin/env node
 
 /**
- * JHM-2028 serial communication service.
+ * JHM-2028 串口调试服务。
  *
  * 当前项目正式运行入口是 `app.js`,通过 `tcp-service.js` 接收透传盒子的 TCP 数据。
  * 本文件保留为“串口直连调试参考脚本”,用于协议排查、串口联调和模拟数据验证。
  * 它不参与当前 TCP + MQTT 的生产主流程。
  *
- * Install:
+ * 安装依赖:
  *   npm install serialport
  *
- * Serial mode:
+ * 串口模式:
  *   node jhm2028-service.js --port COM3 --baudRate 4800
  *
- * Simulation mode:
+ * 模拟模式:
  *   node jhm2028-service.js --simulate "EE 55 01 00 00 01 72 74"
  */
 
@@ -80,25 +80,25 @@
 }
 
 function printHelp() {
-  console.log(`JHM-2028 Node.js serial communication service
+  console.log(`JHM-2028 Node.js 串口调试服务
 
-Usage:
+用法:
   node jhm2028-service.js --port COM3 [options]
   node jhm2028-service.js --simulate "EE 55 01 00 00 01 72 74"
 
-Options:
-  --port <name>         Serial port name, e.g. COM3
-  --baudRate <number>   Baud rate, default 4800
-  --dataBits <number>   Data bits, default 8
-  --stopBits <number>   Stop bits, default 1
-  --parity <value>      none | even | odd, default none
-  --raw                 Print raw incoming bytes in hex
-  --no-timestamp        Omit timestamp in JSON output
-  --simulate <hex>      Parse one or more hex bytes without opening a serial port
-  --help, -h            Show this help
+参数:
+  --port <name>         串口名称,例如 COM3
+  --baudRate <number>   波特率,默认 4800
+  --dataBits <number>   数据位,默认 8
+  --stopBits <number>   停止位,默认 1
+  --parity <value>      校验位:none | even | odd,默认 none
+  --raw                 以十六进制打印原始输入
+  --no-timestamp        JSON 输出中不带时间戳
+  --simulate <hex>      不打开串口,直接解析一段十六进制字节
+  --help, -h            显示帮助
 
-Protocol:
-  Frame = EE 55 NN XX1 XX2 XX3 XX4 CY
+协议格式:
+  帧格式 = EE 55 NN XX1 XX2 XX3 XX4 CY
   CY = (NN + XX1 + XX2 + XX3 + XX4) & 0xFF
 `);
 }
@@ -132,7 +132,7 @@
         raw,
         value: raw / 10,
         unit: '°C',
-        note: 'PDF example shows 0x00000172 => 370 => 37.0°C',
+        note: '协议文档示例:0x00000172 => 370 => 37.0°C',
       };
     }
 
@@ -141,7 +141,7 @@
       return {
         name: 'value_0x03',
         raw,
-        note: 'PDF indicates XX1<<24 + XX2<<16 + XX3<<8 + XX4',
+        note: '协议文档说明:数值为 XX1<<24 + XX2<<16 + XX3<<8 + XX4',
       };
     }
 
@@ -152,7 +152,7 @@
         name: 'dual_uint16_0x04',
         value1,
         value2,
-        note: 'PDF indicates first two bytes and last two bytes are separate values',
+        note: '协议文档说明:前两字节和后两字节分别表示独立数值',
       };
     }
 
@@ -172,7 +172,7 @@
         name: 'stateful_value_0x09',
         mode,
         raw,
-        note: 'PDF indicates XX1 is a flag (0x00/0x01) and XX2-XX4 compose the value',
+        note: '协议文档说明:XX1 为符号标志位(0x00/0x01),XX2-XX4 组成数值',
       };
     }
 
@@ -193,7 +193,7 @@
         flag,
         raw,
         value: raw / 10,
-        note: 'PDF indicates XX1 is 0x00 and XX2-XX4 value should be divided by 10',
+        note: '协议文档说明:XX1 固定为 0x00,XX2-XX4 组成的数值需除以 10',
       };
     }
 
@@ -202,7 +202,7 @@
         name: `command_${toHex(command)}`,
         raw: uint32BE(payload),
         payload: Array.from(payload),
-        note: 'Meaning not fully legible in source PDF; raw data preserved',
+        note: '原始协议文档语义不够清晰,先保留原始数据',
       };
   }
 }
@@ -238,7 +238,7 @@
   if (valid) {
     parsed.decoded = decodePayload(command, payload);
   } else {
-    parsed.error = 'Checksum mismatch';
+    parsed.error = '校验和不匹配';
   }
 
   return parsed;
@@ -249,12 +249,12 @@
   const hexPairs = normalized.split(/\s+/).filter(Boolean);
 
   if (hexPairs.length === 0) {
-    throw new Error('No hex bytes found in simulate input');
+    throw new Error('模拟输入中未找到十六进制字节');
   }
 
   const values = hexPairs.map((pair) => {
     if (pair.length > 2) {
-      throw new Error(`Invalid byte: ${pair}`);
+      throw new Error(`非法字节: ${pair}`);
     }
 
     return Number.parseInt(pair, 16);
@@ -317,23 +317,23 @@
 
 function validateOptions(options) {
   if (!options.simulate && !options.port) {
-    throw new Error('Missing serial port. Example: node jhm2028-service.js --port COM3');
+    throw new Error('缺少串口参数,例如:node jhm2028-service.js --port COM3');
   }
 
   if (![5, 6, 7, 8].includes(options.dataBits)) {
-    throw new Error('dataBits must be one of 5, 6, 7, 8');
+    throw new Error('dataBits 只能是 5、6、7、8 之一');
   }
 
   if (![1, 1.5, 2].includes(options.stopBits)) {
-    throw new Error('stopBits must be one of 1, 1.5, 2');
+    throw new Error('stopBits 只能是 1、1.5、2 之一');
   }
 
   if (!['none', 'even', 'odd', 'mark', 'space'].includes(options.parity)) {
-    throw new Error('parity must be one of none, even, odd, mark, space');
+    throw new Error('parity 只能是 none、even、odd、mark、space 之一');
   }
 
   if (!Number.isInteger(options.baudRate) || options.baudRate <= 0) {
-    throw new Error('baudRate must be a positive integer');
+    throw new Error('baudRate 必须是正整数');
   }
 }
 
@@ -342,17 +342,17 @@
 }
 
 function printStartup(options) {
-  console.log('JHM-2028 serial service started');
-  console.log(`Port: ${options.port}`);
-  console.log(`Config: ${options.baudRate} baud, ${options.dataBits} data bits, ${options.stopBits} stop bit(s), parity=${options.parity}`);
-  console.log(`Frame format: ${toHex(HEADER_1)} ${toHex(HEADER_2)} NN XX1 XX2 XX3 XX4 CY`);
-  console.log('Waiting for data...');
+  console.log('JHM-2028 串口调试服务已启动');
+  console.log(`串口: ${options.port}`);
+  console.log(`配置: ${options.baudRate} 波特率,${options.dataBits} 数据位,${options.stopBits} 停止位,parity=${options.parity}`);
+  console.log(`帧格式: ${toHex(HEADER_1)} ${toHex(HEADER_2)} NN XX1 XX2 XX3 XX4 CY`);
+  console.log('正在等待数据...');
 }
 
 function runSimulation(options) {
   const parser = new Jhm2028Parser({
     includeTimestamp: options.timestamp,
-    onRawChunk: options.raw ? (chunk) => console.log(`[raw] ${bytesToHex(chunk)}`) : null,
+    onRawChunk: options.raw ? (chunk) => console.log(`[原始数据] ${bytesToHex(chunk)}`) : null,
     onFrame: printJson,
   });
 
@@ -360,7 +360,7 @@
   parser.push(buffer);
 
   if (buffer.length % FRAME_LENGTH !== 0) {
-    console.error(`Warning: simulate input length is ${buffer.length} bytes, not a multiple of ${FRAME_LENGTH}`);
+    console.error(`警告:模拟输入长度为 ${buffer.length} 字节,不是 ${FRAME_LENGTH} 的整数倍`);
   }
 }
 
@@ -370,10 +370,10 @@
     return;
   }
 
-  console.log('\nClosing serial port...');
+  console.log('\n正在关闭串口...');
   port.close((error) => {
     if (error) {
-      console.error('Failed to close serial port:', error.message);
+      console.error('关闭串口失败:', error.message);
       process.exit(1);
       return;
     }
@@ -395,7 +395,7 @@
 
   const parser = new Jhm2028Parser({
     includeTimestamp: options.timestamp,
-    onRawChunk: options.raw ? (chunk) => console.log(`[raw] ${bytesToHex(chunk)}`) : null,
+    onRawChunk: options.raw ? (chunk) => console.log(`[原始数据] ${bytesToHex(chunk)}`) : null,
     onFrame: printJson,
   });
 
@@ -408,11 +408,11 @@
   });
 
   port.on('error', (error) => {
-    console.error('Serial port error:', error.message);
+    console.error('串口异常:', error.message);
   });
 
   port.on('close', () => {
-    console.log('Serial port closed');
+    console.log('串口已关闭');
   });
 
   process.on('SIGINT', () => {
@@ -425,7 +425,7 @@
 
   port.open((error) => {
     if (error) {
-      console.error('Failed to open serial port:', error.message);
+      console.error('打开串口失败:', error.message);
       process.exit(1);
     }
   });
@@ -444,7 +444,7 @@
     runSerialService(options);
   } catch (error) {
     console.error(error.message);
-    console.error('Use --help to see available options.');
+    console.error('可使用 --help 查看可用参数。');
     process.exit(1);
   }
 }
diff --git a/metric-aggregator.js b/metric-aggregator.js
index a238075..8d607de 100644
--- a/metric-aggregator.js
+++ b/metric-aggregator.js
@@ -12,7 +12,7 @@
     this.timer = null;
     this.started = false;
     this.flushing = false;
-    this.flushQueued = false;
+    this.queuedFlushOptions = null;
   }
 
   start() {
@@ -47,8 +47,15 @@
 
     const entry = this.getOrCreateEntry(device);
     entry.device = device;
+    const now = Date.now();
+
+    // 首次进入脏状态时记录时间,便于控制“缓存满一轮再发送”。
+    if (!entry.dirty) {
+      entry.dirtySinceAt = now;
+    }
+
     entry.dirty = true;
-    entry.lastUpdateAt = Date.now();
+    entry.lastUpdateAt = now;
 
     if (this.includeDeviceIdField) {
       entry.payload[this.deviceIdField] = device.deviceId;
@@ -69,6 +76,7 @@
         device,
         payload: {},
         dirty: false,
+        dirtySinceAt: 0,
         firstSeenAt: Date.now(),
         lastUpdateAt: 0,
         lastFlushAt: 0,
@@ -98,7 +106,7 @@
 
     this.timer = setTimeout(() => {
       this.flush({ reason: 'timer' }).catch((error) => {
-        this.logger.error(`[APP] Aggregator flush failed: ${error.message}`);
+        this.logger.error(`[APP] 聚合器刷新失败: ${error.message}`);
       });
     }, this.computeDelayMs());
 
@@ -107,12 +115,36 @@
     }
   }
 
+  mergeQueuedFlushOptions(options = {}) {
+    const nextOptions = {
+      reason: options.reason || 'manual',
+      deviceId: options.deviceId || '',
+    };
+
+    if (!this.queuedFlushOptions) {
+      this.queuedFlushOptions = nextOptions;
+      return;
+    }
+
+    const currentOptions = this.queuedFlushOptions;
+    const currentIsTimer = currentOptions.reason === 'timer' || currentOptions.reason === 'queued';
+    const nextIsTimer = nextOptions.reason === 'timer' || nextOptions.reason === 'queued';
+
+    if (currentIsTimer && !nextIsTimer) {
+      currentOptions.reason = nextOptions.reason;
+    }
+
+    if (!currentOptions.deviceId || !nextOptions.deviceId || currentOptions.deviceId !== nextOptions.deviceId) {
+      currentOptions.deviceId = '';
+    }
+  }
+
   async flush(options = {}) {
     const reason = options.reason || 'manual';
     const deviceId = options.deviceId || '';
 
     if (this.flushing) {
-      this.flushQueued = true;
+      this.mergeQueuedFlushOptions({ reason, deviceId });
       return false;
     }
 
@@ -133,10 +165,20 @@
           return false;
         }
 
+        // 定时触发时要求数据至少缓存满一个周期,避免刚收到就被单独发出。
+        if ((reason === 'timer' || reason === 'queued') && entry.dirtySinceAt > 0) {
+          const dirtyAgeMs = Date.now() - entry.dirtySinceAt;
+
+          if (dirtyAgeMs < this.flushIntervalMs) {
+            return false;
+          }
+        }
+
         return true;
       });
 
       for (const entry of entries) {
+        const flushUpdateAt = entry.lastUpdateAt;
         const payload = {
           ...entry.payload,
         };
@@ -157,10 +199,14 @@
             continue;
           }
 
-          entry.dirty = false;
+          if (entry.lastUpdateAt === flushUpdateAt) {
+            entry.dirty = false;
+            entry.dirtySinceAt = 0;
+          }
+
           entry.lastFlushAt = Date.now();
         } catch (error) {
-          this.logger.error(`[APP] Aggregator device flush failed deviceId=${entry.device.deviceId}: ${error.message}`);
+          this.logger.error(`[APP] 聚合器设备刷新失败 deviceId=${entry.device.deviceId}: ${error.message}`);
         }
       }
 
@@ -172,9 +218,10 @@
         this.scheduleNextFlush();
       }
 
-      if (this.flushQueued) {
-        this.flushQueued = false;
-        await this.flush({ reason: 'queued' });
+      if (this.queuedFlushOptions) {
+        const queuedOptions = this.queuedFlushOptions;
+        this.queuedFlushOptions = null;
+        await this.flush(queuedOptions);
       }
     }
   }
diff --git a/package.json b/package.json
index dd78396..5d31345 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,7 @@
   "scripts": {
     "start": "node app.js",
     "start:serial": "node jhm2028-service.js",
-    "start:simulator": "node tcp-simulator.js",
+    "start:simulator": "node tcp-simulator.js --with-bp",
     "start:simulator:bp": "node tcp-simulator.js --bp --host 127.0.0.1 --port 9000 --repeat 1",
     "clean": "node scripts/clean-build.js",
     "build": "node scripts/build-executables.js",
diff --git a/runtime-paths.js b/runtime-paths.js
index 34d9ef9..4cfff91 100644
--- a/runtime-paths.js
+++ b/runtime-paths.js
@@ -1,6 +1,7 @@
 const fs = require('fs');
 const path = require('path');
 
+// 按候选路径顺序寻找默认配置文件,兼容源码运行和打包运行两种场景。
 function fileExists(filePath) {
   try {
     return fs.statSync(filePath).isFile();
diff --git a/tcp-service.js b/tcp-service.js
index 1204a52..327ac6c 100644
--- a/tcp-service.js
+++ b/tcp-service.js
@@ -47,7 +47,7 @@
 
       map.set(normalizeIp(device.ip), {
         ...device,
-        name: device.name || device['备注'] || device.deviceId,
+        name: device.name || device.备注 || device['澶囨敞'] || device.deviceId,
       });
     }
 
@@ -66,7 +66,7 @@
     this.server.maxConnections = this.tcpConfig.maxConnections || 100;
 
     this.server.on('error', (error) => {
-      this.logger.error(`[TCP] 服务错误: ${error.message}`);
+      this.logger.error(`[TCP] 服务异常: ${error.message}`);
     });
 
     await new Promise((resolve, reject) => {
@@ -79,7 +79,7 @@
       });
     });
 
-    this.logger.info(`[TCP] 已监听 ${this.tcpConfig.host}:${this.tcpConfig.port} devices=${this.deviceMap.size} maxConnections=${this.server.maxConnections}`);
+    this.logger.info(`[TCP] 已开始监听 ${this.tcpConfig.host}:${this.tcpConfig.port} devices=${this.deviceMap.size} maxConnections=${this.server.maxConnections}`);
   }
 
   handleConnection(socket) {
@@ -143,7 +143,7 @@
     const results = session.decoder.push(chunk);
 
     if (results.length === 0) {
-      this.logger.warn(`[TCP] 当前数据片段未形成完整报文 deviceId=${session.device.deviceId} bytes=${chunk.length}`);
+      this.logger.warn(`[TCP] 当前数据片段尚未组成完整报文 deviceId=${session.device.deviceId} bytes=${chunk.length}`);
     }
 
     for (const result of results) {
diff --git a/tcp-simulator.js b/tcp-simulator.js
index 2d9d641..e9ebb1e 100644
--- a/tcp-simulator.js
+++ b/tcp-simulator.js
@@ -21,6 +21,7 @@
   },
 };
 
+// 模拟器支持三种方式:文件回放、单独血压、文件加血压混发。
 function parseArgs(argv) {
   const options = {
     host: '127.0.0.1',
@@ -31,6 +32,7 @@
     repeat: 0,
     localAddress: '',
     mode: 'file',
+    includeBloodPressure: false,
     bpSystolic: 120,
     bpDiastolic: 80,
     bpPulse: 89,
@@ -66,6 +68,8 @@
     } else if (arg === '--mode' && value) {
       options.mode = value.trim().toLowerCase();
       index += 1;
+    } else if (arg === '--with-blood-pressure' || arg === '--with-bp') {
+      options.includeBloodPressure = true;
     } else if (arg === '--blood-pressure' || arg === '--bp') {
       options.mode = 'blood-pressure';
     } else if (arg === '--bp-systolic' && value) {
@@ -91,30 +95,33 @@
 }
 
 function printHelp() {
-  console.log(`JHM TCP simulator
+  console.log(`JHM TCP 模拟客户端
 
-Usage:
+用法:
   node tcp-simulator.js --host 127.0.0.1 --port 9000
   node tcp-simulator.js --scenario jihua20260414 --host 127.0.0.1 --port 9000 --repeat 1
+  node tcp-simulator.js --host 127.0.0.1 --port 9000 --with-bp
   node tcp-simulator.js --bp --host 127.0.0.1 --port 9000 --bp-systolic 120 --bp-diastolic 80 --bp-pulse 89
   node tcp-simulator.js --bp --host 127.0.0.1 --port 9000 --bp-time "2026-04-15 09:30"
 
-Options:
-  --host <ip>             target TCP server, default 127.0.0.1
-  --port <number>         target TCP port, default 9000
-  --interval <ms>         interval between frames, default 1000ms
-  --frames <path>         hex frame file, default ./数据模拟.md
-  --scenario <name>       built-in scenario: ${Object.keys(BUILTIN_SCENARIOS).join(', ')}
-  --repeat <number>       send rounds, 0 means infinite loop, default 0
-  --local-address <ip>    bind local IP to simulate source device IP
+参数:
+  --host <ip>             目标 TCP 服务地址,默认 127.0.0.1
+  --port <number>         目标 TCP 服务端口,默认 9000
+  --interval <ms>         报文发送间隔,默认 1000ms
+  --frames <path>         十六进制报文文件,默认 ./数据模拟.md
+  --scenario <name>       内置场景:${Object.keys(BUILTIN_SCENARIOS).join(', ')}
+  --repeat <number>       发送轮数,0 表示无限循环,默认 0
+  --local-address <ip>    绑定本地 IP,用于模拟设备来源 IP
   --mode <file|blood-pressure>
-  --blood-pressure, --bp  shorthand for --mode blood-pressure
-  --bp-systolic <n>       blood pressure systolic value, default 120
-  --bp-diastolic <n>      blood pressure diastolic value, default 80
-  --bp-pulse <n>          blood pressure pulse value, default 89
-  --bp-time "<text>"      custom time, format YYYY-MM-DD HH:mm, default current local time
-  --bp-no-time            send zeroed time bytes
-  --help, -h              show help
+  --with-blood-pressure, --with-bp
+                          在每轮文件或场景回放后追加 1 条血压报文
+  --blood-pressure, --bp  等同于 --mode blood-pressure
+  --bp-systolic <n>       收缩压,默认 120
+  --bp-diastolic <n>      舒张压,默认 80
+  --bp-pulse <n>          脉搏,默认 89
+  --bp-time "<text>"      自定义时间,格式 YYYY-MM-DD HH:mm,默认当前本地时间
+  --bp-no-time            发送全 0 时间字节
+  --help, -h              显示帮助
 `);
 }
 
@@ -126,7 +133,7 @@
   const scenarioConfig = BUILTIN_SCENARIOS[options.scenario];
 
   if (!scenarioConfig) {
-    throw new Error(`unknown scenario: ${options.scenario}`);
+    throw new Error(`未知场景: ${options.scenario}`);
   }
 
   return {
@@ -137,45 +144,49 @@
   };
 }
 
+function validateBloodPressureOptions(options) {
+  for (const [name, value] of [
+    ['bp-systolic', options.bpSystolic],
+    ['bp-diastolic', options.bpDiastolic],
+    ['bp-pulse', options.bpPulse],
+  ]) {
+    if (!Number.isInteger(value) || value < 0 || value > 0xFFFF) {
+      throw new Error(`${name} 必须是 0 到 65535 之间的整数`);
+    }
+  }
+
+  if (options.bpIncludeTime && options.bpTime) {
+    parseBloodPressureTimeText(options.bpTime);
+  }
+}
+
 function validateOptions(options) {
   if (!options.host) {
-    throw new Error('host is required');
+    throw new Error('必须指定 host');
   }
 
   if (!Number.isInteger(options.port) || options.port <= 0) {
-    throw new Error('port must be a positive integer');
+    throw new Error('port 必须是正整数');
   }
 
   if (!Number.isInteger(options.intervalMs) || options.intervalMs <= 0) {
-    throw new Error('interval must be a positive integer in ms');
+    throw new Error('interval 必须是大于 0 的毫秒整数');
   }
 
   if (!Number.isInteger(options.repeat) || options.repeat < 0) {
-    throw new Error('repeat must be an integer >= 0');
+    throw new Error('repeat 必须是大于等于 0 的整数');
   }
 
   if (!['file', 'blood-pressure'].includes(options.mode)) {
-    throw new Error(`unsupported mode: ${options.mode}`);
+    throw new Error(`不支持的模式: ${options.mode}`);
   }
 
   if (options.mode === 'file' && !fs.existsSync(options.framesFile)) {
-    throw new Error(`frames file not found: ${options.framesFile}`);
+    throw new Error(`未找到报文文件: ${options.framesFile}`);
   }
 
-  if (options.mode === 'blood-pressure') {
-    for (const [name, value] of [
-      ['bp-systolic', options.bpSystolic],
-      ['bp-diastolic', options.bpDiastolic],
-      ['bp-pulse', options.bpPulse],
-    ]) {
-      if (!Number.isInteger(value) || value < 0 || value > 0xFFFF) {
-        throw new Error(`${name} must be an integer between 0 and 65535`);
-      }
-    }
-
-    if (options.bpIncludeTime && options.bpTime) {
-      parseBloodPressureTimeText(options.bpTime);
-    }
+  if (options.mode === 'blood-pressure' || options.includeBloodPressure) {
+    validateBloodPressureOptions(options);
   }
 }
 
@@ -193,7 +204,7 @@
 
   return Buffer.from(hexPairs.map((pair) => {
     if (pair.length > 2) {
-      throw new Error(`invalid byte: ${pair}`);
+      throw new Error(`非法字节: ${pair}`);
     }
 
     return Number.parseInt(pair, 16);
@@ -264,7 +275,7 @@
     };
   }
 
-  throw new Error('no sendable hex frames found in frames file');
+  throw new Error('报文文件中没有找到可发送的十六进制报文');
 }
 
 function analyzeFrames(frames, scenarioConfig) {
@@ -329,7 +340,7 @@
   const match = /^(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2})$/.exec(value);
 
   if (!match) {
-    throw new Error(`invalid --bp-time format: ${value}. Expected YYYY-MM-DD HH:mm`);
+    throw new Error(`--bp-time 格式不正确: ${value},应为 YYYY-MM-DD HH:mm`);
   }
 
   const [, year, month, day, hour, minute] = match;
@@ -393,10 +404,13 @@
   }
 
   const loadResult = loadFrames(options.framesFile);
-  const analysis = analyzeFrames(loadResult.frames, options.scenarioConfig);
+  const frames = options.includeBloodPressure
+    ? [...loadResult.frames, buildBloodPressureFrame(options)]
+    : loadResult.frames;
+  const analysis = analyzeFrames(frames, options.scenarioConfig);
 
   return {
-    frames: loadResult.frames,
+    frames,
     analysis,
     loadMode: loadResult.mode,
     scenarioConfig: options.scenarioConfig,
@@ -444,7 +458,7 @@
   function sendNextFrame() {
     const frame = prepared.frames[frameIndex];
     socket.write(frame.buffer);
-    console.log(`[SIM] sent round=${round + 1} frame=${frameIndex + 1} -> ${frame.raw}`);
+    console.log(`[SIM] 已发送 round=${round + 1} frame=${frameIndex + 1} -> ${frame.raw}`);
 
     frameIndex += 1;
 
@@ -453,43 +467,48 @@
       round += 1;
 
       if (options.repeat > 0 && round >= options.repeat) {
-        stop(`[SIM] finished ${options.repeat} round(s)`);
+        stop(`[SIM] 已完成 ${options.repeat} 轮发送`);
       }
     }
   }
 
   socket.on('connect', () => {
-    console.log(`[SIM] connected to ${options.host}:${options.port}`);
+    console.log(`[SIM] 已连接到 ${options.host}:${options.port}`);
 
     if (options.localAddress) {
-      console.log(`[SIM] local bind address ${options.localAddress}`);
+      console.log(`[SIM] 本地绑定地址 ${options.localAddress}`);
     }
 
     if (prepared.scenarioConfig) {
-      console.log(`[SIM] scenario ${options.scenario} -> ${prepared.scenarioConfig.name}`);
-      console.log(`[SIM] scenario description: ${prepared.scenarioConfig.description}`);
+      console.log(`[SIM] 场景 ${options.scenario} -> ${prepared.scenarioConfig.name}`);
+      console.log(`[SIM] 场景说明: ${prepared.scenarioConfig.description}`);
     } else if (options.mode === 'blood-pressure') {
-      console.log(`[SIM] mode blood-pressure systolic=${options.bpSystolic} diastolic=${options.bpDiastolic} pulse=${options.bpPulse}`);
-      console.log(`[SIM] blood-pressure time ${options.bpIncludeTime ? (options.bpTime || 'current local time') : 'disabled / zero bytes'}`);
+      console.log(`[SIM] 当前模式为血压报文 systolic=${options.bpSystolic} diastolic=${options.bpDiastolic} pulse=${options.bpPulse}`);
+      console.log(`[SIM] 血压时间 ${options.bpIncludeTime ? (options.bpTime || '当前本地时间') : '已禁用 / 发送全 0 字节'}`);
     } else {
-      console.log(`[SIM] loaded frames file ${path.basename(options.framesFile)}`);
+      console.log(`[SIM] 已加载报文文件 ${path.basename(options.framesFile)}`);
     }
 
-    console.log(`[SIM] data mode ${prepared.loadMode} frames=${prepared.analysis.totalFrames} publishable=${prepared.analysis.publishableFrames} unsupported=${prepared.analysis.unsupportedFrames}`);
+    if (options.mode === 'file' && options.includeBloodPressure) {
+      console.log(`[SIM] 每轮追加血压报文 systolic=${options.bpSystolic} diastolic=${options.bpDiastolic} pulse=${options.bpPulse}`);
+      console.log(`[SIM] 追加血压时间 ${options.bpIncludeTime ? (options.bpTime || '当前本地时间') : '已禁用 / 发送全 0 字节'}`);
+    }
+
+    console.log(`[SIM] 数据模式 ${prepared.loadMode} frames=${prepared.analysis.totalFrames} publishable=${prepared.analysis.publishableFrames} unsupported=${prepared.analysis.unsupportedFrames}`);
 
     if (prepared.analysis.fullCycles > 0 || prepared.analysis.extraFrames > 0) {
-      console.log(`[SIM] scenario cycles fullCycles=${prepared.analysis.fullCycles} extraFrames=${prepared.analysis.extraFrames}`);
+      console.log(`[SIM] 场景轮次统计 fullCycles=${prepared.analysis.fullCycles} extraFrames=${prepared.analysis.extraFrames}`);
     }
 
     if (prepared.analysis.stateTransitions.length > 0) {
       const transitionText = prepared.analysis.stateTransitions
         .map((item) => `frame#${item.frameIndex}:o=${item.value}`)
         .join(' -> ');
-      console.log(`[SIM] state transitions ${transitionText}`);
+      console.log(`[SIM] 状态变化 ${transitionText}`);
     }
 
     if (Object.keys(prepared.analysis.snapshot).length > 0) {
-      console.log(`[SIM] snapshot ${formatSnapshot(prepared.analysis.snapshot)}`);
+      console.log(`[SIM] 指标快照 ${formatSnapshot(prepared.analysis.snapshot)}`);
     }
 
     sendNextFrame();
@@ -497,23 +516,23 @@
   });
 
   socket.on('error', (error) => {
-    stop(`[SIM] connection error: ${error.message}`);
+    stop(`[SIM] 连接异常: ${error.message}`);
     process.exitCode = 1;
   });
 
   socket.on('close', () => {
     if (!stopped) {
-      stop('[SIM] connection closed');
+      stop('[SIM] 连接已关闭');
     }
   });
 
   process.on('SIGINT', () => {
-    stop('[SIM] received SIGINT, stopping');
+    stop('[SIM] 收到 SIGINT,停止发送');
     process.exit(0);
   });
 
   process.on('SIGTERM', () => {
-    stop('[SIM] received SIGTERM, stopping');
+    stop('[SIM] 收到 SIGTERM,停止发送');
     process.exit(0);
   });
 }
diff --git a/test/app.test.js b/test/app.test.js
index 637b81c..3ba5c89 100644
--- a/test/app.test.js
+++ b/test/app.test.js
@@ -1,7 +1,87 @@
 const assert = require('assert');
+const { createOnMetricHandler, getBloodPressureOptions } = require('../app');
 
-describe('应用程序功能测试', () => {
-    it('应该返回正确的结果', () => {
-        assert.strictEqual(1 + 1, 2);
+describe('app', () => {
+  it('defaults blood pressure immediate flush to enabled', () => {
+    assert.deepStrictEqual(getBloodPressureOptions({}), {
+      publishTime: true,
+      flushImmediately: true,
     });
-});
\ No newline at end of file
+
+    assert.deepStrictEqual(getBloodPressureOptions({
+      protocol: {
+        bloodPressure: {
+          publishTime: false,
+          flushImmediately: false,
+        },
+      },
+    }), {
+      publishTime: false,
+      flushImmediately: false,
+    });
+  });
+
+  it('flushes the full cached payload immediately after blood pressure arrives in batch mode', async () => {
+    const calls = [];
+    const handler = createOnMetricHandler({
+      logger: { info() {}, error() {} },
+      sendOptions: { mode: 'batch' },
+      bloodPressureOptions: { flushImmediately: true },
+      aggregator: {
+        ingest: async (device, metric) => {
+          calls.push({ type: 'ingest', deviceId: device.deviceId, metric });
+          return true;
+        },
+        flush: async (options) => {
+          calls.push({ type: 'flush', options });
+          return true;
+        },
+      },
+    });
+
+    await handler(
+      { deviceId: 'JH-001' },
+      { N: 120, O: 80, P: 89, M: '2026-04-30 10:20:30' },
+      { protocol: 'blood-pressure' },
+    );
+
+    assert.deepStrictEqual(calls, [
+      {
+        type: 'ingest',
+        deviceId: 'JH-001',
+        metric: { N: 120, O: 80, P: 89, M: '2026-04-30 10:20:30' },
+      },
+      {
+        type: 'flush',
+        options: { reason: 'blood-pressure', deviceId: 'JH-001' },
+      },
+    ]);
+  });
+
+  it('does not trigger immediate flush for non-blood-pressure metrics', async () => {
+    const calls = [];
+    const handler = createOnMetricHandler({
+      logger: { info() {}, error() {} },
+      sendOptions: { mode: 'batch' },
+      bloodPressureOptions: { flushImmediately: true },
+      aggregator: {
+        ingest: async () => {
+          calls.push('ingest');
+          return true;
+        },
+        flush: async () => {
+          calls.push('flush');
+          return true;
+        },
+      },
+    });
+
+    await handler(
+      { deviceId: 'JH-001' },
+      { F: 36.7 },
+      { protocol: 'jhm' },
+    );
+
+    assert.deepStrictEqual(calls, ['ingest']);
+  });
+});
diff --git a/test/metric-aggregator.test.js b/test/metric-aggregator.test.js
index 239d829..093c997 100644
--- a/test/metric-aggregator.test.js
+++ b/test/metric-aggregator.test.js
@@ -78,4 +78,85 @@
       F: 24.6,
     });
   });
+
+  it('waits a full flush interval before timer flushes newly cached data', async () => {
+    const originalNow = Date.now;
+    let now = 1_000;
+    Date.now = () => now;
+
+    try {
+      const flushed = [];
+      const aggregator = new MetricAggregator({
+        mode: 'batch',
+        flushIntervalMs: 60_000,
+        onFlush: async (_device, payload) => {
+          flushed.push(payload);
+          return true;
+        },
+      });
+
+      aggregator.ingest({ deviceId: 'JH-001' }, { F: 24.6 });
+
+      now = 30_000;
+      await aggregator.flush({ reason: 'timer' });
+      assert.strictEqual(flushed.length, 0);
+
+      now = 61_000;
+      await aggregator.flush({ reason: 'timer' });
+      assert.strictEqual(flushed.length, 1);
+      assert.deepStrictEqual(flushed[0], {
+        n: 'JH-001',
+        F: 24.6,
+      });
+    } finally {
+      Date.now = originalNow;
+    }
+  });
+
+  it('preserves immediate flush intent when a second flush is queued during an ongoing flush', async () => {
+    const flushed = [];
+    let releaseFirstFlush = null;
+    const firstFlushDone = new Promise((resolve) => {
+      releaseFirstFlush = resolve;
+    });
+
+    const aggregator = new MetricAggregator({
+      mode: 'batch',
+      onFlush: async (_device, payload) => {
+        flushed.push(payload);
+
+        if (flushed.length === 1) {
+          await firstFlushDone;
+        }
+
+        return true;
+      },
+    });
+
+    aggregator.ingest({ deviceId: 'JH-001' }, { F: 24.6 });
+    const firstFlushPromise = aggregator.flush({ reason: 'manual' });
+
+    await new Promise((resolve) => setTimeout(resolve, 0));
+
+    aggregator.ingest({ deviceId: 'JH-001' }, { N: 120, O: 80, P: 89 });
+    const queuedFlushResult = await aggregator.flush({ reason: 'blood-pressure', deviceId: 'JH-001' });
+
+    assert.strictEqual(queuedFlushResult, false);
+
+    releaseFirstFlush();
+    await firstFlushPromise;
+
+    assert.strictEqual(flushed.length, 2);
+    assert.deepStrictEqual(flushed[0], {
+      n: 'JH-001',
+      F: 24.6,
+    });
+    assert.deepStrictEqual(flushed[1], {
+      n: 'JH-001',
+      F: 24.6,
+      N: 120,
+      O: 80,
+      P: 89,
+    });
+  });
 });
diff --git a/test/tcp-simulator.test.js b/test/tcp-simulator.test.js
index 97427e4..7e5278e 100644
--- a/test/tcp-simulator.test.js
+++ b/test/tcp-simulator.test.js
@@ -1,5 +1,12 @@
 const assert = require('assert');
-const { buildBloodPressureFrame, parseBloodPressureTimeText } = require('../tcp-simulator');
+const fs = require('fs');
+const os = require('os');
+const path = require('path');
+const {
+  buildBloodPressureFrame,
+  parseBloodPressureTimeText,
+  prepareSimulation,
+} = require('../tcp-simulator');
 
 describe('tcp-simulator', () => {
   it('parses blood pressure time text', () => {
@@ -23,4 +30,35 @@
       'AA 55 0E BA 00 78 50 59 1A 04 0F 09 1E 3C',
     );
   });
+
+  it('can append a blood pressure frame to file mode simulation', () => {
+    const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'tcp-simulator-'));
+    const framesFile = path.join(tempDir, 'frames.txt');
+    fs.writeFileSync(framesFile, 'EE 55 01 00 00 01 72 74\n', 'utf8');
+
+    try {
+      const prepared = prepareSimulation({
+        mode: 'file',
+        framesFile,
+        scenarioConfig: null,
+        includeBloodPressure: true,
+        bpSystolic: 120,
+        bpDiastolic: 80,
+        bpPulse: 89,
+        bpTime: '2026-04-15 09:30',
+        bpIncludeTime: true,
+      });
+
+      assert.strictEqual(prepared.frames.length, 2);
+      assert.strictEqual(prepared.frames[1].raw, 'AA 55 0E BA 00 78 50 59 1A 04 0F 09 1E 3C');
+      assert.deepStrictEqual(prepared.analysis.snapshot, {
+        F: 37,
+        N: 120,
+        O: 80,
+        P: 89,
+      });
+    } finally {
+      fs.rmSync(tempDir, { recursive: true, force: true });
+    }
+  });
 });
diff --git a/tttt.md b/tttt.md
new file mode 100644
index 0000000..1c28421
--- /dev/null
+++ b/tttt.md
@@ -0,0 +1,24 @@
+设定温度         AF
+当前透析液温度   F
+设定超滤总量     A
+超滤率             C
+超滤量     B
+剩余时间     K
+透析液流量  L
+有效血流量  D
+静脉压   H
+动脉压   o
+跨膜压   J
+累计血流量  U
+电导率  G
+钠含量 Na
+碳酸氢根含量 HCO3
+血氧饱和度    O2Sat
+红细胞比容     Hct
+血红蛋白     Hb
+血液温度   Tblood
+Kt/V      ktv
+收缩压(高压),
+舒张压(低压),
+心率值,单位:
+
diff --git a/verify-all-commands.js b/verify-all-commands.js
index e684a09..08d05e1 100644
--- a/verify-all-commands.js
+++ b/verify-all-commands.js
@@ -12,7 +12,7 @@
   maxBufferBytes: config.tcp.maxBufferBytes,
 });
 const mqttService = new MqttService(config.mqtt, console);
-const device = config.devices[0] || { deviceId: 'JHM-TEST', ip: '127.0.0.1', name: 'test-device' };
+const device = config.devices[0] || { deviceId: 'JHM-TEST', ip: '127.0.0.1', name: '测试设备' };
 
 function buildFrame(command, payload) {
   const cy = (command + payload[0] + payload[1] + payload[2] + payload[3]) & 0xFF;
@@ -43,21 +43,21 @@
 }
 
 const cases = [
-  { command: 0x01, payload: [0x00, 0x00, 0x01, 0x77], expectedPublish: true, expectedMetric: { F: 37.5 }, note: 'temperature = 375 / 10' },
-  { command: 0x02, payload: [0x00, 0x00, 0x01, 0x77], expectedPublish: false, reason: 'identifier-missing', note: 'set temperature not published' },
-  { command: 0x03, payload: [0x00, 0x00, 0x04, 0xD2], expectedPublish: true, expectedMetric: { A: 1.234 }, note: 'ultrafiltration total = 1234mL => 1.234L' },
-  { command: 0x04, payload: [0x00, 0x01, 0x00, 0x1E], expectedPublish: true, expectedMetric: { sysj: 90 }, note: 'remaining minutes = 1*60 + 30' },
-  { command: 0x05, payload: [0x00, 0x00, 0x01, 0xF4], expectedPublish: true, expectedMetric: { C: 0.5 }, note: 'uf rate = 500mL => 0.5L' },
-  { command: 0x06, payload: [0x00, 0x00, 0x00, 0xFA], expectedPublish: true, expectedMetric: { B: 0.25 }, note: 'uf volume = 250mL => 0.25L' },
-  { command: 0x07, payload: [0x00, 0x00, 0x02, 0x58], expectedPublish: true, expectedMetric: { L: 600 }, note: 'dialysate flow = 600' },
-  { command: 0x08, payload: [0x00, 0x00, 0x01, 0x40], expectedPublish: true, expectedMetric: { D: 320 }, note: 'effective blood flow = 320' },
-  { command: 0x09, payload: [0x01, 0x00, 0x00, 0x64], expectedPublish: true, expectedMetric: { H: -100 }, note: 'venous pressure = -100' },
-  { command: 0x0A, payload: [0x00, 0x00, 0x00, 0x78], expectedPublish: true, expectedMetric: { o: 120 }, note: 'arterial pressure = 120' },
-  { command: 0x0B, payload: [0x01, 0x00, 0x00, 0x50], expectedPublish: true, expectedMetric: { J: -80 }, note: 'transmembrane pressure = -80' },
-  { command: 0x0C, payload: [0x00, 0x00, 0x08, 0x00], expectedPublish: true, expectedMetric: { U: 2048 }, note: 'accumulated blood flow = 2048' },
-  { command: 0x0D, payload: [0x00, 0x00, 0x00, 0x7B], expectedPublish: true, expectedMetric: { G: 12.3 }, note: 'conductivity = 123 / 10' },
-  { command: 0x0E, payload: [0x00, 0x00, 0x00, 0x8C], expectedPublish: true, expectedMetric: { Na: 140 }, note: 'sodium concentration = 140' },
-  { command: 0x0F, payload: [0x00, 0x00, 0x00, 0x19], expectedPublish: true, expectedMetric: { HCO3: 25 }, note: 'HCO3 concentration = 25' },
+  { command: 0x01, payload: [0x00, 0x00, 0x01, 0x77], expectedPublish: true, expectedMetric: { F: 37.5 }, note: '温度 = 375 / 10' },
+  { command: 0x02, payload: [0x00, 0x00, 0x01, 0x77], expectedPublish: false, reason: 'identifier-missing', note: '设定温度不发布' },
+  { command: 0x03, payload: [0x00, 0x00, 0x04, 0xD2], expectedPublish: true, expectedMetric: { A: 1.234 }, note: '超滤总量 = 1234mL => 1.234L' },
+  { command: 0x04, payload: [0x00, 0x01, 0x00, 0x1E], expectedPublish: true, expectedMetric: { sysj: 90 }, note: '剩余时间 = 1*60 + 30 分钟' },
+  { command: 0x05, payload: [0x00, 0x00, 0x01, 0xF4], expectedPublish: true, expectedMetric: { C: 0.5 }, note: '超滤率 = 500mL => 0.5L' },
+  { command: 0x06, payload: [0x00, 0x00, 0x00, 0xFA], expectedPublish: true, expectedMetric: { B: 0.25 }, note: '超滤量 = 250mL => 0.25L' },
+  { command: 0x07, payload: [0x00, 0x00, 0x02, 0x58], expectedPublish: true, expectedMetric: { L: 600 }, note: '透析液流量 = 600' },
+  { command: 0x08, payload: [0x00, 0x00, 0x01, 0x40], expectedPublish: true, expectedMetric: { D: 320 }, note: '有效血流量 = 320' },
+  { command: 0x09, payload: [0x01, 0x00, 0x00, 0x64], expectedPublish: true, expectedMetric: { H: -100 }, note: '静脉压 = -100' },
+  { command: 0x0A, payload: [0x00, 0x00, 0x00, 0x78], expectedPublish: true, expectedMetric: { o: 120 }, note: '动脉压 = 120' },
+  { command: 0x0B, payload: [0x01, 0x00, 0x00, 0x50], expectedPublish: true, expectedMetric: { J: -80 }, note: '跨膜压 = -80' },
+  { command: 0x0C, payload: [0x00, 0x00, 0x08, 0x00], expectedPublish: true, expectedMetric: { U: 2048 }, note: '累计血流量 = 2048' },
+  { command: 0x0D, payload: [0x00, 0x00, 0x00, 0x7B], expectedPublish: true, expectedMetric: { G: 12.3 }, note: '电导率 = 123 / 10' },
+  { command: 0x0E, payload: [0x00, 0x00, 0x00, 0x8C], expectedPublish: true, expectedMetric: { Na: 140 }, note: '钠离子浓度 = 140' },
+  { command: 0x0F, payload: [0x00, 0x00, 0x00, 0x19], expectedPublish: true, expectedMetric: { HCO3: 25 }, note: 'HCO3 浓度 = 25' },
 ];
 
 const bloodPressureCase = {
@@ -78,8 +78,8 @@
 function main() {
   const topic = mqttService.buildTopic(device);
 
-  console.log(`verify device: ${device.deviceId} (${device.ip})`);
-  console.log(`verify topic: ${topic}`);
+  console.log(`校验设备: ${device.deviceId} (${device.ip})`);
+  console.log(`校验主题: ${topic}`);
   console.log('');
 
   for (const item of cases) {
@@ -90,10 +90,10 @@
 
     if (item.expectedPublish) {
       assert.deepStrictEqual(result.metric, item.expectedMetric, `command 0x${item.command.toString(16).toUpperCase()} metric mismatch`);
-      console.log(`[publish] command=0x${item.command.toString(16).toUpperCase().padStart(2, '0')} payload=${payloadToHex(item.payload)} topic=${topic} mqtt=${JSON.stringify(result.metric)} note=${item.note}`);
+      console.log(`[发布] command=0x${item.command.toString(16).toUpperCase().padStart(2, '0')} payload=${payloadToHex(item.payload)} topic=${topic} mqtt=${JSON.stringify(result.metric)} note=${item.note}`);
     } else {
       assert.strictEqual(result.reason, item.reason, `command 0x${item.command.toString(16).toUpperCase()} skip reason mismatch`);
-      console.log(`[skip] command=0x${item.command.toString(16).toUpperCase().padStart(2, '0')} payload=${payloadToHex(item.payload)} reason=${result.reason} note=${item.note}`);
+      console.log(`[跳过] command=0x${item.command.toString(16).toUpperCase().padStart(2, '0')} payload=${payloadToHex(item.payload)} reason=${result.reason} note=${item.note}`);
     }
   }
 
@@ -101,10 +101,10 @@
   assert.ok(bloodPressureResult, 'blood pressure frame returned no result');
   assert.strictEqual(bloodPressureResult.publish, true, 'blood pressure frame should publish');
   assert.deepStrictEqual(bloodPressureResult.metric, bloodPressureCase.expectedMetric, 'blood pressure metric mismatch');
-  console.log(`[publish] command=0xBA raw=${bloodPressureResult.rawHex} topic=${topic} mqtt=${JSON.stringify(bloodPressureResult.metric)} note=blood pressure frame`);
+  console.log(`[发布] command=0xBA raw=${bloodPressureResult.rawHex} topic=${topic} mqtt=${JSON.stringify(bloodPressureResult.metric)} note=血压报文`);
 
   console.log('');
-  console.log('verify-all-commands passed');
+  console.log('verify-all-commands 校验通过');
 }
 
 main();
diff --git "a/\347\224\237\344\272\247\345\256\236\346\226\275\351\203\250\347\275\262\346\226\207\346\241\243.md" "b/\347\224\237\344\272\247\345\256\236\346\226\275\351\203\250\347\275\262\346\226\207\346\241\243.md"
index 3f4a5ff..7cb96d4 100644
--- "a/\347\224\237\344\272\247\345\256\236\346\226\275\351\203\250\347\275\262\346\226\207\346\241\243.md"
+++ "b/\347\224\237\344\272\247\345\256\236\346\226\275\351\203\250\347\275\262\346\226\207\346\241\243.md"
@@ -2,61 +2,106 @@
 
 ## 1. 目标
 
-本文档用于指导 JHM 服务在生产环境中部署、配置和联调。
+本文档用于指导 JHM 服务在生产环境中的打包、部署、配置、联调和验收。
 
-当前服务支持:
+当前服务能力包括:
 
-- 透析机 `EE 55` 固定帧协议
-- 血压计 `AA 55` 变长协议
+- 透析机 `EE 55` 固定帧协议解析
+- 血压计 `AA 55` 变长协议解析
 - MQTT 上报
-- 阿里云上报
+- 阿里云物模型上报
+- 批量聚合发送
+- 血压触发的整包立即发送
 
 ## 2. 打包产物
 
-执行:
+在项目根目录执行:
 
-```bash
+```powershell
 npm run build
 ```
 
-生成目录:
+如果只需要 Windows 包:
+
+```powershell
+npm run build:win
+```
+
+如果只需要 Linux 包:
+
+```powershell
+npm run build:linux
+```
+
+打包完成后生成目录:
 
 ```text
 dist/
+  生产实施部署文档.md
   win-x64/
     jhm-service.exe
+    生产实施部署文档.md
     runtime/
       config.json
       alModel.json
+      生产实施部署文档.md
+    logs/
+    service/
+      install-service.ps1
+      uninstall-service.ps1
   linux-x64/
     jhm-service
+    生产实施部署文档.md
     runtime/
       config.json
       alModel.json
+      生产实施部署文档.md
+    logs/
+    service/
+      install-service.sh
+      uninstall-service.sh
+      jhm-service.service.tpl
 ```
+
+说明:
+
+- `runtime/` 是现场主要维护目录。
+- `logs/` 为运行日志目录。
+- `service/` 为系统服务安装脚本模板。
+- 打包脚本会先清理旧的 `build/` 和 `dist/` 目录。
 
 ## 3. 部署前检查
 
-部署前确认:
+部署前确认以下信息已准备完成:
 
-- 目标服务器 IP、系统、开放端口
-- 设备透传盒目标 TCP 地址和端口
-- `devices[].ip` 与现场实际来源 IP 一致
-- MQTT 或阿里云连接参数已准备完成
+- 目标服务器操作系统和架构是否正确
+- 目标服务器开放了业务监听端口
+- 透传盒子目标 TCP 地址和端口已配置正确
+- `devices[].ip` 与服务端实际看到的设备来源 IP 一致
+- MQTT 或阿里云连接参数已确认可用
+- `alModel.json` 与平台物模型保持一致
+- 现场是否需要血压时间字段 `M`
+- 现场是否需要“血压触发整包立即发送”
 
 ## 4. 配置文件说明
 
-主要修改文件:
+主要配置文件:
 
 ```text
 runtime/config.json
 ```
 
-当前推荐结构:
+推荐配置结构如下:
 
 ```json
 {
   "send": {
+    "mode": "batch",
+    "flushIntervalMs": 60000,
+    "alignToMinute": true,
+    "includeDeviceIdField": true,
+    "deviceIdField": "n",
+    "publishOnShutdown": true,
     "channels": ["aliyun"]
   },
   "logging": {
@@ -96,13 +141,14 @@
   "protocol": {
     "alModelPath": "./alModel.json",
     "bloodPressure": {
-      "publishTime": true
+      "publishTime": true,
+      "flushImmediately": true
     }
   },
   "devices": [
     {
       "deviceId": "JHM-001",
-      "ip": "192.168.33.1",
+      "ip": "169.254.233.58",
       "name": "1号透析机"
     }
   ]
@@ -111,41 +157,51 @@
 
 ### 4.1 `send`
 
-- `channels`:可选 `mqtt`、`aliyun`
+- `mode`:发送模式,支持 `batch` 和 `immediate`
+- `flushIntervalMs`:批量发送周期,单位毫秒,当前推荐 `60000`
+- `alignToMinute`:是否按整分钟对齐发送
+- `includeDeviceIdField`:发送时是否在 payload 中带设备编号字段
+- `deviceIdField`:设备编号字段名,当前默认 `n`
+- `publishOnShutdown`:停机前是否补发一次缓存数据
+- `channels`:发送通道,可选 `mqtt`、`aliyun`
+
+常见组合:
+
 - 只发 MQTT:`["mqtt"]`
 - 只发阿里云:`["aliyun"]`
-- 双发:`["mqtt", "aliyun"]`
+- 双通道发送:`["mqtt", "aliyun"]`
 
 ### 4.2 `logging`
 
-- `enabled`:是否写本地日志
-- `console`:是否输出控制台
+- `enabled`:是否写本地日志文件
+- `console`:是否输出控制台日志
 - `dir`:日志目录
-- `filePrefix`:日志文件前缀
-- `level`:`debug/info/warn/error`
+- `filePrefix`:日志文件名前缀
+- `level`:日志级别,支持 `debug`、`info`、`warn`、`error`
 
 ### 4.3 `tcp`
 
-- `host`:监听地址,生产建议 `0.0.0.0`
+- `host`:监听地址,生产推荐 `0.0.0.0`
 - `port`:TCP 监听端口
 - `maxConnections`:最大连接数
-- `socketTimeoutMs`:连接超时时间
+- `socketTimeoutMs`:连接空闲超时时间
 - `keepAlive`:是否启用 KeepAlive
-- `keepAliveDelayMs`:KeepAlive 延迟
-- `noDelay`:是否关闭 Nagle
+- `keepAliveDelayMs`:KeepAlive 首次探测延迟
+- `noDelay`:是否关闭 Nagle 算法
 - `backlog`:监听队列长度
-- `maxBufferBytes`:解码缓冲区上限
+- `maxBufferBytes`:单连接解码缓冲区上限
 
 ### 4.4 `mqtt`
 
-- `protocol`:通常为 `mqtt`
+- `protocol`:通常填写 `mqtt`
 - `host`:Broker 地址
 - `port`:Broker 端口
 - `username`:用户名
 - `password`:密码
-- `defaultTopicPrefix`:topic 前缀
+- `defaultTopicPrefix`:Topic 前缀
+- `topicTemplate`:如使用模板模式,可替代默认前缀模式
 
-topic 规则:
+默认 Topic 规则:
 
 ```text
 {defaultTopicPrefix}/{deviceId}
@@ -157,27 +213,51 @@
 - `tupleApiBaseUrl`:三元组接口基础地址
 - `tupleApiPath`:三元组接口路径
 - `autoRegister`:是否允许自动注册
-- `registerRetryMs`:失败重试冷却时间
-- `connectTimeoutMs`:连接超时时间
+- `registerRetryMs`:三元组请求失败后的冷却重试时间
+- `connectTimeoutMs`:阿里云设备连接超时时间
 
 ### 4.6 `protocol`
 
-- `alModelPath`:模型文件路径
-- `bloodPressure.publishTime`:是否发布血压监测时间 `M`
+- `alModelPath`:物模型文件路径
+- `bloodPressure.publishTime`:是否上报血压时间字段 `M`
+- `bloodPressure.flushImmediately`:血压报文到达后是否立即触发一次整包发送
 
-规则:
+`publishTime` 规则:
 
-- `true`:发布 `N/O/P/M`
-- `false`:只发布 `N/O/P`
+- `true`:上报 `N/O/P/M`
+- `false`:仅上报 `N/O/P`
 - 未配置时默认 `true`
 
-如果现场平台未接血压时间字段,建议配置:
+`flushImmediately` 规则:
+
+- `true`:血压到达后,先缓存 `N/O/P/M`,再立即发送当前设备缓存中的整包物模型
+- `false`:血压仅进入缓存,继续等待定时批量发送
+- 未配置时默认 `true`
+
+如果平台不接收血压时间字段,可配置:
 
 ```json
-"protocol": {
-  "alModelPath": "./alModel.json",
-  "bloodPressure": {
-    "publishTime": false
+{
+  "protocol": {
+    "alModelPath": "./alModel.json",
+    "bloodPressure": {
+      "publishTime": false,
+      "flushImmediately": true
+    }
+  }
+}
+```
+
+如果现场明确要求“只按分钟发送,不要血压即时触发”,可配置:
+
+```json
+{
+  "protocol": {
+    "alModelPath": "./alModel.json",
+    "bloodPressure": {
+      "publishTime": true,
+      "flushImmediately": false
+    }
   }
 }
 ```
@@ -190,27 +270,34 @@
 - `ip`
 - `name`
 
-注意:
+注意事项:
 
-- `ip` 必须与服务端实际看到的客户端 IP 一致
-- 如果经过 NAT,要填写 NAT 后服务端看到的 IP
+- `ip` 必须与服务端实际看到的客户端来源 IP 完全一致
+- 如果经过 NAT,需要填写 NAT 后服务端可见的来源 IP
+- 如果现场使用备注字段,也建议同步补齐 `name`,便于日志识别
 
-## 5. 血压计协议补充
+## 5. 发送行为说明
 
-血压计示例报文:
+### 5.1 普通透析机指标
+
+透析机指标默认先进入聚合器缓存,在批量模式下按 `flushIntervalMs` 周期整包发送。
+
+### 5.2 血压报文
+
+血压报文示例:
 
 ```text
 AA 55 0E BA 00 78 50 59 08 08 08 08 08 10
 ```
 
-解析含义:
+解析结果:
 
 - `00 78`:收缩压 `N`
 - `50`:舒张压 `O`
 - `59`:脉搏 `P`
-- 后 5 字节:时间 `M`
+- 后 5 个时间字节:时间 `M`
 
-发布时间开启时:
+当 `publishTime=true` 时,血压指标示例:
 
 ```json
 {
@@ -221,7 +308,7 @@
 }
 ```
 
-发布时间关闭时:
+当 `publishTime=false` 时,血压指标示例:
 
 ```json
 {
@@ -231,7 +318,38 @@
 }
 ```
 
-## 6. Windows 部署
+当 `flushImmediately=true` 时,行为如下:
+
+1. 血压数据先写入缓存。
+2. 立即触发一次当前设备的整包物模型发送。
+3. 原有 1 分钟批量发送机制继续保留,不冲突。
+
+这样做的好处:
+
+- 血压结果更快到平台
+- 平台收到的仍然是完整物模型,不是单独的血压字段
+- 定时发送继续兜底,避免其他指标长时间不落地
+
+## 6. 模拟与联调
+
+项目内置 TCP 模拟器:
+
+```powershell
+npm run start:simulator -- --host 127.0.0.1 --port 9000
+```
+
+说明:
+
+- 当前 `start:simulator` 默认会带透析机报文和血压报文混合发送
+- 如仅需发送血压,可执行 `npm run start:simulator:bp`
+
+自定义血压参数示例:
+
+```powershell
+npm run start:simulator -- --bp-systolic 135 --bp-diastolic 88 --bp-pulse 76
+```
+
+## 7. Windows 部署
 
 建议目录:
 
@@ -246,7 +364,21 @@
 .\jhm-service.exe --config .\runtime\config.json
 ```
 
-## 7. Linux 部署
+如需安装为服务,可使用:
+
+```powershell
+cd .\service
+.\install-service.ps1
+```
+
+卸载服务:
+
+```powershell
+cd .\service
+.\uninstall-service.ps1
+```
+
+## 8. Linux 部署
 
 建议目录:
 
@@ -262,7 +394,32 @@
 ./jhm-service --config ./runtime/config.json
 ```
 
-## 8. 验证建议
+如需安装为 systemd 服务,可参考:
+
+```bash
+cd ./service
+chmod +x ./install-service.sh ./uninstall-service.sh
+./install-service.sh
+```
+
+## 9. 运行日志说明
+
+当前服务运行日志统一输出中文,默认写入:
+
+```text
+runtime/logs 或配置中的 logging.dir
+```
+
+重点关注以下日志:
+
+- TCP 监听成功
+- 设备连接和断开
+- 收到指标
+- 血压报文触发整包立即发送
+- MQTT 发布成功或失败
+- 阿里云属性上报成功或失败
+
+## 10. 验收建议
 
 部署完成后建议执行:
 
@@ -271,10 +428,13 @@
 npm run verify:commands
 ```
 
-重点确认:
+现场重点确认:
 
-- TCP 端口监听正常
-- 设备连接日志正常
-- 原透析机数据解析正常
+- TCP 监听正常
+- 设备接入 IP 匹配正常
+- 透析机 `EE 55` 报文解析正常
 - 血压计 `AA 55` 报文解析正常
-- `M` 字段是否符合现场需求
+- 血压到达后是否按预期立即整包发送
+- 1 分钟批量发送是否仍正常执行
+- MQTT 或阿里云上报结果正常
+- 日志文件持续输出正常

--
Gitblit v1.8.0