Otomasyon DSL'si, DSL kılavuzu - iOS'te temel otomasyonlar bölümünde ele alınanlardan daha karmaşık otomasyonlar oluşturmak için kullanılabilir.
Birden fazla işlem içeren sıralı
Otomasyonlar birden fazla işlem yapabilir. Örneğin, tek bir action düğümü yerine, sırayla çalışan birden fazla action düğümü kullanabilirsiniz:
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
action {...}
action {...}
action {...}
}
Birden fazla paralel işlem içeren sıralı
Bir parallel düğümüne birden fazla action düğümü yerleştirirseniz işlemler eşzamanlı olarak yürütülür.
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
sequential düğümünde parallel düğümünden sonra gelen action düğüm varsa bu düğümler, parallel düğümündeki tüm düğümlerin yürütülmesi tamamlanana kadar yürütülmeyi bekler.
Gecikmeler
Otomasyonlarınızda delay(for:) yöntemini kullanarak duraklatmalar ekleyebilirsiniz. Bu yöntem, yürütmeye devam etmeden önce ne kadar süreyle duraklatılacağını gösteren bir Duration bağımsız değişkeni alır. Duraklatma süresi beş saniye ile 24 saat arasında olabilir.
Örneğin, bir ışığı her açma/kapama arasında beş saniyelik duraklamayla dört kez açıp kapatmak için:
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() }
}
Tetikleyiciyi devre dışı bırakma
Tetikleyici bastırma, otomasyonunuzun ilk tetikleme etkinliğinden sonra belirli bir süre boyunca starter değerini yoksaymasına olanak tanıyan bir özelliktir. Örneğin, otomasyonda hareket algılama ile tetiklenen bir starter varsa ve tetikleyiciyi bastırma süresini beş dakika olarak belirtirseniz starter tetiklendiğinde sonraki beş dakika boyunca tekrar tetiklenmez. Bu, otomasyonun tekrar tekrar hızlı bir şekilde tetiklenmesini önler.
Otomasyonunuza tetikleyici bastırma uygulamak için, sonraki tetikleyicilere yanıt vermeden önce ne kadar bekleneceğini gösteren bir suppress(for:) anahtar kelimesini Duration bağımsız değişkeniyle birlikte kullanın. Bastırma süresi beş saniye ile 24 saat arasında olabilir.
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() }
}
Tetikleyici bastırmanın, otomasyonda Suppression'dan önce gelen tüm starters'ları etkilediğini unutmayın.
Bir işlemde özellik özelliklerini ayarlama
Bir özellik özelliğinin değerini ayarlamak için:
actiondüğümü içindeupdatedüğümü oluşturun. İlgili özelliğiupdatedüğümüne bağımsız değişken olarak ekleyin:action(deviceReference, deviceType) { update(trait) { } }updatedüğümünde, değiştirilecek her özellik için: Bir mutasyon işlevi kullanın ve yeni değeri bu işleve iletin. Mutasyon işlevinin adını oluşturmak için:- Özelliğin adını büyük harfle yazın.
setkelimesini ekleyin.
defaultMoveRateadlı bir özelliği güncellemek içinsetDefaultMoveRateadlı bir mutasyon işlevi kullanırsınız.
Bir update düğümünün birden fazla mutasyon işlevi olabileceğini unutmayın. İki özelliğin güncellendiği bir örnek aşağıda verilmiştir:
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}