from appdaemon.plugins.hass.hassapi import Hass class SceneDetector(Hass): def initialize(self): self.scene_entity = self.args['scene'] if self.args['scene'].startswith('scene.') else f'scene.{self.args["scene"]}' self.scene_entity = self.get_entity(self.scene_entity) 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') def event_callback(self, event_name, data, cb_args): entity_id = data['service_data']['entity_id'] if entity_id == self.scene_entity.entity_id: self.scene_detected() def scene_detected(self): self.log(f'Detected scene activation: {self.scene_entity.friendly_name}') class MotionCanceller(SceneDetector): 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 Exception: self.log(f'Error cancelling motion callback for {self.args["app"]}', level='ERROR') else: self.log('Cancelled motion callback')