Guide du DSL Android pour les automatisations complexes

Vous pouvez utiliser le DSL d'automatisation pour créer des automatisations plus complexes que celles décrites dans le guide DSL – Automatisations de base sur Android.

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 un ordre séquentiel :

automation {
  sequential {
    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.

automation {
  sequential {
    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 du delayFor mot clé, qui accepte un java.time.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 activer et désactiver une lumière quatre fois avec une pause de cinq secondes entre chaque activation/désactivation :

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 du déclencheur

La suppression du déclencheur est une capacité 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éclenche 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 suppressFor mot clé avec un java.time.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.

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.

Limiter le nombre d'exécutions

Vous pouvez limiter le nombre d'exécutions autorisées pour une automatisation.

Par exemple, vous pouvez configurer une automatisation unique qui exécute l'aspirateur lorsque vous n'êtes pas chez vous pendant la journée.

Pour ce faire, définissez le champ de métadonnées maxExecutionCount de l'automatisation. L'exemple suivant est une automatisation qui ne peut s'exécuter qu'une seule fois :

automation {
  // The automation can only be executed once.
  maxExecutionCount = 1
  // When the door lock state changes
  sequential {
    val doorLockEvent = starter<_>(doorLock, DoorLockDevice, LockOperationEvent)
    // if the door is unlocked
    condition() {
      expression = (doorLockEvent.lockOperationType equals LockOperationTypeEnum.Unlock)
    }
    // turn the light on
    action(light, DimmableLightDevice) { command(OnOff.on()) }
  }
}

L'automatisation est immédiatement supprimée une fois qu'elle a terminé son exécution pour la dernière fois et que maxExecutionCount est atteint. L'entrée d'historique de l'automatisation reste dans l'onglet Google Home app (GHA) Activité, y compris le automation_id.

Définir les attributs de caractéristique dans une action

Pour définir la valeur d'un attribut de caractéristique :

  1. Créez un nœud update dans un nœud action, y compris la caractéristique pertinente en tant qu’argument du nœud update :
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
  2. 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 :
    1. Mettez en majuscule le nom de l'attribut.
    2. Ajoutez le préfixe set.
    Par exemple, pour mettre à jour un attribut appelé defaultMoveRate, vous devez utiliser une fonction de mutation appelée setDefaultMoveRate.

Notez qu'un nœud update peut comporter plusieurs fonctions de mutation. Voici un exemple dans lequel deux attributs sont mis à jour :

action(device, Fan) {
  update(FanControl) {
    setPercentSetting(50u)
    setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
  }
}