Le DSL d'automatisation permet de créer des automatisations plus complexes que celles décrites dans le guide DSL : automatisations de base.
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 l'ordre séquentiel:
automation {
sequential {
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.
automation {
sequential {
starter<_>(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
}
Si des nœuds action
du nœud sequential
suivent le nœud parallel
, ils attendent d'être exécutés jusqu'à ce que tous les nœuds du nœud parallel
aient terminé leur exécution.
Retards
Vous pouvez ajouter des pauses à vos automatisations à l'aide du mot clé delayFor
, qui prend un argument java.time.Duration
représentant la durée de la pause avant la poursuite de l'exécution. La durée de la pause peut être aussi courte que cinq secondes ou aussi longue que 24 heures.
Par exemple, pour activer et désactiver une lumière quatre fois avec une pause de cinq secondes entre chaque action:
sequential {
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
delayFor(Duration.ofSeconds(5))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
delayFor(Duration.ofSeconds(5))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
delayFor(Duration.ofSeconds(5))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
Suppression de déclencheur
La suppression de déclencheur 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 évite que l'automatisation ne se déclenche rapidement plusieurs fois.
Pour appliquer la suppression de déclencheur à votre automatisation, utilisez le mot clé suppressFor
avec un argument java.time.Duration
représentant le délai d'attente avant de répondre aux déclencheurs suivants.
La durée de suppression peut être aussi courte que cinq secondes ou aussi longue que 24 heures.
automation {
sequential {
val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
suppressFor(Duration.ofMinutes(30))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
Notez que la suppression du déclencheur affecte tous les starters
d'une automatisation qui précèdent le suppressFor
.
Définir des attributs de trait dans une action
Pour définir la valeur d'un attribut de trait:
- Créez un nœud
update
dans un nœudaction
, en incluant le trait pertinent comme argument du nœudupdate
:action(deviceReference, deviceType) { update(trait) { } }
- Dans le nœud
update
, pour chaque attribut à modifier, utilisez une fonction de modification et transmettez-lui la nouvelle valeur. Pour former le nom de la fonction de modification :- Mettre en majuscule le nom de l'attribut
- Ajoutez le mot
set
en préfixe.
defaultMoveRate
, vous devez utiliser une fonction de modification appeléesetDefaultMoveRate
.
Notez qu'un nœud update
peut comporter plusieurs fonctions de modification. Voici un exemple où deux attributs sont mis à jour:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}