연산자를 사용하면 특성 속성 값을 특정 값과 비교하고, 서로 비교하고, 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()으로 날짜 사용
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)
같음
표현식 1이 표현식 2와 같으면 true로 평가됩니다.
| 표현식 1 | 표현식 2 | 결과 | 
|---|---|---|
| 6 | 1 | false | 
| 2 | 2 | true | 
DSL 예시
washer.operationalState equals STOPPED
greaterThan
표현식 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 )
lessThan
표현식 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))