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))