Automation DSL を使用すると、DSL ガイド - iOS での基本的な自動化で説明した自動化よりも複雑な自動化を作成できます。
複数のアクションを含むシーケンシャル
1 つの自動化で複数の処理を行うことができます。たとえば、単一の action ノードの代わりに、複数の action ノードを順番に実行できます。
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
action {...}
action {...}
action {...}
}
複数の並列アクションを含むシーケンシャル
複数の action ノードを parallel ノードに配置すると、アクションが同時に実行されます。
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
parallel ノードの後に sequential ノードに action ノードがある場合、parallel ノード内のすべてのノードの実行が完了するまで待機します。
処理の遅れ
delay(for:) メソッドを使用して、自動化に一時停止を導入できます。このメソッドは、実行を続行する前に一時停止する時間を表す Duration 引数を取ります。一時停止の期間は、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 分間は再びトリガーされません。これにより、自動化が何度も繰り返しトリガーされるのを防ぎます。
自動化にトリガー抑制を適用するには、suppress(for:) キーワードと、後続のトリガーに応答するまでの待機時間を表す Duration 引数を使用します。抑制期間は 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 に影響します。
アクションで特性属性を設定する
トレイト属性の値を設定するには:
actionノード内にupdateノードを作成し、関連する特性をupdateノードの引数として含めます。action(deviceReference, deviceType) { update(trait) { } }updateノード内で、変更する属性ごとにミューテーター関数を使用し、新しい値を渡します。ミューテータ関数の名前を形成するには:- 属性名を大文字にする
- 接頭辞として
setを付けます。
defaultMoveRateという属性を更新するには、setDefaultMoveRateというミューテータ関数を使用します。
update ノードには複数のミューテータ関数を設定できます。次の例では、2 つの属性が更新されています。
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}