Operator memungkinkan Anda memeriksa nilai atribut trait terhadap nilai
tertentu, membandingkannya satu sama lain, dan menggabungkan ekspresi yang digunakan dalam
node condition.
Operator tersedia melalui pernyataan import berikut:
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
Operator perbandingan
antara
Mengevaluasi ke true jika nilai Ekspresi 1 berada di antara nilai Ekspresi 2 dan Ekspresi 3 (inklusif). Ekspresi diberi peringkat yang berbeda-beda, bergantung pada jenis datanya. Jenis data sederhana seperti angka dan string diberi peringkat dengan
cara yang sama seperti di Kotlin.
| Ekspresi 1 | Ekspresi 2 | Ekspresi 3 | Hasil | 
|---|---|---|---|
| 6 | 1 | 3 | false | 
| 2 | 1 | 3 | true | 
Contoh DSL
val time = stateReader<_>(structure, Time)
condition() {
  expression = time.currentTime
     .between(
      time.sunsetTime,
      time.sunriseTime)
}
Menggunakan tanggal dengan between()
Saat menggunakan operator between(), Anda dapat menentukan rentang tanggal:
val exp2 =
  time.currentDate.between(
    LocalDate.of(2025, Month.OCTOBER, 1),
    LocalDate.of(2025, Month.DECEMBER, 15),
  )
Namun, Anda tidak terbatas pada tanggal lengkap. DSL Otomatisasi juga memungkinkan Anda mengekspresikan rentang tanggal dengan berbagai cara:
- Hanya menggunakan tahun dan bulan:
val exp2 =
  time.currentDate.yearMonth.between(
    YearMonth.of(2024, Month.OCTOBER),
    YearMonth.of(2026, Month.JANUARY),
  )
- Hanya menggunakan bulan dan hari:
val exp2 =
  time.currentDate.monthDay.between(
    MonthDay.of(Month.OCTOBER, 1),
    MonthDay.of(Month.DECEMBER, 15),
  )
- Hanya menggunakan hari dalam bulan:
val exp2 = time.currentDate.day.between(1, 15)
sama dengan
Bernilai true jika Ekspresi 1 sama dengan Ekspresi 2.
| Ekspresi 1 | Ekspresi 2 | Hasil | 
|---|---|---|
| 6 | 1 | false | 
| 2 | 2 | true | 
Contoh DSL
washer.operationalState equals STOPPED
greaterThan
Bernilai true jika Ekspresi 1 lebih besar daripada Ekspresi 2.
| Ekspresi 1 | Ekspresi 2 | Hasil | 
|---|---|---|
| 6 | 1 | true | 
| 1 | 6 | false | 
Contoh DSL
( blindsPosition.currentPositionLift greaterThan 0u )
greaterThanOrEquals
Mengevaluasi ke true jika Ekspresi 1 lebih besar dari atau sama dengan Ekspresi 2.
| Ekspresi 1 | Ekspresi 2 | Hasil | 
|---|---|---|
| 8 | 6 | true | 
| 6 | 6 | true | 
| 1 | 6 | false | 
Contoh DSL
( starterNode.measuredValue greaterThanOrEquals 50 )
lessThan
dievaluasi menjadi true jika Ekspresi 1 kurang dari Ekspresi 2.
| Ekspresi 1 | Ekspresi 2 | Hasil | 
|---|---|---|
| 6 | 1 | false | 
| 1 | 6 | true | 
Contoh DSL
time.currentTime lessThan LocalTime.of(22,0,0,0)
lessThanOrEquals
Mengevaluasi ke true jika Ekspresi 1 kurang dari atau sama dengan Ekspresi 2.
| Ekspresi 1 | Ekspresi 2 | Hasil | 
|---|---|---|
| 8 | 6 | false | 
| 6 | 6 | true | 
| 1 | 6 | true | 
Contoh DSL
( starterNode.measuredValue lessThanOrEquals 25 )
notEquals
Bernilai true jika Ekspresi 1 tidak sama dengan Ekspresi 2.
| Ekspresi 1 | Ekspresi 2 | Hasil | 
|---|---|---|
| 6 | 1 | true | 
| 1 | 6 | true | 
| 2 | 2 | false | 
Contoh DSL
occupancyStateChange.occupied notEquals 0
Operator aritmatika
Tambahkan
Operator penambahan ( + ).
Contoh DSL
var totalCount = 0
...
totalCount = totalCount + 1
Kurangi
Operator pengurangan ( - ).
Contoh DSL
var countdown = 10
...
countdown = countdown - 1
Kali
Operator perkalian ( * ).
Contoh DSL
val millis = seconds * 1000
Bagi
Operator pembagian ( / ).
Contoh DSL
val rpm = revolutions / minutes
Operator logika
dan
Menggabungkan dua ekspresi dalam ekspresi AND logika, yang dievaluasi menjadi true jika kedua ekspresi adalah true.
| Ekspresi 1 | Ekspresi 2 | Hasil | 
|---|---|---|
| false | false | false | 
| true | false | false | 
| false | true | false | 
| true | true | true | 
Contoh DSL
((device.occupied notEquals 0) and
   time.currentTime.between(time.sunriseTime, time.sunsetTime))
tidak
Menegasikan nilai logika ekspresi.
| Ekspresi | Hasil | 
|---|---|
| true | false | 
| false | true | 
Contoh DSL
time.currentTime not (between(time.sunriseTime, time.sunsetTime))
atau
Menggabungkan dua ekspresi menjadi ekspresi OR logis.
| Ekspresi 1 | Ekspresi 2 | Hasil | 
|---|---|---|
| false | false | false | 
| true | false | true | 
| false | true | true | 
Contoh DSL
(time.currentTime equals LocalTime.of(10,0,0,0)) or
  (time.currentTime equals LocalTime.of(22,0,0,0))