X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=smart_home%2Foutlets.py;h=60b98a63534e6897f6b448edaedebe9bb9c638b1;hb=beac1437b595ed543595b12b81ab637d4737038a;hp=d29fc4adb44335dce5772a504b539a2b2803faa9;hpb=7ff2af6fe7bffea90dc4a31c93140c189917c659;p=python_utils.git diff --git a/smart_home/outlets.py b/smart_home/outlets.py index d29fc4a..60b98a6 100644 --- a/smart_home/outlets.py +++ b/smart_home/outlets.py @@ -58,11 +58,13 @@ def tplink_outlet_command(command: str) -> bool: logger.warning(msg) logging_utils.hlog(msg) return False - logger.debug(f'{command} succeeded.') + logger.debug('%s succeeded.', command) return True class BaseOutlet(dev.Device): + """An abstract base class for smart outlets.""" + def __init__(self, name: str, mac: str, keywords: str = "") -> None: super().__init__(name.strip(), mac.strip(), keywords) @@ -84,6 +86,8 @@ class BaseOutlet(dev.Device): class TPLinkOutlet(BaseOutlet): + """A TPLink smart outlet.""" + def __init__(self, name: str, mac: str, keywords: str = '') -> None: super().__init__(name, mac, keywords) self.info: Optional[Dict] = None @@ -150,11 +154,15 @@ class TPLinkOutlet(BaseOutlet): class TPLinkOutletWithChildren(TPLinkOutlet): + """A TPLink outlet where the top and bottom plus are individually + controllable.""" + def __init__(self, name: str, mac: str, keywords: str = "") -> None: super().__init__(name, mac, keywords) self.children: List[str] = [] self.info: Optional[Dict] = None self.info_ts: Optional[datetime.datetime] = None + assert self.keywords is not None assert "children" in self.keywords self.info = self.get_info() if self.info is not None: @@ -177,7 +185,7 @@ class TPLinkOutletWithChildren(TPLinkOutlet): cmd = self.get_cmdline(child) + f"-c {cmd}" if extra_args is not None: cmd += f" {extra_args}" - logger.debug(f'About to execute {cmd}') + logger.debug('About to execute: %s', cmd) return tplink_outlet_command(cmd) def get_children(self) -> List[str]: @@ -207,6 +215,8 @@ class TPLinkOutletWithChildren(TPLinkOutlet): class GoogleOutlet(BaseOutlet): + """A smart outlet controlled via Google Assistant.""" + def __init__(self, name: str, mac: str, keywords: str = "") -> None: super().__init__(name.strip(), mac.strip(), keywords) self.info = None @@ -221,15 +231,11 @@ class GoogleOutlet(BaseOutlet): @overrides def turn_on(self) -> bool: - return GoogleOutlet.parse_google_response( - ask_google(f'turn {self.goog_name()} on') - ) + return GoogleOutlet.parse_google_response(ask_google(f'turn {self.goog_name()} on')) @overrides def turn_off(self) -> bool: - return GoogleOutlet.parse_google_response( - ask_google(f'turn {self.goog_name()} off') - ) + return GoogleOutlet.parse_google_response(ask_google(f'turn {self.goog_name()} off')) @overrides def is_on(self) -> bool: @@ -258,9 +264,7 @@ class MerossWrapper(object): def __init__(self): self.loop = asyncio.get_event_loop() self.email = os.environ.get('MEROSS_EMAIL') or scott_secrets.MEROSS_EMAIL - self.password = ( - os.environ.get('MEROSS_PASSWORD') or scott_secrets.MEROSS_PASSWORD - ) + self.password = os.environ.get('MEROSS_PASSWORD') or scott_secrets.MEROSS_PASSWORD self.devices = self.loop.run_until_complete(self.find_meross_devices()) atexit.register(self.loop.close) @@ -290,6 +294,8 @@ class MerossWrapper(object): class MerossOutlet(BaseOutlet): + """A Meross smart outlet class.""" + def __init__(self, name: str, mac: str, keywords: str = '') -> None: super().__init__(name, mac, keywords) self.meross_wrapper: Optional[MerossWrapper] = None