diff --git a/apps/tap_dial.py b/apps/tap_dial.py index 99441c3..25c4bb8 100644 --- a/apps/tap_dial.py +++ b/apps/tap_dial.py @@ -1,4 +1,3 @@ -#from appdaemon.adapi import ADAPI from appdaemon.entity import Entity from appdaemon.plugins.hass.hassapi import Hass @@ -29,24 +28,44 @@ class TapDial(Hass): def active_entity_is_on(self) -> bool: return self.active_entity.get_state() == 'on' + @property + def current_brightness(self) -> int: + return self.active_entity.attributes['brightness'] + def handle_state_change(self, entity: str, attribute: str, old: str, new: str, **kwargs): - self.log(f'0.0 {new}') + self.log(f'0.1 {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.... + if new.startswith('dial_rotate') and self.active_entity_is_on: + _, _, dir, speed = new.split('_', 4) + self.log(f'1.1 Direction {dir} speed {speed}') + match speed: + case 'step': + rate = self.step_size + case 'slow': + rate = 2 * self.step_size + case 'fast': + rate = 3 * self.step_size + val = self.active_entity.attributes['brightness'] + self.log(f'1.2 Brightness value = {val} Change rate = {rate}') + if dir == 'right': + val += rate + self.active_entity.turn_on(brightness=val) + self.log(f'1.2.1 Brightness value = {val}') + else: + val -= rate + self.active_entity.turn_on(brightness=val) + self.log(f'1.2.2 Brightness value = {val}') # 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}') + self.log(f'2.1 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}') + self.log(f'2.1.1 Set active entity to: {self.active_entity.name}') domain, entity = eid.split('.') match domain: @@ -54,17 +73,17 @@ class TapDial(Hass): # 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}') + self.log(f'2.1.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') + self.log(f'2.1.2 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}') + self.log(f'2.1.3 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}') + self.log(f'2.1.4 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)