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 Android.
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:
automation {
sequential {
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.
automation {
sequential {
starter<_>(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
}
Se houver nós action
no nó sequential
que vêm depois do
nó parallel
, eles vão aguardar a execução até que todos os nós no nó parallel
tenham terminado a execução.
Atrasos
É possível pausar as automações usando a
palavra-chave delayFor
, que usa um argumento
java.time.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:
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()) }
}
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 suppressFor
com um argumento
java.time.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.
automation {
sequential {
val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
suppressFor(Duration.ofMinutes(30))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
A supressão de acionadores afeta todos os starters
em uma automação que
antecede o suppressFor
.
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:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}