Вход / Регистрация / Добавить статью

Создание скриптов на dzVents

dzVents

Domoticz dzVents

Чтобы ваши скрипты работали в Domoticz dzVents, их нужно преобразовать в модуль Lua с определенной структурой (происходит автоматически). Он возвращает таблицу Lua (объект) с предопределенными ключами, такими как on и execute.

Например:

  return {
    on = {
        devices = { 'My switch' }
    },
    execute = function(domoticz, switch)
        -- логика скрипта:
        if (switch.state == 'On') then
            domoticz.log('Я заработал!', domoticz.LOG_INFO)
        end
    end
 }

Часть on определяет триггер, а часть execute — это то, что должно быть сделано, если триггер совпадает с текущим событием Domoticz.  Вся ваша логика находится внутри функции execute.

Структура скриптов Domoticz dzVents

Каждый скрипт dzVents имеет следующую структуру:

  return {
    active = true, -- указывать необязательно
    on = { -- минимум один из них:
        devices = { ... },
        variables = { ... },
        timer = { ... },
        security = { ... },
        scenes = { ... },
        groups = { ... },
        httpResponses = { ... }
    },
    data = { ... }, -- указывать необязательно
    logging = { ... }, -- указывать необязательно
    execute = function(domoticz, item, triggerInfo)
        -- ваш код
    end
 }

active = true / false (указывать необязательно)

Если active = false , скрипт не активируется: dzVents полностью игнорирует скрипт.  По умолчанию active = true (в том числе, если значение не указано).

При создании скриптов во внутреннем редакторе Domoticz, вам не нужна эта часть, так как редактор имеет свой собственный способ включения и отключения скриптов.

Таким образом, active может быть:

  • true: (по умолчанию) файл сценария будет обработан.
  • false: файл сценария игнорируется.
  • function(domoticz) … end: Функция возвращает true или false. Функция получит объект domoticz со всей информацией о вашем экземпляре domoticz: active = function(domoticz) …. end. Например, вы можете проверить переменную или переключатель Domoticz и запретить выполнение сценария.

Однако имейте в виду, что для каждого скрипта в вашей папке, функция active будет вызываться каждый цикл! Поэтому лучше всего использовать всю свою логику в функции execute, а не в функции active.

on = { … }

Секция on сообщает dzVents, когда должна быть вызвана функция execute. Она содержит все события / триггеры, которые контролируются dzVents. Если какое-либо из событий или триггеров совпадает с текущим событием, исходящим из Domoticz, то часть скрипта execute выполняется dzVents. В секции on имеется несколько видов подразделов, которые могут использоваться одновременно:

devices = { … }

Список имен или индексов устройств. Если в вашей системе было изменено устройство (например, был включен переключатель или получена новая температура), и он указан в этом разделе, тогда выполняется функция execute. Каждый device может быть:

  • Именем вашего устройства между строковыми кавычками. Вы можете использовать звездочку (*) в wild-card: PIR_* или *_PIR. Например devices = { ‘myDevice’, ‘anotherDevice’, 123, ‘pir*’ }.
  • Индексом (idx) вашего устройства (так как имя может меняться, индекс обычно остается неизменным, индекс можно найти в разделе устройств в Domoticz). Обратите внимание, что idx — это число.
  • Именем или IDX вашего устройства с последующим временным ограничением, такие как: [‘myDevice’] = { ‘at 15:*’, ‘at 22:* on sat, sun’ }. Сценарий будет выполнен, если myDevice будет изменен между 15:00 и 16:00 или с 22:00 до 23:00 в выходные дни.

scenes = { … }

Список одного или нескольких имен или индексов сцен. Те же правила, что и для устройств. Если ваша сцена указана в этой таблице, тогда будет запущена исполняемая функция, например.: on = { scenes = { ‘myScene’, ‘anotherScene’ } },

groups = { … }

Список одного или нескольких имен или индексов групп. Те же правила, что и для устройств.

timer = { … }

Список одного или нескольких временных правил. every minute или at 17:* Если какое либо из правил совпадает с текущим временем / датой, вызывается функция execute.

Например:

on = { timer = { 'between 30 minutes before sunset and 30 minutes after sunrise' } }

variables = { … }

Список одной или нескольких имен пользовательских переменных, созданных в Domoticz (Setup > More options > User variables). Если какая-либо из перечисленных здесь переменных изменяется, скрипт выполняется.

security = { … }

Список одного или нескольких из этих состояний безопасности:
• domoticz.SECURITY_ARMEDAWAY
• domoticz.SECURITY_ARMEDHOME
• domoticz.SECURITY_DISARMED
Если состояние безопасности в Domoticz изменяется и оно соответствует любому из состояний, перечисленных здесь, сценарий будет выполнен. См. /path/to/domoticz/scripts/dzVents/examples/templates/security.lua для примера.

httpResponses = { … }

Список одного или нескольких триггеров обратного вызова HTTP. Используйте это совместно с domoticz.openURL(), где вы предоставите Domoticz триггер вызова.

data = { … } (указывать необязательно)

В разделе дополнительных данных вы можете определить локальные переменные, которые будут хранить свои значения между запусками скриптов. Эти переменные могут получить значение в вашей функции execute, и в следующий раз, когда скрипт будет запущен, эти переменные будут восстановлены в прежнем состоянии.

logging = { … } (указывать необязательно)

Необязательный раздел ведения журнала позволяет вам переопределить глобальные параметры ведения журнала dzVents, как указано в Setup > Settings > Other > EventSystem > dzVents Log Level. Это удобно, если вы хотите, чтобы этот скрипт имел обширное ведение журнала отладки, в то время как остальная часть вашего скрипта выполнялась молча.

У вас есть следующие варианты:
level: Это уровень журнала, который вы хотите для этого скрипта. Может быть:

  • domoticz.LOG_INFO
  • domoticz.LOG_MODULE_EXEC_INFO
  • domoticz.LOG_DEBUG
  • domoticz.LOG_ERROR

marker: Строка, которая идет перед каждым сообщением журнала. Таким образом, вы можете легко создать фильтр в журнале Domoticz, чтобы увидеть только эти сообщения.

logging = {
    level = domoticz.LOG_DEBUG,
    marker = "Мой скрипт"
    },

execute = function(domoticz, item, triggerInfo) … end = { … }

Когда все вышеперечисленные условия выполнены (active == true, а секция on имеет по крайней мере одно правило соответствия), вызывается функция execute. Это сердце вашего сценария. Функция имеет три параметра:

(domoticz, item, triggerInfo)

Этот объект предоставляет доступ почти ко всему, что есть в вашей системе Domoticz, включая все методы манипулирования, например изменение переключателей или отправку уведомлений.

(domoticz, item, triggerInfo)

В зависимости от того, что действительно вызвало сценарий, item бывает:

• device
• variable
• scene
• group
• timer
• security
• httpResponse

Поскольку вы можете определить несколько триггеров в своем скрипте, не всегда ясно, какой тип у второго параметра. В коде вы должны знать это, чтобы правильно реагировать на различные события. Чтобы вам было легче осмотреть объект, вы можете использовать эти атрибуты: if (item.isDevice) then … end

isDevice возвращает true, если item является объектом Device
isVariable возвращает true, если item является объектом Variable
isScene возвращает true, если item является объектом Scene
isGroup возвращает true, если item является объектом Group
isTimer возвращает true, если item является объектом Timer
isSecurty возвращает true, если item является объектом Securty
isHTTPResponse возвращает true, если item является объектом HTTPResponse
trigger строка, правило таймера, состояние безопасности или ответ HTTP, которые фактически вызывают ваш скрипт.

(domoticz, item, triggerInfo)

Начиная с версии 2.4.0, triggerInfo стал более или менее устаревшим и оставлен для обратной совместимости. Вся информация теперь доступна по параметру item (второй параметр функции execute).triggerInfo содержит информацию о том, что вызвало сценарий.

Объект имеет атрибуты:

type: тип события, вызвавшего функцию выполнения:

  • domoticz.EVENT_TYPE_TIMER
  • domoticz.EVENT_TYPE_DEVICE
  • domoticz.EVENT_TYPE_SECURITY
  • domoticz.EVENT_TYPE_SCENE
  • domoticz.EVENT_TYPE_GROUP
  • domoticz.EVENT_TYPE_VARIABLE
  • domoticz.EVENT_TYPE_HTTPRESPONSE

trigger: правило таймера, вызвавшее сценарий, если он был вызван из-за события таймера, или состояние безопасности, вызвавшее правило триггера безопасности.
scriptName: имя текущего скрипта.

Денис Лунин

Радиоинженер, техно-гик. Есть опыт разработчика.

Оцените автора
( 1 оценка, среднее 5 из 5 )
Добавить комментарий

"Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности