자동화 DSL을 사용하면 Android의 DSL 가이드 - 기본 자동화에서 설명한 것보다 더 복잡한 자동화를 만들 수 있습니다.
여러 액션이 있는 순차적 자동화
자동화는 두 가지 이상의 작업을 실행할 수 있습니다. 예를 들어 단일 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초 일시중지를 두고 전구를 4번 전환하려면 다음 안내를 따르세요.
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에 영향을 미칩니다.
실행 횟수 제한
자동화가 실행될 수 있는 횟수를 제한할 수 있습니다.
예를 들어 하루 동안 집을 비울 때 진공 청소기를 실행하는 일회성 자동화를 설정할 수 있습니다.
이렇게 하려면 자동화의
maxExecutionCount
메타데이터 필드를 설정합니다.
다음은 한 번만 실행할 수 있는 자동화의 예입니다.
automation { // The automation can only be executed once. maxExecutionCount = 1 // When the door lock state changes sequential { val doorLockEvent = starter<_>(doorLock, DoorLockDevice, LockOperationEvent) // if the door is unlocked condition() { expression = (doorLockEvent.lockOperationType equals LockOperationTypeEnum.Unlock) } // turn the light on action(light, DimmableLightDevice) { command(OnOff.on()) } } }
자동화는 마지막으로 실행을 완료하고 maxExecutionCount에 도달하면 즉시 삭제됩니다. 자동화의 기록 항목은 automation_id를 포함하여 Google Home app (GHA) 활동 탭에 남아 있습니다.
액션에서 특성 속성 설정
특성 속성의 값을 설정하려면 다음 안내를 따르세요.
action노드 내에update노드를 만들고 관련 특성을update노드의 인수로 포함합니다.action(deviceReference, deviceType) { update(trait) { } }update노드 내에서 수정할 각 속성에 대해 변경자 함수를 사용하고 새 값을 전달합니다. 변경자 함수의 이름을 지정하려면 다음 안내를 따르세요.- 속성 이름을 대문자로 표시합니다.
set이라는 단어를 프리픽스로 사용합니다.
defaultMoveRate라는 속성을 업데이트하려면setDefaultMoveRate라는 변경자 함수를 사용합니다.
update 노드에는 여러 변경자 함수가 있을 수 있습니다. 다음은 두 속성이 업데이트되는 예입니다.
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}