Skip to content

Commit d70a185

Browse files
author
JagCesar
committed
Add climate state request
1 parent 145e69f commit d70a185

File tree

4 files changed

+107
-2
lines changed

4 files changed

+107
-2
lines changed

Source/Models/ClimateState.swift

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import Foundation
2+
3+
public struct ClimateState {
4+
let insideTemp: Double
5+
let outsideTemp: Double
6+
let driverTempSetting: Double
7+
let passengerTempSetting: Double
8+
let isAutoConditioningOn: Bool
9+
let isFrontDefrosterOn: Bool
10+
let isRearDefrosterOn: Bool
11+
let fanStatus: Int?
12+
13+
init(dict: [String: Any]) {
14+
insideTemp = dict["inside_temp"] as! Double
15+
outsideTemp = dict["outside_temp"] as! Double
16+
driverTempSetting = dict["driver_temp_setting"] as! Double
17+
passengerTempSetting = dict["passenger_temp_setting"] as! Double
18+
isAutoConditioningOn = dict["is_auto_conditioning_on"] as! Bool
19+
isFrontDefrosterOn = dict["is_front_defroster_on"] as! Bool
20+
isRearDefrosterOn = dict["is_rear_defroster_on"] as! Bool
21+
fanStatus = dict["fan_status"] as? Int
22+
}
23+
}
+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import Foundation
2+
3+
public struct ClimateStateRequest: RequestProtocol {
4+
typealias CompletionType = ClimateState
5+
var path: String {
6+
return "/api/1/vehicles/\(vehicleIdentifier)/data_request/climate_state"
7+
}
8+
let method = WebRequest.RequestMethod.get
9+
let accessToken: String
10+
let vehicleIdentifier: String
11+
12+
public init(accessToken: String, vehicleIdentifier: String) {
13+
self.accessToken = accessToken
14+
self.vehicleIdentifier = vehicleIdentifier
15+
}
16+
17+
public func execute(completion: @escaping (Result<ClimateState>) -> Void) {
18+
WebRequest.request(
19+
path: path,
20+
method: method,
21+
accessToken: accessToken) { response, error in
22+
if let error = error {
23+
DispatchQueue.main.async {
24+
completion(Result.failure(error))
25+
}
26+
return
27+
}
28+
let responseDict = response as! [String: [String: Any]]
29+
let dataDict = responseDict["response"]!
30+
DispatchQueue.main.async {
31+
completion(Result.success(ClimateState(dict: dataDict)))
32+
}
33+
}
34+
}
35+
}

Tesla-API.xcodeproj/project.pbxproj

+30-2
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,17 @@
7373
FC99DFD91F1FBBE100013FE9 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC99DFD71F1FBBE100013FE9 /* Error.swift */; };
7474
FC99DFDA1F1FBBE100013FE9 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC99DFD71F1FBBE100013FE9 /* Error.swift */; };
7575
FC99DFDB1F1FBBE100013FE9 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC99DFD71F1FBBE100013FE9 /* Error.swift */; };
76+
FCB9328220FB913700D19874 /* ClimateStateRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9328120FB913700D19874 /* ClimateStateRequest.swift */; };
77+
FCB9328320FB913700D19874 /* ClimateStateRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9328120FB913700D19874 /* ClimateStateRequest.swift */; };
78+
FCB9328420FB913700D19874 /* ClimateStateRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9328120FB913700D19874 /* ClimateStateRequest.swift */; };
79+
FCB9328520FB913700D19874 /* ClimateStateRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9328120FB913700D19874 /* ClimateStateRequest.swift */; };
80+
FCB9328720FB917F00D19874 /* ClimateState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9328620FB917F00D19874 /* ClimateState.swift */; };
81+
FCB9328820FB917F00D19874 /* ClimateState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9328620FB917F00D19874 /* ClimateState.swift */; };
82+
FCB9328920FB917F00D19874 /* ClimateState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9328620FB917F00D19874 /* ClimateState.swift */; };
83+
FCB9328A20FB917F00D19874 /* ClimateState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9328620FB917F00D19874 /* ClimateState.swift */; };
84+
FCB9328C20FB9B3A00D19874 /* ClimateStateRequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9328B20FB9B3A00D19874 /* ClimateStateRequestTests.swift */; };
85+
FCB9328D20FB9B3A00D19874 /* ClimateStateRequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9328B20FB9B3A00D19874 /* ClimateStateRequestTests.swift */; };
86+
FCB9328E20FB9B3A00D19874 /* ClimateStateRequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCB9328B20FB9B3A00D19874 /* ClimateStateRequestTests.swift */; };
7687
FCD161971F1E79F0003FE381 /* Tesla-API.h in Headers */ = {isa = PBXBuildFile; fileRef = FCD161901F1E793F003FE381 /* Tesla-API.h */; settings = {ATTRIBUTES = (Public, ); }; };
7788
FCE31678205E3284004EF4B0 /* TeslaAPITestsEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCE31677205E3284004EF4B0 /* TeslaAPITestsEmpty.swift */; };
7889
FCE3167A205E3284004EF4B0 /* TeslaAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCD1615D1F1E7844003FE381 /* TeslaAPI.framework */; };
@@ -144,6 +155,9 @@
144155
FC80D5011F2CE6FD0013F6DF /* ListVehiclesRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListVehiclesRequest.swift; sourceTree = "<group>"; };
145156
FC99DFD21F1FB41400013FE9 /* Token.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Token.swift; sourceTree = "<group>"; };
146157
FC99DFD71F1FBBE100013FE9 /* Error.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Error.swift; sourceTree = "<group>"; };
158+
FCB9328120FB913700D19874 /* ClimateStateRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClimateStateRequest.swift; sourceTree = "<group>"; };
159+
FCB9328620FB917F00D19874 /* ClimateState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClimateState.swift; sourceTree = "<group>"; };
160+
FCB9328B20FB9B3A00D19874 /* ClimateStateRequestTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClimateStateRequestTests.swift; sourceTree = "<group>"; };
147161
FCD1615D1F1E7844003FE381 /* TeslaAPI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TeslaAPI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
148162
FCD1618D1F1E793F003FE381 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
149163
FCD1618F1F1E793F003FE381 /* Vehicle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Vehicle.swift; sourceTree = "<group>"; };
@@ -229,11 +243,12 @@
229243
FC27C97D1F4995070064E1AE /* Request Tests */ = {
230244
isa = PBXGroup;
231245
children = (
246+
FCE826051F8C092C00B72C08 /* ChargeStateRequestTests.swift */,
247+
FCB9328B20FB9B3A00D19874 /* ClimateStateRequestTests.swift */,
232248
FC27C97E1F4995240064E1AE /* ListVehiclesRequestTests.swift */,
233249
FC27C97F1F4995240064E1AE /* LockRequestTests.swift */,
234250
FC27C9801F4995240064E1AE /* MobileEnabledForRequestTests.swift */,
235251
FC27C9811F4995240064E1AE /* OpenChargePortRequestTests.swift */,
236-
FCE826051F8C092C00B72C08 /* ChargeStateRequestTests.swift */,
237252
);
238253
path = "Request Tests";
239254
sourceTree = "<group>";
@@ -275,11 +290,12 @@
275290
isa = PBXGroup;
276291
children = (
277292
FCE946461F2CF10E004913FC /* AuthenticateRequest.swift */,
293+
FCE825FB1F8C068F00B72C08 /* ChargeStateRequest.swift */,
294+
FCB9328120FB913700D19874 /* ClimateStateRequest.swift */,
278295
FC80D5011F2CE6FD0013F6DF /* ListVehiclesRequest.swift */,
279296
FC75EC521F2E4AD7007ED697 /* LockRequest.swift */,
280297
FC1B80961F49883500D24310 /* MobileEnabledForVehicleRequest.swift */,
281298
FC75EC571F2E613A007ED697 /* OpenChargePortRequest.swift */,
282-
FCE825FB1F8C068F00B72C08 /* ChargeStateRequest.swift */,
283299
);
284300
path = Requests;
285301
sourceTree = "<group>";
@@ -302,6 +318,7 @@
302318
isa = PBXGroup;
303319
children = (
304320
FCE826001F8C075C00B72C08 /* ChargeState.swift */,
321+
FCB9328620FB917F00D19874 /* ClimateState.swift */,
305322
FC99DFD71F1FBBE100013FE9 /* Error.swift */,
306323
FC99DFD21F1FB41400013FE9 /* Token.swift */,
307324
FCD1618F1F1E793F003FE381 /* Vehicle.swift */,
@@ -647,6 +664,7 @@
647664
buildActionMask = 2147483647;
648665
files = (
649666
FC27C98B1F4995240064E1AE /* OpenChargePortRequestTests.swift in Sources */,
667+
FCB9328C20FB9B3A00D19874 /* ClimateStateRequestTests.swift in Sources */,
650668
FC27C9821F4995240064E1AE /* ListVehiclesRequestTests.swift in Sources */,
651669
FCF2A1291FA32CE900BA5C3F /* Credentials.swift in Sources */,
652670
FCE826061F8C092C00B72C08 /* ChargeStateRequestTests.swift in Sources */,
@@ -664,8 +682,10 @@
664682
FC48F9AE1F1E7FCE00D2400B /* Vehicle.swift in Sources */,
665683
FC48F9AA1F1E7FBA00D2400B /* WebRequest.swift in Sources */,
666684
FC48F9A61F1E7FB600D2400B /* TeslaAPI.swift in Sources */,
685+
FCB9328820FB917F00D19874 /* ClimateState.swift in Sources */,
667686
FCE825FD1F8C068F00B72C08 /* ChargeStateRequest.swift in Sources */,
668687
FC75EC4C1F2E068E007ED697 /* RequestProtocol.swift in Sources */,
688+
FCB9328320FB913700D19874 /* ClimateStateRequest.swift in Sources */,
669689
FC75EC541F2E4F2F007ED697 /* LockRequest.swift in Sources */,
670690
FCE946481F2CF10E004913FC /* AuthenticateRequest.swift in Sources */,
671691
FC1B80981F498A2E00D24310 /* MobileEnabledForVehicleRequest.swift in Sources */,
@@ -684,8 +704,10 @@
684704
FC48F9AD1F1E7FCE00D2400B /* Vehicle.swift in Sources */,
685705
FC48F9A91F1E7FBA00D2400B /* WebRequest.swift in Sources */,
686706
FC48F9A51F1E7FB500D2400B /* TeslaAPI.swift in Sources */,
707+
FCB9328920FB917F00D19874 /* ClimateState.swift in Sources */,
687708
FCE825FE1F8C068F00B72C08 /* ChargeStateRequest.swift in Sources */,
688709
FC75EC4A1F2E068C007ED697 /* RequestProtocol.swift in Sources */,
710+
FCB9328420FB913700D19874 /* ClimateStateRequest.swift in Sources */,
689711
FC75EC551F2E4F30007ED697 /* LockRequest.swift in Sources */,
690712
FCE946491F2CF10E004913FC /* AuthenticateRequest.swift in Sources */,
691713
FC1B80991F498A2F00D24310 /* MobileEnabledForVehicleRequest.swift in Sources */,
@@ -704,8 +726,10 @@
704726
FC48F9AC1F1E7FCD00D2400B /* Vehicle.swift in Sources */,
705727
FC48F9A81F1E7FBA00D2400B /* WebRequest.swift in Sources */,
706728
FC48F9A41F1E7FB400D2400B /* TeslaAPI.swift in Sources */,
729+
FCB9328A20FB917F00D19874 /* ClimateState.swift in Sources */,
707730
FCE825FF1F8C068F00B72C08 /* ChargeStateRequest.swift in Sources */,
708731
FC75EC491F2E068C007ED697 /* RequestProtocol.swift in Sources */,
732+
FCB9328520FB913700D19874 /* ClimateStateRequest.swift in Sources */,
709733
FC75EC561F2E4F30007ED697 /* LockRequest.swift in Sources */,
710734
FCE9464A1F2CF10E004913FC /* AuthenticateRequest.swift in Sources */,
711735
FC1B809A1F498A3000D24310 /* MobileEnabledForVehicleRequest.swift in Sources */,
@@ -722,6 +746,7 @@
722746
buildActionMask = 2147483647;
723747
files = (
724748
FC27C98C1F4995240064E1AE /* OpenChargePortRequestTests.swift in Sources */,
749+
FCB9328D20FB9B3A00D19874 /* ClimateStateRequestTests.swift in Sources */,
725750
FC27C9831F4995240064E1AE /* ListVehiclesRequestTests.swift in Sources */,
726751
FCF2A12A1FA32CE900BA5C3F /* Credentials.swift in Sources */,
727752
FC6F72E61FA12BB3009BF1C4 /* ChargeStateRequestTests.swift in Sources */,
@@ -737,6 +762,7 @@
737762
buildActionMask = 2147483647;
738763
files = (
739764
FC27C98D1F4995250064E1AE /* OpenChargePortRequestTests.swift in Sources */,
765+
FCB9328E20FB9B3A00D19874 /* ClimateStateRequestTests.swift in Sources */,
740766
FC27C9841F4995240064E1AE /* ListVehiclesRequestTests.swift in Sources */,
741767
FCF2A12B1FA32CE900BA5C3F /* Credentials.swift in Sources */,
742768
FC6F72E71FA12BB4009BF1C4 /* ChargeStateRequestTests.swift in Sources */,
@@ -754,8 +780,10 @@
754780
FC48F9AF1F1E7FCE00D2400B /* Vehicle.swift in Sources */,
755781
FC99DFD31F1FB41400013FE9 /* Token.swift in Sources */,
756782
FC48F9AB1F1E7FBB00D2400B /* WebRequest.swift in Sources */,
783+
FCB9328720FB917F00D19874 /* ClimateState.swift in Sources */,
757784
FCE825FC1F8C068F00B72C08 /* ChargeStateRequest.swift in Sources */,
758785
FC75EC4B1F2E068D007ED697 /* RequestProtocol.swift in Sources */,
786+
FCB9328220FB913700D19874 /* ClimateStateRequest.swift in Sources */,
759787
FCE946471F2CF10E004913FC /* AuthenticateRequest.swift in Sources */,
760788
FC75EC531F2E4AD7007ED697 /* LockRequest.swift in Sources */,
761789
FC1B80971F49883500D24310 /* MobileEnabledForVehicleRequest.swift in Sources */,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import XCTest
2+
@testable import TeslaAPI
3+
4+
extension TeslaAPITests {
5+
func testClimateState() {
6+
let waitExpectation = expectation(description: "Climate state")
7+
ClimateStateRequest(
8+
accessToken: accessToken(),
9+
vehicleIdentifier: vehicleIdentifier()).execute { result in
10+
switch result {
11+
case .success(_):
12+
waitExpectation.fulfill()
13+
case .failure(_):
14+
XCTFail()
15+
}
16+
}
17+
waitForExpectations(timeout: 30, handler: nil)
18+
}
19+
}

0 commit comments

Comments
 (0)