Make iot time timezone aware (#1147)

Also makes on_since for iot devices use device time.
Changes the return value for device.timezone to be tzinfo instead of a dict.
This commit is contained in:
Steven B.
2024-10-08 08:16:51 +01:00
committed by GitHub
parent 8bb2cca7cf
commit 9641edcbc0
22 changed files with 289 additions and 45 deletions

View File

@@ -1,14 +1,19 @@
"""Provides the current time and timezone information."""
from datetime import datetime
from __future__ import annotations
from datetime import datetime, timezone, tzinfo
from ...exceptions import KasaException
from ..iotmodule import IotModule, merge
from ..iottimezone import get_timezone
class Time(IotModule):
"""Implements the timezone settings."""
_timezone: tzinfo = timezone.utc
def query(self):
"""Request time and timezone."""
q = self.query_for_command("get_time")
@@ -16,11 +21,16 @@ class Time(IotModule):
merge(q, self.query_for_command("get_timezone"))
return q
async def _post_update_hook(self):
"""Perform actions after a device update."""
if res := self.data.get("get_timezone"):
self._timezone = await get_timezone(res.get("index"))
@property
def time(self) -> datetime:
"""Return current device time."""
res = self.data["get_time"]
return datetime(
time = datetime(
res["year"],
res["month"],
res["mday"],
@@ -28,12 +38,12 @@ class Time(IotModule):
res["min"],
res["sec"],
)
return time.astimezone(self.timezone)
@property
def timezone(self):
def timezone(self) -> tzinfo:
"""Return current timezone."""
res = self.data["get_timezone"]
return res
return self._timezone
async def get_time(self):
"""Return current device time."""