东丽网口版透析机 socket- server 通讯
chenyc
2025-08-06 b0c04fb404892e7b14f6f82ba8153bea3db9b097
init
4个文件已修改
2个文件已添加
953 ■■■■ 已修改文件
cycgetlogo.sh 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
index.js 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
logger.js 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mqttClient.js 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package-lock.json 775 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cycgetlogo.sh
New file
@@ -0,0 +1,27 @@
#!/bin/bash
# 设置变量
user="chenyc"
start_date="2025-01-01T00:00:00"
end_date="2025-04-01T23:59:59"
# 检查当前目录是否是Git仓库
if ! git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
  echo "当前目录不是一个Git仓库。请在Git仓库的根目录下运行此脚本。"
  exit 1
fi
# 获取提交次数
commit_count=$(git log --author="$user" --since="$start_date" --until="$end_date" --pretty=oneline | wc -l)
# 获取代码行数的变化
lines_info=$(git log --author="$user" --since="$start_date" --until="$end_date" --pretty=tformat: --numstat | awk '{ add += $1; del += $2; net += $1 - $2 } END { printf "%s,%s,%s", add, del, net }')
IFS=',' read lines_added lines_deleted lines_changed <<< "$lines_info"
# 输出结果
echo "日期: $start_date ~ $end_date"
echo "用户: $user"
echo "提交次数: $commit_count"
echo "增加的代码行数: $lines_added"
echo "删除的代码行数: $lines_deleted"
echo "净变化的代码行数: $lines_changed"
index.js
@@ -4,6 +4,7 @@
const aliyunIot = require('aliyun-iot-device-sdk');
const { getAliyunDeviceSecret } = require('./api');
const toModel = require('./Strholp');
const { publishMessage } = require('./mqttClient');
// 定义 DeviceManager 类来管理设备连接
class DeviceManager extends EventEmitter {
    constructor() {
@@ -77,7 +78,7 @@
                    logger.info(`尝试重新发送 '${deviceInfo.lastSignal}' 给设备 ${deviceId}`);
                    this.sendKeepAliveToDevice(deviceId);  // 如果设备状态是待确认,则重发上次的信号
                }
            }, 5000);  // 每2秒重试一次
            }, 10000);  // 每2秒重试一次
        }catch(err){
            logger.error(`${deviceId}设备重试机制出错:${err}`)
        }
@@ -137,7 +138,7 @@
                this.stopRetryMechanism(deviceId);  // 停止重试机制
                // 根据上次发送的信号启动相应的定时发送机制
                this.startKeepAlive(deviceId, deviceInfo.lastSignal);  // 启动定时发送 'K0000' 的机制
                logger.info(`${deviceId}启动定时发送 'K' 的机制60秒一次`);
                logger.info(`${deviceId}启动定时发送 ${deviceInfo.lastSignal} 的机制60秒一次`);
                this.registerDevice(deviceId)
            }else{
                logger.info('注册成功后第二次就发送数据到阿里云')
@@ -173,11 +174,11 @@
                    });
                    // 监听设备连接状态变化
                    deviceInfo.iotDevice.on('connect', () => {
                        logger.info(`${deviceId} 连接到阿里云IoT平台成功`);
                        // logger.info(`${deviceId} 连接到阿里云IoT平台成功`);
                    });
                
                    deviceInfo.iotDevice.on('error', (err) => {
                        logger.info(`${deviceId} 设备连接错误:`, err);
                        logger.info(`${deviceId} 设备连接到阿里云IoT平台错误:`, err);
                    });
                }
                
@@ -194,6 +195,8 @@
            if (deviceInfo.iotDevice) {
              // 上报属性数据
              const props = deviceInfo.masData
              onDeviceDataReceived(deviceInfo.masData); // 调用函数处理接收到的数据
              deviceInfo.iotDevice.postProps(props, (res) => {
                if (res.message==='success') {
                    logger.info(`${deviceId} 上报属性成功:`, res);
@@ -269,3 +272,21 @@
        
    }
}
// 接收到的数据
const  onDeviceDataReceived=(data)=> {
    const topic = `touxiji/${data.n}`;
    const payload = JSON.stringify({
      ...data,
      timestamp: new Date().toISOString()
    });
    try {
        logger.info(`发布消息到主题 ${topic}: ${payload}`);
        publishMessage(topic, payload);
    } catch (error) {
        logger.error(`发布消息到主题 ${topic} 失败:`, error);
        throw new CustomError("发布消息失败", error);
     }
  }
logger.js
@@ -2,10 +2,19 @@
require('winston-daily-rotate-file');
const { combine, timestamp, label, printf } = format;
function formatDate(date) {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  const hours = String(date.getHours()).padStart(2, '0');
  const minutes = String(date.getMinutes()).padStart(2, '0');
  const seconds = String(date.getSeconds()).padStart(2, '0');
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
// 自定义日志格式
const myFormat = printf(({ level, message, label, timestamp }) => {
  return `${timestamp} [${label}] ${level}: ${message}`;
  const formattedTimestamp = formatDate(new Date(timestamp));
  return `${formattedTimestamp} [${label}] ${level}: ${message}`;
});
// 创建日志记录器
mqttClient.js
New file
@@ -0,0 +1,108 @@
const { info, warn, error } = require('./logger'); // 引入自定义的日志模块
const mqtt = require('mqtt');
const brokerUrl = 'mqtt-test.ihemodialysis.com';
const port = 62183;
const options = {
  host: brokerUrl,
  port: port,
  reconnectPeriod: 5000, // 自动重连间隔时间
};
let client = null;
let publishEnabled = false;
// 初始化客户端连接
function connect() {
  try {
    client = mqtt.connect(options);
    client.on('connect', () => {
      console.log('Connected to MQTT Broker');
      info(`成功完成连接到 MQTT Broker: ${brokerUrl}:${port}`);
      publishEnabled = true;
      // 可选:启动定时发布任务
      // startPeriodicPublish();
    });
    client.on('close', () => {
      console.log('MQTT connection closed, will reconnect...');
      publishEnabled = false;
      stopPeriodicPublish();
    });
    client.on('error', (err) => {
      console.error('MQTT Error:', err);
      error(`MQTT 错误: ${err.message}`);
    });
    client.on('reconnect', () => {
      console.log('MQTT client reconnecting...');
    });
  } catch (ex) {
    console.error('Error during connecting to MQTT Broker:', ex);
    error(`尝试连接 MQTT Broker 时发生错误: ${ex.message}`);
  }
}
let intervalId = null;
function startPeriodicPublish() {
  if (intervalId) return;
  intervalId = setInterval(() => {
    const topic = 'system/heartbeat';
    let message;
    try {
      message = JSON.stringify({
        timestamp: new Date().toISOString(),
        status: 'alive'
      });
    } catch (ex) {
      console.error('Failed to create heartbeat message:', ex);
      error('创建心跳消息失败');
      return;
    }
    publishMessage(topic, message);
  }, 5000); // 每5秒发一次心跳
}
function stopPeriodicPublish() {
  if (intervalId) {
    clearInterval(intervalId);
    intervalId = null;
  }
}
// 外部可调用的发布函数
function publishMessage(topic, message) {
  if (!client || !publishEnabled) {
    console.warn('MQTT client not connected. Message not sent:', message);
    warn('MQTT 客户端未连接。消息未发送');
    return;
  }
  console.log(`Publishing to ${topic}:`, message);
  try {
    client.publish(topic, message, { qos: 1 }, (err) => {
      if (err) {
        console.error('Failed to publish message:', err);
        error(`消息发布失败: ${err.message}`);
      }
    });
  } catch (ex) {
    console.error('Unexpected error while publishing message:', ex);
    error(`发布消息时发生意外错误: ${ex.message}`);
  }
}
// 初始化连接
connect();
// 暴出发布函数
module.exports = {
  publishMessage,
};
package-lock.json
@@ -11,6 +11,7 @@
      "dependencies": {
        "aliyun-iot-device-sdk": "^1.0.1",
        "axios": "^1.7.9",
        "mqtt": "^5.13.3",
        "qs": "^6.13.1",
        "winston-daily-rotate-file": "^5.0.0"
      },
@@ -20,6 +21,14 @@
      "devDependencies": {
        "@vercel/ncc": "^0.38.3",
        "nodemon": "^3.1.9"
      }
    },
    "node_modules/@babel/runtime": {
      "version": "7.27.6",
      "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.27.6.tgz",
      "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@colors/colors": {
@@ -41,10 +50,34 @@
        "kuler": "^2.0.0"
      }
    },
    "node_modules/@types/node": {
      "version": "24.0.14",
      "resolved": "https://registry.npmmirror.com/@types/node/-/node-24.0.14.tgz",
      "integrity": "sha512-4zXMWD91vBLGRtHK3YbIoFMia+1nqEz72coM42C5ETjnNCa/heoj7NT1G67iAfOqMmcfhuCZ4uNpyz8EjlAejw==",
      "dependencies": {
        "undici-types": "~7.8.0"
      }
    },
    "node_modules/@types/readable-stream": {
      "version": "4.0.21",
      "resolved": "https://registry.npmmirror.com/@types/readable-stream/-/readable-stream-4.0.21.tgz",
      "integrity": "sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==",
      "dependencies": {
        "@types/node": "*"
      }
    },
    "node_modules/@types/triple-beam": {
      "version": "1.3.5",
      "resolved": "https://registry.npmmirror.com/@types/triple-beam/-/triple-beam-1.3.5.tgz",
      "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw=="
    },
    "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==",
      "dependencies": {
        "@types/node": "*"
      }
    },
    "node_modules/@vercel/ncc": {
      "version": "0.38.3",
@@ -53,6 +86,17 @@
      "dev": true,
      "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==",
      "dependencies": {
        "event-target-shim": "^5.0.0"
      },
      "engines": {
        "node": ">=6.5"
      }
    },
    "node_modules/aliyun-iot-device-sdk": {
@@ -76,6 +120,38 @@
        "is-buffer": "^2.0.2"
      }
    },
    "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==",
      "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==",
      "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"
      ],
      "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/follow-redirects": {
      "version": "1.5.10",
      "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.5.10.tgz",
@@ -85,6 +161,92 @@
      },
      "engines": {
        "node": ">=4.0"
      }
    },
    "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==",
      "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==",
      "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==",
      "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==",
      "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=="
    },
    "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==",
      "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==",
      "dependencies": {
        "safe-buffer": "~5.1.0"
      }
    },
    "node_modules/anymatch": {
@@ -131,6 +293,25 @@
      "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
    },
    "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"
        }
      ]
    },
    "node_modules/binary-extensions": {
      "version": "2.3.0",
      "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",
@@ -144,12 +325,14 @@
      }
    },
    "node_modules/bl": {
      "version": "1.2.3",
      "resolved": "https://registry.npmmirror.com/bl/-/bl-1.2.3.tgz",
      "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==",
      "version": "6.1.0",
      "resolved": "https://registry.npmmirror.com/bl/-/bl-6.1.0.tgz",
      "integrity": "sha512-ClDyJGQkc8ZtzdAAbAwBmhMSpwN/sC9HA8jxdYm6nVUbCfZbe2mgza4qh7AuEYyEPB/c4Kznf9s66bnsKMQDjw==",
      "dependencies": {
        "readable-stream": "^2.3.5",
        "safe-buffer": "^5.1.1"
        "@types/readable-stream": "^4.0.0",
        "buffer": "^6.0.3",
        "inherits": "^2.0.4",
        "readable-stream": "^4.2.0"
      }
    },
    "node_modules/brace-expansion": {
@@ -171,6 +354,29 @@
      },
      "engines": {
        "node": ">=8"
      }
    },
    "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"
        }
      ],
      "dependencies": {
        "base64-js": "^1.3.1",
        "ieee754": "^1.2.1"
      }
    },
    "node_modules/buffer-from": {
@@ -212,6 +418,33 @@
      "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==",
      "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=="
    },
    "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==",
      "dependencies": {
        "safe-buffer": "~5.1.0"
      }
    },
    "node_modules/chokidar": {
@@ -319,13 +552,9 @@
      }
    },
    "node_modules/commist": {
      "version": "1.1.0",
      "resolved": "https://registry.npmmirror.com/commist/-/commist-1.1.0.tgz",
      "integrity": "sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==",
      "dependencies": {
        "leven": "^2.1.0",
        "minimist": "^1.1.0"
      }
      "version": "3.2.0",
      "resolved": "https://registry.npmmirror.com/commist/-/commist-3.2.0.tgz",
      "integrity": "sha512-4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw=="
    },
    "node_modules/concat-map": {
      "version": "0.0.1",
@@ -333,17 +562,30 @@
      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
    },
    "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==",
      "version": "2.0.0",
      "resolved": "https://registry.npmmirror.com/concat-stream/-/concat-stream-2.0.0.tgz",
      "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
      "engines": [
        "node >= 0.8"
        "node >= 6.0"
      ],
      "dependencies": {
        "buffer-from": "^1.0.0",
        "inherits": "^2.0.3",
        "readable-stream": "^2.2.2",
        "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==",
      "dependencies": {
        "inherits": "^2.0.3",
        "string_decoder": "^1.1.1",
        "util-deprecate": "^1.0.1"
      },
      "engines": {
        "node": ">= 6"
      }
    },
    "node_modules/core-util-is": {
@@ -403,6 +645,33 @@
        "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==",
      "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=="
    },
    "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==",
      "dependencies": {
        "safe-buffer": "~5.1.0"
      }
    },
    "node_modules/enabled": {
      "version": "2.0.0",
      "resolved": "https://registry.npmmirror.com/enabled/-/enabled-2.0.0.tgz",
@@ -410,9 +679,9 @@
      "peer": true
    },
    "node_modules/end-of-stream": {
      "version": "1.4.4",
      "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz",
      "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
      "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==",
      "dependencies": {
        "once": "^1.4.0"
      }
@@ -533,6 +802,22 @@
        "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==",
      "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==",
      "engines": {
        "node": ">=0.8.x"
      }
    },
    "node_modules/ext": {
      "version": "1.7.0",
      "resolved": "https://registry.npmmirror.com/ext/-/ext-1.7.0.tgz",
@@ -545,6 +830,18 @@
      "version": "3.0.2",
      "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
    },
    "node_modules/fast-unique-numbers": {
      "version": "8.0.13",
      "resolved": "https://registry.npmmirror.com/fast-unique-numbers/-/fast-unique-numbers-8.0.13.tgz",
      "integrity": "sha512-7OnTFAVPefgw2eBJ1xj2PGGR9FwYzSUso9decayHgCDX4sJkHLdcsYTytTg+tYv+wKF3U8gJuSBz2jJpQV4u/g==",
      "dependencies": {
        "@babel/runtime": "^7.23.8",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=16.1.0"
      }
    },
    "node_modules/fecha": {
      "version": "4.2.3",
@@ -708,6 +1005,33 @@
        "node": ">= 0.10"
      }
    },
    "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==",
      "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=="
    },
    "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==",
      "dependencies": {
        "safe-buffer": "~5.1.0"
      }
    },
    "node_modules/gopd": {
      "version": "1.2.0",
      "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
@@ -751,15 +1075,28 @@
      }
    },
    "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==",
      "dependencies": {
        "callback-stream": "^1.0.2",
        "glob-stream": "^6.1.0",
        "through2": "^2.0.1",
        "xtend": "^4.0.0"
      "version": "5.0.0",
      "resolved": "https://registry.npmmirror.com/help-me/-/help-me-5.0.0.tgz",
      "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg=="
    },
    "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"
      }
      ]
    },
    "node_modules/ignore-by-default": {
      "version": "1.0.1",
@@ -781,6 +1118,18 @@
      "version": "2.0.4",
      "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
    },
    "node_modules/ip-address": {
      "version": "9.0.5",
      "resolved": "https://registry.npmmirror.com/ip-address/-/ip-address-9.0.5.tgz",
      "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
      "dependencies": {
        "jsbn": "1.1.0",
        "sprintf-js": "^1.1.3"
      },
      "engines": {
        "node": ">= 12"
      }
    },
    "node_modules/is-absolute": {
      "version": "1.0.0",
@@ -917,6 +1266,20 @@
      "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz",
      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
    },
    "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==",
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/js-sdsl"
      }
    },
    "node_modules/jsbn": {
      "version": "1.1.0",
      "resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-1.1.0.tgz",
      "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="
    },
    "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",
@@ -956,6 +1319,11 @@
      "version": "2.1.3",
      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
    },
    "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=="
    },
    "node_modules/math-intrinsics": {
      "version": "1.1.0",
@@ -1012,44 +1380,87 @@
      }
    },
    "node_modules/mqtt": {
      "version": "2.18.9",
      "resolved": "https://registry.npmmirror.com/mqtt/-/mqtt-2.18.9.tgz",
      "integrity": "sha512-ufywki8VAQ8YAERiunbj77TnXgaeVYVlyebnj4o9vhPUQFRjo+d3oUf0rft8kWi7YPYf4O8rkwPkeFc7ndWESg==",
      "version": "5.13.3",
      "resolved": "https://registry.npmmirror.com/mqtt/-/mqtt-5.13.3.tgz",
      "integrity": "sha512-91x03kh1+vBBA51OMNbEw2fymXfaUjpHkC0NcMckg9Vf6ee/GrM/HXfE8XeeziHQpJL8adr+9ThTbN5v/WmrRA==",
      "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"
        "@types/readable-stream": "^4.0.18",
        "@types/ws": "^8.18.1",
        "commist": "^3.2.0",
        "concat-stream": "^2.0.0",
        "debug": "^4.4.0",
        "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.3",
        "split2": "^4.2.0",
        "worker-timers": "^7.1.8",
        "ws": "^8.18.0"
      },
      "bin": {
        "mqtt": "mqtt.js",
        "mqtt_pub": "bin/pub.js",
        "mqtt_sub": "bin/sub.js"
        "mqtt": "build/bin/mqtt.js",
        "mqtt_pub": "build/bin/pub.js",
        "mqtt_sub": "build/bin/sub.js"
      },
      "engines": {
        "node": ">=4.0.0"
        "node": ">=16.0.0"
      }
    },
    "node_modules/mqtt-packet": {
      "version": "5.6.1",
      "resolved": "https://registry.npmmirror.com/mqtt-packet/-/mqtt-packet-5.6.1.tgz",
      "integrity": "sha512-eaF9rO2uFrIYEHomJxziuKTDkbWW5psLBaIGCazQSKqYsTaB3n4SpvJ1PexKaDBiPnMLPIFWBIiTYT3IfEJfww==",
      "version": "9.0.2",
      "resolved": "https://registry.npmmirror.com/mqtt-packet/-/mqtt-packet-9.0.2.tgz",
      "integrity": "sha512-MvIY0B8/qjq7bKxdN1eD+nrljoeaai+qjLJgfRn3TiMuz0pamsIWY2bFODPZMSNmabsLANXsLl4EMoWvlaTZWA==",
      "dependencies": {
        "bl": "^1.2.1",
        "inherits": "^2.0.3",
        "process-nextick-args": "^2.0.0",
        "safe-buffer": "^5.1.0"
        "bl": "^6.0.8",
        "debug": "^4.3.4",
        "process-nextick-args": "^2.0.1"
      }
    },
    "node_modules/mqtt-packet/node_modules/debug": {
      "version": "4.4.1",
      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz",
      "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
      "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=="
    },
    "node_modules/mqtt/node_modules/debug": {
      "version": "4.4.1",
      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz",
      "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
      "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=="
    },
    "node_modules/ms": {
      "version": "2.0.0",
@@ -1121,6 +1532,36 @@
        "node": ">=0.10.0"
      }
    },
    "node_modules/number-allocator": {
      "version": "1.0.14",
      "resolved": "https://registry.npmmirror.com/number-allocator/-/number-allocator-1.0.14.tgz",
      "integrity": "sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==",
      "dependencies": {
        "debug": "^4.3.1",
        "js-sdsl": "4.3.0"
      }
    },
    "node_modules/number-allocator/node_modules/debug": {
      "version": "4.4.1",
      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz",
      "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
      "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=="
    },
    "node_modules/object-hash": {
      "version": "3.0.0",
      "resolved": "https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz",
@@ -1165,6 +1606,33 @@
        "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==",
      "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=="
    },
    "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==",
      "dependencies": {
        "safe-buffer": "~5.1.0"
      }
    },
    "node_modules/path-dirname": {
      "version": "1.0.2",
      "resolved": "https://registry.npmmirror.com/path-dirname/-/path-dirname-1.0.2.tgz",
@@ -1190,6 +1658,14 @@
        "url": "https://github.com/sponsors/jonschlinkert"
      }
    },
    "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==",
      "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",
@@ -1207,9 +1683,9 @@
      "dev": true
    },
    "node_modules/pump": {
      "version": "3.0.2",
      "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.2.tgz",
      "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
      "version": "3.0.3",
      "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.3.tgz",
      "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
      "dependencies": {
        "end-of-stream": "^1.1.0",
        "once": "^1.3.1"
@@ -1249,23 +1725,19 @@
      }
    },
    "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==",
      "version": "4.7.0",
      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-4.7.0.tgz",
      "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
      "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"
      }
        "abort-controller": "^3.0.0",
        "buffer": "^6.0.3",
        "events": "^3.3.0",
        "process": "^0.11.10",
        "string_decoder": "^1.3.0"
    },
    "node_modules/readable-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=="
      "engines": {
        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
      }
    },
    "node_modules/readdirp": {
      "version": "3.6.0",
@@ -1288,6 +1760,11 @@
      "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=="
    },
    "node_modules/rfdc": {
      "version": "1.4.1",
      "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz",
      "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="
    },
    "node_modules/safe-buffer": {
      "version": "5.2.1",
@@ -1417,13 +1894,40 @@
        "node": ">=10"
      }
    },
    "node_modules/split2": {
      "version": "2.2.0",
      "resolved": "https://registry.npmmirror.com/split2/-/split2-2.2.0.tgz",
      "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
      "dependencies": {
        "through2": "^2.0.2"
    "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==",
      "engines": {
        "node": ">= 6.0.0",
        "npm": ">= 3.0.0"
      }
    },
    "node_modules/socks": {
      "version": "2.8.6",
      "resolved": "https://registry.npmmirror.com/socks/-/socks-2.8.6.tgz",
      "integrity": "sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA==",
      "dependencies": {
        "ip-address": "^9.0.5",
        "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==",
      "engines": {
        "node": ">= 10.x"
      }
    },
    "node_modules/sprintf-js": {
      "version": "1.1.3",
      "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.1.3.tgz",
      "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="
    },
    "node_modules/stack-trace": {
      "version": "0.0.10",
@@ -1440,17 +1944,12 @@
      "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ=="
    },
    "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==",
      "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==",
      "dependencies": {
        "safe-buffer": "~5.1.0"
        "safe-buffer": "~5.2.0"
      }
    },
    "node_modules/string_decoder/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=="
    },
    "node_modules/supports-color": {
      "version": "5.5.0",
@@ -1486,6 +1985,33 @@
      "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==",
      "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=="
    },
    "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==",
      "dependencies": {
        "safe-buffer": "~5.1.0"
      }
    },
    "node_modules/to-absolute-glob": {
@@ -1529,6 +2055,11 @@
        "node": ">= 14.0.0"
      }
    },
    "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=="
    },
    "node_modules/type": {
      "version": "2.7.3",
      "resolved": "https://registry.npmmirror.com/type/-/type-2.7.3.tgz",
@@ -1552,6 +2083,11 @@
      "resolved": "https://registry.npmmirror.com/undefsafe/-/undefsafe-2.0.5.tgz",
      "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
      "dev": true
    },
    "node_modules/undici-types": {
      "version": "7.8.0",
      "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-7.8.0.tgz",
      "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="
    },
    "node_modules/unique-stream": {
      "version": "2.3.1",
@@ -1591,6 +2127,14 @@
      },
      "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==",
      "dependencies": {
        "async-limiter": "~1.0.0"
      }
    },
    "node_modules/winston": {
@@ -1672,17 +2216,60 @@
        "node": ">= 6"
      }
    },
    "node_modules/worker-timers": {
      "version": "7.1.8",
      "resolved": "https://registry.npmmirror.com/worker-timers/-/worker-timers-7.1.8.tgz",
      "integrity": "sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw==",
      "dependencies": {
        "@babel/runtime": "^7.24.5",
        "tslib": "^2.6.2",
        "worker-timers-broker": "^6.1.8",
        "worker-timers-worker": "^7.0.71"
      }
    },
    "node_modules/worker-timers-broker": {
      "version": "6.1.8",
      "resolved": "https://registry.npmmirror.com/worker-timers-broker/-/worker-timers-broker-6.1.8.tgz",
      "integrity": "sha512-FUCJu9jlK3A8WqLTKXM9E6kAmI/dR1vAJ8dHYLMisLNB/n3GuaFIjJ7pn16ZcD1zCOf7P6H62lWIEBi+yz/zQQ==",
      "dependencies": {
        "@babel/runtime": "^7.24.5",
        "fast-unique-numbers": "^8.0.13",
        "tslib": "^2.6.2",
        "worker-timers-worker": "^7.0.71"
      }
    },
    "node_modules/worker-timers-worker": {
      "version": "7.0.71",
      "resolved": "https://registry.npmmirror.com/worker-timers-worker/-/worker-timers-worker-7.0.71.tgz",
      "integrity": "sha512-ks/5YKwZsto1c2vmljroppOKCivB/ma97g9y77MAAz2TBBjPPgpoOiS1qYQKIgvGTr2QYPT3XhJWIB6Rj2MVPQ==",
      "dependencies": {
        "@babel/runtime": "^7.24.5",
        "tslib": "^2.6.2"
      }
    },
    "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=="
    },
    "node_modules/ws": {
      "version": "6.2.3",
      "resolved": "https://registry.npmmirror.com/ws/-/ws-6.2.3.tgz",
      "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==",
      "dependencies": {
        "async-limiter": "~1.0.0"
      "version": "8.18.3",
      "resolved": "https://registry.npmmirror.com/ws/-/ws-8.18.3.tgz",
      "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
      "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": {
package.json
@@ -16,6 +16,7 @@
  "dependencies": {
    "aliyun-iot-device-sdk": "^1.0.1",
    "axios": "^1.7.9",
    "mqtt": "^5.13.3",
    "qs": "^6.13.1",
    "winston-daily-rotate-file": "^5.0.0"
  },