La DSL de automatización se puede usar para crear automatizaciones más complejas que las que se describen en la guía de DSL: automatizaciones básicas en Android.
Secuencial con varias acciones
Una automatización puede hacer más de una cosa. Por ejemplo, en lugar del nodo action único, podrías tener varios nodos action, que se ejecutan en orden secuencial:
automation {
sequential {
starter<_>(...)
condition {...}
action {...}
action {...}
action {...}
}
}
Secuencial con varias acciones paralelas
Si colocas varios nodos action en un nodo parallel, las acciones se ejecutan de forma simultánea.
automation {
sequential {
starter<_>(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
}
Si hay nodos action en el nodo sequential que vienen después del nodo parallel, esperan a ejecutarse hasta que todos los nodos dentro del nodo parallel hayan terminado de ejecutarse.
Demoras
Puedes introducir pausas en tus automatizaciones con la
delayFor
palabra clave, que toma un
java.time.Duration
argumento que representa cuánto tiempo se debe pausar antes de continuar con la ejecución. La duración de la pausa puede ser de cinco segundos o de 24 horas.
Por ejemplo, para alternar una luz cuatro veces con una pausa de cinco segundos entre cada alternancia, haz lo siguiente:
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()) }
}
Supresión de activadores
La supresión de activadores es una capacidad que permite que tu automatización ignore un starter durante un período especificado después del evento de activación inicial. Por ejemplo, si la automatización tiene un starter que se activa con la detección de movimiento y especificas una duración de supresión de activadores de cinco minutos, cuando se active el starter, no se volverá a activar durante los próximos cinco minutos. Esto evita que la automatización se active rápidamente una y otra vez.
Para aplicar la supresión de activadores a tu automatización, usa la
suppressFor
palabra clave con un
java.time.Duration
argumento que representa cuánto tiempo esperar antes de responder a los activadores posteriores.
La duración de la supresión puede ser de cinco segundos o de 24 horas.
automation {
sequential {
val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
suppressFor(Duration.ofMinutes(30))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
Ten en cuenta que la supresión de activadores afecta a todos los starters de una automatización que preceden al suppressFor.
Limita la cantidad de ejecuciones
Puedes limitar la cantidad de veces que se permite ejecutar una automatización.
Por ejemplo, es posible que desees configurar una automatización única que ejecute la aspiradora mientras no estés en casa durante el día.
Para ello, establece el campo de metadatos
maxExecutionCount
de la automatización.
En el siguiente ejemplo, se muestra una automatización que solo se puede ejecutar una 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()) } } }
La automatización se borra de inmediato una vez que se completa la ejecución por última vez y se alcanza maxExecutionCount. La entrada del historial de la automatización permanece
en la Google Home app (GHA) pestaña Actividad, incluido el automation_id.
Establece atributos de rasgo en una acción
Para establecer el valor de un atributo de rasgo, haz lo siguiente:
- Crea un nodo
updatedentro de un nodoaction, incluido el rasgo pertinente como argumento para el nodoupdate:action(deviceReference, deviceType) { update(trait) { } } - Dentro del nodo
update, para cada atributo que se modificará, usa una función de mutador y pásale el valor nuevo. Para formar el nombre de la función de mutador, haz lo siguiente:- Pon en mayúscula el nombre del atributo.
- Agrega el prefijo
set.
defaultMoveRate, usarías una función de mutador llamadasetDefaultMoveRate.
Ten en cuenta que un nodo update puede tener varias funciones de mutador. Este es un ejemplo en el que se actualizan dos atributos:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}