Чтобы функция выполнилась в нужный момент, нужно назначить ее на одно из событий в системе:
-
Активация по состоянию объекта:
cam1 = object("Камера 1") def f(): message("Движение: %s" % cam1.state["motion"]) cam1.activate_on_state_changes(f) -
Активация по изменению настроек:
h = settings("health") def f(): message("Здоровье базы данных: %s" % h["db_connected"]) h.activate_on_changes(f) -
Активация по нажатию клавиши:
def f(): message("Hello world!") activate_on_shortcut("F9", f)Для скриптов и правил доступны только клавиши F1-F12, с модификаторами Ctrl, Alt, Shift. Работают также клавиши джойстика, откройте редактор правил, чтобы посмотреть имена клавиш.
-
Активация из контекстного меню:
def func1(guid): alert(guid.name) def func2(guid): alert(guid.name) action1 = activate_on_context_menu("xeLzkjpd", "Выполнить функцию 1", func1) action2 = activate_on_context_menu("Channel", "Выполнить функцию 2", func2)При этом, пункт Выполнить функцию 2 появится в контекстных меню, вызываемых на всех устройствах класса "Channel", а пункт Выполнить функцию 1 - только одного устройства с GUID "xeLzkjpd".

-
Активация по событию в журнале:
def f(ev): message("Случилось %s" % ev.type) activate_on_events("", "", f)Обратите внимание, что в функции должен быть параметр, в него помещается событие. Подробнее смотрите пример 2_event. Кнопка загрузки примеров находится снизу от редактора кода.
-
Иногда в скрипте требуется задержка. Использование time.sleep() не годится, потому что эта функция заставляет программу зависнуть на указанное время. Для ожидания нужно использовать timeout(). Через заданное время вызовется указанная функция:
def f(): alert("Прошло 2 секунды!") timeout(3000, g) def g(): alert("Прошло еще 3!") timeout(1000, lambda: h(1,2,3)) def h(param1, param2, param3): alert("Мне нужны для продолжения работы после задержки " + "параметры %i, %i, %i" % (param1, param2, param3)) timeout(2000, f) -
Активация по событию AutoTRASSIR:
def f(ev): message("Проехала машина с номером %s" % ev.plate) activate_on_lpr_events(f) -
Активация по событию ActivePOS:
def f(ev): if ev.type=="POS_POSITION_ADD": message("В чек добавили %s" % ev.text) activate_on_pos_events(f)
Чтобы узнать, какие еще поля есть в структурах событий, используйте dir()
def f(ev): alert( dir(ev) )

