A DSL de automação pode ser usada para criar automações mais complexas do que as discutidas em Guia da DSL: automações básicas no iOS.
Sequencial com várias ações
Uma automação pode fazer mais de uma coisa. Por exemplo, em vez do único nó action, você pode ter vários nós action, que são executados em ordem sequencial:
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
action {...}
action {...}
action {...}
}
Sequencial com várias ações paralelas
Se você colocar vários nós action em um nó parallel, as ações serão executadas simultaneamente.
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
Se houver nós action no nó sequential que vêm depois do nó parallel, eles vão esperar para serem executados até que todos os nós dentro do parallel tenham terminado a execução.
Atrasos
É possível introduzir pausas nas automações usando o
delay(for:) método,
que recebe um
Duration
argumento que representa o tempo de pausa antes de continuar a execução. A duração da pausa pode ser de cinco segundos a 24 horas.
Por exemplo, para alternar uma luz quatro vezes com uma pausa de cinco segundos entre cada alternância:
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() }
}
Supressão de acionadores
A supressão de acionadores é um recurso que permite que a automação ignore um starter por um período especificado após o evento de acionamento inicial. Por exemplo, se a automação tiver um starter acionado pela detecção de movimento e você especificar uma duração de supressão de acionador de cinco minutos, quando o starter for acionado, ele não será acionado novamente nos próximos cinco minutos. Isso impede que a automação seja acionada rapidamente várias vezes.
Para aplicar a supressão de acionadores à automação, use a
suppress(for:)
palavra-chave com um
Duration
argumento que representa o tempo de espera antes de responder a acionadores subsequentes.
A duração da supressão pode ser de cinco segundos a 24 horas.
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() }
}
A supressão de acionadores afeta todos os starters em uma automação que antecedem a Suppression.
Definir atributos de característica em uma ação
Para definir o valor de um atributo de característica:
- Crie um nó
updateem um nóaction, incluindo a característica relevante como um argumento para o nóupdatenode:action(deviceReference, deviceType) { update(trait) { } } - No nó
update, para cada atributo a ser modificado, use uma função mutadora e transmita o novo valor. Para formar o nome da função mutadora:- Coloque o nome do atributo em maiúsculas.
- Adicione o prefixo
set.
defaultMoveRate, use uma função mutadora chamadasetDefaultMoveRate.
Um nó update pode ter várias funções mutadoras. Confira um exemplo em que dois atributos são atualizados:
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}