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

يمكن استخدام لغة النطاق الخاصة بالأتمتة لإنشاء عمليات أتمتة أكثر تعقيدًا من تلك التي تمّت مناقشتها في دليل لغة النطاق الخاصة بالأتمتة - عمليات الأتمتة الأساسية على أجهزة 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 تأتي بعد العقدة parallel، تنتظر هذه العقد إلى أن تنتهي جميع العقد داخل العقدة parallel من التنفيذ.

التأخيرات

يمكنك إيقاف عمليات الأتمتة مؤقتًا باستخدام الـ 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 في عملية الأتمتة التي تسبق 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)
  }
}