From 873e06864b501fbc5f76aec7f3d0075a952a6ae2 Mon Sep 17 00:00:00 2001 From: BBIT-Kai <2911862937@qq.com> Date: Wed, 12 Aug 2026 09:14:14 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8E=B0=E5=9C=A8=E6=B9=BF=E5=BA=A6=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=8E=A7=E5=88=B6=E4=BC=9A=E4=BB=A5=E6=A0=A1=E5=87=86?= =?UTF-8?q?=E5=90=8E=E6=B9=BF=E5=BA=A6=E5=80=BC=E4=B8=BA=E5=87=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +-- .../control/humidity/HumidityController.java | 35 ++++++++++--------- .../utils/global/RoomSensor.java | 4 +-- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 54a64f4..428d9e3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { applicationId "com.example.iot_controlhost" minSdkVersion 25 targetSdkVersion 30 - versionCode 164 - versionName "3.5.0.164" + versionCode 165 + versionName "3.5.0.165" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" ndk { moduleName "mcu" diff --git a/app/src/main/java/com/example/iot_controlhost/utils/control/humidity/HumidityController.java b/app/src/main/java/com/example/iot_controlhost/utils/control/humidity/HumidityController.java index 1b51dae..72a4e52 100644 --- a/app/src/main/java/com/example/iot_controlhost/utils/control/humidity/HumidityController.java +++ b/app/src/main/java/com/example/iot_controlhost/utils/control/humidity/HumidityController.java @@ -55,11 +55,12 @@ public class HumidityController extends Control { return false; } pollingTask.startPollingTaskOnIOThread(RxTag.AUTO_HUMIDITY, Variable.AUTO_CHECK_TIME, () -> { - // 自动控制必须使用未叠加校准偏差的真实湿度;校准值仅用于界面显示和上报。 - double cur = RoomSensor.getBeforeCalibratedIndoorHumidity(); - double calibrated = RoomSensor.getAverageIndoorHumidity(); - if (cur <= 0) { - MyLog.autoError("湿度自动控制跳过:没有有效真实湿度,校准湿度=" + calibrated + "%"); + // 常规控制使用校准后的湿度;校准前湿度仅用于接近饱和时的加湿安全保护。 + double beforeCalibratedHumidity = RoomSensor.getBeforeCalibratedIndoorHumidity(); + double calibratedHumidity = RoomSensor.getAverageIndoorHumidity(); + if (calibratedHumidity <= 0) { + MyLog.autoError("湿度自动控制跳过:没有有效湿度,校准前湿度=" + + beforeCalibratedHumidity + "%"); if (!invalidHumidityLogged) { UserLog.systemError("自动控制", "湿度数据无效,已停止加湿以避免持续运行"); invalidHumidityLogged = true; @@ -85,9 +86,9 @@ public class HumidityController extends Control { } boolean needHumidify = false; boolean needDehumidify = false; - if (cur < min //当前小于用户规定最小湿度 - || cur < target - Variable.AUTO_DO_NOTHING_HUMIDITY //小于系统要求最小湿度 - || cur < target && needOpenToTarget) { // 需要急剧加湿到目标湿度 + if (calibratedHumidity < min //当前小于用户规定最小湿度 + || calibratedHumidity < target - Variable.AUTO_DO_NOTHING_HUMIDITY //小于系统要求最小湿度 + || calibratedHumidity < target && needOpenToTarget) { // 需要急剧加湿到目标湿度 needOpenToTarget = true; needHumidify = true; } else { @@ -96,15 +97,15 @@ public class HumidityController extends Control { } // 除湿逻辑(新增) - if (cur > max || cur > target && needDehumidifyToTarget) { + if (calibratedHumidity > max || calibratedHumidity > target && needDehumidifyToTarget) { needDehumidifyToTarget = true; needDehumidify = true; } else { needDehumidifyToTarget = false; needDehumidify = false; } - // 真实湿度已接近100%时,即使负校准偏差导致显示值较低,也绝不继续加湿。 - if (cur >= 99) { + // 校准前湿度已接近100%时,即使校准后湿度较低,也绝不继续加湿。 + if (beforeCalibratedHumidity >= 99) { needHumidify = false; needOpenToTarget = false; } @@ -119,14 +120,14 @@ public class HumidityController extends Control { boolean dehumidifierState = needDehumidify; if (lastHumidifierTarget == null || lastHumidifierTarget != humidifierState) { MyLog.auto("湿度控制决策变化:加湿器=" + formatState(lastHumidifierTarget) + "→" - + formatState(humidifierState) + ",真实湿度=" + cur + "%" - + ",校准湿度=" + calibrated + "% ,目标=" + target + "% ,区间=" + min + "~" + max + "%"); + + formatState(humidifierState) + ",校准前湿度=" + beforeCalibratedHumidity + "%" + + ",校准后湿度=" + calibratedHumidity + "% ,目标=" + target + "% ,区间=" + min + "~" + max + "%"); lastHumidifierTarget = humidifierState; } if (lastDehumidifierTarget == null || lastDehumidifierTarget != dehumidifierState) { MyLog.auto("湿度控制决策变化:除湿机=" + formatState(lastDehumidifierTarget) + "→" - + formatState(dehumidifierState) + ",真实湿度=" + cur + "%" - + ",校准湿度=" + calibrated + "% ,目标=" + target + "% ,区间=" + min + "~" + max + "%"); + + formatState(dehumidifierState) + ",校准前湿度=" + beforeCalibratedHumidity + "%" + + ",校准后湿度=" + calibratedHumidity + "% ,目标=" + target + "% ,区间=" + min + "~" + max + "%"); lastDehumidifierTarget = dehumidifierState; } Controller autoDehumidifier = RoomController.getAutoDehumidifier(); @@ -146,8 +147,8 @@ public class HumidityController extends Control { MyQueue.getInstance(MyQueue.TYPE_CONTROLLER).addTask(new QueueIOTask(() -> { boolean humidifierResult = MyUtil.autoControlOperateThird(RoomController.humidifier, humidifierState); MyLog.auto("湿度控制执行结果:设备=加湿器,目标=" + formatState(humidifierState) - + ",结果=" + (humidifierResult ? "成功" : "失败") + ",真实湿度=" + cur - + "% ,校准湿度=" + calibrated + "%"); + + ",结果=" + (humidifierResult ? "成功" : "失败") + ",校准前湿度=" + + beforeCalibratedHumidity + "% ,校准后湿度=" + calibratedHumidity + "%"); String airExchangeMode = AutoModelSet.getAirExchangeMode(); if (RoomController.airExchange.isAvailable() && airExchangeMode.equals(SpinnerList.AIR_EXCHANGE_MODES[2])) { boolean airExchangeResult = MyUtil.autoControlOperateThird(RoomController.airExchange, humidifierState); diff --git a/app/src/main/java/com/example/iot_controlhost/utils/global/RoomSensor.java b/app/src/main/java/com/example/iot_controlhost/utils/global/RoomSensor.java index adee8e1..17d8e1f 100644 --- a/app/src/main/java/com/example/iot_controlhost/utils/global/RoomSensor.java +++ b/app/src/main/java/com/example/iot_controlhost/utils/global/RoomSensor.java @@ -199,7 +199,7 @@ public class RoomSensor { } /** - * 获取未叠加校准偏差的室内平均真实湿度,供自动控制和安全保护使用。 + * 获取未叠加校准偏差的室内平均湿度,供湿度上限安全保护使用。 */ public static double getBeforeCalibratedIndoorHumidity() { double sumOfHumidities = 0.0; @@ -236,7 +236,7 @@ public class RoomSensor { return Math.round(sumOfHumidities / numberOfEnabledSensors * 10.0) / 10.0; } /** - * 获取叠加校准偏差后的室内平均湿度,供界面显示和上报使用。 + * 获取叠加校准偏差后的室内平均湿度,供自动控制、界面显示和上报使用。 */ public static double getAverageIndoorHumidity() { double averageHumidity = getBeforeCalibratedIndoorHumidity();