|
5 | 5 | import threading |
6 | 6 | import sys |
7 | 7 | sys.path.append('..') |
| 8 | +from triggers.trigger_group import TriggerGroup |
8 | 9 |
|
9 | 10 | import variables |
10 | 11 | import importlib |
@@ -37,67 +38,90 @@ def dynamic_import(self, path): |
37 | 38 | def init_triggers(self): |
38 | 39 | trigger_index = 0 |
39 | 40 | for trigger in self.config: |
40 | | - if trigger.get('type', None) is not None: |
41 | | - #Get the trigger from the triggers folder {trigger name}_trigger.{SensorName}Sensor |
42 | | - trigger_type = 'triggers.' + trigger.get('type').lower() + '_trigger.' + trigger.get('type').capitalize() + 'Trigger' |
| 41 | + if trigger.get("triggers", False): |
| 42 | + # Load a trigger group |
43 | 43 |
|
44 | | - imported_trigger = self.dynamic_import(trigger_type) |
| 44 | + trigger_actions = [] |
| 45 | + if trigger.get('actions'): |
| 46 | + for action in trigger.get("actions"): |
| 47 | + trigger_actions.append(self.actions[action]) |
45 | 48 |
|
46 | | - trigger_state = { |
47 | | - "active": threading.Event() #Event to signal relay to open/close |
48 | | - } |
| 49 | + new_trigger_group = TriggerGroup(name=trigger.get("group"), actions=trigger_actions, frequency=trigger.get("frequency", "once")) |
| 50 | + |
| 51 | + for trigger in trigger.get("triggers"): |
| 52 | + new_trigger = self.init_trigger(trigger, trigger_index, group=new_trigger_group) |
| 53 | + self.triggers.append(new_trigger) |
| 54 | + new_trigger_group.add_trigger(new_trigger) |
| 55 | + #Start the trigger thread |
| 56 | + trigger_thread = new_trigger.run() |
| 57 | + self.trigger_threads.append(trigger_thread) |
| 58 | + trigger_index += 1 |
| 59 | + else: |
| 60 | + new_trigger = self.init_trigger(trigger, trigger_index) |
| 61 | + self.triggers.append(new_trigger) |
| 62 | + #Start the trigger thread |
| 63 | + trigger_thread = new_trigger.run() |
| 64 | + self.trigger_threads.append(trigger_thread) |
| 65 | + trigger_index += 1 |
| 66 | + # print('{type} - {name}...\t\t\033[1;32m Listening\033[0;0m'.format(**trigger)) |
| 67 | + return |
49 | 68 |
|
50 | | - self.trigger_events[trigger.get("key", trigger_index)] = trigger_state |
| 69 | + def init_trigger(self, config, trigger_index, group=None): |
| 70 | + if config.get('type', None) is not None: |
| 71 | + #Get the trigger from the triggers folder {trigger name}_trigger.{SensorName}Sensor |
| 72 | + trigger_type = 'triggers.' + config.get('type').lower() + '_trigger.' + config.get('type').capitalize() + 'Trigger' |
51 | 73 |
|
52 | | - # Define default kwargs for all trigger types, conditionally include optional variables below if they exist |
53 | | - trigger_kwargs = { |
54 | | - 'name' : trigger.get('name', trigger.get('type')), |
55 | | - 'key' : trigger.get('key', None), |
56 | | - 'trigger_active' : trigger_state["active"], |
57 | | - 'main_thread_running' : self.main_thread_running, |
58 | | - 'system_ready' : self.system_ready |
59 | | - } |
| 74 | + imported_trigger = self.dynamic_import(trigger_type) |
60 | 75 |
|
61 | | - # optional trigger variables |
62 | | - if trigger.get('actions'): |
63 | | - trigger_actions = [] |
64 | | - for action in trigger.get("actions"): |
65 | | - trigger_actions.append(self.actions[action]) |
66 | | - trigger_kwargs['actions'] = trigger_actions |
| 76 | + trigger_state = { |
| 77 | + "active": threading.Event() #Event to signal relay to open/close |
| 78 | + } |
67 | 79 |
|
68 | | - if trigger.get('frequency'): |
69 | | - trigger_kwargs['frequency'] = trigger.get('frequency') |
| 80 | + self.trigger_events[config.get("key", trigger_index)] = trigger_state |
70 | 81 |
|
71 | | - if trigger.get('schedule'): |
72 | | - trigger_kwargs['schedule'] = trigger.get('schedule') |
| 82 | + # Define default kwargs for all trigger types, conditionally include optional variables below if they exist |
| 83 | + trigger_kwargs = { |
| 84 | + 'name' : config.get('name', config.get('type')), |
| 85 | + 'key' : config.get('key', None), |
| 86 | + 'trigger_active' : trigger_state["active"], |
| 87 | + 'main_thread_running' : self.main_thread_running, |
| 88 | + 'system_ready' : self.system_ready |
| 89 | + } |
73 | 90 |
|
74 | | - if trigger.get('source'): |
75 | | - trigger_kwargs['source'] = trigger.get('source') |
| 91 | + # optional trigger variables |
| 92 | + if config.get('actions'): |
| 93 | + trigger_actions = [] |
| 94 | + for action in config.get("actions"): |
| 95 | + trigger_actions.append(self.actions[action]) |
| 96 | + trigger_kwargs['actions'] = trigger_actions |
76 | 97 |
|
77 | | - if trigger.get('nested_source'): |
78 | | - trigger_kwargs['nested_source'] = trigger.get('nested_source') |
| 98 | + if config.get('frequency'): |
| 99 | + trigger_kwargs['frequency'] = config.get('frequency') |
79 | 100 |
|
80 | | - if trigger.get('channel'): |
81 | | - trigger_kwargs['channel'] = trigger.get('channel') |
| 101 | + if config.get('schedule'): |
| 102 | + trigger_kwargs['schedule'] = config.get('schedule') |
82 | 103 |
|
83 | | - if trigger.get('thresholds'): |
84 | | - trigger_kwargs['thresholds'] = trigger.get('thresholds') |
| 104 | + if config.get('source'): |
| 105 | + trigger_kwargs['source'] = config.get('source') |
85 | 106 |
|
86 | | - new_trigger = imported_trigger(**trigger_kwargs) |
87 | | - new_trigger.init_trigger() |
| 107 | + if config.get('nested_source'): |
| 108 | + trigger_kwargs['nested_source'] = config.get('nested_source') |
88 | 109 |
|
89 | | - new_trigger.type = trigger.get('type').lower() |
| 110 | + if config.get('channel'): |
| 111 | + trigger_kwargs['channel'] = config.get('channel') |
90 | 112 |
|
91 | | - self.triggers.append(new_trigger) |
| 113 | + if config.get('thresholds'): |
| 114 | + trigger_kwargs['thresholds'] = config.get('thresholds') |
92 | 115 |
|
93 | | - #Start the trigger thread |
94 | | - trigger_thread = new_trigger.run() |
| 116 | + if group is not None: |
| 117 | + trigger_kwargs['group'] = group |
95 | 118 |
|
96 | | - self.trigger_threads.append(trigger_thread) |
| 119 | + new_trigger = imported_trigger(**trigger_kwargs) |
| 120 | + new_trigger.init_trigger() |
97 | 121 |
|
98 | | - trigger_index += 1 |
99 | | - # print('{type} - {name}...\t\t\033[1;32m Listening\033[0;0m'.format(**trigger)) |
100 | | - return |
| 122 | + new_trigger.type = config.get('type').lower() |
| 123 | + |
| 124 | + return new_trigger |
101 | 125 |
|
102 | 126 | def run(self): |
103 | 127 | t = threading.Thread(target=self.work, args=()) |
|
0 commit comments