複雑な自動化のための iOS DSL ガイド

Automation DSL を使用すると、 DSL ガイド - iOS での基本的な自動化で説明されているものよりも複雑な自動化を作成できます。

複数のアクションを含む順次

複数のアクションを含む順次

自動化では複数の処理を実行できます。たとえば、単一の 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 に影響します。

アクションで特性属性を設定する

特性属性の値を設定するには:

  1. action ノード内に update ノードを作成し、関連するトレイトを update ノードの引数として含めます。
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
    
  2. update ノード内で、変更する属性ごとに、ミューテータ関数を使用し、新しい値を渡します。ミューテータ関数の名前を作成するには:
    1. 属性名を大文字にします。
    2. 接頭辞として「set」を追加します。
    たとえば、defaultMoveRate という属性を更新するには、setDefaultMoveRate というミューテータ関数を使用します。

update ノードには複数のミューテータ関数を設定できます。次の例では、2 つの属性が更新されます。

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

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