import CoreUnitTypes import Logging import Foundation import Models import NIO import Psychrometrics public struct Client { public var fetchHumidity: (HumiditySensor) -> EventLoopFuture public var fetchTemperature: (TemperatureSensor, PsychrometricEnvironment.Units?) -> EventLoopFuture public var toggleRelay: (Relay) -> EventLoopFuture public var turnOnRelay: (Relay) -> EventLoopFuture public var turnOffRelay: (Relay) -> EventLoopFuture public var shutdown: () -> EventLoopFuture public init( fetchHumidity: @escaping (HumiditySensor) -> EventLoopFuture, fetchTemperature: @escaping (TemperatureSensor, PsychrometricEnvironment.Units?) -> EventLoopFuture, toggleRelay: @escaping (Relay) -> EventLoopFuture, turnOnRelay: @escaping (Relay) -> EventLoopFuture, turnOffRelay: @escaping (Relay) -> EventLoopFuture, shutdown: @escaping () -> EventLoopFuture ) { self.fetchHumidity = fetchHumidity self.fetchTemperature = fetchTemperature self.toggleRelay = toggleRelay self.turnOnRelay = turnOnRelay self.turnOffRelay = turnOffRelay self.shutdown = shutdown } public func fetchDewPoint( temperature: TemperatureSensor, humidity: HumiditySensor, units: PsychrometricEnvironment.Units? = nil, logger: Logger? = nil ) -> EventLoopFuture { fetchTemperature(temperature, units) .and(fetchHumidity(humidity)) .map { temp, humidity in logger?.debug("Creating dew-point for temperature: \(temp) with humidity: \(humidity)") return DewPoint.init(dryBulb: temp, humidity: humidity, units: units) } } }