Guide du DSL iOS pour les automatisations complexes

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

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:

import GoogleHomeSDK
import GoogleHomeTypes

automation (
...
) {

  starter(...)
  condition {...}
  action {...}
  action {...}
  action {...}

}

Séquentiel avec plusieurs actions parallèles

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 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 de la méthode delay(for:), qui accepte un argument 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:

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 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é suppress(for:) avec un argument 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.

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 le Suppression.

Définir des attributs de trait dans une action

Pour définir la valeur d'un attribut de trait:

  1. Créez un nœud update dans un nœud action, en incluant le trait approprié comme argument du nœud update:
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
    
  2. 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 :
    1. Mettre en majuscule le nom de l'attribut
    2. Ajoutez-lui le préfixe set.
    Par exemple, pour mettre à jour un attribut appelé defaultMoveRate, vous devez utiliser une fonction de modification appelée setDefaultMoveRate.

Notez qu'un nœud update peut comporter plusieurs fonctions de modificateur. 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)
  }
}