Compare commits
1 Commits
main
...
fbd60ab6ac
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fbd60ab6ac |
7
apps/drivers/moes.yaml
Normal file
7
apps/drivers/moes.yaml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
moes_driver:
|
||||||
|
module: moes_pad
|
||||||
|
class: MoesBridge
|
||||||
|
|
||||||
|
moes2:
|
||||||
|
module: moes_pad
|
||||||
|
class: MoesPad
|
||||||
73
apps/drivers/moes_pad.py
Normal file
73
apps/drivers/moes_pad.py
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
from enum import Enum
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from appdaemon.adapi import ADAPI
|
||||||
|
from appdaemon.adbase import ADBase
|
||||||
|
|
||||||
|
|
||||||
|
class MoesButtons(int, Enum):
|
||||||
|
TOP_LEFT = 1
|
||||||
|
TOP_RIGHT = 2
|
||||||
|
BOTTOM_LEFT = 3
|
||||||
|
BOTTOM_RIGHT = 4
|
||||||
|
|
||||||
|
|
||||||
|
class MoesActions(str, Enum):
|
||||||
|
SINGLE_PRESS = 'single'
|
||||||
|
DOUBLE_PRESS = 'double'
|
||||||
|
LONG_PRESS = 'hold'
|
||||||
|
|
||||||
|
|
||||||
|
class MoesBridge(ADBase):
|
||||||
|
"""Class for an app that listens for state changes generated by 4 button Moes Pads and makes the events more
|
||||||
|
sensible with enums."""
|
||||||
|
|
||||||
|
adapi: ADAPI
|
||||||
|
|
||||||
|
def initialize(self):
|
||||||
|
self.adapi = self.get_ad_api()
|
||||||
|
self.log = self.adapi.log
|
||||||
|
self.event_handle = self.adapi.listen_state(self.handle_state_change)
|
||||||
|
|
||||||
|
def handle_state_change(self, entity: str, attribute: str, old: Any, new: Any, **kwargs: Any) -> None:
|
||||||
|
if new == '' or not new[0].isdigit():
|
||||||
|
return
|
||||||
|
|
||||||
|
domain, ent = entity.split('.', 1)
|
||||||
|
if domain == 'sensor' and ent.startswith('moes'):
|
||||||
|
button, action = new.split('_')
|
||||||
|
button = MoesButtons(int(button))
|
||||||
|
button_str = button.name.lower().replace('_', ' ')
|
||||||
|
action = MoesActions(action)
|
||||||
|
self.log(f'Moes Pad action detected: {action.value} on button {button_str}')
|
||||||
|
self.adapi.fire_event(
|
||||||
|
'moes_pad',
|
||||||
|
device=entity,
|
||||||
|
button=button,
|
||||||
|
action=action,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class MoesPad(ADBase):
|
||||||
|
def initialize(self):
|
||||||
|
self.adapi = self.get_ad_api()
|
||||||
|
self.log = self.adapi.log
|
||||||
|
self.event_handle = self.adapi.listen_event(self.handle_moes_event, 'moes_pad')
|
||||||
|
|
||||||
|
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'))
|
||||||
|
self.log(f'Received Moes Pad event: {action} on button {button}')
|
||||||
|
|
||||||
|
match action:
|
||||||
|
case MoesActions.SINGLE_PRESS:
|
||||||
|
self.handle_single_press(button)
|
||||||
|
|
||||||
|
def handle_single_press(self, button: MoesButtons) -> None:
|
||||||
|
match button:
|
||||||
|
case MoesButtons.TOP_LEFT:
|
||||||
|
self.adapi.call_service('light/toggle', entity_id='light.bedroom_sydney')
|
||||||
|
case MoesButtons.TOP_RIGHT:
|
||||||
|
self.adapi.call_service('light/toggle', entity_id='light.bedroom_john')
|
||||||
|
case MoesButtons.BOTTOM_LEFT:
|
||||||
|
self.adapi.call_service('light/toggle', entity_id='light.h6076_2')
|
||||||
Reference in New Issue
Block a user