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 つの式を論理積式で結合します。両方の式が 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))