عملگرها به شما این امکان را می دهند که ارزش ویژگی های صفت را در برابر مقادیر خاص بررسی کنید، آنها را با یکدیگر مقایسه کنید و عبارات مورد استفاده در گره های 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
عملگرهای مقایسه
بین
زمانی که مقدار عبارت 1 بین مقدار عبارت 2 و عبارت 3 (شامل) باشد، به true
ارزیابی می شود. عبارات بسته به نوع داده آنها رتبه بندی متفاوتی دارند. انواع داده های ساده مانند اعداد و رشته ها به همان ترتیبی که در 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()
می توانید محدوده ای از تاریخ ها را مشخص کنید:
val exp2 =
time.currentDate.between(
LocalDate.of(2025, Month.OCTOBER, 1),
LocalDate.of(2025, Month.DECEMBER, 15),
)
با این حال، شما محدود به تاریخ های کامل نیستید. Automation 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)
برابر است
زمانی که عبارت 1 برابر با عبارت 2 باشد، به true
ارزیابی می شود.
بیان 1 | بیان 2 | نتیجه |
---|---|---|
6 | 1 | false |
2 | 2 | true |
نمونه DSL
washer.operationalState equals STOPPED
بزرگتر از
زمانی که عبارت 1 بزرگتر از عبارت 2 باشد، به true
ارزیابی می شود.
بیان 1 | بیان 2 | نتیجه |
---|---|---|
6 | 1 | true |
1 | 6 | false |
نمونه DSL
( blindsPosition.currentPositionLift greaterThan 0u )
greaterThanOrEquals
زمانی که عبارت 1 بزرگتر یا مساوی با عبارت 2 باشد، به true
ارزیابی می شود.
بیان 1 | بیان 2 | نتیجه |
---|---|---|
8 | 6 | true |
6 | 6 | true |
1 | 6 | false |
نمونه DSL
( starterNode.measuredValue greaterThanOrEquals 50 )
کمتر از
زمانی که عبارت 1 کمتر از عبارت 2 باشد، به true
ارزیابی می شود.
بیان 1 | بیان 2 | نتیجه |
---|---|---|
6 | 1 | false |
1 | 6 | true |
نمونه DSL
time.currentTime lessThan LocalTime.of(22,0,0,0)
lessThanOrEquals
زمانی که عبارت 1 کمتر یا مساوی با عبارت 2 باشد، به true
ارزیابی می شود.
بیان 1 | بیان 2 | نتیجه |
---|---|---|
8 | 6 | false |
6 | 6 | true |
1 | 6 | true |
نمونه DSL
( starterNode.measuredValue lessThanOrEquals 25 )
notequals
زمانی که عبارت 1 با عبارت 2 برابری نمی کند، به true
ارزیابی می شود.
بیان 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))