from ad_toolbox.smartobject import SmartObject import ad_toolbox.smartcondition as SmartCondition from ad_toolbox.eventhandler import EventHandler class Senseo(SmartObject): def on_initialize_smart_object(self): super().on_initialize_smart_object() self.delay_cb_handle = None self.smartconditions = dict() self.event_handlers = list() try: self.program_configs = self.args['programs'] except KeyError: self.program_configs = None for config_name in self.program_configs: config = self.program_configs[config_name] self.smartconditions[config_name] = SmartCondition.Evaluator(self,config['condition'],condition_name = config_name) if not self.entity_exists(config['button']): self.log_error(f"Entity not found {config['button']}") self.event_handlers.append(EventHandler(self,config["events"],self.on_event,config_name)) def on_event(self, event_name, event_data,config_name): self.log_info(f"Event {event_name} received. Config name = {config_name}") config = self.program_configs[config_name] try: delay = config['delay'] except KeyError: delay = 0 if self.smartconditions[config_name].evaluate() == SmartCondition.Result.Succeeded: if (delay > 0): if self.delay_cb_handle: self.cancel_timer(self.delay_cb_handle) self.log_info(f"The coffee will be prepared in {delay}s") self.delay_cb_handle = self.run_in(self.on_delay_elapse,delay,config_name = config_name) else: self.prepare_coffee(config_name) def on_delay_elapse(self, kwargs): self.delay_cb_handle = None self.prepare_coffee(kwargs['config_name']) def prepare_coffee(self,config_name): config = self.program_configs[config_name] self.log_info(f"Preparing Coffee ({config_name})") self.call_service("button/press", entity_id = config['button']) self.call_service("button/press", entity_id = self.args['clear_program_button'])