现在湿度自动控制会以校准后湿度值为准
This commit is contained in:
+2
-2
@@ -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"
|
||||
|
||||
+18
-17
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user