diff --git a/apps/scene_detect.py b/apps/scene_detect.py index 6621deb..6df4891 100644 --- a/apps/scene_detect.py +++ b/apps/scene_detect.py @@ -1,5 +1,5 @@ from appdaemon.plugins.hass.hassapi import Hass -import asyncio + class SceneDetector(Hass): def initialize(self): @@ -9,18 +9,25 @@ class SceneDetector(Hass): self.listen_event(self.event_callback, event='call_service', domain='scene', service='turn_on') self.log(f'Waiting for {self.scene_entity.friendly_name} to activate') - async def event_callback(self, event_name, data, cb_args): + def event_callback(self, event_name, data, cb_args): entity_id = data['service_data']['entity_id'] if entity_id == self.scene_entity.entity_id: - await self.scene_detected() + self.scene_detected() - async def scene_detected(self): + def scene_detected(self): self.log(f'Detected scene activation: {self.scene_entity.friendly_name}') class MotionCanceller(SceneDetector): - async def scene_detected(self): - await super().scene_detected() - await asyncio.sleep(0.5) # needed for when the scene gets turned on from everything being off because of competing callbacks - app = await self.get_app(self.args['app']) - await app.cancel_motion_callback(new='off') + def scene_detected(self): + super().scene_detected() + app = self.get_app(self.args['app']) + try: + self.run_in( + callback=lambda *args, **kwargs: app.cancel_motion_callback(), + delay=0.5 + ) + except: + self.log(f'Error cancelling motion callback for {self.args["app"]}', level='ERROR') + else: + self.log('Cancelled motion callback')