Il DSL di automazione può essere utilizzato per creare automazioni più complesse di quelle descritte in Guida al DSL - Automazioni di base su iOS.
Sequenziale con più azioni
Un'automazione può eseguire più di un'azione. Ad esempio, al posto del singolo nodo action, potresti avere più nodi action, che vengono eseguiti in ordine sequenziale:
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
action {...}
action {...}
action {...}
}
Sequenziale con più azioni parallele
Se inserisci più nodi action in un nodo parallel, le azioni vengono eseguite contemporaneamente.
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
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 introdurre pause nelle automazioni utilizzando il
delay(for:) metodo,
che accetta un
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:
typealias OnOffLightDevice = Matter.OnOffLightDeviceType
typealias OnOffTrait = Matter.OnOffTrait
sequential {
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
delay(for:.seconds(5))
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
delay(for:.seconds(5))
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
delay(for:.seconds(5))
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
}
Soppressione dell'attivazione
La soppressione dell'attivazione è una funzionalità che consente all'automazione di ignorare uno starter per un periodo di tempo specificato dopo l'evento di attivazione iniziale. Ad esempio, se l'automazione ha uno starter attivato dal rilevamento del movimento e specifichi una durata di soppressione dell'attivazione di cinque minuti, quando lo 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
suppress(for:)
parola chiave con un
Duration
argomento che rappresenta il tempo di attesa prima di rispondere alle attivazioni successive.
La durata della soppressione può essere di soli cinque secondi o fino a 24 ore.
typealias OccupancySensorDevice = Matter.OccupancySensorDeviceType
typealias OnOffLightDevice = Matter.OnOffLightDeviceType
typealias MotionDetectionTrait = Google.MotionDetectionTrait
typealias OnOffTrait = Matter.OnOffTrait
automation {
let starterNode = starter(device, OccupancySensorDevice.self, MotionDetectionTrait.self)
starterNode
suppress(for: .seconds(30 * 60) // 30 minutes
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
}
Tieni presente che la soppressione dell'attivazione influisce su tutti gli starters di un'automazione che precedono la Suppression.
Impostare 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 mutatore e passagli il nuovo valore. Per formare il nome della funzione mutatore:- Metti in maiuscolo il nome dell'attributo
- Aggiungi il prefisso
set.
defaultMoveRate, utilizzerai una funzione mutatore denominatasetDefaultMoveRate.
Tieni presente che un nodo update può avere più funzioni mutatore. Ecco un esempio in cui vengono aggiornati due attributi:
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}