Операторы позволяют проверять значение атрибутов признаков на предмет соответствия определенным значениям, сравнивать их друг с другом и объединять выражения, используемые в узлах 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
Операторы сравнения
между
 Возвращает значение true , если значение Выражения 1 находится между значениями Выражения 2 и Выражения 3 (включительно). Выражения ранжируются по-разному в зависимости от типа данных. Простые типы данных, такие как числа и строки, ранжируются так же, как в 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)
равны
 Принимает значение true если выражение 1 равно выражению 2.
| Выражение 1 | Выражение 2 | Результат | 
|---|---|---|
 6 |  1 |  false | 
 2 |  2 |  true | 
Пример DSL
washer.operationalState equals STOPPED
больше, чем
 Принимает значение true если выражение 1 больше выражения 2.
| Выражение 1 | Выражение 2 | Результат | 
|---|---|---|
 6 |  1 |  true | 
 1 |  6 |  false | 
Пример DSL
( blindsPosition.currentPositionLift greaterThan 0u )
больше или равно
 Принимает значение true , если выражение 1 больше или равно выражению 2.
| Выражение 1 | Выражение 2 | Результат | 
|---|---|---|
 8 |  6 |  true | 
 6 |  6 |  true | 
 1 |  6 |  false | 
Пример DSL
( starterNode.measuredValue greaterThanOrEquals 50 )
меньше, чем
 оценивается как true когда выражение 1 меньше выражения 2.
| Выражение 1 | Выражение 2 | Результат | 
|---|---|---|
 6 |  1 |  false | 
 1 |  6 |  true | 
Пример DSL
time.currentTime lessThan LocalTime.of(22,0,0,0)
меньшеилиравно
 Принимает значение true , если выражение 1 меньше или равно выражению 2.
| Выражение 1 | Выражение 2 | Результат | 
|---|---|---|
 8 |  6 |  false | 
 6 |  6 |  true | 
 1 |  6 |  true | 
Пример DSL
( starterNode.measuredValue lessThanOrEquals 25 )
notEquals
 Принимает значение true , если выражение 1 не равно выражению 2.
| Выражение 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
Логические операторы
и
 Объединяет два выражения в логическое выражение И, возвращая значение 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))
или
Объединяет два выражения в логическое выражение ИЛИ.
| Выражение 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))