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

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ı

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:

import GoogleHomeSDK
import GoogleHomeTypes

automation (
...
) {

  starter(...)
  condition {...}
  action {...}
  action {...}
  action {...}

}

Birden fazla paralel işlem içeren sıralı

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 {...}
  }

}

parallel düğümünden sonra gelen sequential düğümünde 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ı belirten 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 tetikleyici etkinlikten 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 devre dışı bırakma 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 suppress(for:) anahtar kelimesini kullanın. Bu anahtar kelime, sonraki tetikleyicilere yanıt vermeden önce ne kadar süre bekleneceğini gösteren bir Duration bağımsız değişkeni içerir. 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'den önce gelen tüm starters'leri 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 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şlevin 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.

Bir 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:

typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait

action(fan, FanDeviceType.self) {
  update(FanControlTrait.self) {
    $0.setFanMode(.on)
  }
}