Otomasyon DSL'si, DSL rehberi - Android'de temel otomasyonlar bölümünde açıklananlardan daha karmaşık otomasyonlar oluşturmak için kullanılabilir.
Birden fazla işlemle sıralı
Otomasyonlar birden fazla işlem yapabilir. Örneğin, tek bir action
düğümü yerine sıralı olarak çalışan birden fazla action
düğümünüz olabilir:
automation {
sequential {
starter<_>(...)
condition {...}
action {...}
action {...}
action {...}
}
}
Birden fazla paralel işlemle sıralı
Bir parallel
düğümüne birden fazla action
düğümü yerleştirirseniz işlemler eşzamanlı olarak yürütülür.
automation {
sequential {
starter<_>(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
}
sequential
düğümünde parallel
düğümünden sonra gelen action
düğümleri varsa parallel
düğümünün tüm düğümleri yürütülene kadar yürütülmeyi beklerler.
Gecikmeler
delayFor
anahtar kelimesini kullanarak otomasyonlarınıza duraklamalar ekleyebilirsiniz. Bu anahtar kelime, yürütmeye devam etmeden önce ne kadar süre duraklanacağını temsil eden bir java.time.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/kapatma arasında beş saniyelik bir duraksama olacak şekilde dört kez açmak için:
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()) }
}
Tetikleyici engelleme
Tetikleyici engelleme, otomasyonunuzun ilk tetikleyici etkinlikten sonra belirli bir süre boyunca bir starter
öğesini yoksaymasına olanak tanıyan bir özelliktir. Örneğin, otomasyonda hareket algılamayla tetiklenen bir starter
varsa ve beş dakikalık bir tetikleyici engelleme süresi belirtirseniz starter
tetiklendiğinde sonraki beş dakika boyunca tekrar tetiklenmez. Bu, otomasyonun tekrar tekrar hızlı bir şekilde tetiklenmesini önler.
Tetikleyici baskılamayı otomasyonunuza uygulamak için suppressFor
anahtar kelimesini, sonraki tetikleyicilere yanıt vermeden önce ne kadar bekleyeceğinizi temsil eden bir java.time.Duration
bağımsız değişkeniyle kullanın.
Engelleme süresi beş saniye ile 24 saat arasında olabilir.
automation {
sequential {
val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
suppressFor(Duration.ofMinutes(30))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
Tetikleyicinin devre dışı bırakılmasının, suppressFor
'ten önce gelen bir otomasyondaki tüm starters
'leri etkilediğini unutmayın.
Bir işlemde özellik özelliklerini ayarlama
Bir özellik özelliğinin değerini ayarlamak için:
- Bir
action
düğümü içindeupdate
düğümü oluşturun. İlgili özelliğiupdate
düğümüne parametre olarak ekleyin:action(
deviceReference ,deviceType ) { update(trait ) { } } - Değiştirilecek her özellik için
update
düğümünde bir değiştirici işlevi kullanın ve bu işleve yeni değeri iletin. Değiştirici işlevinin adını oluşturmak için:- Özelliğin adını büyük harflerle yazma
- Başına
set
kelimesini ekleyin.
defaultMoveRate
adlı bir özelliği güncellemek içinsetDefaultMoveRate
adlı bir değiştirici işlevi kullanırsınız.
Bir update
düğümünün birden fazla değiştirici işlevi olabileceğini unutmayın. İki özelliğin güncellendiği bir örnek aşağıda verilmiştir:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}