복잡한 자동화를 위한 Android DSL 가이드

자동화 DSL을 사용하여 DSL 가이드 - Android의 기본 자동화에서 설명한 것보다 더 복잡한 자동화를 만들 수 있습니다.

여러 작업이 있는 순차적

여러 작업이 있는 순차적

자동화는 두 가지 이상의 작업을 할 수 있습니다. 예를 들어 단일 action 노드 대신 순차적으로 실행되는 여러 action 노드가 있을 수 있습니다.

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

여러 병렬 작업이 있는 순차

여러 병렬 작업이 있는 순차

parallel 노드에 여러 action 노드를 배치하면 작업이 동시에 실행됩니다.

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

parallel 노드 뒤에 오는 sequential 노드에 action 노드가 있는 경우 parallel 노드 내의 모든 노드가 실행을 완료할 때까지 실행을 기다립니다.

지연

실행을 계속하기 전에 일시중지할 시간을 나타내는 java.time.Duration 인수를 사용하는 delayFor 키워드를 사용하여 자동화에 일시중지를 도입할 수 있습니다. 일시중지 기간은 5초에서 24시간까지 다양합니다.

예를 들어 각 전환 사이에 5초의 일시중지를 두고 조명을 네 번 전환하려면 다음을 실행합니다.

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

트리거 억제

트리거 억제는 초기 트리거 이벤트 후 지정된 기간 동안 자동화가 starter를 무시할 수 있도록 하는 기능입니다. 예를 들어 자동화에 동작 감지로 트리거되는 starter가 있고 트리거 억제 기간을 5분으로 지정하면 starter가 트리거될 때 다음 5분 동안 다시 트리거되지 않습니다. 이렇게 하면 자동화가 반복적으로 빠르게 트리거되지 않습니다.

자동화에 트리거 억제를 적용하려면 후속 트리거에 응답하기 전에 대기할 시간을 나타내는 java.time.Duration 인수를 사용하여 suppressFor 키워드를 사용하세요. 억제 기간은 5초에서 24시간까지 다양합니다.

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

트리거 억제는 suppressFor 앞에 있는 자동화의 모든 starters에 영향을 미칩니다.

작업에서 특성 속성 설정

특성 속성 값을 설정하려면 다음 단계를 따르세요.

  1. action 노드 내에 update 노드를 만들고 관련 특성을 update 노드의 인수로 포함합니다.
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
  2. update 노드 내에서 수정할 각 속성에 대해 뮤테이터 함수를 사용하고 새 값을 전달합니다. 변경자 함수의 이름을 지정하려면 다음 단계를 따르세요.
    1. 속성 이름의 첫 글자를 대문자로 표시
    2. set라는 단어를 앞에 붙입니다.
    예를 들어 defaultMoveRate이라는 속성을 업데이트하려면 setDefaultMoveRate라는 뮤테이터 함수를 사용합니다.

update 노드에는 여러 뮤테이터 함수가 있을 수 있습니다. 다음은 두 속성이 업데이트되는 예입니다.

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