O DSL de automação pode ser usado para criar automações mais complexas do que aquelas discutidas no guia de DSL: automações básicas.
Sequencial com várias ações
Uma automação pode fazer mais de uma coisa. Por exemplo, no lugar do nó
action
único, você pode ter vários nós action
, que são executados em ordem
seqüencial:
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úcleo parallel
, eles vão esperar para serem executados até que todos os nós no nó
parallel
terminem a execução.
Atrasos
É possível pausar as automações usando a
palavra-chave delayFor
, que usa um argumento
java.time.Duration
para representar o tempo de pausa antes de continuar a execução. A duração da pausa
pode ser de cinco segundos ou 24 horas.
Por exemplo, para alternar uma luz quatro vezes com uma pausa de cinco segundos entre cada alternância:
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
precede 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
- Insira 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)
}
}