Guia de DSL do Android para automações complexas

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

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 único nó action, você pode ter vários nós action, que são executados em ordem sequencial:

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

automation {
  sequential {
    starter<_>(...)
    condition {...}
    parallel {
      action {...}
      action {...}
      action {...}
    }
  }
}

Se houver action nós no nó sequential que vêm depois do nó parallel, eles vão esperar para serem executados até que todos os nós dentro do nó parallel sejam concluídos.

Atrasos

Você pode inserir pausas nas automações usando a palavra-chave delayFor, que usa um argumento java.time.Duration que representa quanto tempo pausar 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 acionamento:

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

Supressão de acionadores

A supressão de gatilhos é um recurso que permite que sua 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 acionamento 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 à sua automação, use a palavra-chave suppressFor com um argumento java.time.Duration que representa o tempo de espera antes de responder a acionadores subsequentes. A duração da supressão pode ser de cinco segundos a 24 horas.

automation {
  sequential {
    val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
    suppressFor(Duration.ofMinutes(30))
    action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}

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

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

Para definir o valor de um atributo de característica:

  1. Crie um nó update em um nó action, incluindo a característica 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 mutadora e transmita o novo valor. Para formar o nome da função mutator:
    1. Coloque em maiúscula o nome do atributo
    2. Adicione o prefixo set.
    Por exemplo, para atualizar um atributo chamado defaultMoveRate, use uma função mutadora chamada setDefaultMoveRate.

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

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