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