Automation DSL можно использовать для создания более сложных автоматизаций, чем те, которые обсуждались в руководстве DSL — базовые автоматизации на iOS .
Последовательный с несколькими действиями
Автоматизация может выполнять несколько действий. Например, вместо одного узла action
можно использовать несколько узлов action
, которые выполняются последовательно:
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
action {...}
action {...}
action {...}
}
Последовательный с несколькими параллельными действиями
Если поместить несколько узлов action
в parallel
узел, действия будут выполняться одновременно.
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
Если в sequential
узле есть узлы action
, которые следуют за parallel
узлом, они ждут своего выполнения, пока все узлы в parallel
узле не завершат выполнение.
Задержки
Вы можете добавлять паузы в свои автоматизационные процессы с помощью метода delay(for:)
, который принимает аргумент Duration
, указывающий длительность паузы перед продолжением выполнения. Продолжительность паузы может составлять от пяти секунд до 24 часов.
Например, чтобы переключить свет четыре раза с пятисекундной паузой между каждым переключением:
typealias OnOffLightDevice = Matter.OnOffLightDeviceType
typealias OnOffTrait = Matter.OnOffTrait
sequential {
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
delay(for:.seconds(5))
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
delay(for:.seconds(5))
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
delay(for:.seconds(5))
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
}
Подавление триггера
Подавление триггера — это возможность, позволяющая вашей системе автоматизации игнорировать starter
в течение определённого периода времени после первоначального события срабатывания. Например, если в системе автоматизации есть starter
, срабатывающее при обнаружении движения, и если указать длительность подавления триггера пять минут, то при срабатывании starter
оно не сработает снова в течение следующих пяти минут. Это предотвращает частые повторные срабатывания автоматизации.
Чтобы применить подавление триггеров к вашей автоматизации, используйте ключевое слово suppress(for:)
с аргументом Duration
, указывающим время ожидания перед реакцией на последующие триггеры. Продолжительность подавления может составлять от пяти секунд до 24 часов.
typealias OccupancySensorDevice = Matter.OccupancySensorDeviceType
typealias OnOffLightDevice = Matter.OnOffLightDeviceType
typealias MotionDetectionTrait = Google.MotionDetectionTrait
typealias OnOffTrait = Matter.OnOffTrait
automation {
let starterNode = starter(device, OccupancySensorDevice.self, MotionDetectionTrait.self)
starterNode
suppress(for: .seconds(30 * 60) // 30 minutes
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
}
Обратите внимание, что подавление триггера влияет на все starters
в автоматизации, которые предшествуют Suppression
.
Установить атрибуты черты в действии
Чтобы установить значение атрибута признака:
- Создайте узел
update
внутри узлаaction
, включив соответствующую черту в качестве аргумента узлаupdate
:action(deviceReference, deviceType) { update(trait) { } }
- В узле
update
для каждого изменяемого атрибута используйте функцию-мутатор и передайте ей новое значение. Имя функции-мутатора формируется следующим образом:- Напишите имя атрибута с заглавной буквы.
- Добавьте к нему слово
set
.
defaultMoveRate
, вы должны использовать функцию-мутатор с именемsetDefaultMoveRate
.
Обратите внимание, что узел update
может иметь несколько функций-мутаторов. Вот пример обновления двух атрибутов:
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}