Il linguaggio DSL di automazione può essere utilizzato per creare automazioni più complesse di quelle descritte nella Guida DSL - Automazioni di base su Android.
Sequenziale con più azioni
Un'automazione può fare più di una cosa. Ad esempio, al posto del singolo nodo action
, potresti 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 action
nodi successivi al nodo parallel
, l'esecuzione viene rimandata finché tutti i nodi all'interno del nodo parallel
non sono stati eseguiti.
Ritardi
Puoi introdurre pause nelle automazioni utilizzando la parola chiave
delayFor
, che accetta un argomento
java.time.Duration
che rappresenta la durata della pausa prima di continuare l'esecuzione. La durata della pausa
può variare da 5 secondi a 24 ore.
Ad esempio, per attivare/disattivare una luce quattro volte con una pausa di cinque secondi tra un'attivazione/disattivazione e l'altra:
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()) }
}
Eliminazione dei trigger
La soppressione dei trigger è 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 se specifichi una durata di soppressione del trigger di cinque minuti, quando il starter
si attiva, non si attiverà di nuovo per i cinque minuti successivi. Ciò
impedisce all'automazione di attivarsi rapidamente più volte.
Per applicare la soppressione dei trigger all'automazione, utilizza la parola chiave
suppressFor
con un argomento
java.time.Duration
che rappresenta il tempo di attesa prima di rispondere ai trigger successivi.
La durata della soppressione può variare da 5 secondi 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 dei trigger influisce su tutti i starters
in un'automazione che
precedono il 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 sei fuori casa per la giornata.
Per farlo, imposta il campo
maxExecutionCount
dei metadati dell'automazione.
Il seguente esempio è 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'esecuzione per l'ultima volta e al raggiungimento di maxExecutionCount
. La voce della cronologia dell'automazione rimane
nella scheda Google Home app (GHA) Attività, incluso il automation_id
.
Impostare gli attributi del tratto in un'azione
Per impostare il valore di un attributo caratteristica:
- Crea un nodo
update
all'interno di un nodoaction
, incluso il tratto pertinente come argomento del nodoupdate
:action(deviceReference, deviceType) { update(trait) { } }
- All'interno del nodo
update
, per ogni attributo da modificare, utilizza una funzione mutatore e trasmetti il nuovo valore. Per formare il nome della funzione mutatore:- Scrivi il nome dell'attributo con la prima lettera maiuscola
- Anteponi la parola
set
.
defaultMoveRate
, devi utilizzare una funzione di modifica chiamatasetDefaultMoveRate
.
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)
}
}