diff --git a/virtualevents.py b/virtualevents.py new file mode 100644 index 0000000..b43155c --- /dev/null +++ b/virtualevents.py @@ -0,0 +1,30 @@ +import appdaemon.plugins.hass.hassapi as hass +import smartcondition as SmartCondition +from expressionparser import ParsingException +from logger_interface import LoggerInterface + +class VirtualEvents(hass.Hass,LoggerInterface): + + def initialize(self): + self.initialize_logger_interface(self.get_ad_api()) + try: self.mute_logger(self.args['mute']) + except KeyError: pass + + self.virtual_events = dict() + + if "virtual_events" in self.args: + for event in self.args["virtual_events"]: + try: self.virtual_events[event] = SmartCondition.Evaluator(self,self.args["virtual_events"][event]['event_condition'],condition_name = event,on_succeed_cb = self.on_condition_succeed,pass_condition_name_to_cb = event, trigger_callback_on_activation = False, trigger_callback_on_entity_creation = False) + except ParsingException as e: + self.log_error(str(e)) + continue + + def on_condition_succeed(self,event_name): + event_yaml = self.args["virtual_events"][event_name] + if 'event_data' in event_yaml: + self.log(f"Sending event {event_yaml['event_name']} data = {event_yaml['event_data']}") + self.fire_event(event_yaml['event_name'],**event_yaml['event_data']) + else: + self.log(f"Sending event {event_yaml['event_name']}") + self.fire_event(event_yaml['event_name']) +