Язык автоматизации 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)
}
}