mirror of
https://github.com/Laxilef/OTGateway.git
synced 2026-05-17 14:58:14 +05:00
refactor: some changes
This commit is contained in:
+15
-30
@@ -336,76 +336,61 @@ public:
|
||||
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) {
|
||||
return 0.0f;
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
uint8_t valueId = (uint8_t) valueType;
|
||||
if (!isValidValueId(valueId)) {
|
||||
return 0.0f;
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
if (avgType == AverageType::MEAN) {
|
||||
float value = 0.0f;
|
||||
uint8_t amount = 0;
|
||||
float value = 0.0f;
|
||||
uint8_t amount = 0;
|
||||
|
||||
if (avgType == AverageType::MEAN) {
|
||||
float sum = 0.0f;
|
||||
for (uint8_t id = 0; id <= getMaxSensorId(); id++) {
|
||||
auto& sSensor = settings[id];
|
||||
auto& rSensor = results[id];
|
||||
|
||||
if (sSensor.purpose == purpose && (!onlyConnected || rSensor.connected)) {
|
||||
value += rSensor.values[valueId];
|
||||
sum += rSensor.values[valueId];
|
||||
amount++;
|
||||
}
|
||||
}
|
||||
|
||||
if (!amount) {
|
||||
return 0.0f;
|
||||
|
||||
} else if (amount == 1) {
|
||||
return value;
|
||||
|
||||
} else {
|
||||
return value / amount;
|
||||
}
|
||||
value = amount == 1 ? sum : (sum / amount);
|
||||
|
||||
} else if (avgType == AverageType::MINIMUM) {
|
||||
float value = NAN;
|
||||
|
||||
for (uint8_t id = 0; id <= getMaxSensorId(); id++) {
|
||||
auto& sSensor = settings[id];
|
||||
auto& rSensor = results[id];
|
||||
|
||||
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];
|
||||
amount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return value != NAN ? value : 0.0f;
|
||||
|
||||
} else if (avgType == AverageType::MAXIMUM) {
|
||||
float value = NAN;
|
||||
|
||||
for (uint8_t id = 0; id <= getMaxSensorId(); id++) {
|
||||
auto& sSensor = settings[id];
|
||||
auto& rSensor = results[id];
|
||||
|
||||
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];
|
||||
amount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return value != NAN ? value : 0.0f;
|
||||
|
||||
} else {
|
||||
// bad mean type
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
return amount > 0 ? value : defaultValue;
|
||||
}
|
||||
|
||||
static bool existsConnectedSensorsByPurpose(Purpose purpose) {
|
||||
|
||||
+42
-6
@@ -423,14 +423,50 @@ protected:
|
||||
}
|
||||
|
||||
void updateMasterValues() {
|
||||
vars.master.heating.outdoorTemp = Sensors::getMeanValueByPurpose(Sensors::Purpose::OUTDOOR_TEMP, Sensors::ValueType::PRIMARY, settings.heating.outdoorTempAvgType);
|
||||
vars.master.heating.indoorTemp = Sensors::getMeanValueByPurpose(Sensors::Purpose::INDOOR_TEMP, Sensors::ValueType::PRIMARY, settings.heating.indoorTempAvgType);
|
||||
vars.master.heating.indoorTemp = Sensors::getMeanValueByPurpose(
|
||||
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.returnTemp = Sensors::getMeanValueByPurpose(Sensors::Purpose::HEATING_RETURN_TEMP, Sensors::ValueType::PRIMARY);
|
||||
vars.master.heating.currentTemp = Sensors::getMeanValueByPurpose(
|
||||
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.returnTemp = Sensors::getMeanValueByPurpose(Sensors::Purpose::DHW_RETURN_TEMP, Sensors::ValueType::PRIMARY);
|
||||
vars.master.dhw.currentTemp = Sensors::getMeanValueByPurpose(
|
||||
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() {
|
||||
|
||||
Reference in New Issue
Block a user