feat: Working on pressure estimations feature, integrating all views and shared settings

This commit is contained in:
2024-06-10 13:34:38 -04:00
parent 51f7a30701
commit a6bfbd6877
15 changed files with 447 additions and 348 deletions

View File

@@ -66,15 +66,15 @@ public struct EstimatedPressureDependency {
extension EstimatedPressureDependency {
private func estimatedPressure(
existingPressure: Positive<Double?>,
existingAirflow: Double,
targetAirflow: Double
existingPressure: Positive<Double>,
existingAirflow: Positive<Double>,
targetAirflow: Positive<Double>
) async throws -> Positive<Double> {
try await self.estimatedPressure(
.init(
existingPressure: existingPressure.positiveValue ?? 0,
existingAirflow: existingAirflow,
targetAirflow: targetAirflow
existingPressure: existingPressure.positiveValue,
existingAirflow: existingAirflow.positiveValue,
targetAirflow: targetAirflow.positiveValue
)
)
}
@@ -83,78 +83,75 @@ extension EstimatedPressureDependency {
equipmentMeasurement: EquipmentMeasurement,
airflow updatedAirflow: Double
) async throws -> EquipmentMeasurement {
let updatedAirflow = Positive(updatedAirflow)
switch equipmentMeasurement {
case let .airHandler(airHandler):
guard let existingAirflow = airHandler.airflow else {
throw InvalidAirflow()
}
return try await .airHandler(
.init(
airflow: updatedAirflow,
manufacturersIncludedFilterPressureDrop: airHandler.$manufacturersIncludedFilterPressureDrop,
returnPlenumPressure: self.estimatedPressure(
existingPressure: airHandler.$returnPlenumPressure,
existingAirflow: existingAirflow,
existingAirflow: airHandler.$airflow,
targetAirflow: updatedAirflow
),
postFilterPressure: self.estimatedPressure(
existingPressure: airHandler.$postFilterPressure,
existingAirflow: existingAirflow,
existingAirflow: airHandler.$airflow,
targetAirflow: updatedAirflow
),
postCoilPressure: self.estimatedPressure(
existingPressure: airHandler.$postCoilPressure,
existingAirflow: existingAirflow,
existingAirflow: airHandler.$airflow,
targetAirflow: updatedAirflow
),
supplyPlenumPressure: self.estimatedPressure(
existingPressure: airHandler.$supplyPlenumPressure,
existingAirflow: existingAirflow,
existingAirflow: airHandler.$airflow,
targetAirflow: updatedAirflow
)
)
)
case let .furnaceAndCoil(furnaceAndCoil):
guard let existingAirflow = furnaceAndCoil.airflow else {
throw InvalidAirflow()
}
return try await .furnaceAndCoil(
.init(
airflow: updatedAirflow,
manufacturersIncludedFilterPressureDrop: furnaceAndCoil.$manufacturersIncludedFilterPressureDrop,
returnPlenumPressure: self.estimatedPressure(
existingPressure: furnaceAndCoil.$returnPlenumPressure,
existingAirflow: existingAirflow,
existingAirflow: furnaceAndCoil.$airflow,
targetAirflow: updatedAirflow
),
postFilterPressure: self.estimatedPressure(
existingPressure: furnaceAndCoil.$postFilterPressure,
existingAirflow: existingAirflow,
existingAirflow: furnaceAndCoil.$airflow,
targetAirflow: updatedAirflow
),
preCoilPressure: self.estimatedPressure(
existingPressure: furnaceAndCoil.$preCoilPressure,
existingAirflow: existingAirflow,
existingAirflow: furnaceAndCoil.$airflow,
targetAirflow: updatedAirflow
),
supplyPlenumPressure: self.estimatedPressure(
existingPressure: furnaceAndCoil.$supplyPlenumPressure,
existingAirflow: existingAirflow,
existingAirflow: furnaceAndCoil.$airflow,
targetAirflow: updatedAirflow
)
)
)
}
}
public func estimatedPressure(
equipmentMeasurement: EquipmentMeasurement,
airflow updatedAirflow: Double,
airflow updatedAirflow: Positive<Double>,
filterPressureDrop: Positive<Double>
) async throws -> EquipmentMeasurement {
let estimate = try await estimatedPressure(
equipmentMeasurement: equipmentMeasurement,
airflow: updatedAirflow
airflow: updatedAirflow.positiveValue
)
switch estimate {
@@ -183,7 +180,7 @@ extension EstimatedPressureDependency {
return try await estimatedPressure(
equipmentMeasurement: equipmentMeasurement,
airflow: updatedAirflow,
filterPressureDrop: filterPressureDrop
filterPressureDrop: Positive(filterPressureDrop.positiveValue)
)
}
}
@@ -219,42 +216,6 @@ extension EstimatedPressureDependency: DependencyKey {
}
}
fileprivate extension EquipmentMeasurement.AirHandler {
init(
airflow: Double? = nil,
returnPlenumPressure: Positive<Double>,
postFilterPressure: Positive<Double>,
postCoilPressure: Positive<Double>,
supplyPlenumPressure: Positive<Double>
) {
self.init(
airflow: airflow,
returnPlenumPressure: returnPlenumPressure.positiveValue,
postFilterPressure: postFilterPressure.positiveValue,
postCoilPressure: postCoilPressure.positiveValue,
supplyPlenumPressure: supplyPlenumPressure.positiveValue
)
}
}
fileprivate extension EquipmentMeasurement.FurnaceAndCoil {
init(
airflow: Double? = nil,
returnPlenumPressure: Positive<Double>,
postFilterPressure: Positive<Double>,
preCoilPressure: Positive<Double>,
supplyPlenumPressure: Positive<Double>
) {
self.init(
airflow: airflow,
returnPlenumPressure: returnPlenumPressure.positiveValue,
postFilterPressure: postFilterPressure.positiveValue,
preCoilPressure: preCoilPressure.positiveValue,
supplyPlenumPressure: supplyPlenumPressure.positiveValue
)
}
}
struct InvalidAirflow: Error { }
enum LessThanZeroError: Error {