راهنمای iOS DSL برای اتوماسیون های پیچیده

اتوماسیون DSL می تواند برای ایجاد اتوماسیون هایی که پیچیده تر از آنچه در راهنمای DSL بحث شده است - اتوماسیون های اساسی در iOS استفاده شود.

متوالی با اقدامات متعدد

متوالی با اقدامات متعدد

یک اتوماسیون می تواند بیش از یک کار را انجام دهد. به عنوان مثال، به جای گره action واحد، می توانید چندین گره action داشته باشید که به ترتیب اجرا می شوند:

import GoogleHomeSDK
import GoogleHomeTypes

automation (
...
) {

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

}

متوالی با اقدامات موازی متعدد

متوالی با اقدامات موازی متعدد

اگر چندین گره action در یک گره parallel قرار دهید، اقدامات به طور همزمان اجرا می شوند.

import GoogleHomeSDK
import GoogleHomeTypes

automation (
...
) {

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

}

اگر گره‌های action در گره sequential وجود داشته باشد که بعد از گره parallel می‌آیند، آنها منتظر می‌مانند تا اجرا شوند تا تمام گره‌های درون گره parallel اجرا شوند.

تاخیرها

می‌توانید با استفاده از روش delay(for:) در اتوماسیون‌های خود مکث ایجاد کنید، که یک آرگومان Duration طول می‌کشد که نشان‌دهنده مدت توقف قبل از ادامه اجرا است. مدت مکث ممکن است به کوتاهی پنج ثانیه یا حداکثر 24 ساعت باشد.

به عنوان مثال، برای جابجایی یک چراغ چهار بار با یک مکث پنج ثانیه ای بین هر ضامن:

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() }
}

سرکوب ماشه

سرکوب ماشه قابلیتی است که به اتوماسیون شما اجازه می دهد تا یک starter برای مدت زمان مشخصی پس از رویداد آغازگر اولیه نادیده بگیرد. به عنوان مثال، اگر اتوماسیون دارای starter باشد که با تشخیص حرکت راه اندازی می شود، و اگر مدت زمان سرکوب ماشه را پنج دقیقه تعیین کنید، پس از اینکه starter شروع می شود، برای پنج دقیقه آینده دوباره فعال نمی شود. این مانع از راه اندازی سریع و مکرر اتوماسیون می شود.

برای اعمال سرکوب ماشه در اتوماسیون خود، از کلمه کلیدی suppress(for:) با آرگومان Duration استفاده کنید که نشان دهنده مدت زمان انتظار برای پاسخ دادن به محرک های بعدی است. مدت زمان سرکوب ممکن است به کوتاهی پنج ثانیه یا حداکثر 24 ساعت باشد.

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() }
}

توجه داشته باشید که سرکوب ماشه روی همه starters اتوماسیونی که قبل از Suppression هستند تأثیر می گذارد.

صفات صفت را در یک عمل تنظیم کنید

برای تنظیم مقدار یک صفت:

  1. یک گره update در یک گره action ایجاد کنید، از جمله ویژگی مربوطه را به عنوان آرگومان برای گره update :
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
    
  2. در گره update ، برای هر ویژگی که باید اصلاح شود، از یک تابع mutator استفاده کنید و مقدار جدید را به آن ارسال کنید. برای تشکیل نام تابع mutator:
    1. نام ویژگی را با حروف بزرگ بنویسید
    2. پیشوند آن را با کلمه set قرار دهید.
    به عنوان مثال، برای به روز رسانی یک ویژگی به نام defaultMoveRate ، باید از یک تابع mutator به نام setDefaultMoveRate استفاده کنید.

توجه داشته باشید که یک گره update می تواند چندین عملکرد جهش دهنده داشته باشد. در اینجا یک مثال است که در آن دو ویژگی به روز می شوند:

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

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