Le DSL d'automatisation permet de créer des automatisations plus complexes que celles abordées dans le guide DSL – Automatisation 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 avoir plusieurs nœuds action qui s'exécutent dans un ordre séquentiel :
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 {...}
}
}
Si des nœuds action du nœud sequential suivent le nœud parallel, ils attendent que tous les nœuds du nœud parallel aient terminé leur exécution.
Retards
Vous pouvez introduire des pauses dans vos automatisations à l’aide de la
delay(for:) méthode,
qui prend un
Duration
argument représentant la durée de la pause avant de poursuivre l’exécution. La durée de la pause peut être de cinq secondes à 24 heures.
Par exemple, pour allumer et éteindre une lumière quatre fois avec 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 du déclencheur
La suppression du 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, lorsque le starter se déclenche, il ne se déclenchera plus pendant les cinq minutes suivantes. Cela empêche l'automatisation de se déclencher rapidement à plusieurs reprises.
Pour appliquer la suppression du déclencheur à votre automatisation, utilisez le
suppress(for:)
mot clé avec un
Duration
argument représentant le temps d'attente avant de répondre aux déclencheurs suivants.
La durée de la suppression peut être 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 du déclencheur affecte tous les starters d'une automatisation qui précèdent la Suppression.
Définir les attributs de caractéristique dans une action
Pour définir la valeur d'un attribut de caractéristique :
- Créez un nœud
updatedans un nœudaction, y compris la caractéristique pertinente 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 mutation :- Mettez en majuscule le nom de l'attribut.
- Ajoutez le préfixe
set.
defaultMoveRate, vous devez utiliser une fonction de mutation appeléesetDefaultMoveRate.
Notez qu'un nœud update peut comporter plusieurs fonctions de mutation. Voici un exemple dans lequel deux attributs sont mis à jour :
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}