DSL kılavuzu - karmaşık otomasyonlar

Otomasyon DSL'si, DSL rehberi - temel otomasyonlar bölümünde açıklananlardan daha karmaşık otomasyonlar oluşturmak için kullanılabilir.

Birden fazla işlemle sıralı

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ı

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ızda duraklamalar uygulayabilirsiniz. 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 azaltma

Tetikleyici engelleme, otomasyonunuzun ilk tetikleyici etkinlikten sonra belirli bir süre boyunca bir starter'yi 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.

Otomasyonunuza tetikleyici engelleme özelliğini uygulamak için suppressForanahtar kelimesini, sonraki tetikleyicilere yanıt vermeden önce ne kadar bekleyeceğinizi belirten java.time.Duration bağımsız değişkeniyle kullanın. Engelleme süresi beş saniye veya 24 saat kadar kısa 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 öğelerini etkilediğini unutmayın.

Bir işlemde özellik özelliklerini ayarlama

Bir özellik özelliğinin değerini ayarlamak için:

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