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

אפשר להשתמש ב-Automation DSL כדי ליצור תהליכי אוטומציה מורכבים יותר מאלה שמפורטים במדריך ל-DSL – תהליכי אוטומציה בסיסיים.

רציפה עם כמה פעולות

רציפה עם כמה פעולות

פעולה אוטומטית יכולה לבצע יותר מפעולה אחת. לדוגמה, במקום הצומת היחיד 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.

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

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

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

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

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