Toán tử cho phép bạn kiểm tra giá trị của các thuộc tính đặc điểm dựa trên các giá trị cụ thể, so sánh các giá trị đó với nhau và kết hợp các biểu thức được dùng trong các nút condition.
Bạn có thể sử dụng toán tử thông qua các câu lệnh import sau:
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
Toán tử so sánh
nằm trong khoảng
Đánh giá là true khi giá trị của Biểu thức 1 nằm trong khoảng giá trị của Biểu thức 2 và Biểu thức 3 (bao gồm cả hai giá trị này). Các biểu thức được xếp hạng khác nhau tuỳ thuộc vào loại dữ liệu của chúng. Các loại dữ liệu đơn giản như số và chuỗi được xếp hạng giống như trong Kotlin.
| Biểu thức 1 | Biểu thức 2 | Biểu thức 3 | Kết quả |
|---|---|---|---|
6 |
1 |
3 |
false |
2 |
1 |
3 |
true |
Ví dụ về DSL
val time = stateReader<_>(structure, Time)
condition() {
expression = time.currentTime
.between(
time.sunsetTime,
time.sunriseTime)
}
Sử dụng ngày với between()
Khi sử dụng toán tử between(), bạn có thể chỉ định một phạm vi ngày:
val exp2 =
time.currentDate.between(
LocalDate.of(2025, Month.OCTOBER, 1),
LocalDate.of(2025, Month.DECEMBER, 15),
)
Tuy nhiên, bạn không bị giới hạn ở các ngày đầy đủ. DSL tự động hoá cũng cho phép bạn biểu thị một phạm vi ngày theo nhiều cách:
- Chỉ sử dụng năm và tháng:
val exp2 =
time.currentDate.yearMonth.between(
YearMonth.of(2024, Month.OCTOBER),
YearMonth.of(2026, Month.JANUARY),
)
- Chỉ sử dụng tháng và ngày:
val exp2 =
time.currentDate.monthDay.between(
MonthDay.of(Month.OCTOBER, 1),
MonthDay.of(Month.DECEMBER, 15),
)
- Chỉ sử dụng ngày trong tháng:
val exp2 = time.currentDate.day.between(1, 15)
dấu bằng
Đánh giá là true khi Biểu thức 1 bằng Biểu thức 2.
| Biểu thức 1 | Biểu thức 2 | Kết quả |
|---|---|---|
6 |
1 |
false |
2 |
2 |
true |
Ví dụ về DSL
washer.operationalState equals STOPPED
greaterThan
Đánh giá là true khi Biểu thức 1 lớn hơn Biểu thức 2.
| Biểu thức 1 | Biểu thức 2 | Kết quả |
|---|---|---|
6 |
1 |
true |
1 |
6 |
false |
Ví dụ về DSL
( blindsPosition.currentPositionLift greaterThan 0u )
greaterThanOrEquals
Đánh giá là true khi Biểu thức 1 lớn hơn hoặc bằng Biểu thức 2.
| Biểu thức 1 | Biểu thức 2 | Kết quả |
|---|---|---|
8 |
6 |
true |
6 |
6 |
true |
1 |
6 |
false |
Ví dụ về DSL
( starterNode.measuredValue greaterThanOrEquals 50 )
lessThan
đánh giá là true khi Biểu thức 1 nhỏ hơn Biểu thức 2.
| Biểu thức 1 | Biểu thức 2 | Kết quả |
|---|---|---|
6 |
1 |
false |
1 |
6 |
true |
Ví dụ về DSL
time.currentTime lessThan LocalTime.of(22,0,0,0)
lessThanOrEquals
Đánh giá là true khi Biểu thức 1 nhỏ hơn hoặc bằng Biểu thức 2.
| Biểu thức 1 | Biểu thức 2 | Kết quả |
|---|---|---|
8 |
6 |
false |
6 |
6 |
true |
1 |
6 |
true |
Ví dụ về DSL
( starterNode.measuredValue lessThanOrEquals 25 )
notEquals
Đánh giá là true khi Biểu thức 1 không bằng Biểu thức 2.
| Biểu thức 1 | Biểu thức 2 | Kết quả |
|---|---|---|
6 |
1 |
true |
1 |
6 |
true |
2 |
2 |
false |
Ví dụ về DSL
occupancyStateChange.occupied notEquals 0
Toán tử số học
Thêm
Toán tử cộng ( + ).
Ví dụ về DSL
var totalCount = 0
...
totalCount = totalCount + 1
Trừ
Toán tử trừ ( - ).
Ví dụ về DSL
var countdown = 10
...
countdown = countdown - 1
Nhân
Toán tử nhân ( * ).
Ví dụ về DSL
val millis = seconds * 1000
Chia
Toán tử chia ( / ).
Ví dụ về DSL
val rpm = revolutions / minutes
Toán tử logic
và
Kết hợp hai biểu thức trong một biểu thức AND logic, đánh giá là true khi cả hai biểu thức đều là true.
| Biểu thức 1 | Biểu thức 2 | Kết quả |
|---|---|---|
false |
false |
false |
true |
false |
false |
false |
true |
false |
true |
true |
true |
Ví dụ về DSL
((device.occupied notEquals 0) and
time.currentTime.between(time.sunriseTime, time.sunsetTime))
không
Phủ định giá trị logic của một biểu thức.
| Biểu thức | Kết quả |
|---|---|
true |
false |
false |
true |
Ví dụ về DSL
time.currentTime not (between(time.sunriseTime, time.sunsetTime))
hoặc
Kết hợp hai biểu thức thành một biểu thức OR logic.
| Biểu thức 1 | Biểu thức 2 | Kết quả |
|---|---|---|
false |
false |
false |
true |
false |
true |
false |
true |
true |
Ví dụ về DSL
(time.currentTime equals LocalTime.of(10,0,0,0)) or
(time.currentTime equals LocalTime.of(22,0,0,0))