From 3f6688821ab21cbc5ce1667fe691f79054944d1a Mon Sep 17 00:00:00 2001 From: John Lancaster <32917998+jsl12@users.noreply.github.com> Date: Fri, 12 Dec 2025 08:20:24 -0600 Subject: [PATCH] separated some functions --- apps/drivers/moes.yaml | 6 +----- apps/drivers/moes_pad.py | 32 ++++++++++++++++++++++++++++---- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/apps/drivers/moes.yaml b/apps/drivers/moes.yaml index 67ce8dd..fd6fefa 100644 --- a/apps/drivers/moes.yaml +++ b/apps/drivers/moes.yaml @@ -2,10 +2,6 @@ moes_driver: module: moes_pad class: MoesBridge -moes1: +moes_pad: module: moes_pad class: MoesPad - -moes2: - module: moes_pad - class: MoesPad \ No newline at end of file diff --git a/apps/drivers/moes_pad.py b/apps/drivers/moes_pad.py index 0a72795..7b595d8 100644 --- a/apps/drivers/moes_pad.py +++ b/apps/drivers/moes_pad.py @@ -56,6 +56,10 @@ class MoesPad(ADBase): self.log = self.adapi.log self.event_handle = self.adapi.listen_event(self.handle_moes_event, 'moes_pad') + self.bedroom_offs = ('bedroom_stick', 'bedroom_john', 'bedroom_sydney') + self.main_offs = ('bar', 'server_lamp', 'living_room_stick') + # self.set_many(self.main_offs, state='on') + def handle_moes_event(self, event_name: str, data: dict[str, Any], **kwargs: Any) -> None: button = MoesButtons(data.get('button')) action = MoesActions(data.get('action')) @@ -64,6 +68,8 @@ class MoesPad(ADBase): match action: case MoesActions.SINGLE_PRESS: self.handle_single_press(button) + case MoesActions.DOUBLE_PRESS: + self.handle_double_press(button) def handle_single_press(self, button: MoesButtons) -> None: match button: @@ -74,7 +80,25 @@ class MoesPad(ADBase): case MoesButtons.BOTTOM_LEFT: self.adapi.call_service('light/toggle', entity_id='light.bedroom_stick') case MoesButtons.BOTTOM_RIGHT: - for e in ('bedroom_stick', 'bedroom_john', 'bedroom_sydney'): - eid = f'light.{e}' - if self.adapi.get_state(eid) == 'on': - self.adapi.call_service('light/toggle', entity_id=eid) + any_on = any(self.adapi.get_state(f'light.{e}') == 'on' for e in self.bedroom_offs) + scene = {'entities': {f'light.{e}': {'state': 'off' if any_on else 'on'}} for e in self.bedroom_offs} + self.adapi.call_service('scene/apply', **scene) + + def handle_double_press(self, button: MoesButtons) -> None: + match button: + case MoesButtons.BOTTOM_RIGHT: + all_lights = [*self.bedroom_offs, *self.main_offs] + any_on = self.check_many(all_lights, state='on') + new_state = 'off' if any_on else 'on' + self.log(f'New state from double press: {new_state}') + self.set_many(self.bedroom_offs, state=new_state) + self.set_many(self.main_offs, state=new_state) + + def set_many(self, lights: set[str], state: str = 'off'): + entity_ids = [f'light.{e}' if not e.startswith('light') else e for e in lights] + scene = {'entities': {eid: {'state': state} for eid in entity_ids}} + return self.adapi.call_service('scene/apply', **scene) + + def check_many(self, lights: set[str], state: str = 'off') -> bool: + entity_ids = [f'light.{e}' if not e.startswith('light') else e for e in lights] + return any(self.adapi.get_state(eid) == state for eid in entity_ids)