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

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

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

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

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

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

action(device, Fan) {
  update(FanControl) {
    setPercentSetting(50u)
    setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
  }
}