Guia de DSL do iOS para automações complexas

A DSL de automação pode ser usada para criar automações mais complexas do que aquelas discutidas no guia de DSL: automações básicas no iOS.

Sequencial com várias ações

Sequencial com várias ações

Uma automação pode fazer mais de uma coisa. Por exemplo, em vez do nó action único, você pode ter vários nós action, que são executados em ordem sequencial:

import GoogleHomeSDK
import GoogleHomeTypes

automation (
...
) {

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

}

Sequencial com várias ações paralelas

Sequencial com várias ações paralelas

Se você colocar vários nós action em um nó parallel, as ações serão executadas simultaneamente.

import GoogleHomeSDK
import GoogleHomeTypes

automation (
...
) {

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

}

Se houver nós action no nó sequential que vêm depois do núcleo parallel, eles vão esperar para serem executados até que todos os nós no núcleo parallel tenham terminado a execução.

Atrasos

É possível pausar as automações usando o método delay(for:), que usa um argumento Duration que representa o tempo de pausa antes de continuar a execução. A duração da pausa pode ser de cinco segundos a 24 horas.

Por exemplo, para acender e apagar uma luz quatro vezes com uma pausa de cinco segundos entre cada ativação:

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() }
}

Acionar a supressão

A supressão de gatilho é um recurso que permite que a automação ignore um starter por um período especificado após o evento de acionamento inicial. Por exemplo, se a automação tiver um starter acionado pela detecção de movimento e você especificar uma duração de supressão de acionadores de cinco minutos, quando o starter for acionado, ele não será acionado novamente nos próximos cinco minutos. Isso impede que a automação seja acionada repetidamente.

Para aplicar a supressão de acionadores à automação, use a palavra-chave suppress(for:) com um argumento Duration que represente o tempo de espera antes de responder a acionadores subsequentes. A duração da supressão pode ser de cinco segundos a 24 horas.

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() }
}

A supressão de acionadores afeta todos os starters em uma automação que antecede o Suppression.

Definir atributos de traço em uma ação

Para definir o valor de um atributo de traço:

  1. Crie um nó update em um nó action, incluindo o atributo relevante como um argumento para o nó update:
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
    
  2. No nó update, para cada atributo a ser modificado, use uma função modificadora e transmita o novo valor. Para formar o nome da função mutadora:
    1. Colocar o nome do atributo em maiúsculas
    2. Adicione o prefixo set.
    Por exemplo, para atualizar um atributo chamado defaultMoveRate, use uma função modificadora chamada setDefaultMoveRate.

Um nó update pode ter várias funções modificadoras. Confira um exemplo em que dois atributos são atualizados:

typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait

action(fan, FanDeviceType.self) {
  update(FanControlTrait.self) {
    $0.setFanMode(.on)
  }
}