def item_triggered(item_name, event_types=None, result_item_name=None):
event_types = event_types or [ITEM_CHANGE]
event_bus = scope.events
if hasattr(event_types, '__iter__'):
event_types = ",".join(event_types)
def decorator(fn):
nargs = len(inspect.getargspec(fn).args)
def callback(module, inputs):
fn_args = []
event = inputs.get('event')
if event and nargs == 1:
fn_args.append(event)
result_value = fn(*fn_args)
if result_item_name:
event_bus.postUpdate(result_item_name, unicode(result_value))
rule = _FunctionRule(callback, [ItemEventTrigger(item_name, event_types)], extended=True)
get_automation_manager().addRule(rule)
return fn
return decorator
评论列表
文章目录