O DSL de automação pode ser usado para criar automações mais complexas do que as discutidas no Guia do 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 único nó action, 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 esperar para serem executados até que todos os nós dentro do parallel tenham terminado a execução.
Atrasos
Você pode introduzir pausas nas automações usando a
delayFor
palavra-chave, que recebe um
java.time.Duration
argumento que representa quanto tempo pausar 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:
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()) }
}
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
suppressFor
palavra-chave com um
java.time.Duration
argumento que representa quanto tempo esperar 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()) }
}
Observe que a supressão de acionadores afeta todos os starters em uma automação que antecedem o suppressFor.
Limitar o número de execuções
Você pode limitar o número de vezes que uma automação pode ser executada.
Por exemplo, talvez você queira configurar uma automação única que execute o aspirador de pó enquanto você estiver fora de casa durante o dia.
Para fazer isso, defina o campo de metadados
maxExecutionCount
da automação.
O exemplo a seguir é uma automação que só pode ser executada uma vez:
automation { // The automation can only be executed once. maxExecutionCount = 1 // When the door lock state changes sequential { val doorLockEvent = starter<_>(doorLock, DoorLockDevice, LockOperationEvent) // if the door is unlocked condition() { expression = (doorLockEvent.lockOperationType equals LockOperationTypeEnum.Unlock) } // turn the light on action(light, DimmableLightDevice) { command(OnOff.on()) } } }
A automação é excluída imediatamente após a conclusão da execução pela última vez e o maxExecutionCount é atingido. A entrada do histórico da automação permanece
na guia Google Home app (GHA) Atividade, incluindo o automation_id.
Definir atributos de traço em uma ação
Para definir o valor de um atributo de traço:
- Crie um nó
updateem um nóaction, incluindo o traço 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 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, você usaria uma função mutadora chamadasetDefaultMoveRate.
Observe que um nó update pode ter várias funções mutadoras. Confira um exemplo em que dois atributos são atualizados:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}