אופרטורים מאפשרים לבדוק את הערך של מאפייני התכונות מול ערכים ספציפיים, להשוות ביניהם ולשלב ביטויים שמשמשים בצומתי condition.
האופרטורים זמינים באמצעות הצהרות import הבאות:
import com.google.home.automation.and
import com.google.home.automation.between
import com.google.home.automation.contains
import com.google.home.automation.equals
import com.google.home.automation.greaterThan
import com.google.home.automation.greaterThanOrEquals
import com.google.home.automation.lessThan
import com.google.home.automation.not
import com.google.home.automation.notEquals
import com.google.home.automation.or
אופרטורים להשוואה
בין
התוצאה היא true כשהערך של ביטוי 1 הוא בין הערך של ביטוי 2 לערך של ביטוי 3 (כולל). הביטויים מדורגים באופן שונה בהתאם לסוג הנתונים שלהם. סוגי נתונים פשוטים כמו מספרים ומחרוזות מדורגים באותו אופן כמו ב-Kotlin.
| ביטוי 1 | ביטוי 2 | ביטוי 3 | תוצאה |
|---|---|---|---|
6 |
1 |
3 |
false |
2 |
1 |
3 |
true |
דוגמה ל-DSL
val time = stateReader<_>(structure, Time)
condition() {
expression = time.currentTime
.between(
time.sunsetTime,
time.sunriseTime)
}
שימוש בתאריכים עם הפונקציה between()
כשמשתמשים באופרטור between(), אפשר לציין טווח תאריכים:
val exp2 =
time.currentDate.between(
LocalDate.of(2025, Month.OCTOBER, 1),
LocalDate.of(2025, Month.DECEMBER, 15),
)
עם זאת, אתם לא מוגבלים לתאריכים מלאים. שפת ה-DSL של האוטומציה מאפשרת גם לבטא טווח של תאריכים במגוון דרכים:
- שימוש בשנה ובחודש בלבד:
val exp2 =
time.currentDate.yearMonth.between(
YearMonth.of(2024, Month.OCTOBER),
YearMonth.of(2026, Month.JANUARY),
)
- שימוש בחודש וביום בלבד:
val exp2 =
time.currentDate.monthDay.between(
MonthDay.of(Month.OCTOBER, 1),
MonthDay.of(Month.DECEMBER, 15),
)
- שימוש רק ביום בחודש:
val exp2 = time.currentDate.day.between(1, 15)
שווה
הפונקציה מחזירה את הערך true כשביטוי 1 שווה לביטוי 2.
| ביטוי 1 | ביטוי 2 | תוצאה |
|---|---|---|
6 |
1 |
false |
2 |
2 |
true |
דוגמה ל-DSL
washer.operationalState equals STOPPED
greaterThan
הפונקציה מחזירה את הערך true כשביטוי 1 גדול מביטוי 2.
| ביטוי 1 | ביטוי 2 | תוצאה |
|---|---|---|
6 |
1 |
true |
1 |
6 |
false |
דוגמה ל-DSL
( blindsPosition.currentPositionLift greaterThan 0u )
greaterThanOrEquals
הפונקציה מחזירה את הערך true אם ביטוי 1 גדול מביטוי 2 או שווה לו.
| ביטוי 1 | ביטוי 2 | תוצאה |
|---|---|---|
8 |
6 |
true |
6 |
6 |
true |
1 |
6 |
false |
דוגמה ל-DSL
( starterNode.measuredValue greaterThanOrEquals 50 )
lessThan
מחזירה את הערך true אם ביטוי 1 קטן מביטוי 2.
| ביטוי 1 | ביטוי 2 | תוצאה |
|---|---|---|
6 |
1 |
false |
1 |
6 |
true |
דוגמה ל-DSL
time.currentTime lessThan LocalTime.of(22,0,0,0)
lessThanOrEquals
התוצאה היא true כשביטוי 1 קטן מביטוי 2 או שווה לו.
| ביטוי 1 | ביטוי 2 | תוצאה |
|---|---|---|
8 |
6 |
false |
6 |
6 |
true |
1 |
6 |
true |
דוגמה ל-DSL
( starterNode.measuredValue lessThanOrEquals 25 )
notEquals
התוצאה היא true כשביטוי 1 לא שווה לביטוי 2.
| ביטוי 1 | ביטוי 2 | תוצאה |
|---|---|---|
6 |
1 |
true |
1 |
6 |
true |
2 |
2 |
false |
דוגמה ל-DSL
occupancyStateChange.occupied notEquals 0
אופרטורים אריתמטיים
הוספה
אופרטור החיבור ( + ).
דוגמה ל-DSL
var totalCount = 0
...
totalCount = totalCount + 1
הפחתה
אופרטור החיסור ( - ).
דוגמה ל-DSL
var countdown = 10
...
countdown = countdown - 1
הכפלה
אופרטור הכפל ( * ).
דוגמה ל-DSL
val millis = seconds * 1000
חילוק
אופרטור החילוק ( / ).
דוגמה ל-DSL
val rpm = revolutions / minutes
אופרטורים לוגיים
וגם
משלבת שני ביטויים בביטוי AND לוגי, ומחזירה את הערך true כששני הביטויים הם true.
| ביטוי 1 | ביטוי 2 | תוצאה |
|---|---|---|
false |
false |
false |
true |
false |
false |
false |
true |
false |
true |
true |
true |
דוגמה ל-DSL
((device.occupied notEquals 0) and
time.currentTime.between(time.sunriseTime, time.sunsetTime))
לא
הפונקציה הופכת את הערך הלוגי של ביטוי.
| ביטוי | תוצאה |
|---|---|
true |
false |
false |
true |
דוגמה ל-DSL
time.currentTime not (between(time.sunriseTime, time.sunsetTime))
או
משלב שני ביטויים לביטוי OR לוגי.
| ביטוי 1 | ביטוי 2 | תוצאה |
|---|---|---|
false |
false |
false |
true |
false |
true |
false |
true |
true |
דוגמה ל-DSL
(time.currentTime equals LocalTime.of(10,0,0,0)) or
(time.currentTime equals LocalTime.of(22,0,0,0))