diff options
Diffstat (limited to 'watchos/InfiniSolar/InfiniSolar WatchKit Extension/RoomState.swift')
-rw-r--r-- | watchos/InfiniSolar/InfiniSolar WatchKit Extension/RoomState.swift | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/watchos/InfiniSolar/InfiniSolar WatchKit Extension/RoomState.swift b/watchos/InfiniSolar/InfiniSolar WatchKit Extension/RoomState.swift new file mode 100644 index 0000000..f387b8b --- /dev/null +++ b/watchos/InfiniSolar/InfiniSolar WatchKit Extension/RoomState.swift @@ -0,0 +1,84 @@ +// +// RoomState.swift +// InfiniSolar WatchKit Extension +// +// Created by Evgeny Zinoviev on 09.08.2021. +// + +import Alamofire +import SwiftyJSON + +extension Double { + /// Rounds the double to decimal places value + func rounded(toPlaces places:Int) -> Double { + let divisor = pow(10.0, Double(places)) + return (self * divisor).rounded() / divisor + } +} + + +public class RoomState: ObservableObject { + @Published var temp: Double + @Published var rh: Double + @Published var error: Bool + + var timer: Timer? + var request: DataRequest? + + init() { + self.error = false + self.timer = nil + self.request = nil + + self.temp = 0 + self.rh = 0 + } + + func start() { + if self.timer != nil { + self.stop() + } + + self.timer = Timer.scheduledTimer(timeInterval: 5, + target: self, + selector: #selector(fetch), + userInfo: nil, + repeats: true) + self.timer?.fire() + } + + func stop() { + if self.request != nil { + self.request?.cancel() + self.request = nil + } + + self.error = false + self.timer?.invalidate() + self.timer = nil + } + + @objc func fetch() { + self.request = AF.request("http://192.168.5.223:8381/read/").responseJSON { response in + self.request = nil + + switch response.result { + case .success(let value): + let j = JSON(value) + self.temp = (j["temp"].double ?? 0).rounded(toPlaces: 2) + self.rh = (j["humidity"].double ?? 0).rounded(toPlaces: 2) + + case .failure(let error): + switch (error) { + case .explicitlyCancelled: + break + + default: + self.error = true + self.timer?.invalidate() + self.timer = nil + } + } + } + } +} |