演算子を使用すると、特性属性の値を特定の値と照合したり、特性属性の値を互いに比較したり、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
比較演算子
次の間にある
式 1 の値が式 2 と式 3 の値の間(両端の値を含む)の場合、true を返します。式は、データ型に応じて異なる方法でランク付けされます。数値や文字列などの単純なデータ型は、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)
等号
式 1 が式 2 と等しい場合に true と評価されます。
| 式 1 | 式 2 | 結果 | 
|---|---|---|
| 6 | 1 | false | 
| 2 | 2 | true | 
DSL の例
washer.operationalState equals STOPPED
greaterThan
式 1 が式 2 より大きい場合は、true と評価されます。
| 式 1 | 式 2 | 結果 | 
|---|---|---|
| 6 | 1 | true | 
| 1 | 6 | false | 
DSL の例
( blindsPosition.currentPositionLift greaterThan 0u )
greaterThanOrEquals
式 1 が式 2 以上の場合、true を返します。
| 式 1 | 式 2 | 結果 | 
|---|---|---|
| 8 | 6 | true | 
| 6 | 6 | true | 
| 1 | 6 | false | 
DSL の例
( starterNode.measuredValue greaterThanOrEquals 50 )
lessThan
式 1 が式 2 より小さい場合は true と評価されます。
| 式 1 | 式 2 | 結果 | 
|---|---|---|
| 6 | 1 | false | 
| 1 | 6 | true | 
DSL の例
time.currentTime lessThan LocalTime.of(22,0,0,0)
lessThanOrEquals
式 1 が式 2 以下の場合、true を返します。
| 式 1 | 式 2 | 結果 | 
|---|---|---|
| 8 | 6 | false | 
| 6 | 6 | true | 
| 1 | 6 | true | 
DSL の例
( starterNode.measuredValue lessThanOrEquals 25 )
notEquals
式 1 が式 2 と等しくない場合に true と評価されます。
| 式 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
論理演算子
と
2 つの式を論理 AND 式で結合します。両方の式が 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))
または
2 つの式を論理 OR 式に結合します。
| 式 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))