دليل لغات وصف البيانات (DSL) لنظام التشغيل iOS للإجراءات المبرمَجة المعقدة

يمكن استخدام لغة 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.

ضبط سمات السمات في إجراء

لضبط قيمة سمة سمة:

  1. أنشئ عقدة update داخل عقدة action، مع تضمين السمة ذات الصلة كوسيطة لعقدة update التالية:
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
    
  2. ضمن عقدة update، لكل سمة تريد تعديلها، استخدِم دالة مُعدِّلة وأدخِل إليها القيمة الجديدة. لإنشاء اسم دالة المُعدِّل:
    1. اكتب اسم السمة بأحرف كبيرة.
    2. أضِف البادئة set قبل القيمة.
    على سبيل المثال، لتعديل سمة باسم defaultMoveRate، عليك استخدام دالة مُعدِّلة باسم setDefaultMoveRate.

تجدر الإشارة إلى أنّه يمكن أن تتضمّن عقدة update عدة دوالّ معدِّلة. في ما يلي مثال على تعديل سمتَين:

typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait

action(fan, FanDeviceType.self) {
  update(FanControlTrait.self) {
    $0.setFanMode(.on)
  }
}