DzVents — Параметры для Команд (Задержка, Длительность, Триггер)

dzvents параметры команды Умный дом

В dzVents много методов для устройств поддерживают дополнительные параметры, такие как управление задержкой или длительностью:

-- Включить через 10 секунд на 2 минуты
device.switchOn().afterSec(10).forMin(2)
-- Включить через случайный промежуток времени (1-10 мин) на 2 минуты
device.switchOff().withinMin(10).forMin(2)
device.close().forMin(15)
device.open().afterSec(20)
device.open().afterMin(2)
-- включить без активации последующих событий
device.switchOn().silent()
-- трехразовое мигание света через 1 секунду
device.switchOn().forSec(2).repeatAfterSec(1, 3)
-- включить устройство, но только если текущее состояние ~= 'On':
device.switchOn().checkFirst()
-- применяется для:
if (device.state == 'Off') then
devices.switchOn()
end

Параметры

  • afterHour(hours), afterMin(minutes), afterSec(seconds): Функция. Активирует команду после определенного
    количества часов, минут или секунд.
  • cancelQueuedCommands(): Функция. Отменяет команды стоящие в очереди. Например. вы включаете устройство через 10 минут: myDevice.switchOn().afterMin(10). В течение этих 10 минут вы можете отменить эту команду, выполнив: myDevice.cancelQueuedCommands().
  • checkFirst(): Функция. Проверяет, отличается ли текущее состояние устройства от требуемого нового состояния. Если целевое состояние одинаковое, команда mySwitch.switchOn().checkFirst(), не отправляется, если переключатель уже включен. Эта команда работает только с переключателями. Она недоступна для команд toggle() и dimTo().
  • forHour(hours), forMin(minutes), forSec(seconds): Функция. Активирует команду на часы, минуты или секунды. Например: включить на 1 час, на 30 мин. и т.д. См. таблицу доступности ниже.
  • withinHour(hours), withinMin(minutes), withinSec(seconds): Функция. Активирует команду в течение определенного периода (заданного в часах, минутах или секундах) случайным образом. См. таблицу доступности ниже.
  • silent(): Функция. Никакие последующие события не сработают: mySwitch.switchOff().silent().
  • repeatAfterHour(hours, [number]), repeatAfterMin(minutes, [number]), repeatAfterSec(seconds, [number]): Функция. Повторяется указанное количество раз после указанной продолжительности (задается в часах, минутах или секундах). Если количество не указано, используется 1. Обратите внимание, что afterXXX() и withinXXX() применяются только в начале последовательности, а не между повторами!

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

Важное замечание при использовании forXXX(): Допустим, у вас есть освещение, которое включается при срабатывании датчика движения. В настоящее время освещение Off и вы делаете: light.switchOn().forMin(5). Что происходит внутри Domoticz: в t0 он выдает команду SwitchOn() и назначает команду для восстановления текущего состояния (выключено) через 5 минут на t5. Поэтому свет выключится (при t5) через 5 минут.

Если до того, как через 5 минут сработает запланированный switchOff() , будет обнаружено новое движение, и вы снова отправите эту команду в t2 light.switchOn().forMin(5), тогда свет никогда не выключится!

Вот что происходит: При t2, когда Domoticz получает команду switchOn().forMin(5) снова, он видит запланированную команду в t5 и удаляет ее (она находится в пределах нового интервала).

Затем Domoticz выполняет команду switchOn(). Затем он проверяет текущее состояние света (которое сейчас равно On!!!) и планирует команду для возврата в это состояние при t2 + 5 = t7. И при t7 свет снова включится. Получается — свет никогда не будет выключен, потому что будущие команды всегда будет проверяться на текущее состояние On.

Как сделать правильно?

Итак, вместо простого повторного вызова switchOn().forMin(5) сначала нужно проверить состояние переключателя:

if (light.active) then
light.switchOff().afterMin(5)
else
light.switchOn().forMin(5)
end

или выполнять эти две команды, поскольку они взаимоисключающие:

light.switchOff().checkFirst().afterMin(5)
light.switchOn().checkFirst().forMin(5)

Доступность параметров для команд

Все параметры для команд доступны только для переключателей, таких как: myDevice.switchOff(), myGroup.switchOn() или myBlinds.open().

Смотрите таблицу ниже. Для обновления (обычно Dummy) устройств, таких как текстовое устройство myTextDevice.updateText(‘zork’) вы можете использовать только silent().

параметры изменения состояния команды
обновления
пользовательские
переменные
afterXXX()
forXXX() n/a n/a
withinXXX()
silent()
repeatAfterXXX() n/a n/a
checkFirst() • (переключатели) n/a n/a
cancelQueuedCommands()

Примечание: XXX это Min/Sec/Hour например afterMin().

Примечание: для domoticz.openURL() доступно только afterXXX() и withinXXX()

Триггеры последующих событий

Обычно, если вы выполняете команду, Domoticz немедленно инициирует последующие события, а dzVents автоматически запускает определенные сценарии событий.

Если вы запускаете сцену, все устройства в этой сцене выдадут событие изменения. Если у вас есть триггеры событий для этих устройств, они будут выполняться с помощью dzVents. Если вы не хотите, чтобы это произошло, добавьте .silent() в свои команды.

Создание своего собственного адаптера устройства

Если ваше устройство не распознается dzVents, вы все равно можете управлять им с помощью общих атрибутов и методов . Однако гораздо лучше иметь собственные атрибуты и методы для устройства.

Существующие распознанные адаптеры находятся в /path/to/domoticz/dzVents/runtime/device-adapters.

Скопируйте существующий и адаптируйте его к вашим потребностям. Вы можете включить отладочный журнал ( .LOG_DEBUG) и проверить файл domoticzData.lua в папке dzVents. Там вы найдете уникальную подпись для своего типа устройства.

Обычно это комбинация deviceType и deviceSubType, но вы можете использовать любой из атрибутов устройства в функции matches. Функция matches проверяет, подходит ли тип устройства для вашего адаптера, функция process фактически создает ваши конкретные атрибуты и методы.

Кроме того, если вы вызываете myDevice.dump(), вы увидите все атрибуты и методы, а атрибут _adapters отобразит список применяемых адаптеров для этого устройства. Зарегистрируйте свой адаптер в Adapters.lua.

Поделитесь своим адаптером, когда он будет работать.

Больше информации и програмных кодов написано в Умном доме.

Яндекс.Метрика
Rafael Erg
Оцените автора
( Пока оценок нет )
Добавить комментарий

Adblock
detector