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

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"
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"
@@ -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);
@@ -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();