يمكن استخدام لغة DSL للحلول البرمجية لإنشاء حلول مبرمَجة أكثر تعقيدًا من تلك التي تمت مناقشتها في دليل DSL: الحلول البرمجية الأساسية على نظام التشغيل iOS.
تسلسلي مع إجراءات متعددة
يمكن أن تُنفِّذ قاعدة التشغيل الآلي أكثر من إجراء واحد. على سبيل المثال، بدلاً من استخدام مثيل واحد من العقدة
action
، يمكنك استخدام عدّة عقد action
يتم تشغيلها بترتيب
تسلسلي:
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
action {...}
action {...}
action {...}
}
تسلسلي مع إجراءات متوازية متعددة
في حال وضعت عدّة عقد action
في عقدة parallel
، يتم تنفيذ الإجراءات
بالتزامن.
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
إذا كانت هناك عقد action
في عقدة sequential
تأتي بعد node
parallel
، تنتظر تنفيذها إلى أن تنتهي جميع العقد ضمن nodeparallel
.
التأخيرات
يمكنك إدراج فترات إيقاف مؤقت في عمليات التشغيل الآلي باستخدام الأسلوب
delay(for:)
،
الذي يأخذ مَعلمة
Duration
تمثّل مدة الإيقاف المؤقت قبل مواصلة التنفيذ. يمكن أن تتراوح مدة التوقف مؤقتًا عن البث بين خمس ثوانٍ و24 ساعة.
على سبيل المثال، لتبديل مصباح أربع مرات مع التوقف لمدة خمس ثوانٍ بين كل عملية تبديل:
typealias OnOffLightDevice = Matter.OnOffLightDeviceType
typealias OnOffTrait = Matter.OnOffTrait
sequential {
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
delay(for:.seconds(5))
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
delay(for:.seconds(5))
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
delay(for:.seconds(5))
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
}
إيقاف العوامل المُشغِّلة
إنّ قمع العوامل المشغِّلة هي ميزة تسمح للتشغيل الآلي بتجاهل
starter
لفترة زمنية محدّدة بعد الحدث المشغِّل الأوّلي. على سبيل المثال، إذا كان الإجراء المبرمَج يتضمّن starter
يتم تشغيله من خلال رصد الحركة،
وإذا حدّدت مدة إيقاف تشغيل المشغّل لمدة خمس دقائق، عند بدء
starter
، لن يتم تشغيله مرة أخرى خلال الدقائق الخمس التالية. ويؤدي ذلك
إلى منع تفعيل الإجراء المبرمَج بشكل متكرّر ومتكرّر.
لتطبيق ميزة "كتم تشغيل المشغّلات" على الإجراء المبرمَج، استخدِم الكلمة الرئيسية
suppress(for:)
مع وسيطة
Duration
التي تمثّل مدة الانتظار قبل الاستجابة للمشغّلات اللاحقة.
يمكن أن تتراوح مدة المنع بين خمس ثوانٍ و24 ساعة.
typealias OccupancySensorDevice = Matter.OccupancySensorDeviceType
typealias OnOffLightDevice = Matter.OnOffLightDeviceType
typealias MotionDetectionTrait = Google.MotionDetectionTrait
typealias OnOffTrait = Matter.OnOffTrait
automation {
let starterNode = starter(device, OccupancySensorDevice.self, MotionDetectionTrait.self)
starterNode
suppress(for: .seconds(30 * 60) // 30 minutes
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
}
يُرجى العلم أنّ إخفاء المشغّل يؤثر في جميع starters
في عملية التشغيل الآلي التي preceded the Suppression
.
ضبط سمات السمات في إجراء
لضبط قيمة سمة سمة:
- أنشئ عقدة
update
داخل عقدةaction
، مع تضمين السمة ذات الصلة كوسيطة لعقدةupdate
التالية:action(deviceReference, deviceType) { update(trait) { } }
- ضمن عقدة
update
، لكل سمة تريد تعديلها، استخدِم دالة مُعدِّلة وأدخِل إليها القيمة الجديدة. لإنشاء اسم دالة المُعدِّل:- اكتب اسم السمة بأحرف كبيرة.
- أضِف البادئة
set
قبل القيمة.
defaultMoveRate
، عليك استخدام دالة مُعدِّلة باسمsetDefaultMoveRate
.
تجدر الإشارة إلى أنّه يمكن أن تتضمّن عقدة update
عدة دوالّ معدِّلة. في ما يلي مثال
على تعديل سمتَين:
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}