Operatory umożliwiają sprawdzanie wartości atrybutów cech pod kątem określonych wartości, porównywanie ich ze sobą i łączenie wyrażeń używanych w węzłach condition
.
Operatory są udostępniane za pomocą tych instrukcji 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
Operatory porównania
pomiędzy
Zwraca wartość true
, gdy wartość wyrażenia 1 mieści się w zakresie wartości wyrażenia 2 i wyrażenia 3 (włącznie). Wyrażenia są klasyfikowane w różny sposób w zależności od typu danych. Proste typy danych, takie jak liczby i ciągi znaków, są klasyfikowane w taki sam sposób jak w Kotlinie.
Wyrażenie 1 | Wyrażenie 2 | Wyrażenie 3 | Wynik |
---|---|---|---|
6 |
1 |
3 |
false |
2 |
1 |
3 |
true |
Przykład DSL
val time = stateReader<_>(structure, Time)
condition() {
expression = time.currentTime
.between(
time.sunsetTime,
time.sunriseTime)
}
Używanie dat z funkcją between()
Używając operatora between()
, możesz określić zakres dat:
val exp2 =
time.currentDate.between(
LocalDate.of(2025, Month.OCTOBER, 1),
LocalDate.of(2025, Month.DECEMBER, 15),
)
Nie musisz jednak podawać pełnych dat. Język DSL automatyzacji umożliwia też wyrażanie zakresu dat na różne sposoby:
- Używając tylko roku i miesiąca:
val exp2 =
time.currentDate.yearMonth.between(
YearMonth.of(2024, Month.OCTOBER),
YearMonth.of(2026, Month.JANUARY),
)
- Używając tylko miesiąca i dnia:
val exp2 =
time.currentDate.monthDay.between(
MonthDay.of(Month.OCTOBER, 1),
MonthDay.of(Month.DECEMBER, 15),
)
- Używając tylko dnia miesiąca:
val exp2 = time.currentDate.day.between(1, 15)
równa się
Zwraca wartość true
, gdy Wyrażenie 1 jest równe Wyrażeniu 2.
Wyrażenie 1 | Wyrażenie 2 | Wynik |
---|---|---|
6 |
1 |
false |
2 |
2 |
true |
Przykład DSL
washer.operationalState equals STOPPED
greaterThan
Zwraca wartość true
, gdy Wyrażenie 1 jest większe niż Wyrażenie 2.
Wyrażenie 1 | Wyrażenie 2 | Wynik |
---|---|---|
6 |
1 |
true |
1 |
6 |
false |
Przykład DSL
( blindsPosition.currentPositionLift greaterThan 0u )
greaterThanOrEquals
Zwraca wartość true
, gdy Wyrażenie 1 jest większe lub równe Wyrażeniu 2.
Wyrażenie 1 | Wyrażenie 2 | Wynik |
---|---|---|
8 |
6 |
true |
6 |
6 |
true |
1 |
6 |
false |
Przykład DSL
( starterNode.measuredValue greaterThanOrEquals 50 )
lessThan
zwraca wartość true
, gdy Wyrażenie 1 jest mniejsze niż Wyrażenie 2.
Wyrażenie 1 | Wyrażenie 2 | Wynik |
---|---|---|
6 |
1 |
false |
1 |
6 |
true |
Przykład DSL
time.currentTime lessThan LocalTime.of(22,0,0,0)
lessThanOrEquals
Zwraca wartość true
, gdy Wyrażenie 1 jest mniejsze lub równe Wyrażeniu 2.
Wyrażenie 1 | Wyrażenie 2 | Wynik |
---|---|---|
8 |
6 |
false |
6 |
6 |
true |
1 |
6 |
true |
Przykład DSL
( starterNode.measuredValue lessThanOrEquals 25 )
notEquals
Zwraca wartość true
, gdy Wyrażenie 1 jest różne od Wyrażenia 2.
Wyrażenie 1 | Wyrażenie 2 | Wynik |
---|---|---|
6 |
1 |
true |
1 |
6 |
true |
2 |
2 |
false |
Przykład DSL
occupancyStateChange.occupied notEquals 0
Operatory arytmetyczne
Dodaj
Operator dodawania ( +
).
Przykład DSL
var totalCount = 0
...
totalCount = totalCount + 1
Odejmowanie
Operator odejmowania ( -
).
Przykład DSL
var countdown = 10
...
countdown = countdown - 1
Mnożenie
Operator mnożenia ( *
).
Przykład DSL
val millis = seconds * 1000
Dzielenie
Operator dzielenia ( /
).
Przykład DSL
val rpm = revolutions / minutes
Operatory logiczne
i
Łączy 2 wyrażenia w wyrażenie logiczne AND, które przyjmuje wartość true
, gdy oba wyrażenia mają wartość true
.
Wyrażenie 1 | Wyrażenie 2 | Wynik |
---|---|---|
false |
false |
false |
true |
false |
false |
false |
true |
false |
true |
true |
true |
Przykład DSL
((device.occupied notEquals 0) and
time.currentTime.between(time.sunriseTime, time.sunsetTime))
nie
Neguje wartość logiczną wyrażenia.
Wyrażenie | Wynik |
---|---|
true |
false |
false |
true |
Przykład DSL
time.currentTime not (between(time.sunriseTime, time.sunsetTime))
lub
Łączy 2 wyrażenia w wyrażenie logiczne OR.
Wyrażenie 1 | Wyrażenie 2 | Wynik |
---|---|---|
false |
false |
false |
true |
false |
true |
false |
true |
true |
Przykład DSL
(time.currentTime equals LocalTime.of(10,0,0,0)) or
(time.currentTime equals LocalTime.of(22,0,0,0))