Активация

Чтобы функция выполнилась в нужный момент, нужно назначить ее на одно из событий в системе:

  • Активация по состоянию объекта:

    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) )