Karmaşık otomasyonlar için Android DSL kılavuzu

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ı

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ı

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:

  1. action düğümü içinde update düğümü oluşturun. İlgili özelliği update düğümüne bağımsız değişken olarak ekleyin:
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
  2. 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:
    1. Özelliğin adını büyük harfle yazın.
    2. set kelimesini ekleyin.
    Örneğin, defaultMoveRate adlı bir özelliği güncellemek için setDefaultMoveRate 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)
  }
}