تتيح لك عوامل التشغيل التحقّق من قيمة سمات السمات مقابل قيم
محدّدة، ومقارنتها ببعضها البعض، ودمج التعبيرات المستخدَمة في
عُقد 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 عندما تكون قيمة التعبير 1 بين قيمة التعبير 2 والتعبير 3 (ضمنًا). يتم ترتيب التعبيرات بشكل مختلف اعتمادًا على
نوع البيانات الخاص بها. يتم ترتيب أنواع البيانات البسيطة، مثل الأرقام والسلاسل،
بالطريقة نفسها المتّبعة في Kotlin.
| التعبير 1 | التعبير 2 | Expression 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),
)
ومع ذلك، لا تقتصر على التواريخ الكاملة. تتيح لك لغة 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)
يساوي
يتم تقييمها على أنّها true عندما يساوي "التعبير 1" "التعبير 2".
| التعبير 1 | التعبير 2 | النتيجة |
|---|---|---|
6 |
1 |
false |
2 |
2 |
true |
مثال على DSL
washer.operationalState equals STOPPED
greaterThan
يتم تقييمها على أنّها true عندما يكون التعبير 1 أكبر من التعبير 2.
| التعبير 1 | التعبير 2 | النتيجة |
|---|---|---|
6 |
1 |
true |
1 |
6 |
false |
مثال على DSL
( blindsPosition.currentPositionLift greaterThan 0u )
greaterThanOrEquals
يتم تقييمها على أنّها true عندما يكون التعبير 1 أكبر من أو يساوي التعبير 2.
| التعبير 1 | التعبير 2 | النتيجة |
|---|---|---|
8 |
6 |
true |
6 |
6 |
true |
1 |
6 |
false |
مثال على DSL
( starterNode.measuredValue greaterThanOrEquals 50 )
lessThan
يتم تقييمها على أنّها true عندما يكون "التعبير 1" أقل من "التعبير 2".
| التعبير 1 | التعبير 2 | النتيجة |
|---|---|---|
6 |
1 |
false |
1 |
6 |
true |
مثال على DSL
time.currentTime lessThan LocalTime.of(22,0,0,0)
lessThanOrEquals
يتم تقييمها على أنّها true عندما يكون التعبير 1 أقل من أو يساوي التعبير 2.
| التعبير 1 | التعبير 2 | النتيجة |
|---|---|---|
8 |
6 |
false |
6 |
6 |
true |
1 |
6 |
true |
مثال على DSL
( starterNode.measuredValue lessThanOrEquals 25 )
notEquals
يتم تقييمها على أنّها true عندما لا يساوي التعبير 1 التعبير 2.
| التعبير 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
العوامل المنطقية
و
تجمع هذه الدالة بين تعبيرَين في تعبير 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))
أو
تجمع بين تعبيرَين في تعبير منطقي 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))