From 6fd201337696de97ed7a5d2d369c9d3b71a626da Mon Sep 17 00:00:00 2001 From: Michael Housh Date: Fri, 29 Oct 2021 09:12:10 -0400 Subject: [PATCH] Working on state and topics. --- Sources/Models/State.swift | 72 +++++++++++++++++----- Sources/Models/Topics.swift | 83 +++++++++++++++++++------- Sources/dewPoint-controller/main.swift | 6 +- 3 files changed, 124 insertions(+), 37 deletions(-) diff --git a/Sources/Models/State.swift b/Sources/Models/State.swift index 574b38b..d4640b4 100644 --- a/Sources/Models/State.swift +++ b/Sources/Models/State.swift @@ -3,26 +3,70 @@ import CoreUnitTypes public struct State: Equatable { - @TrackedChanges - public var temperature: Temperature? + public var sensors: Sensors - @TrackedChanges - public var humidity: RelativeHumidity? - - public init( - temperature: Temperature? = nil, - humidity: RelativeHumidity? = nil, - needsProcessed: Bool = false - ) { - self._temperature = .init(wrappedValue: temperature, needsProcessed: needsProcessed) - self._humidity = .init(wrappedValue: humidity, needsProcessed: needsProcessed) + public init(sensors: Sensors = .init()) { + self.sensors = sensors } - public var needsProcessed: Bool { - $temperature.needsProcessed || $humidity.needsProcessed + public struct Sensors: Equatable { + + public var mixedSensor: TemperatureHumiditySensor + public var postCoilSensor: TemperatureHumiditySensor + public var returnSensor: TemperatureHumiditySensor + public var supplySensor: TemperatureHumiditySensor + + public init( + mixedSensor: TemperatureHumiditySensor = .init(), + postCoilSensor: TemperatureHumiditySensor = .init(), + returnSensor: TemperatureHumiditySensor = .init(), + supplySensor: TemperatureHumiditySensor = .init() + ) { + self.mixedSensor = mixedSensor + self.postCoilSensor = postCoilSensor + self.returnSensor = returnSensor + self.supplySensor = supplySensor + } + + public var needsProcessed: Bool { + mixedSensor.needsProcessed + || postCoilSensor.needsProcessed + || returnSensor.needsProcessed + || supplySensor.needsProcessed + } } } +extension State.Sensors { + public struct TemperatureHumiditySensor: Equatable { + @TrackedChanges + public var temperature: Temperature? + + @TrackedChanges + public var humidity: RelativeHumidity? + + public var needsProcessed: Bool { + $temperature.needsProcessed || $humidity.needsProcessed + } + + public init( + temperature: Temperature? = nil, + humidity: RelativeHumidity? = nil, + needsProcessed: Bool = false + ) { + self._temperature = .init(wrappedValue: temperature, needsProcessed: needsProcessed) + self._humidity = .init(wrappedValue: humidity, needsProcessed: needsProcessed) + } + } + + // MARK: - Temperature / Humidity Sensor Locations + public enum Mixed { } + public enum PostCoil { } + public enum Return { } + public enum Supply { } +} + +// MARK: - Tracked Changes @propertyWrapper public struct TrackedChanges { diff --git a/Sources/Models/Topics.swift b/Sources/Models/Topics.swift index 93ce1b0..c2278e9 100644 --- a/Sources/Models/Topics.swift +++ b/Sources/Models/Topics.swift @@ -36,29 +36,72 @@ public struct Topics: Codable, Equatable { /// Represents the sensor topics. public struct Sensors: Codable, Equatable { - /// The temperature sensor topic. - public var temperature: String + public var mixedAirSensor: TemperatureAndHumiditySensor + public var postCoilSensor: TemperatureAndHumiditySensor + public var returnSensor: TemperatureAndHumiditySensor + public var supplySensor: TemperatureAndHumiditySensor - /// The humidity sensor topic. - public var humidity: String - - /// The dew point topic (we write / publish this data from the application). - public var dewPoint: String - - /// Create a new sensor topic container. - /// - /// - Parameters: - /// - temperature: The temperature sensor topic. - /// - humidity: The humidity sensor topic. - /// - dewPoint: The dew point sensor topic. + // TODO: Fix defaults. public init( - temperature: String = "sensors/temperature", - humidity: String = "sensors/humidity", - dewPoint: String = "sensors/dew_point" + mixedAirSensor: TemperatureAndHumiditySensor = .init(), + postCoilSensor: TemperatureAndHumiditySensor = .init(), + returnSensor: TemperatureAndHumiditySensor = .init(), + supplySensor: TemperatureAndHumiditySensor = .init() ) { - self.temperature = temperature - self.humidity = humidity - self.dewPoint = dewPoint + self.mixedAirSensor = mixedAirSensor + self.postCoilSensor = postCoilSensor + self.returnSensor = returnSensor + self.supplySensor = supplySensor + } + +// /// The temperature sensor topic. +// public var temperature: String +// +// /// The humidity sensor topic. +// public var humidity: String +// +// /// The dew point topic (we write / publish this data from the application). +// public var dewPoint: String +// +// /// Create a new sensor topic container. +// /// +// /// - Parameters: +// /// - temperature: The temperature sensor topic. +// /// - humidity: The humidity sensor topic. +// /// - dewPoint: The dew point sensor topic. +// public init( +// temperature: String = "sensors/temperature", +// humidity: String = "sensors/humidity", +// dewPoint: String = "sensors/dew_point" +// ) { +// self.temperature = temperature +// self.humidity = humidity +// self.dewPoint = dewPoint +// } + + public struct TemperatureAndHumiditySensor: Codable, Equatable { + public var temperature: String + public var humidity: String + public var dewPoint: String + public var enthalpy: String + + /// Create a new sensor topic container. + /// + /// - Parameters: + /// - temperature: The temperature sensor topic. + /// - humidity: The humidity sensor topic. + /// - dewPoint: The dew point sensor topic. + public init( + temperature: String = "sensors/temperature", + humidity: String = "sensors/humidity", + dewPoint: String = "sensors/dew_point", + enthalpy: String = "sensors/enthalpy" + ) { + self.temperature = temperature + self.humidity = humidity + self.dewPoint = dewPoint + self.enthalpy = enthalpy + } } } diff --git a/Sources/dewPoint-controller/main.swift b/Sources/dewPoint-controller/main.swift index 7001ee1..daf63b6 100644 --- a/Sources/dewPoint-controller/main.swift +++ b/Sources/dewPoint-controller/main.swift @@ -23,8 +23,8 @@ if environment.envVars.appEnv == .production { } let relay = Relay(topic: environment.topics.commands.relays.dehumidification1) -let tempSensor = Sensor(topic: environment.topics.sensors.temperature) -let humiditySensor = Sensor(topic: environment.topics.sensors.humidity) +let tempSensor = Sensor(topic: environment.topics.sensors.returnSensor.temperature) +let humiditySensor = Sensor(topic: environment.topics.sensors.returnSensor.humidity) defer { logger.debug("Disconnecting") @@ -51,7 +51,7 @@ while true { try environment.mqttClient.publish( dewPoint: dp, - to: environment.topics.sensors.dewPoint + to: environment.topics.sensors.returnSensor.dewPoint ).wait() logger.debug("Published dew point...")