Guia de DSL: automações complexas

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

Sequencial com várias ações

Sequencial com várias ações

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

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 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ó parallel terminem a execução.

Atrasos

É possível pausar as automações usando a palavra-chave delayFor, que usa um argumento java.time.Duration para representar o tempo de pausa antes de continuar a execução. A duração da pausa pode ser de cinco segundos ou 24 horas.

Por exemplo, para alternar uma luz quatro vezes com uma pausa de cinco segundos entre cada alternância:

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

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 suppressFor com um argumento java.time.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.

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 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. Insira 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:

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