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

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

여러 작업이 있는 순차적 자동화

여러 작업이 있는 순차적

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

import GoogleHomeSDK
import GoogleHomeTypes

automation (
...
) {

  starter(...)
  condition {...}
  action {...}
  action {...}
  action {...}

}

여러 병렬 작업이 있는 순차적 자동화

여러 병렬 작업이 있는 순차적 작업

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

import GoogleHomeSDK
import GoogleHomeTypes

automation (
...
) {

  starter(...)
  condition {...}
  parallel {
    action {...}
    action {...}
    action {...}
  }

}

parallel 노드 다음에 오는 sequential 노드에 action 노드가 있는 경우 parallel 노드 내의 모든 노드가 실행을 마칠 때까지 실행을 기다립니다.

지연

실행을 계속하기 전에 일시중지할 기간을 나타내는 Duration 인수를 사용하는 delay(for:) 메서드를 사용하여 자동화에 일시중지를 도입할 수 있습니다. 일시중지 기간은 5초에서 24시간까지 지정할 수 있습니다.

예를 들어 각 전환 사이에 5초 일시중지를 두고 전구를 4번 전환하려면 다음 안내를 따르세요.

typealias OnOffLightDevice = Matter.OnOffLightDeviceType
typealias OnOffTrait = Matter.OnOffTrait

sequential {
  action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
  delay(for:.seconds(5))
  action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
  delay(for:.seconds(5))
  action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
  delay(for:.seconds(5))
  action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
}

트리거 억제

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

자동화에 트리거 억제를 적용하려면 후속 트리거에 응답하기 전에 대기할 기간을 나타내는 Duration 인수와 함께 suppress(for:) 키워드를 사용합니다. 억제 기간은 5초에서 24시간까지 지정할 수 있습니다.

typealias OccupancySensorDevice = Matter.OccupancySensorDeviceType
typealias OnOffLightDevice = Matter.OnOffLightDeviceType
typealias MotionDetectionTrait = Google.MotionDetectionTrait
typealias OnOffTrait = Matter.OnOffTrait

automation {
  let starterNode = starter(device, OccupancySensorDevice.self, MotionDetectionTrait.self)
  starterNode
  suppress(for: .seconds(30 * 60)  // 30 minutes
  action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
}

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

작업에서 특성 속성 설정

특성 속성의 값을 설정하려면 다음 안내를 따르세요.

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

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

typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait

action(fan, FanDeviceType.self) {
  update(FanControlTrait.self) {
    $0.setFanMode(.on)
  }
}