refactor: some changes

This commit is contained in:
Yurii
2026-05-16 17:57:10 +03:00
parent 66a433e0dd
commit c6117f106e
2 changed files with 57 additions and 36 deletions
+13 -28
View File
@@ -336,76 +336,61 @@ public:
return updated; return updated;
} }
static float getMeanValueByPurpose(Purpose purpose, const ValueType valueType, const AverageType avgType = AverageType::MEAN, bool onlyConnected = true) { static float getMeanValueByPurpose(Purpose purpose, const ValueType valueType, const AverageType avgType = AverageType::MEAN, const bool onlyConnected = true, const float defaultValue = NAN) {
if (settings == nullptr || results == nullptr) { if (settings == nullptr || results == nullptr) {
return 0.0f; return defaultValue;
} }
uint8_t valueId = (uint8_t) valueType; uint8_t valueId = (uint8_t) valueType;
if (!isValidValueId(valueId)) { if (!isValidValueId(valueId)) {
return 0.0f; return defaultValue;
} }
if (avgType == AverageType::MEAN) {
float value = 0.0f; float value = 0.0f;
uint8_t amount = 0; uint8_t amount = 0;
if (avgType == AverageType::MEAN) {
float sum = 0.0f;
for (uint8_t id = 0; id <= getMaxSensorId(); id++) { for (uint8_t id = 0; id <= getMaxSensorId(); id++) {
auto& sSensor = settings[id]; auto& sSensor = settings[id];
auto& rSensor = results[id]; auto& rSensor = results[id];
if (sSensor.purpose == purpose && (!onlyConnected || rSensor.connected)) { if (sSensor.purpose == purpose && (!onlyConnected || rSensor.connected)) {
value += rSensor.values[valueId]; sum += rSensor.values[valueId];
amount++; amount++;
} }
} }
if (!amount) { value = amount == 1 ? sum : (sum / amount);
return 0.0f;
} else if (amount == 1) {
return value;
} else {
return value / amount;
}
} else if (avgType == AverageType::MINIMUM) { } else if (avgType == AverageType::MINIMUM) {
float value = NAN;
for (uint8_t id = 0; id <= getMaxSensorId(); id++) { for (uint8_t id = 0; id <= getMaxSensorId(); id++) {
auto& sSensor = settings[id]; auto& sSensor = settings[id];
auto& rSensor = results[id]; auto& rSensor = results[id];
if (sSensor.purpose == purpose && (!onlyConnected || rSensor.connected)) { if (sSensor.purpose == purpose && (!onlyConnected || rSensor.connected)) {
if (value == NAN || rSensor.values[valueId] < value) { if (amount == 0 || rSensor.values[valueId] < value) {
value = rSensor.values[valueId]; value = rSensor.values[valueId];
amount++;
} }
} }
} }
return value != NAN ? value : 0.0f;
} else if (avgType == AverageType::MAXIMUM) { } else if (avgType == AverageType::MAXIMUM) {
float value = NAN;
for (uint8_t id = 0; id <= getMaxSensorId(); id++) { for (uint8_t id = 0; id <= getMaxSensorId(); id++) {
auto& sSensor = settings[id]; auto& sSensor = settings[id];
auto& rSensor = results[id]; auto& rSensor = results[id];
if (sSensor.purpose == purpose && (!onlyConnected || rSensor.connected)) { if (sSensor.purpose == purpose && (!onlyConnected || rSensor.connected)) {
if (value == NAN || rSensor.values[valueId] > value) { if (amount == 0 || rSensor.values[valueId] > value) {
value = rSensor.values[valueId]; value = rSensor.values[valueId];
amount++;
}
} }
} }
} }
return value != NAN ? value : 0.0f; return amount > 0 ? value : defaultValue;
} else {
// bad mean type
return 0.0f;
}
} }
static bool existsConnectedSensorsByPurpose(Purpose purpose) { static bool existsConnectedSensorsByPurpose(Purpose purpose) {
+42 -6
View File
@@ -423,14 +423,50 @@ protected:
} }
void updateMasterValues() { void updateMasterValues() {
vars.master.heating.outdoorTemp = Sensors::getMeanValueByPurpose(Sensors::Purpose::OUTDOOR_TEMP, Sensors::ValueType::PRIMARY, settings.heating.outdoorTempAvgType); vars.master.heating.indoorTemp = Sensors::getMeanValueByPurpose(
vars.master.heating.indoorTemp = Sensors::getMeanValueByPurpose(Sensors::Purpose::INDOOR_TEMP, Sensors::ValueType::PRIMARY, settings.heating.indoorTempAvgType); Sensors::Purpose::INDOOR_TEMP,
Sensors::ValueType::PRIMARY,
settings.heating.indoorTempAvgType,
true,
0.0f
);
vars.master.heating.outdoorTemp = Sensors::getMeanValueByPurpose(
Sensors::Purpose::OUTDOOR_TEMP,
Sensors::ValueType::PRIMARY,
settings.heating.outdoorTempAvgType,
true,
0.0f
);
vars.master.heating.currentTemp = Sensors::getMeanValueByPurpose(Sensors::Purpose::HEATING_TEMP, Sensors::ValueType::PRIMARY); vars.master.heating.currentTemp = Sensors::getMeanValueByPurpose(
vars.master.heating.returnTemp = Sensors::getMeanValueByPurpose(Sensors::Purpose::HEATING_RETURN_TEMP, Sensors::ValueType::PRIMARY); Sensors::Purpose::HEATING_TEMP,
Sensors::ValueType::PRIMARY,
Sensors::AverageType::MEAN,
true,
0.0f
);
vars.master.heating.returnTemp = Sensors::getMeanValueByPurpose(
Sensors::Purpose::HEATING_RETURN_TEMP,
Sensors::ValueType::PRIMARY,
Sensors::AverageType::MEAN,
true,
0.0f
);
vars.master.dhw.currentTemp = Sensors::getMeanValueByPurpose(Sensors::Purpose::DHW_TEMP, Sensors::ValueType::PRIMARY); vars.master.dhw.currentTemp = Sensors::getMeanValueByPurpose(
vars.master.dhw.returnTemp = Sensors::getMeanValueByPurpose(Sensors::Purpose::DHW_RETURN_TEMP, Sensors::ValueType::PRIMARY); Sensors::Purpose::DHW_TEMP,
Sensors::ValueType::PRIMARY,
Sensors::AverageType::MEAN,
true,
0.0f
);
vars.master.dhw.returnTemp = Sensors::getMeanValueByPurpose(
Sensors::Purpose::DHW_RETURN_TEMP,
Sensors::ValueType::PRIMARY,
Sensors::AverageType::MEAN,
true,
0.0f
);
} }
void makeDallasInstances() { void makeDallasInstances() {