Otomasyon DSL'si, DSL kılavuzu - Android'de 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ı
Bir otomasyon 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üğüm varsa parallel
düğümündeki tüm düğümlerin yürütmesi tamamlanana kadar yürütülmeyi beklerler.
Gecikmeler
Otomasyonlarınıza delayFor
anahtar kelimesini kullanarak duraklatma ekleyebilirsiniz. Bu anahtar kelime, yürütmeye devam etmeden önce ne kadar süre duraklatılacağını belirten bir java.time.Duration
bağımsız değişkenini 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:
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()) }
}
Tetikleyiciyi devre dışı bırakma
Tetikleyici bastırma, otomasyonunuzun ilk tetikleyici etkinlikten sonra belirli bir süre boyunca starter
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 suppressFor
anahtar kelimesini kullanın. Bu anahtar kelime, sonraki tetikleyicilere yanıt vermeden önce ne kadar süre bekleneceğini gösteren bir java.time.Duration
bağımsız değişkeni içerir.
Bastırma süresi en az beş saniye, en fazla 24 saat olabilir.
automation {
sequential {
val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
suppressFor(Duration.ofMinutes(30))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
Tetikleyici bastırmanın, otomasyonda suppressFor
'den önce gelen tüm starters
'leri etkilediğini unutmayın.
Yürütme sayısını sınırlama
Otomasyonun çalıştırılmasına izin verilen sayıyı sınırlayabilirsiniz.
Örneğin, gün içinde evden uzaktayken elektrikli süpürgeyi çalıştıran tek seferlik bir otomasyon ayarlamak isteyebilirsiniz.
Bunu yapmak için otomasyonun maxExecutionCount
meta veri alanını ayarlayın.
Aşağıdaki örnek, yalnızca bir kez çalıştırılabilen bir otomasyondur:
automation { // The automation can only be executed once. maxExecutionCount = 1 // When the door lock state changes sequential { val doorLockEvent = starter<_>(doorLock, DoorLockDevice, LockOperationEvent) // if the door is unlocked condition() { expression = (doorLockEvent.lockOperationType equals LockOperationTypeEnum.Unlock) } // turn the light on action(light, DimmableLightDevice) { command(OnOff.on()) } } }
Otomasyon, son kez yürütme işlemi tamamlandığında ve maxExecutionCount
sınırına ulaşıldığında hemen silinir. Otomasyonun geçmiş girişi, Google Home app (GHA) Etkinlik sekmesinde kalır (automation_id
dahil).
Bir işlemde özellik özelliklerini ayarlama
Bir özellik özelliğinin değerini ayarlamak için:
action
düğümü içindeupdate
düğümü oluşturun. İlgili özelliğiupdate
düğümüne bağımsız değişken olarak ekleyin:action(deviceReference, deviceType) { update(trait) { } }
update
düğümünde, değiştirilecek her özellik için bir mutasyon işlevi kullanın ve yeni değeri bu işleve iletin. Değiştirici işlevinin adını oluşturmak için:- Özelliğin adını büyük harfle yazın.
set
kelimesini ekleyin.
defaultMoveRate
adlı bir özelliği güncellemek içinsetDefaultMoveRate
adlı bir değiştirici işlev kullanırsınız.
update
düğümünün birden fazla değiştirici işlevi olabileceğini unutmayın. İki özelliğin güncellendiği bir örneği aşağıda görebilirsiniz:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}