From 1d61aef37361d6582ddf0b01086db71549906d42 Mon Sep 17 00:00:00 2001 From: G Johansson Date: Sat, 4 Jun 2022 15:26:16 +0200 Subject: [PATCH] Fix modelling additionals --- pysensibo/__init__.py | 31 ++++++++++++++++++++++++------- pysensibo/model.py | 7 ++++--- setup.py | 2 +- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/pysensibo/__init__.py b/pysensibo/__init__.py index 0cd3a30..58a954b 100644 --- a/pysensibo/__init__.py +++ b/pysensibo/__init__.py @@ -1,6 +1,7 @@ """Python API for Sensibo.""" from __future__ import annotations import asyncio +from datetime import datetime, timezone import json from typing import Any @@ -179,8 +180,13 @@ async def async_get_devices_data(self) -> SensiboData: ) filter_clean: bool = filters.get("shouldCleanFilters", False) clean_time: dict[str, Any] = filters.get("lastFiltersCleanTime") or {} - filter_last_reset: str | None = ( - clean_time.get("time") if clean_time else None + clean_time_str: str | None = clean_time.get("time") + filter_last_reset: datetime | None = ( + datetime.strptime(clean_time_str, "%Y-%m-%dT%H:%M:%SZ").replace( + tzinfo=timezone.utc + ) + if clean_time_str + else None ) # Timer @@ -191,10 +197,17 @@ async def async_get_devices_data(self) -> SensiboData: timer_time = None if dev["productModel"] != "pure": timer_on = timer.get("isEnabled", False) - timer_id = timer.get("id") - timer_state: dict[str, Any] | None = timer.get("acState") - timer_state_on = timer_state.get("on") if timer_state else None - timer_time = timer.get("targetTime") + timer_id = timer.get("id") + timer_state: dict[str, Any] | None = timer.get("acState") + timer_state_on = timer_state.get("on") if timer_state else None + timer_time_str: str | None = timer.get("targetTime") + timer_time = ( + datetime.strptime(timer_time_str, "%Y-%m-%dT%H:%M:%S").replace( + tzinfo=timezone.utc + ) + if timer_time_str + else None + ) # Smartmode smart: dict[str, Any] = dev["smartMode"] if dev["smartMode"] else {} @@ -212,6 +225,10 @@ async def async_get_devices_data(self) -> SensiboData: schedules: dict[str, Schedules] = {} if schedule_list: for schedule in schedule_list: + next_utc_str: str = schedule["nextTime"] + next_utc = datetime.strptime( + next_utc_str, "%Y-%m-%dT%H:%M:%S" + ).replace(tzinfo=timezone.utc) schedules[schedule["id"]] = Schedules( id=schedule["id"], enabled=schedule["isEnabled"], @@ -219,7 +236,7 @@ async def async_get_devices_data(self) -> SensiboData: state_full=schedule["acState"], days=schedule["recurringDays"], time=schedule["targetTimeLocal"], - next_utc=schedule["nextTime"], + next_utc=next_utc, ) device_data[unique_id] = SensiboDevice( diff --git a/pysensibo/model.py b/pysensibo/model.py index 413330b..a7d9016 100644 --- a/pysensibo/model.py +++ b/pysensibo/model.py @@ -2,6 +2,7 @@ from __future__ import annotations from dataclasses import dataclass +from datetime import datetime from typing import Any @@ -62,7 +63,7 @@ class SensiboDevice: timer_on: bool | None timer_id: str | None timer_state_on: bool | None - timer_time: str | None + timer_time: datetime | None smart_on: bool | None smart_type: str | None smart_low_temp_threshold: float | None @@ -70,7 +71,7 @@ class SensiboDevice: smart_low_state: dict[str, Any] | None smart_high_state: dict[str, Any] | None filter_clean: bool - filter_last_reset: str | None + filter_last_reset: datetime | None @dataclass @@ -100,4 +101,4 @@ class Schedules: state_full: dict[str, Any] days: list[str] time: str - next_utc: str + next_utc: datetime diff --git a/setup.py b/setup.py index cbf8b4b..6701ba6 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ print(find_packages()) setup( name="pysensibo", - version="1.0.15", + version="1.0.16", description="asyncio-friendly python API for Sensibo", long_description="asyncio-friendly python API for Sensibo" "(https://sensibo.com). Requires Python 3.4+",