diff --git a/apps/apps.yaml b/apps/apps.yaml index 4c84034..816a9ba 100644 --- a/apps/apps.yaml +++ b/apps/apps.yaml @@ -1,3 +1,21 @@ hello_world: module: hello class: HelloWorld + +my_tap_dial: + module: tap_dial + class: TapDial + entity: sensor.tap_dial_action + step_size: 25 + button1: light.stick_lamp + button2: light.wet_bar + button3: light.monkey_lamp + button4: light.kitchen_candlelabra + + +piano_button: + module: button_switch + class: AqaraSwitch + button: sensor.button02_action + switch: switch.keyboards + # action: double diff --git a/apps/button_switch.py b/apps/button_switch.py new file mode 100644 index 0000000..0557a14 --- /dev/null +++ b/apps/button_switch.py @@ -0,0 +1,20 @@ +from appdaemon.entity import Entity +from appdaemon.plugins.hass.hassapi import Hass + + +class AqaraSwitch(Hass): + def initialize(self): + self.log(f'Initializing Aqara Switch for {self.switch.friendly_name}') + self.button.listen_state(self.handle_button_press, new=self.args.get('action', 'single')) + + @property + def switch(self) -> Entity: + return self.get_entity(self.args['switch']) + + @property + def button(self) -> Entity: + return self.get_entity(self.args['button']) + + def handle_button_press(self, entity: str, attribute: str, old: str, new: str, **kwargs): + # self.log(f'{new}') + self.switch.toggle() diff --git a/apps/living_room.yaml b/apps/living_room.yaml deleted file mode 100644 index d9598fd..0000000 --- a/apps/living_room.yaml +++ /dev/null @@ -1,68 +0,0 @@ -living_room: - module: room_control - class: RoomController - # rich: DEBUG - off_duration: 00:10:00 - manual_mode: input_boolean.living_room_manual_mode - states: - - time: sunrise - off_duration: 00:15:00 - scene: - light.living_room_lamps: - state: on - color_temp: 200 - brightness: 255 - light.white05: - state: on - color_temp: 200 - brightness: 190 - light.living_room_floodlights: - state: off - - time: '18:00:00' - off_duration: 01:00:00 - scene: - light.living_room_lamps: - state: on - color_temp: 300 - brightness: 190 - light.living_room_floodlights: - state: off - - time: '23:00:00' - off_duration: 00:00:30 - scene: - light.living_room_lamps: - state: on - color_temp: 400 - brightness: 125 - light.white05: - state: off - light.living_room_floodlights: - state: off - # sleep: input_boolean.sleeping - # sleep_state: - # scene: - # light.colorflood05: - # state: 'on' - # color_name: 'red' - # brightness: 10 - -# front_door: -# module: door -# class: Door -# app: living_room -# door: binary_sensor.front_contact - -living_room_button: - module: button - class: Button - app: living_room - manual_mode: input_boolean.living_room_manual_mode - button: button01 - ref_entity: light.color04 - -living_room_motion: - module: motion - class: Motion - app: living_room - sensor: binary_sensor.living_room_motion - ref_entity: light.color04 diff --git a/apps/mancave.yaml b/apps/mancave.yaml deleted file mode 100644 index 85c26c2..0000000 --- a/apps/mancave.yaml +++ /dev/null @@ -1,84 +0,0 @@ -mancave: - module: room_control - class: RoomController - # rich: DEBUG - off_duration: 00:00:10 - manual_mode: input_boolean.mancave_manual_mode - states: - - time: sunrise - scene: - light.color01: - state: on - color_temp: 200 - brightness: 255 - light.colorflood05: - state: off - light.color03: - state: off - light.white08: - color_temp: 300 - brightness: 175 - light.wled_soundreactive: - state: off - preset: 'Stream' - - time: '18:00:00' - scene: - light.color01: - state: on - rgb_color: [255, 193, 193] - brightness: 255 - light.colorflood05: - state: on - rgb_color: [255, 193, 193] - brightness: 170 - light.color03: - state: off - light.white08: - state: on - color_temp: 400 - brightness: 70 - light.wled_soundreactive: - state: on - preset: 'WashingMachine' - - time: '23:00:00' - scene: - light.color01: - state: on - color_temp: 400 - brightness: 125 - light.colorflood05: - state: off - light.color03: - state: off - light.white08: - state: off - light.wled_soundreactive: - state: off - # sleep: input_boolean.sleeping - # sleep_state: - # scene: - # light.colorflood05: - # state: 'on' - # color_name: 'red' - # brightness: 10 - -# front_door: -# module: door -# class: Door -# app: living_room -# door: binary_sensor.front_contact - -mancave_button: - module: button - class: Button - app: mancave - manual_mode: input_boolean.mancave_manual_mode - button: button07 - ref_entity: light.color01 - -mancave_motion: - module: motion - class: Motion - app: mancave - sensor: binary_sensor.motionsensors01_occupancy - ref_entity: light.color01 diff --git a/apps/tap_dial.py b/apps/tap_dial.py new file mode 100644 index 0000000..5a53b4d --- /dev/null +++ b/apps/tap_dial.py @@ -0,0 +1,47 @@ +import re + +from appdaemon.entity import Entity +from appdaemon.plugins.hass.hassapi import Hass + + +BUTTON_PRESS = re.compile(r'button_(\d)_press_release') + + + +class TapDial(Hass): + active_entity: Entity + + def initialize(self): + self.log(f"Action entity: {self.tap_dial_entity.friendly_name}") + self.tap_dial_entity.listen_state(self.my_callback) + + @property + def tap_dial_entity(self) -> Entity: + return self.get_entity(self.args["entity"]) + + @property + def step_size(self) -> int: + return int(self.args.get("step_size", 25)) + + def my_callback(self, entity: str, attribute: str, old: str, new: str, **kwargs): + # self.log(f'{new}') + if new: + if m := BUTTON_PRESS.match(new): + pressed_button = int(m.group(1)) + self.log(f'Pressed button {pressed_button}') + + if associated_light := self.args.get(f'button{pressed_button}'): + light_entity = self.get_entity(associated_light) + self.active_entity = light_entity + self.log(f'Setting active entity to {self.active_entity.friendly_name}') + self.active_entity.toggle() + + match new: + case "dial_rotate_right_step": + b = self.active_entity.attributes['brightness'] + self.active_entity.turn_on(brightness=b+self.step_size) + case "dial_rotate_left_step": + b = self.active_entity.attributes['brightness'] + self.active_entity.turn_on(brightness=b-self.step_size) + # case _: + # self.log(f'Unhandled action: {new}')