Com os operadores, é possível verificar o valor dos atributos de traço em relação a valores específicos, compará-los entre si e combinar expressões usadas em nós condition
.
Os operadores são disponibilizados pelas seguintes instruções 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
Operadores de comparação
entre
Avalia como true
quando o valor da expressão 1 está entre o da expressão 2 e o da expressão 3 (inclusive). As expressões são classificadas de maneira diferente dependendo do tipo de dados. Tipos de dados simples, como números e strings, são classificados da mesma forma que no Kotlin.
Expressão 1 | Expressão 2 | Expressão 3 | Resultado |
---|---|---|---|
6 |
1 |
3 |
false |
2 |
1 |
3 |
true |
Exemplo de DSL
val time = stateReader<_>(structure, Time)
condition() {
expression = time.currentTime
.between(
time.sunsetTime,
time.sunriseTime)
}
Usar datas com between()
Ao usar o operador between()
, é possível especificar um intervalo de datas:
val exp2 =
time.currentDate.between(
LocalDate.of(2025, Month.OCTOBER, 1),
LocalDate.of(2025, Month.DECEMBER, 15),
)
No entanto, você não está limitado a datas completas. A DSL de automação também permite expressar um intervalo de datas de várias maneiras:
- Usando apenas ano e mês:
val exp2 =
time.currentDate.yearMonth.between(
YearMonth.of(2024, Month.OCTOBER),
YearMonth.of(2026, Month.JANUARY),
)
- Usando apenas mês e dia:
val exp2 =
time.currentDate.monthDay.between(
MonthDay.of(Month.OCTOBER, 1),
MonthDay.of(Month.DECEMBER, 15),
)
- Usando apenas o dia do mês:
val exp2 = time.currentDate.day.between(1, 15)
igual a
Será avaliado como true
quando a expressão 1 for igual à expressão 2.
Expressão 1 | Expressão 2 | Resultado |
---|---|---|
6 |
1 |
false |
2 |
2 |
true |
Exemplo de DSL
washer.operationalState equals STOPPED
greaterThan
Será avaliado como true
quando a expressão 1 for maior que a expressão 2.
Expressão 1 | Expressão 2 | Resultado |
---|---|---|
6 |
1 |
true |
1 |
6 |
false |
Exemplo de DSL
( blindsPosition.currentPositionLift greaterThan 0u )
greaterThanOrEquals
Avalia como true
quando a expressão 1 é maior ou igual à expressão 2.
Expressão 1 | Expressão 2 | Resultado |
---|---|---|
8 |
6 |
true |
6 |
6 |
true |
1 |
6 |
false |
Exemplo de DSL
( starterNode.measuredValue greaterThanOrEquals 50 )
lessThan
é avaliado como true
quando a expressão 1 é menor que a expressão 2.
Expressão 1 | Expressão 2 | Resultado |
---|---|---|
6 |
1 |
false |
1 |
6 |
true |
Exemplo de DSL
time.currentTime lessThan LocalTime.of(22,0,0,0)
lessThanOrEquals
Avalia como true
quando a expressão 1 é menor ou igual à expressão 2.
Expressão 1 | Expressão 2 | Resultado |
---|---|---|
8 |
6 |
false |
6 |
6 |
true |
1 |
6 |
true |
Exemplo de DSL
( starterNode.measuredValue lessThanOrEquals 25 )
notEquals
Será avaliado como true
quando a expressão 1 não for igual à expressão 2.
Expressão 1 | Expressão 2 | Resultado |
---|---|---|
6 |
1 |
true |
1 |
6 |
true |
2 |
2 |
false |
Exemplo de DSL
occupancyStateChange.occupied notEquals 0
Operadores aritméticos
Adicionar
O operador de adição ( +
).
Exemplo de DSL
var totalCount = 0
...
totalCount = totalCount + 1
Subtração
O operador de subtração ( -
).
Exemplo de DSL
var countdown = 10
...
countdown = countdown - 1
Multiplicar
O operador de multiplicação ( *
).
Exemplo de DSL
val millis = seconds * 1000
Dividir
O operador de divisão ( /
).
Exemplo de DSL
val rpm = revolutions / minutes
Operadores lógicos
e
Combina duas expressões em uma expressão lógica AND, resultando em true
quando
ambas as expressões são true
.
Expressão 1 | Expressão 2 | Resultado |
---|---|---|
false |
false |
false |
true |
false |
false |
false |
true |
false |
true |
true |
true |
Exemplo de DSL
((device.occupied notEquals 0) and
time.currentTime.between(time.sunriseTime, time.sunsetTime))
não
Nega o valor lógico de uma expressão.
Expressão | Resultado |
---|---|
true |
false |
false |
true |
Exemplo de DSL
time.currentTime not (between(time.sunriseTime, time.sunsetTime))
ou
Combina duas expressões em uma expressão OR lógica.
Expressão 1 | Expressão 2 | Resultado |
---|---|---|
false |
false |
false |
true |
false |
true |
false |
true |
true |
Exemplo de DSL
(time.currentTime equals LocalTime.of(10,0,0,0)) or
(time.currentTime equals LocalTime.of(22,0,0,0))