אפשר להשתמש ב-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
, לכל מאפיין שרוצים לשנות, משתמשים בפונקציית שינוי ומעבירים לה את הערך החדש. כדי ליצור את השם של פונקציית השינוי:- האות הראשונה של שם המאפיין צריכה להיות גדולה
- מוסיפים לפניו את המילה
set
.
defaultMoveRate
, צריך להשתמש בפונקציית שינוי שנקראתsetDefaultMoveRate
.
חשוב לזכור שלצומת update
יכולות להיות כמה פונקציות לשינוי. הנה דוגמה לעדכון של שני מאפיינים:
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}