Automation DSL можно использовать для создания более сложных средств автоматизации, чем те, которые обсуждаются в руководстве по базовой автоматизации DSL .
Последовательный с несколькими действиями
Автоматизация может делать больше, чем одну вещь. Например, вместо одного узла action
вы можете иметь несколько узлов action
, которые выполняются в последовательном порядке:
automation {
sequential {
starter<_>(...)
condition {...}
action {...}
action {...}
action {...}
}
}
Последовательный с несколькими параллельными действиями
Если вы поместите несколько узлов action
в parallel
узел, действия будут выполняться одновременно.
automation {
sequential {
starter<_>(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
}
Если в sequential
узле есть узлы action
, которые идут после parallel
узла, они ждут выполнения до тех пор, пока все узлы в parallel
узле не завершат выполнение.
Задержки
Вы можете вводить паузы в свою автоматизацию, используя ключевое слово delayFor
, которое принимает аргумент java.time.Duration
, указывающий, как долго нужно делать паузу перед продолжением выполнения. Продолжительность паузы может составлять от пяти секунд до 24 часов.
Например, чтобы переключить свет четыре раза с пятисекундной паузой между каждым переключением:
sequential {
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
delayFor(Duration.ofSeconds(5))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
delayFor(Duration.ofSeconds(5))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
delayFor(Duration.ofSeconds(5))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
Подавление триггера
Подавление триггера — это возможность, которая позволяет вашей системе автоматизации игнорировать starter
в течение определенного периода времени после первоначального триггерного события. Например, если в системе автоматизации есть starter
, который срабатывает при обнаружении движения, и если вы укажете продолжительность подавления триггера в пять минут, то при срабатывании starter
он не будет срабатывать снова в течение следующих пяти минут. Это предотвращает повторное быстрое срабатывание автоматики.
Чтобы применить подавление триггеров к вашей автоматизации, используйте ключевое слово suppressFor
с аргументом java.time.Duration
, указывающим, как долго ждать, прежде чем реагировать на последующие триггеры. Продолжительность подавления может составлять от пяти секунд до 24 часов.
automation {
sequential {
val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
suppressFor(Duration.ofMinutes(30))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
Обратите внимание, что подавление триггера влияет на все starters
в автоматизации, предшествующие suppressFor
.
Установите атрибуты черты в действии
Чтобы установить значение атрибута типажа:
- Создайте узел
update
внутри узлаaction
, включая соответствующий признак в качестве аргумента узлаupdate
:action(deviceReference, deviceType) { update(trait) { } }
- В узле
update
для каждого изменяемого атрибута используйте функцию-мутатор и передайте ей новое значение. Чтобы сформировать имя функции-мутатора:- Напишите имя атрибута с заглавной буквы
- Добавьте к нему префикс слова
set
.
defaultMoveRate
, вы должны использовать функцию-мутатор с именемsetDefaultMoveRate
.
Обратите внимание, что узел update
может иметь несколько функций-мутаторов. Вот пример обновления двух атрибутов:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}