iOS DSL operator reference

Operators allow you to check the value of trait attributes against specific values, compare them to one another, and to combine expressions used in condition nodes.

Operators are made available through the following import statements:

import GoogleHomeSDK

Comparison operators

between

Evaluates to true when the value of Expression 1 is between that of Expression 2 and Expression 3 (inclusive). Expressions are ranked differently depending on their data type. Simple data types such as numbers and strings are ranked the same way they are in Swift.

Example
Expression 1 Expression 2 Expression 3 Result
6 1 3 false
2 1 3 true

DSL example

let time = stateReader(structure, Google.TimeTrait)
condition {
  time.currentTime
     .between(
      time.sunsetTime,
      time.sunriseTime)
}

equals

Evaluates to true when the Expression 1 equals Expression 2.

Example
Expression 1 Expression 2 Result
6 1 false
2 2 true

DSL example

lightOnOffState.onOff.equals(true)

greaterThan

Evaluates to true when the Expression 1 is greater than Expression 2.

Example
Expression 1 Expression 2 Result
6 1 true
1 6 false

DSL example

// 1555 = 15 degrees C ~ 60 degrees F
temperatureMeasurement.measuredValue.greaterThan(1555)

greaterThanOrEquals

Evaluates to true when the Expression 1 is greater than or equal to Expression 2.

Example
Expression 1 Expression 2 Result
8 6 true
6 6 true
1 6 false

DSL example

starterNode.measuredValue.greaterThanOrEquals(50)

lessThan

evaluates to true when the Expression 1 is less than Expression 2.

Example
Expression 1 Expression 2 Result
6 1 false
1 6 true

DSL example

// 1555 = 15 degrees C ~ 60 degrees F
temperatureMeasurement.measuredValue.lessThan(1555)

lessThanOrEquals

Evaluates to true when the Expression 1 is less than or equal to Expression 2.

Example
Expression 1 Expression 2 Result
8 6 false
6 6 true
1 6 true

DSL example

starterNode.measuredValue.lessThanOrEquals(50)

notEquals

Evaluates to true when the Expression 1 is not equal to Expression 2.

Example
Expression 1 Expression 2 Result
6 1 true
1 6 true
2 2 false

DSL example

occupancySensorStarter.occupancy.notEquals(.occupied)

Arithmetic operators

Infix operators such as +, -, *, or / are not supported for building automation expressions in Swift. Instead, use the operators provided by the SDK, such as Plus or Minus.

Add

The addition operator .plus( ).

DSL example

var totalCount = 0
...
totalCount = totalCount.plus(1)

Subtract

The subtraction operator .minus( ).

DSL example

var countdown = 10
...
countdown = countdown.minus(1)

Multiply

The multiplication operator .multiply( ).

DSL example

val millis = seconds.multiply(1000)

Divide

The division operator .divide( ).

DSL example

val rpm = revolutions.divide(minutes)

Logical operators

and

Combines two expressions in a logical AND expression, evaluating to true when both expressions are true.

Example
Expression 1 Expression 2 Result
false false false
true false false
false true false
true true true

DSL example

condition {
  let exp1 = armState.armState
  let exp2 = doorLockState.lockState
  exp1.and(exp2)
}

not

Negates the logical value of an expression.

Example
Expression Result
true false
false true

DSL example

condition {
  let exp1 = armState.armState
  let exp2 = doorLockState.lockState
  exp1.and(exp2.not())
}

or

Combines two expressions into a logical OR expression.

Example
Expression 1 Expression 2 Result
false false false
true false true
false true true

DSL example

condition {
  let exp1 = doorLockState.lockState.equals(.unlocked)
  let exp2 = contactSensorState.stateValue.equals(false)
  exp1.or(exp2)
}