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