A DSL de automação pode ser usada para criar automações mais complexas do que aquelas discutidas no guia de 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 nó
action
único, 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úcleo parallel
, eles vão esperar para serem executados até que todos os nós no
núcleo parallel
tenham terminado a execução.
Atrasos
É possível pausar as automações usando o método
delay(for:)
,
que usa um argumento
Duration
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 acender e apagar uma luz quatro vezes com uma pausa de cinco segundos entre cada ativação:
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() }
}
Acionar a supressão
A supressão de gatilho é 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 acionadores 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 repetidamente.
Para aplicar a supressão de acionadores à automação, use a palavra-chave
suppress(for:)
com um argumento
Duration
que represente 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
antecede o Suppression
.
Definir atributos de traço em uma ação
Para definir o valor de um atributo de traço:
- Crie um nó
update
em um nóaction
, incluindo o atributo relevante como um argumento para o nóupdate
:action(deviceReference, deviceType) { update(trait) { } }
- No nó
update
, para cada atributo a ser modificado, use uma função modificadora e transmita o novo valor. Para formar o nome da função mutadora:- Colocar o nome do atributo em maiúsculas
- Adicione o prefixo
set
.
defaultMoveRate
, use uma função modificadora chamadasetDefaultMoveRate
.
Um nó update
pode ter várias funções modificadoras. 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)
}
}