אפשר להשתמש ב-DSL לאוטומציה כדי ליצור אוטומציות מורכבות יותר מאלה שמוסברות במדריך ל-DSL – אוטומציות בסיסיות ב-Android.
רצף עם כמה פעולות
פעולה אוטומטית יכולה לבצע יותר מפעולה אחת. לדוגמה, במקום צומת 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.
הגבלת מספר ההרצות
אפשר להגביל את מספר הפעמים שמותר להפעיל אוטומציה.
לדוגמה, אפשר להגדיר פעולה אוטומטית חד-פעמית שתפעיל את השואב כשאתם לא בבית במהלך היום.
כדי לעשות זאת, מגדירים את שדה המטא-נתונים maxExecutionCount של האוטומציה.
הדוגמה הבאה היא אוטומציה שאפשר להפעיל רק פעם אחת:
automation { // The automation can only be executed once. maxExecutionCount = 1 // When the door lock state changes sequential { val doorLockEvent = starter<_>(doorLock, DoorLockDevice, LockOperationEvent) // if the door is unlocked condition() { expression = (doorLockEvent.lockOperationType equals LockOperationTypeEnum.Unlock) } // turn the light on action(light, DimmableLightDevice) { command(OnOff.on()) } } }
הפעולה האוטומטית נמחקת מיד אחרי שהיא מסיימת את ההרצה בפעם האחרונה ומגיעה ל-maxExecutionCount. הערך בהיסטוריה של האוטומציה נשאר בכרטיסייה Google Home app (GHA) פעילות, כולל automation_id.
הגדרת מאפייני מאפיינים בפעולה
כדי להגדיר את הערך של מאפיין של מאפיין משותף:
- יוצרים צומת
updateבתוך צומתaction, כולל המאפיין הרלוונטי כארגומנט לצומתupdate:action(deviceReference, deviceType) { update(trait) { } } - בצומת
update, לכל מאפיין שרוצים לשנות: משתמשים בפונקציית מוטציה ומעבירים לה את הערך החדש. כדי ליצור את השם של פונקציית המוטציה:- האות הראשונה של שם המאפיין צריכה להיות גדולה
- מוסיפים לפניו את המילה
set.
defaultMoveRate, משתמשים בפונקציית שינוי שנקראתsetDefaultMoveRate.
חשוב לזכור שלצומת update יכולות להיות כמה פונקציות לשינוי. הנה דוגמה לעדכון של שני מאפיינים:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}