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