Il DSL di automazione può essere utilizzato per creare automazioni più complesse di quelle descritte nella guida DSL - automazioni di base su iOS.
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:
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 rimangono in attesa fino al completamento dell'esecuzione di tutti i nodi all'interno del nodo parallel
.
Ritardi
Puoi introdurre interruzioni nelle automazioni utilizzando il metodo delay(for:)
, che accetta un argomento Duration
che indica il tempo di interruzione 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:
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() }
}
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
suppress(for:)
con un argomento
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.
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 l'eliminazione degli attivatori interessa tutti i starters
in un'automazione che precede il Suppression
.
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 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:
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}