Operatörler, özellik özelliklerinin değerini belirli değerlere göre kontrol etmenize, bunları birbiriyle karşılaştırmanıza ve condition
düğümlerinde kullanılan ifadeleri birleştirmenize olanak tanır.
Operatörler aşağıdaki import
ifadeleriyle kullanılabilir:
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
Karşılaştırma operatörleri
arasında
İfade 1'in değeri, İfade 2 ile İfade 3'ün değeri arasında (bu değerler dahil) olduğunda true
sonucunu verir. İfadeler, veri türlerine göre farklı şekilde sıralanır. Sayılar ve dizeler gibi basit veri türleri, Kotlin'deki gibi sıralanır.
İfade 1 | İfade 2 | Expression 3 | Sonuç |
---|---|---|---|
6 |
1 |
3 |
false |
2 |
1 |
3 |
true |
DSL örneği
val time = stateReader<_>(structure, Time)
condition() {
expression = time.currentTime
.between(
time.sunsetTime,
time.sunriseTime)
}
between() ile tarihleri kullanma
between()
operatörünü kullanırken bir tarih aralığı belirtebilirsiniz:
val exp2 =
time.currentDate.between(
LocalDate.of(2025, Month.OCTOBER, 1),
LocalDate.of(2025, Month.DECEMBER, 15),
)
Ancak tam tarihlerle sınırlı değilsiniz. Otomasyon DSL'si, tarih aralığını çeşitli şekillerde ifade etmenize de olanak tanır:
- Yalnızca yıl ve ay kullanma:
val exp2 =
time.currentDate.yearMonth.between(
YearMonth.of(2024, Month.OCTOBER),
YearMonth.of(2026, Month.JANUARY),
)
- Yalnızca ay ve günü kullanarak:
val exp2 =
time.currentDate.monthDay.between(
MonthDay.of(Month.OCTOBER, 1),
MonthDay.of(Month.DECEMBER, 15),
)
- Yalnızca ayın gününü kullanma:
val exp2 = time.currentDate.day.between(1, 15)
equals
İfade 1, İfade 2'ye eşit olduğunda true
sonucunu verir.
İfade 1 | İfade 2 | Sonuç |
---|---|---|
6 |
1 |
false |
2 |
2 |
true |
DSL örneği
washer.operationalState equals STOPPED
greaterThan
İfade 1, İfade 2'den büyük olduğunda true
değerini döndürür.
İfade 1 | İfade 2 | Sonuç |
---|---|---|
6 |
1 |
true |
1 |
6 |
false |
DSL örneği
( blindsPosition.currentPositionLift greaterThan 0u )
greaterThanOrEquals
İfade 1, İfade 2'den büyük veya ona eşit olduğunda true
sonucunu verir.
İfade 1 | İfade 2 | Sonuç |
---|---|---|
8 |
6 |
true |
6 |
6 |
true |
1 |
6 |
false |
DSL örneği
( starterNode.measuredValue greaterThanOrEquals 50 )
lessThan
İfade 1, İfade 2'den küçük olduğunda true
değerini verir.
İfade 1 | İfade 2 | Sonuç |
---|---|---|
6 |
1 |
false |
1 |
6 |
true |
DSL örneği
time.currentTime lessThan LocalTime.of(22,0,0,0)
lessThanOrEquals
İfade 1, İfade 2'den küçük veya ona eşit olduğunda true
değerini verir.
İfade 1 | İfade 2 | Sonuç |
---|---|---|
8 |
6 |
false |
6 |
6 |
true |
1 |
6 |
true |
DSL örneği
( starterNode.measuredValue lessThanOrEquals 25 )
notEquals
İfade 1, İfade 2'ye eşit olmadığında true
sonucunu verir.
İfade 1 | İfade 2 | Sonuç |
---|---|---|
6 |
1 |
true |
1 |
6 |
true |
2 |
2 |
false |
DSL örneği
occupancyStateChange.occupied notEquals 0
Aritmetik operatörler
Ekle
Toplama operatörü ( +
).
DSL örneği
var totalCount = 0
...
totalCount = totalCount + 1
Çıkarma
Çıkarma operatörü ( -
).
DSL örneği
var countdown = 10
...
countdown = countdown - 1
Çarpma
Çarpma operatörü ( *
).
DSL örneği
val millis = seconds * 1000
Bölme
Bölme operatörü ( /
).
DSL örneği
val rpm = revolutions / minutes
Mantıksal operatörler
ve
İki ifadeyi mantıksal AND ifadesinde birleştirir. İki ifade de true
olduğunda true
değerini verir.
İfade 1 | İfade 2 | Sonuç |
---|---|---|
false |
false |
false |
true |
false |
false |
false |
true |
false |
true |
true |
true |
DSL örneği
((device.occupied notEquals 0) and
time.currentTime.between(time.sunriseTime, time.sunsetTime))
değil
Bir ifadenin mantıksal değerini olumsuzlar.
İfade | Sonuç |
---|---|
true |
false |
false |
true |
DSL örneği
time.currentTime not (between(time.sunriseTime, time.sunsetTime))
veya
İki ifadeyi mantıksal BİLEŞİK VEYA ifadesinde birleştirir.
İfade 1 | İfade 2 | Sonuç |
---|---|---|
false |
false |
false |
true |
false |
true |
false |
true |
true |
DSL örneği
(time.currentTime equals LocalTime.of(10,0,0,0)) or
(time.currentTime equals LocalTime.of(22,0,0,0))