现在湿度自动控制会以校准后湿度值为准

This commit is contained in:
BBIT-Kai
2026-08-12 09:14:14 +08:00
parent 381605cf70
commit 873e06864b
3 changed files with 22 additions and 21 deletions
+2 -2
View File
@@ -9,8 +9,8 @@ android {
applicationId "com.example.iot_controlhost" applicationId "com.example.iot_controlhost"
minSdkVersion 25 minSdkVersion 25
targetSdkVersion 30 targetSdkVersion 30
versionCode 164 versionCode 165
versionName "3.5.0.164" versionName "3.5.0.165"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
ndk { ndk {
moduleName "mcu" moduleName "mcu"
@@ -55,11 +55,12 @@ public class HumidityController extends Control {
return false; return false;
} }
pollingTask.startPollingTaskOnIOThread(RxTag.AUTO_HUMIDITY, Variable.AUTO_CHECK_TIME, () -> { pollingTask.startPollingTaskOnIOThread(RxTag.AUTO_HUMIDITY, Variable.AUTO_CHECK_TIME, () -> {
// 自动控制必须使用未叠加校准偏差的真实湿度;校准值仅用于界面显示和上报 // 常规控制使用校准后的湿度;校准前湿度仅用于接近饱和时的加湿安全保护
double cur = RoomSensor.getBeforeCalibratedIndoorHumidity(); double beforeCalibratedHumidity = RoomSensor.getBeforeCalibratedIndoorHumidity();
double calibrated = RoomSensor.getAverageIndoorHumidity(); double calibratedHumidity = RoomSensor.getAverageIndoorHumidity();
if (cur <= 0) { if (calibratedHumidity <= 0) {
MyLog.autoError("湿度自动控制跳过:没有有效真实湿度,校准湿度=" + calibrated + "%"); MyLog.autoError("湿度自动控制跳过:没有有效湿度,校准湿度="
+ beforeCalibratedHumidity + "%");
if (!invalidHumidityLogged) { if (!invalidHumidityLogged) {
UserLog.systemError("自动控制", "湿度数据无效,已停止加湿以避免持续运行"); UserLog.systemError("自动控制", "湿度数据无效,已停止加湿以避免持续运行");
invalidHumidityLogged = true; invalidHumidityLogged = true;
@@ -85,9 +86,9 @@ public class HumidityController extends Control {
} }
boolean needHumidify = false; boolean needHumidify = false;
boolean needDehumidify = false; boolean needDehumidify = false;
if (cur < min //当前小于用户规定最小湿度 if (calibratedHumidity < min //当前小于用户规定最小湿度
|| cur < target - Variable.AUTO_DO_NOTHING_HUMIDITY //小于系统要求最小湿度 || calibratedHumidity < target - Variable.AUTO_DO_NOTHING_HUMIDITY //小于系统要求最小湿度
|| cur < target && needOpenToTarget) { // 需要急剧加湿到目标湿度 || calibratedHumidity < target && needOpenToTarget) { // 需要急剧加湿到目标湿度
needOpenToTarget = true; needOpenToTarget = true;
needHumidify = true; needHumidify = true;
} else { } else {
@@ -96,15 +97,15 @@ public class HumidityController extends Control {
} }
// 除湿逻辑(新增) // 除湿逻辑(新增)
if (cur > max || cur > target && needDehumidifyToTarget) { if (calibratedHumidity > max || calibratedHumidity > target && needDehumidifyToTarget) {
needDehumidifyToTarget = true; needDehumidifyToTarget = true;
needDehumidify = true; needDehumidify = true;
} else { } else {
needDehumidifyToTarget = false; needDehumidifyToTarget = false;
needDehumidify = false; needDehumidify = false;
} }
// 真实湿度已接近100%时,即使校准偏差导致显示值较低,也绝不继续加湿。 // 校准前湿度已接近100%时,即使校准后湿度较低,也绝不继续加湿。
if (cur >= 99) { if (beforeCalibratedHumidity >= 99) {
needHumidify = false; needHumidify = false;
needOpenToTarget = false; needOpenToTarget = false;
} }
@@ -119,14 +120,14 @@ public class HumidityController extends Control {
boolean dehumidifierState = needDehumidify; boolean dehumidifierState = needDehumidify;
if (lastHumidifierTarget == null || lastHumidifierTarget != humidifierState) { if (lastHumidifierTarget == null || lastHumidifierTarget != humidifierState) {
MyLog.auto("湿度控制决策变化:加湿器=" + formatState(lastHumidifierTarget) + "" MyLog.auto("湿度控制决策变化:加湿器=" + formatState(lastHumidifierTarget) + ""
+ formatState(humidifierState) + "真实湿度=" + cur + "%" + formatState(humidifierState) + "校准前湿度=" + beforeCalibratedHumidity + "%"
+ ",校准湿度=" + calibrated + "% ,目标=" + target + "% ,区间=" + min + "~" + max + "%"); + ",校准湿度=" + calibratedHumidity + "% ,目标=" + target + "% ,区间=" + min + "~" + max + "%");
lastHumidifierTarget = humidifierState; lastHumidifierTarget = humidifierState;
} }
if (lastDehumidifierTarget == null || lastDehumidifierTarget != dehumidifierState) { if (lastDehumidifierTarget == null || lastDehumidifierTarget != dehumidifierState) {
MyLog.auto("湿度控制决策变化:除湿机=" + formatState(lastDehumidifierTarget) + "" MyLog.auto("湿度控制决策变化:除湿机=" + formatState(lastDehumidifierTarget) + ""
+ formatState(dehumidifierState) + "真实湿度=" + cur + "%" + formatState(dehumidifierState) + "校准前湿度=" + beforeCalibratedHumidity + "%"
+ ",校准湿度=" + calibrated + "% ,目标=" + target + "% ,区间=" + min + "~" + max + "%"); + ",校准湿度=" + calibratedHumidity + "% ,目标=" + target + "% ,区间=" + min + "~" + max + "%");
lastDehumidifierTarget = dehumidifierState; lastDehumidifierTarget = dehumidifierState;
} }
Controller autoDehumidifier = RoomController.getAutoDehumidifier(); Controller autoDehumidifier = RoomController.getAutoDehumidifier();
@@ -146,8 +147,8 @@ public class HumidityController extends Control {
MyQueue.getInstance(MyQueue.TYPE_CONTROLLER).addTask(new QueueIOTask(() -> { MyQueue.getInstance(MyQueue.TYPE_CONTROLLER).addTask(new QueueIOTask(() -> {
boolean humidifierResult = MyUtil.autoControlOperateThird(RoomController.humidifier, humidifierState); boolean humidifierResult = MyUtil.autoControlOperateThird(RoomController.humidifier, humidifierState);
MyLog.auto("湿度控制执行结果:设备=加湿器,目标=" + formatState(humidifierState) MyLog.auto("湿度控制执行结果:设备=加湿器,目标=" + formatState(humidifierState)
+ ",结果=" + (humidifierResult ? "成功" : "失败") + "真实湿度=" + cur + ",结果=" + (humidifierResult ? "成功" : "失败") + "校准前湿度="
+ "% ,校准湿度=" + calibrated + "%"); + beforeCalibratedHumidity + "% ,校准湿度=" + calibratedHumidity + "%");
String airExchangeMode = AutoModelSet.getAirExchangeMode(); String airExchangeMode = AutoModelSet.getAirExchangeMode();
if (RoomController.airExchange.isAvailable() && airExchangeMode.equals(SpinnerList.AIR_EXCHANGE_MODES[2])) { if (RoomController.airExchange.isAvailable() && airExchangeMode.equals(SpinnerList.AIR_EXCHANGE_MODES[2])) {
boolean airExchangeResult = MyUtil.autoControlOperateThird(RoomController.airExchange, humidifierState); boolean airExchangeResult = MyUtil.autoControlOperateThird(RoomController.airExchange, humidifierState);
@@ -199,7 +199,7 @@ public class RoomSensor {
} }
/** /**
* 获取未叠加校准偏差的室内平均真实湿度,供自动控制和安全保护使用。 * 获取未叠加校准偏差的室内平均湿度,供湿度上限安全保护使用。
*/ */
public static double getBeforeCalibratedIndoorHumidity() { public static double getBeforeCalibratedIndoorHumidity() {
double sumOfHumidities = 0.0; double sumOfHumidities = 0.0;
@@ -236,7 +236,7 @@ public class RoomSensor {
return Math.round(sumOfHumidities / numberOfEnabledSensors * 10.0) / 10.0; return Math.round(sumOfHumidities / numberOfEnabledSensors * 10.0) / 10.0;
} }
/** /**
* 获取叠加校准偏差后的室内平均湿度,供界面显示和上报使用。 * 获取叠加校准偏差后的室内平均湿度,供自动控制、界面显示和上报使用。
*/ */
public static double getAverageIndoorHumidity() { public static double getAverageIndoorHumidity() {
double averageHumidity = getBeforeCalibratedIndoorHumidity(); double averageHumidity = getBeforeCalibratedIndoorHumidity();