Il DSL di automazione può essere utilizzato per creare automazioni più complesse di quelle descritte nella guida al DSL - automazioni di base.
Sequenziale con più azioni
Un'automazione può fare più di una cosa. Ad esempio, al posto del singolo
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 rimangono in attesa fino al completamento dell'esecuzione di tutti i nodi all'interno del nodo parallel
.
Ritardi
Puoi inserire interruzioni nelle automazioni utilizzando la parola chiave
delayFor
, che accetta un argomento
java.time.Duration
rappresentante il tempo di pausa prima di continuare l'esecuzione. La durata della pausa può essere compresa tra cinque secondi e 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()) }
}
Eliminazione degli attivatori
La soppressione dell'attivatore è una funzionalità che consente all'automazione di ignorare un
starter
per un determinato periodo di tempo dopo l'evento di attivazione iniziale. Ad esempio, se l'automazione ha un starter
attivato dal rilevamento di movimento e se specifichi una durata di soppressione dell'attivatore di cinque minuti, quando starter
si attiva, non si attiverà di nuovo per i cinque minuti successivi. In questo modo, l'automazione non si attiva più volte di seguito.
Per applicare la soppressione degli attivatori all'automazione, utilizza la parola chiave suppressFor
con un
argomento java.time.Duration
che indica il tempo di attesa prima di rispondere agli attivatori successivi.
La durata dell'eliminazione può variare da un minimo di cinque secondi a un massimo di 24 ore.
automation {
sequential {
val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
suppressFor(Duration.ofMinutes(30))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
Tieni presente che l'eliminazione degli attivatori interessa tutti i starters
in un'automazione che precede il suppressFor
.
Impostare gli attributi dei tratti in un'azione
Per impostare il valore di un attributo tratto:
- Crea un nodo
update
all'interno di un nodoaction
, includendo 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 di modificatore e passa il nuovo valore. Per formare il nome della funzione di mutazione:- Usare le lettere maiuscole per il nome dell'attributo
- Anteponi la parola
set
.
defaultMoveRate
, dovrai utilizzare una funzione di modificatore denominatasetDefaultMoveRate
.
Tieni presente che un nodo update
può avere più funzioni di modificatore. Ecco un
esempio in cui vengono aggiornati due attributi:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}