اتوماسیون 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
هستند تأثیر می گذارد.
صفات صفت را در یک عمل تنظیم کنید
برای تنظیم مقدار یک صفت:
- یک گره
update
در یک گرهaction
ایجاد کنید، از جمله ویژگی مربوطه را به عنوان آرگومان برای گرهupdate
:action(deviceReference, deviceType) { update(trait) { } }
- در گره
update
، برای هر ویژگی که باید اصلاح شود، از یک تابع mutator استفاده کنید و مقدار جدید را به آن ارسال کنید. برای تشکیل نام تابع mutator:- نام ویژگی را با حروف بزرگ بنویسید
- پیشوند آن را با کلمه
set
قرار دهید.
defaultMoveRate
، باید از یک تابع mutator به نامsetDefaultMoveRate
استفاده کنید.
توجه داشته باشید که یک گره update
می تواند چندین عملکرد جهش دهنده داشته باشد. در اینجا یک مثال است که در آن دو ویژگی به روز می شوند:
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}