Le DSL d'automatisation peut être utilisé pour créer des automatisations plus complexes que celles décrites dans le guide DSL : automatisations de base sur iOS.
Séquentiel avec plusieurs actions
Une automatisation peut effectuer plusieurs actions. Par exemple, au lieu d'un seul nœud action
, vous pouvez en avoir plusieurs qui s'exécutent dans l'ordre séquentiel :action
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
action {...}
action {...}
action {...}
}
Séquentiel avec plusieurs actions parallèles
Si vous placez plusieurs nœuds action
dans un nœud parallel
, les actions s'exécutent simultanément.
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
S'il existe des nœuds action
dans le nœud sequential
qui suivent le nœud parallel
, ils attendent pour s'exécuter que tous les nœuds du nœud parallel
aient terminé leur exécution.
Retards
Vous pouvez insérer des pauses dans vos automatisations à l'aide de la méthode delay(for:)
, qui accepte un argument Duration
représentant la durée de la pause avant la reprise de l'exécution. La durée de la suspension peut aller de cinq secondes à 24 heures.
Par exemple, pour allumer et éteindre une lumière quatre fois en faisant une pause de cinq secondes entre chaque action :
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() }
}
Suppression des déclencheurs
La suppression de déclencheur est une fonctionnalité qui permet à votre automatisation d'ignorer un starter
pendant une période spécifiée après l'événement de déclenchement initial. Par exemple, si l'automatisation comporte un starter
déclenché par la détection de mouvement et que vous spécifiez une durée de suppression du déclencheur de cinq minutes, le starter
ne se déclenchera pas à nouveau pendant les cinq minutes suivantes. Cela empêche l'automatisation de se déclencher rapidement et à plusieurs reprises.
Pour appliquer la suppression de déclencheur à votre automatisation, utilisez le mot clé suppress(for:)
avec un argument Duration
représentant le temps d'attente avant de répondre aux déclencheurs suivants.
La durée de la suppression peut aller de cinq secondes à 24 heures.
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() }
}
Notez que la suppression des déclencheurs affecte tous les starters
d'une automatisation qui précèdent le Suppression
.
Définir les attributs de caractéristiques dans une action
Pour définir la valeur d'un attribut de caractéristique :
- Créez un nœud
update
dans un nœudaction
, y compris le trait pertinent en tant qu'argument du nœudupdate
:action(deviceReference, deviceType) { update(trait) { } }
- Dans le nœud
update
, pour chaque attribut à modifier, utilisez une fonction de mutation et transmettez-lui la nouvelle valeur. Pour former le nom de la fonction de mutateur :- Mettre en majuscule le nom de l'attribut
- Ajoutez le préfixe
set
.
defaultMoveRate
, vous devez utiliser une fonction de mutateur appeléesetDefaultMoveRate
.
Notez qu'un nœud update
peut comporter plusieurs fonctions de mutation. Voici un exemple où deux attributs sont mis à jour :
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}