Files
swift-estimated-pressures-core/Sources/SharedModels/EquipmentMeasurement.swift

157 lines
4.0 KiB
Swift

import Foundation
#warning("Make values non-optional")
#warning("Need to make air handler external static handle large filter pressure drops.")
#warning("Add an exterenal static pressure strategy for if the filter is built-in or external")
public enum EquipmentMeasurement: Equatable {
case airHandler(AirHandler)
case furnaceAndCoil(FurnaceAndCoil)
public var equipmentType: EquipmentType {
switch self {
case .airHandler:
return .airHandler
case .furnaceAndCoil:
return .furnaceAndCoil
}
}
public var externalStaticPressure: Double {
switch self {
case let .airHandler(airHandler):
return airHandler.externalStaticPressure
case let .furnaceAndCoil(furnaceAndCoil):
return furnaceAndCoil.externalStaticPressure
}
}
public struct AirHandler: Equatable {
@Positive
public var airflow: Double?
@Positive
public var returnPlenumPressure: Double?
@Positive
public var postFilterPressure: Double?
@Positive
public var postCoilPressure: Double?
@Positive
public var supplyPlenumPressure: Double?
public init(
airflow: Double? = nil,
returnPlenumPressure: Double? = nil,
postFilterPressure: Double? = nil,
postCoilPressure: Double? = nil,
supplyPlenumPressure: Double? = nil
) {
self.airflow = airflow
self.returnPlenumPressure = returnPlenumPressure
self.postFilterPressure = postFilterPressure
self.postCoilPressure = postCoilPressure
self.supplyPlenumPressure = supplyPlenumPressure
}
public var externalStaticPressure: Double {
var postFilterAdder = 0.0
if let postFilterPressure = $postFilterPressure.positiveValue,
postFilterPressure > 0.1
{
postFilterAdder = postFilterPressure - 0.1
}
return ($returnPlenumPressure.positiveValue ?? 0)
+ postFilterAdder
+ ($supplyPlenumPressure.positiveValue ?? 0)
}
}
public struct FurnaceAndCoil: Equatable {
@Positive
public var airflow: Double?
@Positive
public var returnPlenumPressure: Double?
@Positive
public var postFilterPressure: Double?
@Positive
public var preCoilPressure: Double?
@Positive
public var supplyPlenumPressure: Double?
public init(
airflow: Double? = nil,
returnPlenumPressure: Double? = nil,
postFilterPressure: Double? = nil,
preCoilPressure: Double? = nil,
supplyPlenumPressure: Double? = nil
) {
self.airflow = airflow
self.returnPlenumPressure = returnPlenumPressure
self.postFilterPressure = postFilterPressure
self.preCoilPressure = preCoilPressure
self.supplyPlenumPressure = supplyPlenumPressure
}
public var externalStaticPressure: Double {
($postFilterPressure.positiveValue ?? 0) + ($preCoilPressure.positiveValue ?? 0)
}
}
}
//extension EquipmentMeasurement.AirHandler {
//
// public enum Key: String, Equatable, CaseIterable {
// case returnPlenumPressure
// case postFilterPressure
// case postCoilPressure
// case supplyPlenumPressure
// case airflow
// }
//}
//
//extension EquipmentMeasurement.FurnaceAndCoil {
//
// public enum Key: String, Equatable, CaseIterable {
// case returnPlenumPressure
// case postFilterPressure
// case preCoilPressure
// case supplyPlenumPressure
// case airflow
// }
//}
#if DEBUG
extension EquipmentMeasurement {
public static func mock(type equipmentType: EquipmentType) -> Self {
switch equipmentType {
case .airHandler:
return .airHandler(.init(
airflow: 1200,
returnPlenumPressure: 0.3,
postFilterPressure: 0.6,
postCoilPressure: 0.9,
supplyPlenumPressure: 0.2
))
case .furnaceAndCoil:
return .furnaceAndCoil(.init(
airflow: 1200,
returnPlenumPressure: 0.3,
postFilterPressure: 0.6,
preCoilPressure: 0.4,
supplyPlenumPressure: 0.1
))
}
}
}
#endif