Чтобы ваши скрипты работали в 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: имя текущего скрипта.