Skip to content

Commit

Permalink
Added support for remote seat and steering wheel heaters.
Browse files Browse the repository at this point in the history
  • Loading branch information
jjjjaren committed Dec 28, 2018
1 parent f80ce76 commit 0e5ac04
Show file tree
Hide file tree
Showing 145 changed files with 4,477 additions and 292 deletions.
67 changes: 62 additions & 5 deletions Example/VehicleListViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ class VehicleListViewController: UITableViewController {

private lazy var timer: Timer = Timer.scheduledTimer(timeInterval: 6, target: self, selector: #selector(updateVehicles), userInfo: nil, repeats: true)

private var vehicle: Vehicle?

private var vehicles: [Vehicle] = [] {
didSet {
self.tableView.reloadData()
Expand All @@ -38,7 +40,7 @@ class VehicleListViewController: UITableViewController {
}

@objc private func actionsButtonAction() {
guard let vehicle = self.vehicles.first else { return }
guard let vehicle = self.vehicle else { return }
let actionSheet = UIAlertController(title: vehicle.displayName, message: nil, preferredStyle: .actionSheet)

actionSheet.addAction(UIAlertAction(title: "Wake", style: .default, handler: { _ in
Expand Down Expand Up @@ -69,9 +71,9 @@ class VehicleListViewController: UITableViewController {
})
}))

actionSheet.addAction(UIAlertAction(title: "Start Update", style: .default, handler: { _ in
actionSheet.addAction(UIAlertAction(title: "Start AC", style: .default, handler: { _ in

teslaAPI.send(Command.scheduleSoftwareUpdate, to: vehicle, completion: { response in
teslaAPI.send(Command.startHVAC, to: vehicle, completion: { response in

self.displayAlert(title: response.result ? "Success" : "Failed",
message: response.allErrorMessages,
Expand All @@ -80,9 +82,63 @@ class VehicleListViewController: UITableViewController {

}))

actionSheet.addAction(UIAlertAction(title: "Cancel Update", style: .default, handler: { _ in
actionSheet.addAction(UIAlertAction(title: "Seat Heater", style: .default, handler: { _ in

let newVal = vehicle.climateState.seatHeaterLeft == 0 ? 3 : vehicle.climateState.seatHeaterLeft-1

let seatHeaters: [SeatHeater] = {

let hasRearSeatHeaters = vehicle.vehicleConfig.rearSeatHeaters > 0

if vehicle.vin?.make == .modelS || vehicle.vin?.make == .model3 {
var seatHeaters: [SeatHeater] = [
SeatHeater.frontLeft,
SeatHeater.frontRight
]
if hasRearSeatHeaters {
seatHeaters.append(contentsOf: [SeatHeater.rearLeft,
SeatHeater.rearCenter,
SeatHeater.rearRight])
}
return seatHeaters
}

if vehicle.vin?.make == .modelX {
var seatHeaters: [SeatHeater] = [
SeatHeater.frontLeft,
SeatHeater.frontRight
]
if hasRearSeatHeaters {
seatHeaters.append(contentsOf: [SeatHeater.rearLeft,
SeatHeater.rearCenter,
SeatHeater.rearRight,
SeatHeater.rearLeftBack,
SeatHeater.rearRightBack])
}
return seatHeaters
}


return []
}()

seatHeaters.forEach { seatHeater in

let req = RemoteSeatHeaterRequest(heater: seatHeater, level: newVal)

teslaAPI.send(Command.remoteSeatHeater, to: vehicle, parameters: req, completion: { response in

})
}
}))

actionSheet.addAction(UIAlertAction(title: "Steering Wheel Heater", style: .default, handler: { _ in

let newVal = vehicle.climateState.steeringWheelHeater == 0 ? 3 : vehicle.climateState.steeringWheelHeater-1

let req = RemoteSteeringWheelHeaterRequest(level: newVal)

teslaAPI.send(Command.cancelSoftwareUpdate, to: vehicle, completion: { response in
teslaAPI.send(Command.remoteSteeringWheelHeater, to: vehicle, parameters: req, completion: { response in

self.displayAlert(title: response.result ? "Success" : "Failed",
message: response.allErrorMessages,
Expand Down Expand Up @@ -218,6 +274,7 @@ class VehicleListViewController: UITableViewController {
guard res else { return }

teslaAPI.getData(for: vehicle, completion: { (res, data, err) in
self.vehicle = data
print(data)
})
})
Expand Down
Loading

0 comments on commit 0e5ac04

Please sign in to comment.