מדריך ל-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 שמייצג את משך ההשהיה לפני המשך הביצוע. משך ההשהיה יכול להיות בין חמש שניות ל-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.

הגדרת מאפייני מאפיין בפעולה

כדי להגדיר את הערך של מאפיין מאפיין:

  1. יוצרים צומת update בתוך צומת action, כולל המאפיין הרלוונטי כארגומנטים לצומת update:
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
    
  2. בצומת update, לכל מאפיין שרוצים לשנות, משתמשים בפונקציית mutator ומעבירים לה את הערך החדש. כדי ליצור את השם של פונקציית המוטאטור:
    1. כותבים את שם המאפיין באותיות רישיות
    2. מוסיפים את המילה set כקידומת.
    לדוגמה, כדי לעדכן מאפיין שנקרא defaultMoveRate, משתמשים בפונקציית mutator שנקראת setDefaultMoveRate.

שימו לב שאפשר להגדיר כמה פונקציות mutator באותו צומת update. דוגמה לעדכון של שני מאפיינים:

typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait

action(fan, FanDeviceType.self) {
  update(FanControlTrait.self) {
    $0.setFanMode(.on)
  }
}