#from appdaemon.adapi import ADAPI from appdaemon.entity import Entity from appdaemon.plugins.hass.hassapi import Hass class TapDial(Hass): active_entity: Entity def initialize(self): self.tap_dial.listen_state(self.handle_state_change) self.log(f'0.0 Tap Dial entity: {self.tap_dial.entity_id}') @property def tap_dial(self) -> Entity: return self.get_entity(self.args['entity']) @property def step_size(self) -> int: return int(self.args.get('step_size', 25)) @property def init_brightness(self) -> int: return int(self.args.get('init_brightness', 200)) @property def max_brightness(self) -> int: return int(self.args.get('max_brightness', 254)) @property def active_entity_is_on(self) -> bool: return self.active_entity.get_state() == 'on' def handle_state_change(self, entity: str, attribute: str, old: str, new: str, **kwargs): self.log(f'0.0 {new}') # Dial actions if new.startswith('dial_rotate'): dir = 'left' if new.find('left') != -1 else 'right' self.log(f'1.1 Dial {dir}') # More code goes here.... # Button actions elif new.endswith('release'): _, n, typ, _ = new.split('_', 4) # type will be either press or hold self.log(f'1.2 Button {n} {typ}') if eid := self.args.get(f'button{n}'): self.active_entity = self.get_entity(eid) self.log(f'2.1 Set active entity to: {self.active_entity.name}') domain, entity = eid.split('.') match domain: case 'light': # Set the light to maximum brightness if the button is held. if typ == 'hold': self.active_entity.turn_on(brightness=self.max_brightness) self.log(f'3.1 Set {self.active_entity.friendly_name} to maximum brightness {self.max_brightness}') else: if self.active_entity_is_on: self.active_entity.turn_off() self.log(f'4.1 Turn {self.active_entity.friendly_name} off') else: self.active_entity.turn_on(brightness=self.init_brightness) self.log(f'4.2 Turn {self.active_entity.friendly_name} on with brightness {self.init_brightness}') case 'switch': self.active_entity.toggle() self.log(f'2.2 Toggle on/off power to {self.active_entity.friendly_name}') elif switch := self.args.get(f'button{n}'): self.active_entity = self.get_entity(switch) self.log(f'2.2 Set active entity to: {self.active_entity.friendly_name}') onoff = self.active_entity.get_state() self.log(f'2.2 {self.active_entity.friendly_name} is currently {onoff}') self.active_entity.toggle() self.log(f'2.2 Toggle on/off power to {self.active_entity.friendly_name}')