אופרטורים מאפשרים לבדוק את הערך של מאפייני התכונה מול ערכים ספציפיים, להשוות אותם זה לזה ולשלב ביטויים שמשמשים בצמתים 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
אם הערך של Expression 1 הוא בין הערך של Expression 2 לבין הערך של Expression 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
אם Expression 1 שווה ל-Expression 2.
ביטוי 1 | ביטוי 2 | תוצאה |
---|---|---|
6 |
1 |
false |
2 |
2 |
true |
דוגמה ל-DSL
washer.operationalState equals STOPPED
greaterThan
הפונקציה מחזירה את הערך true
אם Expression 1 גדול מ-Expression 2.
ביטוי 1 | ביטוי 2 | תוצאה |
---|---|---|
6 |
1 |
true |
1 |
6 |
false |
דוגמה ל-DSL
( blindsPosition.currentPositionLift greaterThan 0u )
greaterThanOrEquals
הפונקציה מחזירה את הערך true
אם Expression 1 גדול מ-Expression 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
אם Expression 1 קטן מ-Expression 2 או שווה לו.
ביטוי 1 | ביטוי 2 | תוצאה |
---|---|---|
8 |
6 |
false |
6 |
6 |
true |
1 |
6 |
true |
דוגמה ל-DSL
( starterNode.measuredValue lessThanOrEquals 25 )
notEquals
הערך שמתקבל הוא true
אם Expression 1 לא שווה ל-Expression 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))