2025-09-26 10:34:00 +08:00
|
|
|
|
// MQTT配置文件
|
2025-09-27 14:59:48 +08:00
|
|
|
|
// 使用条件编译适配不同平台
|
|
|
|
|
|
|
|
|
|
|
|
let mqtturl;
|
|
|
|
|
|
|
|
|
|
|
|
// #ifdef H5
|
|
|
|
|
|
mqtturl = "ws://122.51.194.184:8083/mqtt";
|
|
|
|
|
|
// #endif
|
|
|
|
|
|
|
|
|
|
|
|
// #ifdef APP-PLUS || MP-WEIXIN
|
|
|
|
|
|
mqtturl = "wx://122.51.194.184:8083/mqtt";
|
|
|
|
|
|
//#endif
|
|
|
|
|
|
|
|
|
|
|
|
// #ifdef MP-ALIPAY
|
|
|
|
|
|
mqtturl = "alis://122.51.194.184:8083/mqtt";
|
|
|
|
|
|
//#endif
|
|
|
|
|
|
|
|
|
|
|
|
console.log('🔧 MQTT环境检测:', {
|
|
|
|
|
|
mqtturl: mqtturl,
|
|
|
|
|
|
// #ifdef H5
|
|
|
|
|
|
platform: 'H5',
|
|
|
|
|
|
// #endif
|
|
|
|
|
|
// #ifdef APP-PLUS
|
|
|
|
|
|
platform: 'APP-PLUS',
|
|
|
|
|
|
// #endif
|
|
|
|
|
|
// #ifdef MP-WEIXIN
|
|
|
|
|
|
platform: 'MP-WEIXIN',
|
|
|
|
|
|
// #endif
|
|
|
|
|
|
// #ifdef MP-ALIPAY
|
|
|
|
|
|
platform: 'MP-ALIPAY',
|
|
|
|
|
|
// #endif
|
|
|
|
|
|
});
|
|
|
|
|
|
|
2025-09-26 10:34:00 +08:00
|
|
|
|
export const MQTT_CONFIG = {
|
2025-09-27 14:59:48 +08:00
|
|
|
|
// EMQX服务器地址 - 使用条件编译选择协议
|
|
|
|
|
|
broker: mqtturl,
|
2025-09-26 10:34:00 +08:00
|
|
|
|
|
|
|
|
|
|
// 连接选项
|
|
|
|
|
|
options: {
|
|
|
|
|
|
clientId: 'mobile-inspection-system-' + Math.random().toString(16).substr(2, 8),
|
2025-09-27 14:59:48 +08:00
|
|
|
|
username: 'dmbroker',
|
|
|
|
|
|
password: 'qwer1234',
|
|
|
|
|
|
keepalive: 30,
|
2025-09-26 10:34:00 +08:00
|
|
|
|
clean: true,
|
2025-09-27 14:59:48 +08:00
|
|
|
|
reconnectPeriod: 1000,
|
|
|
|
|
|
connectTimeout: 5000,
|
|
|
|
|
|
protocolVersion: 4,
|
|
|
|
|
|
rejectUnauthorized: false,
|
2025-09-26 10:34:00 +08:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 主题配置
|
|
|
|
|
|
topics: {
|
|
|
|
|
|
// 设备数据主题
|
2025-09-27 14:59:48 +08:00
|
|
|
|
// deviceData: 'hdydcj_01_down',
|
|
|
|
|
|
deviceData: 'HDYDCJ_01_DOWN',
|
2025-09-26 10:34:00 +08:00
|
|
|
|
|
|
|
|
|
|
// 设备类型
|
|
|
|
|
|
deviceTypes: {
|
|
|
|
|
|
WSD: '温湿度', // 温湿度传感器
|
|
|
|
|
|
AC: '空调', // 空调设备
|
|
|
|
|
|
PM: 'PM2.5', // PM2.5传感器
|
2025-09-27 14:59:48 +08:00
|
|
|
|
// SIMPLE: '简单数据', // 简单数据(如"11"、"22")
|
2025-09-26 10:34:00 +08:00
|
|
|
|
// 可以根据需要添加更多设备类型
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 数据解析工具
|
|
|
|
|
|
export const DataParser = {
|
|
|
|
|
|
// 解析设备数据
|
|
|
|
|
|
parseDeviceData(rawData) {
|
|
|
|
|
|
try {
|
2025-09-27 14:59:48 +08:00
|
|
|
|
console.log('🔧 开始解析设备数据...')
|
|
|
|
|
|
console.log('原始数据:', rawData)
|
|
|
|
|
|
console.log('数据类型:', typeof rawData)
|
|
|
|
|
|
|
|
|
|
|
|
// 根据截图,数据可能是简单的数字(如"11"、"22")
|
|
|
|
|
|
// 先尝试解析为JSON,如果失败则作为简单数据处理
|
|
|
|
|
|
let data
|
|
|
|
|
|
try {
|
|
|
|
|
|
data = JSON.parse(rawData)
|
|
|
|
|
|
console.log('解析后的JSON数据:', data)
|
|
|
|
|
|
console.log('是否为数组:', Array.isArray(data))
|
|
|
|
|
|
|
|
|
|
|
|
if (Array.isArray(data) && data.length > 0) {
|
|
|
|
|
|
console.log('✅ 返回数组第一个元素:', data[0])
|
|
|
|
|
|
return data[0] // 取第一个设备数据
|
|
|
|
|
|
} else if (data && typeof data === 'object') {
|
|
|
|
|
|
console.log('✅ 返回对象数据:', data)
|
|
|
|
|
|
return data // 直接返回对象
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (jsonError) {
|
|
|
|
|
|
console.log('⚠️ 不是JSON格式,作为简单数据处理')
|
|
|
|
|
|
// 处理简单数据(如"11"、"22")
|
|
|
|
|
|
const simpleData = {
|
|
|
|
|
|
Device: 'SIMPLE',
|
|
|
|
|
|
timestamp: Math.floor(Date.now() / 1000),
|
|
|
|
|
|
Data: {
|
|
|
|
|
|
value: rawData,
|
|
|
|
|
|
type: 'simple_data'
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
console.log('✅ 返回简单数据:', simpleData)
|
|
|
|
|
|
return simpleData
|
2025-09-26 10:34:00 +08:00
|
|
|
|
}
|
2025-09-27 14:59:48 +08:00
|
|
|
|
|
|
|
|
|
|
console.log('⚠️ 数据格式不符合预期')
|
2025-09-26 10:34:00 +08:00
|
|
|
|
return null
|
|
|
|
|
|
} catch (error) {
|
2025-09-27 14:59:48 +08:00
|
|
|
|
console.error('❌ 解析设备数据失败:', error)
|
|
|
|
|
|
console.error('原始数据:', rawData)
|
2025-09-26 10:34:00 +08:00
|
|
|
|
return null
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 获取设备类型名称
|
|
|
|
|
|
getDeviceTypeName(deviceCode) {
|
|
|
|
|
|
return MQTT_CONFIG.topics.deviceTypes[deviceCode] || deviceCode
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 转换Unix时间戳为可读时间
|
|
|
|
|
|
formatTimestamp(timestamp) {
|
|
|
|
|
|
return new Date(timestamp * 1000).toLocaleString('zh-CN')
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|