Skip to content

Commit

Permalink
fix: merging timer entities
Browse files Browse the repository at this point in the history
  • Loading branch information
humbertogontijo committed Jun 5, 2023
1 parent 9e2a3c5 commit 22ff7f4
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 41 deletions.
70 changes: 29 additions & 41 deletions roborock/containers.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from __future__ import annotations

import datetime
import logging
import re
from dataclasses import asdict, dataclass
from datetime import time
from enum import Enum
from typing import Any, Optional, Type

Expand Down Expand Up @@ -45,6 +45,7 @@
SENSOR_DIRTY_REPLACE_TIME,
SIDE_BRUSH_REPLACE_TIME,
)
from .util import parse_time_to_datetime

_LOGGER = logging.getLogger(__name__)

Expand Down Expand Up @@ -95,6 +96,29 @@ def as_dict(self) -> dict:
)


@dataclass
class RoborockBaseTimer(RoborockBase):
start_hour: Optional[int] = None
start_minute: Optional[int] = None
end_hour: Optional[int] = None
end_minute: Optional[int] = None
enabled: Optional[int] = None
start_time: Optional[datetime.datetime] = None
end_time: Optional[datetime.datetime] = None

def __post_init__(self) -> None:
self.start_time = (
parse_time_to_datetime(datetime.time(hour=self.start_hour, minute=self.start_minute))
if self.start_hour is not None and self.start_minute is not None
else None
)
self.end_time = (
parse_time_to_datetime(datetime.time(hour=self.end_hour, minute=self.end_minute))
if self.end_hour is not None and self.end_minute is not None
else None
)


@dataclass
class Reference(RoborockBase):
r: Optional[str] = None
Expand Down Expand Up @@ -338,49 +362,13 @@ class S8Status(Status):


@dataclass
class DnDTimer(RoborockBase):
start_hour: Optional[int] = None
start_minute: Optional[int] = None
end_hour: Optional[int] = None
end_minute: Optional[int] = None
enabled: Optional[int] = None
start_time: Optional[time] = None
end_time: Optional[time] = None

def __post_init__(self) -> None:
self.start_time = (
time(hour=self.start_hour, minute=self.start_minute)
if self.start_hour is not None and self.start_minute is not None
else None
)
self.end_time = (
time(hour=self.end_hour, minute=self.end_minute)
if self.end_hour is not None and self.end_minute is not None
else None
)
class DnDTimer(RoborockBaseTimer):
"""DnDTimer"""


@dataclass
class ValleyElectricityTimer(RoborockBase):
start_hour: Optional[int] = None
start_minute: Optional[int] = None
end_hour: Optional[int] = None
end_minute: Optional[int] = None
enabled: Optional[int] = None
start_time: Optional[time] = None
end_time: Optional[time] = None

def __post_init__(self) -> None:
self.start_time = (
time(hour=self.start_hour, minute=self.start_minute)
if self.start_hour is not None and self.start_minute is not None
else None
)
self.end_time = (
time(hour=self.end_hour, minute=self.end_minute)
if self.end_hour is not None and self.end_minute is not None
else None
)
class ValleyElectricityTimer(RoborockBaseTimer):
"""ValleyElectricityTimer"""


@dataclass
Expand Down
14 changes: 14 additions & 0 deletions roborock/util.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
from __future__ import annotations

import asyncio
import datetime
import functools
from asyncio import AbstractEventLoop
from typing import Callable, Coroutine, Optional, TypeVar

T = TypeVar("T")
DEFAULT_TIME_ZONE: datetime.tzinfo = datetime.timezone.utc


def unpack_list(value: list[T], size: int) -> list[Optional[T]]:
Expand All @@ -21,6 +23,18 @@ def get_running_loop_or_create_one() -> AbstractEventLoop:
return loop


def parse_time_to_datetime(initial_time: datetime.time) -> datetime.datetime:
"""Help to handle time data."""
time = datetime.datetime.now(DEFAULT_TIME_ZONE).replace(
hour=initial_time.hour, minute=initial_time.minute, second=0, microsecond=0
)

if time < datetime.datetime.now(DEFAULT_TIME_ZONE):
time += datetime.timedelta(days=1)

return time


def run_sync():
loop = get_running_loop_or_create_one()

Expand Down

0 comments on commit 22ff7f4

Please sign in to comment.