دليل لغات وصف البيانات (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)
  }
}