added motion sensor example
This commit is contained in:
54
examples/motion.py
Normal file
54
examples/motion.py
Normal file
@@ -0,0 +1,54 @@
|
||||
from appdaemon.adbase import ADBase
|
||||
from appdaemon.entity import Entity
|
||||
|
||||
|
||||
class MotionSensor(ADBase): # (1)!
|
||||
def initialize(self):
|
||||
self.adapi = self.get_ad_api()
|
||||
self.log = self.adapi.log
|
||||
self.light.listen_state(self.handle_light, immediate=True) # (2) !
|
||||
|
||||
@property
|
||||
def motion_sensor(self) -> Entity:
|
||||
return self.adapi.get_entity(self.args['motion_sensor'])
|
||||
|
||||
@property
|
||||
def motion_detected(self) -> Entity:
|
||||
return self.motion_sensor.state == 'on'
|
||||
|
||||
@property
|
||||
def light(self) -> Entity:
|
||||
return self.adapi.get_entity(self.args['light'])
|
||||
|
||||
@property
|
||||
def light_is_on(self) -> bool:
|
||||
return self.light.state == 'on'
|
||||
|
||||
@property
|
||||
def off_duration(self) -> float:
|
||||
return float(self.args['off_duration'])
|
||||
|
||||
def handle_light(self, entity, attribute, old, new, **kwargs):
|
||||
if new == 'on':
|
||||
self.listen_motion_off()
|
||||
else:
|
||||
self.listen_motion_on()
|
||||
|
||||
def listen_motion_off(self):
|
||||
self.log('Listening for motion off')
|
||||
self.motion_sensor.listen_state(
|
||||
self.motion_off, new='off', duration=self.off_duration, oneshot=True
|
||||
)
|
||||
|
||||
def listen_motion_on(self):
|
||||
self.log(
|
||||
f"'{self.light.friendly_name}' will turn on with motion on '{self.motion_sensor.friendly_name}'"
|
||||
)
|
||||
self.motion_sensor.listen_state(self.motion_on, new='on')
|
||||
|
||||
def motion_on(self, entity, attribute, old, new, **kwargs):
|
||||
self.light.turn_on()
|
||||
|
||||
def motion_off(self, entity, attribute, old, new, **kwargs):
|
||||
self.log(f"Listening for motion on '{self.motion_sensor.friendly_name}'")
|
||||
self.light.turn_off()
|
||||
Reference in New Issue
Block a user