مرجع عامل 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

عملگرهای مقایسه

بین

وقتی مقدار «عبارت ۱» بین مقدار «عبارت ۲» و «عبارت ۳» (شامل این دو مقدار) باشد، به true ارزیابی می‌شود. عبارات براساس نوع داده آن‌ها رتبه‌بندی متفاوتی دارند. انواع داده ساده مثل اعداد و رشته‌ها به همان روشی که در Kotlin رتبه‌بندی می‌شوند رتبه‌بندی می‌شوند.

مثال
بیان ۱ حالت چهره ۲ بیان ۳ نتیجه
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),
  )

بااین‌حال، شما محدود به تاریخ‌های کامل نیستید. «زبان نشانه‌گذاری خودکارسازی» همچنین به شما امکان می‌دهد محدوده تاریخ‌ها را به روش‌های مختلف بیان کنید:

  • فقط بااستفاده از سال و ماه:
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)

مساوی

وقتی «عبارت ۱» با «عبارت ۲» برابر باشد، به true ارزیابی می‌شود.

مثال
بیان ۱ حالت چهره ۲ نتیجه
6 1 false
2 2 true

نمونه DSL

washer.operationalState equals STOPPED

greaterThan

وقتی «عبارت ۱» بزرگ‌تر از «عبارت ۲» باشد، به true ارزیابی می‌شود.

مثال
بیان ۱ حالت چهره ۲ نتیجه
6 1 true
1 6 false

نمونه DSL

( blindsPosition.currentPositionLift greaterThan 0u )

greaterThanOrEquals

وقتی «عبارت ۱» بزرگ‌تر یا مساوی «عبارت ۲» باشد، به true ارزیابی می‌شود.

مثال
بیان ۱ حالت چهره ۲ نتیجه
8 6 true
6 6 true
1 6 false

نمونه DSL

( starterNode.measuredValue greaterThanOrEquals 50 )

lessThan

وقتی «عبارت ۱» کمتر از «عبارت ۲» باشد، به true ارزیابی می‌شود.

مثال
بیان ۱ حالت چهره ۲ نتیجه
6 1 false
1 6 true

نمونه DSL

time.currentTime lessThan LocalTime.of(22,0,0,0)

lessThanOrEquals

وقتی «عبارت ۱» کمتر یا مساوی «عبارت ۲» باشد، به true ارزیابی می‌شود.

مثال
بیان ۱ حالت چهره ۲ نتیجه
8 6 false
6 6 true
1 6 true

نمونه DSL

( starterNode.measuredValue lessThanOrEquals 25 )

notEquals

وقتی «عبارت ۱» با «عبارت ۲» برابر نباشد، به true ارزیابی می‌شود.

مثال
بیان ۱ حالت چهره ۲ نتیجه
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

عملگرهای منطقی

و

دو عبارت را در عبارت منطقی «و» ترکیب می‌کند و وقتی هر دو عبارت true باشند، به true ارزیابی می‌شود.

مثال
بیان ۱ حالت چهره ۲ نتیجه
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))

یا

دو عبارت را در عبارت «یا» منطقی ترکیب می‌کند.

مثال
بیان ۱ حالت چهره ۲ نتیجه
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))