Il linguaggio 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 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 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 il metodo
delay(for:)
, che accetta un
argomento 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:
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 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
suppress(for:)
con un argomento
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.
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 dei trigger influisce su tutti i starters
in un'automazione che
precedono il Suppression
.
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:
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}