Compare commits

...

2 Commits

Author SHA1 Message Date
Jim Lancaster
6038d0d405 app changes, including initial tap dial 2024-12-26 18:58:33 -06:00
Jim Lancaster
e67df2809d dictionary unpacking 2024-12-26 18:58:04 -06:00
6 changed files with 86 additions and 152 deletions

View File

@@ -3,6 +3,7 @@ appdaemon:
longitude: -96.841910
elevation: 30
time_zone: America/Chicago
use_dictionary_unpacking: true
plugins:
HASS:
type: hass

View File

@@ -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

20
apps/button_switch.py Normal file
View File

@@ -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()

View File

@@ -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

View File

@@ -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

47
apps/tap_dial.py Normal file
View File

@@ -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}')