globalMqtt.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import mqtt from './mqtt';
  2. let mqttClientCmd = null; // 全局 CMD MQTT
  3. let mqttClientData = null; // 全局 DATA MQTT
  4. let mqttCmdConnected = false;
  5. let mqttDataConnected = false;
  6. let reconnectTimer = null; // 重连定时器
  7. export function createMqttClient() {
  8. if (mqttCmdConnected) {
  9. console.log("CMD MQTT 已连接");
  10. return mqttClientCmd;
  11. }
  12. const params = {
  13. // keepalive: 60,
  14. clean: true,
  15. connectTimeout: 30 * 1000,
  16. clientId:
  17. "xcx_mqtt_cmd1" +
  18. uni.getStorageSync("userId") +
  19. Math.random().toString(16).substring(2, 8),
  20. username: "lnradar",
  21. password: "lnradar",
  22. wsOptions: {
  23. WebSocket: function (url) {
  24. return wx.connectSocket({
  25. url: url,
  26. header: {
  27. "content-type": "application/json",
  28. },
  29. protocols: ["mqtt"],
  30. });
  31. },
  32. },
  33. };
  34. let client = "";
  35. client = mqtt.connect("wxs://cmd.radar-power.cn/mqtt/", params);
  36. client.on("connect", () => {
  37. mqttCmdConnected = true;
  38. console.log("MQTTCMD连接成功");
  39. const userId = uni.getStorageSync("userId");
  40. client.subscribe(`/mps/wx_${userId}/notice`, (err) => {
  41. if (err) {
  42. console.error("订阅失败", err);
  43. } else {
  44. console.log(`成功订阅设备主题: /mps/wx_${userId}/notice`);
  45. }
  46. });
  47. });
  48. client.on("message", (topic, message) => {
  49. console.log("topic", topic, message);
  50. console.log("接收到消息:", JSON.parse(message.toString()));
  51. const userId = uni.getStorageSync("userId");
  52. const noticeMatch = /^\/mps\/wx_(.+)\/notice$/;
  53. const match = topic.match(noticeMatch);
  54. if (!match) return;
  55. });
  56. client.on("error", (err) => {
  57. mqttCmdConnected = false;
  58. console.error("MQTT连接错误:", err);
  59. // 连接失败时重新尝试连接
  60. setTimeout(() => {
  61. createMqttClient(); // 重新连接
  62. }, 1000);
  63. });
  64. client.on("disconnect", () => {
  65. mqttCmdConnected = false;
  66. console.log("MQTT断开连接");
  67. });
  68. return client;
  69. }
  70. // 创建data连接
  71. export function createMqttData() {
  72. if (!uni.getStorageSync("userId")) {
  73. console.warn("DATA MQTT 创建失败:缺少 userId");
  74. return null;
  75. }
  76. if (mqttDataConnected) return mqttClientData;
  77. const params = {
  78. // keepalive: 60,
  79. clean: true,
  80. connectTimeout: 1500,
  81. clientId: "xcx_mqtt_data1_" + uni.getStorageSync("userId") + "_" + Date.now(),
  82. username: "lnradar",
  83. password: "lnradar",
  84. WebSocket: function (url) {
  85. return wx.connectSocket({
  86. url: url,
  87. header: {
  88. "content-type": "application/json",
  89. },
  90. protocols: ["mqtt"],
  91. });
  92. },
  93. reconnectPeriod: 2000
  94. };
  95. mqttClientData = mqtt.connect("wxs://data.radar-power.cn/mqtt/", params);
  96. mqttClientData.on("connect", () => {
  97. console.log("DATA MQTT 连接成功");
  98. mqttDataConnected = true;
  99. });
  100. // mqttClientData.subscribe(`/dev/${clientIdProp}/tracker_targets`, (err) => {
  101. // if (err) console.error("DATA MQTT 订阅失败", err);
  102. // else console.log(`DATA MQTT 订阅成功: /dev/${clientIdProp}/tracker_targets`);
  103. // });
  104. mqttClientData.on("message", (topic, message) => {
  105. console.log("topic", topic, message);
  106. console.log("接收到消息:", JSON.parse(message.toString()));
  107. });
  108. mqttClientData.on("error", (err) => { mqttDataConnected = false; console.error(err); });
  109. mqttClientData.on("disconnect", () => { mqttDataConnected = false; console.log("DATA MQTT 断开"); });
  110. mqttClientData.close = function (force = true) {
  111. mqttClientData.end(force, () => {
  112. mqttDataConnected = false;
  113. console.log("DATA MQTT 已关闭");
  114. });
  115. };
  116. // mqttClientData.on("close", () => {
  117. // mqttDataConnected = false;
  118. // console.log("DATA MQTT 已关闭");
  119. // });
  120. return mqttClientData;
  121. }