자동화 DSL은 DSL 가이드 - 기본 자동화에서 설명한 것보다 더 복잡한 자동화를 만드는 데 사용할 수 있습니다.
여러 작업이 포함된 순차 실행
자동화는 두 가지 이상의 작업을 실행할 수 있습니다. 예를 들어 단일 action
노드 대신 순차적으로 실행되는 여러 action
노드를 사용할 수 있습니다.
automation {
sequential {
starter<_>(...)
condition {...}
action {...}
action {...}
action {...}
}
}
여러 동시 작업이 포함된 순차 실행
parallel
노드에 여러 개의 action
노드를 배치하면 작업이 동시에 실행됩니다.
automation {
sequential {
starter<_>(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
}
sequential
노드에 parallel
노드 뒤에 오는 action
노드가 있는 경우 parallel
노드 내의 모든 노드가 실행을 완료할 때까지 실행을 대기합니다.
지연
실행을 계속하기 전에 일시중지할 시간을 나타내는 java.time.Duration
인수를 사용하는 delayFor
키워드를 사용하여 자동화에 일시중지를 도입할 수 있습니다. 일시중지 시간은 5초에서 24시간까지 설정할 수 있습니다.
예를 들어 전등을 4번 전환하고 전환할 때마다 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
에 영향을 미칩니다.
작업에서 트레잇 속성 설정
트레잇 속성의 값을 설정하는 방법은 다음과 같습니다.
- 관련 트레잇을
update
노드의 인수로 포함하여action
노드 내에update
노드를 만듭니다.action(deviceReference, deviceType) { update(trait) { } }
update
노드 내에서 수정할 각 속성에 대해 mutator 함수를 사용하고 새 값을 전달합니다. mutator 함수의 이름을 지정하려면 다음 단계를 따르세요.- 속성 이름 대문자 사용
set
를 접두사로 사용합니다.
defaultMoveRate
라는 속성을 업데이트하려면setDefaultMoveRate
라는 변형 함수를 사용합니다.
update
노드에는 여러 변형자 함수가 있을 수 있습니다. 다음은 두 속성이 업데이트되는 예입니다.
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}