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

از Automation 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 دریافت می‌کند که نشان می‌دهد قبل از ادامه اجرا، چه مدت مکث باید انجام شود. مدت مکث می‌تواند به کوتاهی پنج ثانیه یا به بلندی ۲۴ ساعت باشد.

برای مثال، برای چهار بار روشن و خاموش کردن یک چراغ با مکث پنج ثانیه‌ای بین هر بار روشن و خاموش کردن:

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 که نشان دهنده مدت زمان انتظار قبل از پاسخ به تریگرهای بعدی است، استفاده کنید. مدت زمان سرکوب می‌تواند به کوتاهی پنج ثانیه یا به بلندی ۲۴ ساعت باشد.

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