Справочник оператора 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),
  )

Однако вы не ограничены только полными датами. Язык программирования 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

больше

Значение становится 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 )

не равно

Значение становится 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))