自動化 DSL 可用於建立比 DSL 指南 - Android 上的自動化動作 中所述更複雜的自動化動作。
包含多個動作的順序
自動化動作可以執行多項操作。舉例來說,您可以使用多個 action
節點取代單一 action
節點,並依序執行:
automation {
sequential {
starter<_>(...)
condition {...}
action {...}
action {...}
action {...}
}
}
依序執行多個並行動作
如果在 parallel
節點中放置多個 action
節點,動作會同時執行。
automation {
sequential {
starter<_>(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
}
如果 sequential
節點中含有 parallel
節點後面的 action
節點,則會等待執行,直到 parallel
節點中的所有節點都已執行完畢。
延遲入帳
您可以使用 delayFor
關鍵字在自動化動作中加入暫停時間,這個關鍵字會使用 java.time.Duration
引數,代表在繼續執行前要暫停多久。暫停時間最短可為 5 秒,最長可達 24 小時。
舉例來說,如要將燈具切換四次,且每次切換之間間隔五秒,請按照下列步驟操作:
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
,且您指定的觸發抑制時間為五分鐘,那麼 starter
觸發後,在接下來的五分鐘內就不會再次觸發。這可避免自動化動作不斷重複觸發。
如要將觸發事件抑制功能套用至自動化動作,請使用 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
。
在動作中設定特徵屬性
如要設定特徵屬性的值,請按照下列步驟操作:
- 在
action
節點中建立update
節點,並將相關特徵納入update
節點的引數:action(
deviceReference ,deviceType ) { update(trait ) { } } - 在
update
節點中,針對每個要修改的屬性,使用修飾符函式,並傳遞新值。如何命名變更器函式:- 將屬性名稱改為大寫
- 在開頭加上
set
字串。
defaultMoveRate
的屬性,您可以使用名為setDefaultMoveRate
的修飾函式。
請注意,update
節點可以有多個修飾符函式。以下是更新兩個屬性的範例:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}