Gli operatori ti consentono di confrontare il valore degli attributi delle caratteristiche con valori specifici, confrontarli tra loro e combinare le espressioni utilizzate nei nodi condition
.
Gli operatori vengono resi disponibili tramite le seguenti istruzioni 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
Operatori di confronto
tra
Restituisce true
quando il valore di Espressione 1 è compreso tra quello di Espressione
2 ed Espressione 3 (inclusi). Le espressioni vengono classificate in modo diverso a seconda del tipo di dati. I tipi di dati semplici, come numeri e stringhe, vengono classificati
nello stesso modo in cui vengono classificati in Kotlin.
Espressione 1 | Espressione 2 | Espressione 3 | Risultato |
---|---|---|---|
6 |
1 |
3 |
false |
2 |
1 |
3 |
true |
Esempio di DSL
val time = stateReader<_>(structure, Time)
condition() {
expression = time.currentTime
.between(
time.sunsetTime,
time.sunriseTime)
}
Utilizzare le date con between()
Quando utilizzi l'operatore between()
, puoi specificare un intervallo di date:
val exp2 =
time.currentDate.between(
LocalDate.of(2025, Month.OCTOBER, 1),
LocalDate.of(2025, Month.DECEMBER, 15),
)
Tuttavia, non sei limitato alle date complete. La DSL di automazione consente anche di esprimere un intervallo di date in vari modi:
- Utilizzando solo l'anno e il mese:
val exp2 =
time.currentDate.yearMonth.between(
YearMonth.of(2024, Month.OCTOBER),
YearMonth.of(2026, Month.JANUARY),
)
- Utilizzo solo di mese e giorno:
val exp2 =
time.currentDate.monthDay.between(
MonthDay.of(Month.OCTOBER, 1),
MonthDay.of(Month.DECEMBER, 15),
)
- Utilizzando solo il giorno del mese:
val exp2 = time.currentDate.day.between(1, 15)
uguale a
Restituisce true
quando l'espressione 1 è uguale all'espressione 2.
Espressione 1 | Espressione 2 | Risultato |
---|---|---|
6 |
1 |
false |
2 |
2 |
true |
Esempio di DSL
washer.operationalState equals STOPPED
greaterThan
Restituisce true
quando l'espressione 1 è maggiore dell'espressione 2.
Espressione 1 | Espressione 2 | Risultato |
---|---|---|
6 |
1 |
true |
1 |
6 |
false |
Esempio di DSL
( blindsPosition.currentPositionLift greaterThan 0u )
greaterThanOrEquals
Restituisce true
quando l'espressione 1 è maggiore o uguale all'espressione 2.
Espressione 1 | Espressione 2 | Risultato |
---|---|---|
8 |
6 |
true |
6 |
6 |
true |
1 |
6 |
false |
Esempio di DSL
( starterNode.measuredValue greaterThanOrEquals 50 )
lessThan
restituisce true
quando l'espressione 1 è inferiore all'espressione 2.
Espressione 1 | Espressione 2 | Risultato |
---|---|---|
6 |
1 |
false |
1 |
6 |
true |
Esempio di DSL
time.currentTime lessThan LocalTime.of(22,0,0,0)
lessThanOrEquals
Restituisce true
quando l'espressione 1 è minore o uguale all'espressione 2.
Espressione 1 | Espressione 2 | Risultato |
---|---|---|
8 |
6 |
false |
6 |
6 |
true |
1 |
6 |
true |
Esempio di DSL
( starterNode.measuredValue lessThanOrEquals 25 )
notEquals
Restituisce true
quando l'espressione 1 non è uguale all'espressione 2.
Espressione 1 | Espressione 2 | Risultato |
---|---|---|
6 |
1 |
true |
1 |
6 |
true |
2 |
2 |
false |
Esempio di DSL
occupancyStateChange.occupied notEquals 0
Operatori aritmetici
Aggiungi
L'operatore di addizione ( +
).
Esempio di DSL
var totalCount = 0
...
totalCount = totalCount + 1
Sottrazione
L'operatore di sottrazione ( -
).
Esempio di DSL
var countdown = 10
...
countdown = countdown - 1
Moltiplica
L'operatore di moltiplicazione ( *
).
Esempio di DSL
val millis = seconds * 1000
Divisione
L'operatore di divisione ( /
).
Esempio di DSL
val rpm = revolutions / minutes
Operatori logici
e
Combina due espressioni in un'espressione logica AND, che restituisce true
quando
entrambe le espressioni sono true
.
Espressione 1 | Espressione 2 | Risultato |
---|---|---|
false |
false |
false |
true |
false |
false |
false |
true |
false |
true |
true |
true |
Esempio di DSL
((device.occupied notEquals 0) and
time.currentTime.between(time.sunriseTime, time.sunsetTime))
non
Nega il valore logico di un'espressione.
Espressione | Risultato |
---|---|
true |
false |
false |
true |
Esempio di DSL
time.currentTime not (between(time.sunriseTime, time.sunsetTime))
o
Combina due espressioni in un'espressione OR logica.
Espressione 1 | Espressione 2 | Risultato |
---|---|---|
false |
false |
false |
true |
false |
true |
false |
true |
true |
Esempio di DSL
(time.currentTime equals LocalTime.of(10,0,0,0)) or
(time.currentTime equals LocalTime.of(22,0,0,0))