fix:报警明细

This commit is contained in:
吉浩茹
2025-10-09 18:02:24 +08:00
parent 9e400841ab
commit 05ce90ef75
3 changed files with 96 additions and 130 deletions

View File

@ -309,7 +309,6 @@ export default {
isHumidityInputFocused: false, isHumidityInputFocused: false,
// 报警相关数据 // 报警相关数据
acFaultStatus: 0, // 空调故障状态1表示故障 acFaultStatus: 0, // 空调故障状态1表示故障
alertHistory: [], // 报警历史记录
// 系统启动事件相关 // 系统启动事件相关
hasCreatedStartupEvent: false, // 是否已创建启动事件 hasCreatedStartupEvent: false, // 是否已创建启动事件
acStatus: 4, acStatus: 4,
@ -539,7 +538,6 @@ export default {
this.lastUpdate = data.time || new Date().toLocaleString('zh-CN') this.lastUpdate = data.time || new Date().toLocaleString('zh-CN')
// 检查报警条件传入MQTT原始数据 // 检查报警条件传入MQTT原始数据
this.checkAlerts(data)
} else if (data.deviceType === 'AC') { } else if (data.deviceType === 'AC') {
// 处理空调AC数据 // 处理空调AC数据
if (data.faultStatus !== undefined) { if (data.faultStatus !== undefined) {
@ -561,6 +559,7 @@ export default {
console.log('⚠️ 非WSD、AC、PM25设备数据跳过更新:', data.deviceType) console.log('⚠️ 非WSD、AC、PM25设备数据跳过更新:', data.deviceType)
// 处理其他设备数据 // 处理其他设备数据
} }
this.checkAlerts(data)
}, },
// 格式化日期时间为指定格式 // 格式化日期时间为指定格式
@ -578,101 +577,99 @@ export default {
// 检查报警条件 // 检查报警条件
checkAlerts(mqttData) { checkAlerts(mqttData) {
const currentTime = this.formatDateTime(new Date()) const currentTime = this.formatDateTime(new Date())
console.log('====mqttData', mqttData)
// 只处理WSD设备的数据 // 只处理WSD设备的数据
if (mqttData.deviceType !== 'WSD') { if (mqttData.deviceType === 'WSD') {
const mqttTemperature = mqttData.temperature
const mqttHumidity = mqttData.humidity
if (mqttTemperature !== undefined && mqttTemperature !== 0 && this.temperatureRange.min !== 0 && this.temperatureRange.max !== 0) {
// 1. 温度报警使用环境控制设置的区间使用MQTT原始数据
if (mqttTemperature < this.temperatureRange.min || mqttTemperature > this.temperatureRange.max) {
const alert = {
// content: `温度传感器异常,读数${mqttTemperature}°C超出控制范围${this.temperatureRange.min}°C-${this.temperatureRange.max}°C`,
content: `温度超出范围,${mqttTemperature}°C超出控制范围${this.temperatureRange.min}°C-${this.temperatureRange.max}°C`,
category: "温度报警",
alertTime: currentTime,
level: "中危",
action: "检查温度",
actionTime: currentTime,
deviceId: "WSD_001"
}
this.logAlert(alert)
}
}
if (mqttHumidity !== undefined && mqttHumidity !==0 && this.humidityRange.min !==0 && this.humidityRange.max !==0) {
// 2. 湿度报警使用环境控制设置的区间使用MQTT原始数据
if (mqttHumidity < this.humidityRange.min || mqttHumidity > this.humidityRange.max) {
const alert = {
// content: `湿度传感器异常,读数${mqttHumidity}%超出控制范围${this.humidityRange.min}%-${this.humidityRange.max}%`,
content: `湿度超出范围,${mqttHumidity}%超出控制范围${this.humidityRange.min}%-${this.humidityRange.max}%`,
category: "湿度报警",
alertTime: currentTime,
level: "中危",
action: "检查湿度",
actionTime: currentTime,
deviceId: "WSD_001"
}
this.logAlert(alert)
}
}
// 4. 温度偏差报警:|温湿度计温度 - 空调设定温度| / 空调设定温度 > 30%使用MQTT原始数据
if (mqttTemperature !== undefined && this.targetTemperature > 0) {
const temperatureDiff = Math.abs(mqttTemperature - this.targetTemperature)
const deviationPercent = (temperatureDiff / this.targetTemperature) * 100
if (deviationPercent > 30) {
const alert = {
// content: `温度偏差过大,实际${mqttTemperature}°C与设定${this.targetTemperature}°C偏差${deviationPercent.toFixed(1)}%`,
content: `温度偏差过大,${mqttTemperature}°C与设定${this.targetTemperature}°C偏差${deviationPercent.toFixed(1)}%`,
category: "温度控制异常",
alertTime: currentTime,
level: "中危",
action: "调整空调设定温度",
actionTime: currentTime,
deviceId: "AC_001"
}
this.logAlert(alert)
}
}
// 5. 湿度偏差报警:|温湿度计湿度 - 空调设定湿度| / 空调设定湿度 > 30%使用MQTT原始数据
if (mqttHumidity !== undefined && this.targetHumidity > 0) {
const humidityDiff = Math.abs(mqttHumidity - this.targetHumidity)
const deviationPercent = (humidityDiff / this.targetHumidity) * 100
if (deviationPercent > 30) {
const alert = {
// content: `湿度偏差过大,实际${mqttHumidity}%与设定${this.targetHumidity}%偏差${deviationPercent.toFixed(1)}%`,
content: `湿度偏差过大,${mqttHumidity}%与设定${this.targetHumidity}%偏差${deviationPercent.toFixed(1)}%`,
category: "湿度控制异常",
alertTime: currentTime,
level: "中危",
action: "调整空调设定湿度",
actionTime: currentTime,
deviceId: "AC_001"
}
this.logAlert(alert)
}
}
return return
} }
console.log('====mqttData', mqttData)
// {
// "deviceType": "WSD",
// "temperature": 0,
// "humidity": 0,
// "cleanliness": 0
// }
// 获取MQTT原始数据 if (mqttData.deviceType === 'AC') {
const mqttTemperature = mqttData.temperature // 3. 空调故障报警acFaultStatus为1
const mqttHumidity = mqttData.humidity if (this.acFaultStatus === 1) {
// 1. 温度报警使用环境控制设置的区间使用MQTT原始数据
if (mqttTemperature !== undefined && mqttTemperature !== 0 && (mqttTemperature < this.temperatureRange.min || mqttTemperature > this.temperatureRange.max)) {
const alert = {
// content: `温度传感器异常,读数${mqttTemperature}°C超出控制范围${this.temperatureRange.min}°C-${this.temperatureRange.max}°C`,
content: `温度超出控制范围`,
category: "传感器故障",
alertTime: currentTime,
level: "高危",
action: "检查温度传感器连接",
actionTime: currentTime,
deviceId: "WSD_001"
}
this.logAlert(alert)
}
// 2. 湿度报警使用环境控制设置的区间使用MQTT原始数据
if (mqttHumidity !== undefined && (mqttHumidity < this.humidityRange.min || mqttHumidity > this.humidityRange.max)) {
const alert = {
// content: `湿度传感器异常,读数${mqttHumidity}%超出控制范围${this.humidityRange.min}%-${this.humidityRange.max}%`,
content: `温度超出控制范围`,
category: "传感器故障",
alertTime: currentTime,
level: "高危",
action: "检查湿度传感器连接",
actionTime: currentTime,
deviceId: "WSD_001"
}
this.logAlert(alert)
}
// 3. 空调故障报警acFaultStatus为1
if (this.acFaultStatus === 1) {
const alert = {
// content: "空调故障,需要手动设置温度",
content: "空调报警",
category: "设备故障",
alertTime: currentTime,
level: "高危",
action: "手动调节空调温度",
actionTime: currentTime,
deviceId: "AC_001"
}
this.logAlert(alert)
}
// 4. 温度偏差报警:|温湿度计温度 - 空调设定温度| / 空调设定温度 > 30%使用MQTT原始数据
if (mqttTemperature !== undefined && this.targetTemperature > 0) {
const temperatureDiff = Math.abs(mqttTemperature - this.targetTemperature)
const deviationPercent = (temperatureDiff / this.targetTemperature) * 100
if (deviationPercent > 30) {
const alert = { const alert = {
// content: `温度偏差过大,实际${mqttTemperature}°C与设定${this.targetTemperature}°C偏差${deviationPercent.toFixed(1)}%`, // content: "空调故障,需要手动设置温度",
content: `温度偏差过大`, content: "空调报警",
category: "温度控制异常", category: "空调故障",
alertTime: currentTime, alertTime: currentTime,
level: "危", level: "危",
action: "调整空调设定温度", action: "手动调节空调温度",
actionTime: currentTime,
deviceId: "AC_001"
}
this.logAlert(alert)
}
}
// 5. 湿度偏差报警:|温湿度计湿度 - 空调设定湿度| / 空调设定湿度 > 30%使用MQTT原始数据
if (mqttHumidity !== undefined && this.targetHumidity > 0) {
const humidityDiff = Math.abs(mqttHumidity - this.targetHumidity)
const deviationPercent = (humidityDiff / this.targetHumidity) * 100
if (deviationPercent > 30) {
const alert = {
// content: `湿度偏差过大,实际${mqttHumidity}%与设定${this.targetHumidity}%偏差${deviationPercent.toFixed(1)}%`,
content: `湿度偏差过大`,
category: "湿度控制异常",
alertTime: currentTime,
level: "中危",
action: "调整空调设定湿度",
actionTime: currentTime, actionTime: currentTime,
deviceId: "AC_001" deviceId: "AC_001"
} }
@ -684,21 +681,13 @@ export default {
// 记录报警到控制台并调用创建告警接口 // 记录报警到控制台并调用创建告警接口
async logAlert(alert) { async logAlert(alert) {
console.log('🚨 报警触发:', JSON.stringify(alert, null, 2)) console.log('🚨 报警触发:', JSON.stringify(alert, null, 2))
// this.alertHistory.push(alert) // 调用创建告警接口
try {
// // 调用创建告警接口 console.log('📤 正在创建告警记录...')
// try { await alertApi.create(alert)
// console.log('📤 正在创建告警记录...') } catch (error) {
// const response = await alertApi.create(alert) console.error('❌ 告警记录创建失败:', error)
// console.log('✅ 告警记录创建成功:', response) }
// } catch (error) {
// console.error('❌ 告警记录创建失败:', error)
// }
// // 限制报警历史记录数量,避免内存溢出
// if (this.alertHistory.length > 100) {
// this.alertHistory = this.alertHistory.slice(-50)
// }
}, },
// 降低目标温度 // 降低目标温度

View File

@ -40,17 +40,8 @@ class HttpService {
// 构建完整URL // 构建完整URL
const fullUrl = url.startsWith('http') ? url : `${this.baseURL}${url}` const fullUrl = url.startsWith('http') ? url : `${this.baseURL}${url}`
// 合并请求头 // 合并请求头
const requestHeaders = { ...this.defaultHeaders, ...headers } const requestHeaders = { ...this.defaultHeaders, ...headers }
console.log('🌐 HTTP请求:', {
url: fullUrl,
method,
data,
headers: requestHeaders
})
uni.request({ uni.request({
url: fullUrl, url: fullUrl,
method, method,
@ -58,8 +49,6 @@ class HttpService {
header: requestHeaders, header: requestHeaders,
timeout, timeout,
success: (response) => { success: (response) => {
console.log('✅ HTTP响应:', response)
// 检查HTTP状态码 // 检查HTTP状态码
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
resolve(response.data) resolve(response.data)
@ -119,13 +108,6 @@ class HttpService {
upload(url, filePath, formData = {}, options = {}) { upload(url, filePath, formData = {}, options = {}) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const fullUrl = url.startsWith('http') ? url : `${this.baseURL}${url}` const fullUrl = url.startsWith('http') ? url : `${this.baseURL}${url}`
console.log('📤 文件上传:', {
url: fullUrl,
filePath,
formData
})
uni.uploadFile({ uni.uploadFile({
url: fullUrl, url: fullUrl,
filePath, filePath,
@ -133,7 +115,6 @@ class HttpService {
formData, formData,
header: { ...this.defaultHeaders, ...options.headers }, header: { ...this.defaultHeaders, ...options.headers },
success: (response) => { success: (response) => {
console.log('✅ 文件上传成功:', response)
try { try {
const data = JSON.parse(response.data) const data = JSON.parse(response.data)
resolve(data) resolve(data)
@ -153,14 +134,10 @@ class HttpService {
download(url, options = {}) { download(url, options = {}) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const fullUrl = url.startsWith('http') ? url : `${this.baseURL}${url}` const fullUrl = url.startsWith('http') ? url : `${this.baseURL}${url}`
console.log('📥 文件下载:', fullUrl)
uni.downloadFile({ uni.downloadFile({
url: fullUrl, url: fullUrl,
header: { ...this.defaultHeaders, ...options.headers }, header: { ...this.defaultHeaders, ...options.headers },
success: (response) => { success: (response) => {
console.log('✅ 文件下载成功:', response)
resolve(response) resolve(response)
}, },
fail: (error) => { fail: (error) => {

View File

@ -150,7 +150,7 @@ class MqttDataManager {
// 可以添加其他空调参数 // 可以添加其他空调参数
break break
case 'PM': // PM2.5传感器 case 'PM25': // PM2.5传感器
if (data.PM25 !== undefined) { if (data.PM25 !== undefined) {
parsedData.pm25 = parseFloat(data.PM25) parsedData.pm25 = parseFloat(data.PM25)
} }