Automation DSL можно использовать для создания более сложных автоматизаций, чем те, которые обсуждались в руководстве DSL — базовые автоматизации на Android .
Последовательный с несколькими действиями
Автоматизация может выполнять несколько действий. Например, вместо одного узла 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
.
Ограничить количество казней
Вы можете ограничить количество запусков автоматизации.
Например, вы можете захотеть настроить автоматическую функцию, которая будет разово включать пылесос, пока вас нет дома.
Для этого задайте поле метаданных maxExecutionCount
автоматизации. В следующем примере показана автоматизация, которая может быть выполнена только один раз:
automation { // The automation can only be executed once. maxExecutionCount = 1 // When the door lock state changes sequential { val doorLockEvent = starter<_>(doorLock, DoorLockDevice, LockOperationEvent) // if the door is unlocked condition() { expression = (doorLockEvent.lockOperationType equals LockOperationTypeEnum.Unlock) } // turn the light on action(light, DimmableLightDevice) { command(OnOff.on()) } } }
Автоматизация немедленно удаляется после завершения её последнего выполнения и достижения maxExecutionCount
). Запись истории автоматизации сохраняется на вкладке «Активность» Google Home app (GHA) , включая идентификатор automation_id
.
Установить атрибуты черты в действии
Чтобы установить значение атрибута признака:
- Создайте узел
update
внутри узлаaction
, включив соответствующую черту в качестве аргумента узлаupdate
:action(deviceReference, deviceType) { update(trait) { } }
- В узле
update
для каждого изменяемого атрибута используйте функцию-мутатор и передайте ей новое значение. Имя функции-мутатора формируется следующим образом:- Напишите имя атрибута с заглавной буквы.
- Добавьте к нему слово
set
.
defaultMoveRate
, вы должны использовать функцию-мутатор с именемsetDefaultMoveRate
.
Обратите внимание, что узел update
может иметь несколько функций-мутаторов. Вот пример обновления двух атрибутов:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}