Il DSL di automazione può essere utilizzato per creare automazioni più complesse di quelle descritte nella Guida al DSL: automazioni di base su Android.
Sequenziale con più azioni
Un'automazione può eseguire più di un'azione. Ad esempio, al posto del singolo nodo action, puoi avere più nodi action, che vengono eseguiti in ordine sequenziale:
automation {
sequential {
starter<_>(...)
condition {...}
action {...}
action {...}
action {...}
}
}
Sequenziale con più azioni parallele
Se inserisci più nodi action in un nodo parallel, le azioni vengono eseguite contemporaneamente.
automation {
sequential {
starter<_>(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
}
Se nel nodo sequential sono presenti nodi action che seguono il nodo parallel, questi attendono l'esecuzione fino al completamento di tutti i nodi all'interno del nodo parallel.
Ritardi
Puoi inserire delle pause nelle automazioni utilizzando la
delayFor
parola chiave, che accetta un
java.time.Duration
argomento che rappresenta la durata della pausa prima di continuare l'esecuzione. La durata della pausa può essere di soli cinque secondi o fino a 24 ore.
Ad esempio, per attivare/disattivare una luce quattro volte con una pausa di cinque secondi tra ogni attivazione/disattivazione:
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()) }
}
Soppressione dell'attivazione
La soppressione dell'attivazione è una funzionalità che consente all'automazione di ignorare un starter per un periodo di tempo specificato dopo l'evento di attivazione iniziale. Ad esempio, se l'automazione ha un starter attivato dal rilevamento del movimento e specifichi una durata di soppressione dell'attivazione di cinque minuti, quando l'starter si attiva, non si attiverà di nuovo per i successivi cinque minuti. In questo modo, l'automazione non si attiva ripetutamente in rapida successione.
Per applicare la soppressione dell'attivazione all'automazione, utilizza la
suppressFor
parola chiave con un
java.time.Duration
argomento che rappresenta la durata dell'attesa prima di rispondere alle attivazioni successive.
La durata della soppressione può essere di soli cinque secondi o fino a 24 ore.
automation {
sequential {
val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
suppressFor(Duration.ofMinutes(30))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
Tieni presente che la soppressione dell'attivazione influisce su tutti gli starters di un'automazione che precedono suppressFor.
Limita il numero di esecuzioni
Puoi limitare il numero di volte in cui è consentito eseguire un'automazione.
Ad esempio, potresti voler configurare un'automazione una tantum che avvii l'aspirapolvere mentre non sei a casa per la giornata.
Per farlo, imposta il campo dei metadati
maxExecutionCount
dell'automazione.
L'esempio seguente mostra un'automazione che può essere eseguita una sola volta:
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()) } } }
L'automazione viene eliminata immediatamente al termine dell'ultima esecuzione e al raggiungimento di maxExecutionCount. La voce della cronologia dell'automazione rimane
nella scheda Google Home app (GHA) Attività, incluso il automation_id.
Imposta gli attributi dei tratti in un'azione
Per impostare il valore di un attributo del tratto:
- Crea un nodo
updateall'interno di un nodoaction, includendo il tratto pertinente come argomento del nodoupdatenodo:action(deviceReference, deviceType) { update(trait) { } } - All'interno del nodo
update, per ogni attributo da modificare, utilizza una funzione di mutazione e passagli il nuovo valore. Per formare il nome della funzione di mutazione:- Metti in maiuscolo il nome dell'attributo
- Aggiungi il prefisso
set.
defaultMoveRate, utilizzerai una funzione di mutazione denominatasetDefaultMoveRate.
Tieni presente che un nodo update può avere più funzioni di mutazione. Ecco un esempio in cui vengono aggiornati due attributi:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}