Справочник оператора DSL для Android

Операторы позволяют проверять значения атрибутов признаков на соответствие определенным значениям, сравнивать их друг с другом и объединять выражения, используемые в узлах 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),
  )

Однако вы можете указать не только полные даты. Кроме того, в Automation 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

greaterThan

Возвращает значение true, если выражение 1 больше выражения 2.

Пример
Выражение 1 Выражение 2 Результат
6 1 true
1 6 false

Пример DSL

( blindsPosition.currentPositionLift greaterThan 0u )

greaterThanOrEquals

Возвращает значение true, если выражение 1 больше или равно выражению 2.

Пример
Выражение 1 Выражение 2 Результат
8 6 true
6 6 true
1 6 false

Пример DSL

( starterNode.measuredValue greaterThanOrEquals 50 )

lessThan

возвращает значение true, если выражение 1 меньше выражения 2.

Пример
Выражение 1 Выражение 2 Результат
6 1 false
1 6 true

Пример DSL

time.currentTime lessThan LocalTime.of(22,0,0,0)

lessThanOrEquals

Возвращает значение 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))