Android DSL 演算子リファレンス

演算子を使用すると、特性属性の値を特定の値と照らし合わせて確認したり、互いに比較したり、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))