自動化 DSL 可用於建立比DSL 指南 - 基本自動化動作中所述的自動化動作更複雜的自動化動作。
包含多個動作的順序
自動化動作可以執行多項動作。舉例來說,您可以使用多個 action
節點取代單一 action
節點,並依序執行:
automation {
sequential {
starter<_>(...)
condition {...}
action {...}
action {...}
action {...}
}
}
依序執行多個並行動作
如果在 parallel
節點中放置多個 action
節點,這些動作會同時執行。
automation {
sequential {
starter<_>(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
}
如果 sequential
節點中含有 action
節點,且位於 parallel
節點之後,這些節點會等待執行,直到 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)
}
}