אפשר להשתמש ב-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) Activity (פעילות), כולל 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)
}
}