自動化 DSL 可用於建立比 DSL 指南 - iOS 上的自動化動作中所述的自動化動作更複雜的自動化動作。
包含多個動作的順序
自動化動作可以執行多項操作。舉例來說,您可以使用多個 action
節點取代單一 action
節點,並依序執行:
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
action {...}
action {...}
action {...}
}
依序執行多個並行動作
如果在 parallel
節點中放置多個 action
節點,動作會同時執行。
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
如果 sequential
節點中的 action
節點位於 parallel
節點之後,則會等待執行,直到 parallel
節點中的所有節點都已執行完畢。
延遲入帳
您可以使用 delay(for:)
方法,在自動化動作中加入暫停功能,該方法會使用 Duration
引數,代表在繼續執行前要暫停多久。暫停時間最短可為 5 秒,最長可達 24 小時。
例如,如果想在每次切換燈具時間隔五秒,並切換四次燈具,請執行下列操作:
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
,且您指定的觸發抑制時間為五分鐘,那麼 starter
觸發後,在接下來的五分鐘內就不會再次觸發。這可避免自動化動作不斷重複觸發。
如要將觸發事件抑制功能套用至自動化動作,請使用 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
節點可以有多個修飾符函式。以下是更新兩個屬性的範例:
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}