اتوماسیون DSL می تواند برای ایجاد اتوماسیون هایی استفاده شود که پیچیده تر از آنچه در راهنمای DSL بحث شده است - اتوماسیون های اساسی .
متوالی با اقدامات متعدد
یک اتوماسیون می تواند بیش از یک کار را انجام دهد. به عنوان مثال، به جای گره action
واحد، می توانید چندین گره action
داشته باشید که به ترتیب اجرا می شوند:
automation {
sequential {
starter<_>(...)
condition {...}
action {...}
action {...}
action {...}
}
}
متوالی با اقدامات موازی متعدد
اگر چندین گره action
را در یک گره parallel
قرار دهید، اقدامات به طور همزمان اجرا می شوند.
automation {
sequential {
starter<_>(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
}
اگر گرههای action
در گره sequential
وجود داشته باشد که بعد از گره parallel
میآیند، آنها منتظر میمانند تا اجرا شوند تا تمام گرههای درون گره parallel
اجرا شوند.
تاخیر
میتوانید با استفاده از کلمه کلیدی delayFor
، که یک آرگومان java.time.Duration
طول میکشد، در اتوماسیونهای خود مکث ایجاد کنید که نشاندهنده مدت توقف قبل از ادامه اجرا است. مدت مکث ممکن است به کوتاهی پنج ثانیه یا حداکثر 24 ساعت باشد.
به عنوان مثال، برای جابجایی یک چراغ چهار بار با یک مکث پنج ثانیه ای بین هر ضامن:
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()) }
}
سرکوب ماشه
سرکوب ماشه قابلیتی است که به اتوماسیون شما اجازه می دهد تا یک starter
برای مدت زمان مشخصی پس از رویداد آغازگر اولیه نادیده بگیرد. به عنوان مثال، اگر اتوماسیون دارای starter
باشد که با تشخیص حرکت راه اندازی می شود، و اگر مدت زمان سرکوب ماشه را پنج دقیقه تعیین کنید، پس از اینکه starter
شروع می شود، برای پنج دقیقه آینده دوباره فعال نمی شود. این مانع از راه اندازی سریع و مکرر اتوماسیون می شود.
برای اعمال سرکوب ماشه در اتوماسیون خود، از کلمه کلیدی suppressFor
با آرگومان java.time.Duration
استفاده کنید که نشان دهنده مدت زمان انتظار قبل از پاسخ به محرک های بعدی است. مدت زمان سرکوب ممکن است به کوتاهی پنج ثانیه یا حداکثر 24 ساعت باشد.
automation {
sequential {
val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
suppressFor(Duration.ofMinutes(30))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
توجه داشته باشید که سرکوب ماشه روی همه starters
یک اتوماسیون که قبل از suppressFor
هستند تأثیر میگذارد.
صفات صفت را در یک عمل تنظیم کنید
برای تنظیم مقدار یک صفت:
- یک گره
update
در یک گرهaction
ایجاد کنید، از جمله ویژگی مربوطه را به عنوان آرگومان برای گرهupdate
:action(deviceReference, deviceType) { update(trait) { } }
- در گره
update
، برای هر ویژگی که باید اصلاح شود، از یک تابع mutator استفاده کنید و مقدار جدید را به آن ارسال کنید. برای تشکیل نام تابع mutator:- نام ویژگی را با حروف بزرگ بنویسید
- پیشوند آن را با کلمه
set
قرار دهید.
defaultMoveRate
، باید از یک تابع mutator به نامsetDefaultMoveRate
استفاده کنید.
توجه داشته باشید که یک گره update
می تواند چندین عملکرد جهش دهنده داشته باشد. در اینجا یک مثال است که در آن دو ویژگی به روز می شوند:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}