import mqtt from './mqtt'; let mqttClientCmd = null; // 全局 CMD MQTT let mqttClientData = null; // 全局 DATA MQTT let mqttCmdConnected = false; let mqttDataConnected = false; let reconnectTimer = null; // 重连定时器 export function createMqttClient() { if (mqttCmdConnected) { console.log("CMD MQTT 已连接"); return mqttClientCmd; } const params = { // keepalive: 60, clean: true, connectTimeout: 30 * 1000, clientId: "xcx_mqtt_cmd1" + uni.getStorageSync("userId") + Math.random().toString(16).substring(2, 8), username: "lnradar", password: "lnradar", wsOptions: { WebSocket: function (url) { return wx.connectSocket({ url: url, header: { "content-type": "application/json", }, protocols: ["mqtt"], }); }, }, }; let client = ""; client = mqtt.connect("wxs://cmd.radar-power.cn/mqtt/", params); client.on("connect", () => { mqttCmdConnected = true; console.log("MQTTCMD连接成功"); const userId = uni.getStorageSync("userId"); client.subscribe(`/mps/wx_${userId}/notice`, (err) => { if (err) { console.error("订阅失败", err); } else { console.log(`成功订阅设备主题: /mps/wx_${userId}/notice`); } }); }); client.on("message", (topic, message) => { console.log("topic", topic, message); console.log("接收到消息:", JSON.parse(message.toString())); const userId = uni.getStorageSync("userId"); const noticeMatch = /^\/mps\/wx_(.+)\/notice$/; const match = topic.match(noticeMatch); if (!match) return; }); client.on("error", (err) => { mqttCmdConnected = false; console.error("MQTT连接错误:", err); // 连接失败时重新尝试连接 setTimeout(() => { createMqttClient(); // 重新连接 }, 1000); }); client.on("disconnect", () => { mqttCmdConnected = false; console.log("MQTT断开连接"); }); return client; } // 创建data连接 export function createMqttData() { if (!uni.getStorageSync("userId")) { console.warn("DATA MQTT 创建失败:缺少 userId"); return null; } if (mqttDataConnected) return mqttClientData; const params = { // keepalive: 60, clean: true, connectTimeout: 1500, clientId: "xcx_mqtt_data1_" + uni.getStorageSync("userId") + "_" + Date.now(), username: "lnradar", password: "lnradar", WebSocket: function (url) { return wx.connectSocket({ url: url, header: { "content-type": "application/json", }, protocols: ["mqtt"], }); }, reconnectPeriod: 2000 }; mqttClientData = mqtt.connect("wxs://data.radar-power.cn/mqtt/", params); mqttClientData.on("connect", () => { console.log("DATA MQTT 连接成功"); mqttDataConnected = true; }); // mqttClientData.subscribe(`/dev/${clientIdProp}/tracker_targets`, (err) => { // if (err) console.error("DATA MQTT 订阅失败", err); // else console.log(`DATA MQTT 订阅成功: /dev/${clientIdProp}/tracker_targets`); // }); mqttClientData.on("message", (topic, message) => { console.log("topic", topic, message); console.log("接收到消息:", JSON.parse(message.toString())); }); mqttClientData.on("error", (err) => { mqttDataConnected = false; console.error(err); }); mqttClientData.on("disconnect", () => { mqttDataConnected = false; console.log("DATA MQTT 断开"); }); mqttClientData.close = function (force = true) { mqttClientData.end(force, () => { mqttDataConnected = false; console.log("DATA MQTT 已关闭"); }); }; // mqttClientData.on("close", () => { // mqttDataConnected = false; // console.log("DATA MQTT 已关闭"); // }); return mqttClientData; }