Skip to content

Commit 2bb69bb

Browse files
committed
Charging and precondition schedule endpoints
1 parent cd394ec commit 2bb69bb

File tree

2 files changed

+139
-0
lines changed

2 files changed

+139
-0
lines changed

tesla_fleet_api/vehicle.py

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -791,3 +791,88 @@ async def fleet_telemetry_config_delete(
791791
return await self._request(
792792
Method.DELETE, f"api/1/vehicles/{vehicle_tag}/fleet_telemetry_config"
793793
)
794+
795+
async def add_charge_schedule(
796+
self,
797+
vehicle_tag: str | int,
798+
days_of_week: str,
799+
enabled: bool,
800+
lat: float,
801+
lon: float,
802+
start_time: int | None = None,
803+
end_time: int | None = None,
804+
one_time: bool | None = None,
805+
id: int | None = None,
806+
807+
) -> dict[str, Any]:
808+
"""Add a schedule for vehicle charging."""
809+
if not start_time and not end_time:
810+
raise ValueError("Either start_time or end_time or both must be provided")
811+
json_payload = {
812+
"days_of_week": days_of_week,
813+
"enabled": enabled,
814+
"end_enabled": end_time is not None,
815+
"lat": lat,
816+
"lon": lon,
817+
"start_enabled": start_time is not None,
818+
}
819+
if start_time is not None:
820+
json_payload["start_time"] = start_time
821+
if end_time is not None:
822+
json_payload["end_time"] = end_time
823+
if id is not None:
824+
json_payload["id"] = id
825+
if one_time is not None:
826+
json_payload["one_time"] = one_time
827+
828+
return await self._request(
829+
Method.POST,
830+
f"api/1/vehicles/{vehicle_tag}/command/add_charge_schedule",
831+
json=json_payload,
832+
)
833+
834+
async def add_precondition_schedule(
835+
self,
836+
vehicle_tag: str | int,
837+
days_of_week: str,
838+
enabled: bool,
839+
lat: float,
840+
lon: float,
841+
precondition_time: int,
842+
id: int | None = None,
843+
one_time: bool | None = None,
844+
) -> dict[str, Any]:
845+
"""Add or modify a preconditioning schedule."""
846+
json_payload = {
847+
"days_of_week": days_of_week,
848+
"enabled": enabled,
849+
"lat": lat,
850+
"lon": lon,
851+
"precondition_time": precondition_time,
852+
}
853+
if id is not None:
854+
json_payload["id"] = id
855+
if one_time is not None:
856+
json_payload["one_time"] = one_time
857+
858+
return await self._request(
859+
Method.POST,
860+
f"api/1/vehicles/{vehicle_tag}/command/add_precondition_schedule",
861+
json=json_payload,
862+
)
863+
864+
async def remove_charge_schedule(
865+
self, vehicle_tag: str | int, id: int
866+
) -> dict[str, Any]:
867+
"""Removes the scheduled charging settings."""
868+
return await self._request(
869+
Method.POST, f"api/1/vehicles/{vehicle_tag}/command/remove_charge_schedule", json={"id": id}
870+
)
871+
872+
async def remove_precondition_schedule(
873+
self, vehicle_tag: str | int, id: int
874+
) -> dict[str, Any]:
875+
"""Removes the scheduled precondition settings."""
876+
return await self._request(
877+
Method.POST, f"api/1/vehicles/{vehicle_tag}/command/remove_precondition_schedule", json={"id": id}
878+
)

tesla_fleet_api/vehiclespecific.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,3 +449,57 @@ async def fleet_telemetry_config_get(self) -> dict[str, Any]:
449449
async def fleet_telemetry_config_delete(self) -> dict[str, Any]:
450450
"""Configures fleet telemetry."""
451451
return await self._parent.fleet_telemetry_config_delete(self.vin)
452+
453+
async def add_charge_schedule(
454+
self,
455+
days_of_week: str,
456+
enabled: bool,
457+
lat: float,
458+
lon: float,
459+
start_time: int | None = None,
460+
end_time: int | None = None,
461+
one_time: bool | None = None,
462+
id: int | None = None,
463+
) -> dict[str, Any]:
464+
"""Adds a scheduled charging setting."""
465+
return await self._parent.add_charge_schedule(
466+
self.vin,
467+
days_of_week,
468+
enabled,
469+
lat,
470+
lon,
471+
start_time,
472+
end_time,
473+
one_time,
474+
id,
475+
)
476+
477+
async def add_precondition_schedule(
478+
self,
479+
days_of_week: str,
480+
enabled: bool,
481+
lat: float,
482+
lon: float,
483+
precondition_time: int,
484+
id: int | None = None,
485+
one_time: bool | None = None,
486+
) -> dict[str, Any]:
487+
"""Adds a scheduled precondition setting."""
488+
return await self._parent.add_precondition_schedule(
489+
self.vin,
490+
days_of_week,
491+
enabled,
492+
lat,
493+
lon,
494+
precondition_time,
495+
id,
496+
one_time,
497+
)
498+
499+
async def remove_charge_schedule(self, id: int) -> dict[str, Any]:
500+
"""Removes the scheduled charging settings."""
501+
return await self._parent.remove_charge_schedule(self.vin, id)
502+
503+
async def remove_precondition_schedule(self, id: int) -> dict[str, Any]:
504+
"""Removes the scheduled precondition settings."""
505+
return await self._parent.remove_precondition_schedule(self.vin, id)

0 commit comments

Comments
 (0)