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

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