מדריך ל-iOS DSL לצורך אוטומציה מורכבת

אפשר להשתמש ב-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.

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

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

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

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

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

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