Automation DSL を使用すると、 Android の DSL ガイド - 基本的な自動化で説明されているものよりも複雑な自動化を作成できます。
複数のアクションを含む順次
自動化では複数の処理を行うことができます。たとえば、単一の action ノードの代わりに、複数の action ノードを配置して、順番に実行できます。
automation {
sequential {
starter<_>(...)
condition {...}
action {...}
action {...}
action {...}
}
}
複数の並列アクションを含むシーケンシャル
複数の action ノードを parallel ノードに配置すると、アクションは同時に実行されます。
automation {
sequential {
starter<_>(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
}
parallel ノードの後に sequential ノードに action ノードがある場合、それらのノードは、parallel ノード内のすべてのノードの実行が完了するまで実行を待機します。
処理の遅れ
delayFor
キーワードを使用して、自動化に一時停止を挿入できます。このキーワードは、実行を再開するまでの停止時間を表す
java.time.Duration
引数を取ります。一時停止の時間は、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 分間はトリガーされません。これにより、自動化が何度もトリガーされるのを防ぐことができます。
自動化にトリガーの抑制を適用するには、
suppressFor
キーワードを使用し、
java.time.Duration
引数を指定して、後続のトリガーに応答するまでの待機時間を表します。抑制期間は、5 秒から 24 時間まで指定できます。
automation {
sequential {
val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
suppressFor(Duration.ofMinutes(30))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
トリガーの抑制は、suppressFor の前にある自動化のすべての starters に影響します。
実行回数を制限する
自動化の実行回数を制限できます。
たとえば、外出中に掃除機をかける 1 回限りの自動化を設定できます。
これを行うには、自動化の
maxExecutionCount
メタデータ フィールドを設定します。
次の例は、1 回だけ実行できる自動化です。
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 ノードには複数のミューテータ関数を設定できます。次の例では、2 つの属性が更新されます。
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}