const mqtt = require('mqtt'); const logger = require('./logger'); const mqttBroker = 'mqtt://192.168.3.31'; const mqttUser = 'yangfei'; const mqttPassword = 'yangfei'; const client = mqtt.connect(mqttBroker, { username: mqttUser, password: mqttPassword, clientId: '后台服务员', // 设置客户端 ID // clientId: `backend_${Date.now()}`, // 使用时间戳生成唯一客户端ID clean: true, // 清除会话 reconnectPeriod: 5000, // 5秒重连间隔 connectTimeout: 30000, // 30秒连接超时 keepalive: 60 // 60秒心跳 }); client.on('connect', () => { if (!client.connected) { logger.info('后台管理员上线'); } logger.info('MQTT 连接成功'); }); client.on('reconnect', () => { logger.info('正在尝试重新连接 MQTT 代理...'); }); client.on('close', () => { logger.warn('MQTT 连接已断开'); }); client.on('error', (err) => { logger.error('MQTT 连接失败:', err.message); // 尝试重新连接 setTimeout(() => { client.reconnect(); }, 5000); }); client.on('offline', () => { logger.warn('MQTT 客户端已离线'); }); // 动态生成 relayTopic const getRelayTopic = (deviceId) => `device/${deviceId}/relay/control`; module.exports = { client, getRelayTopic };