دليل Android DSL للعمليات المبرمَجة المعقّدة

يمكن استخدام لغة DSL الخاصة بالتشغيل الآلي لإنشاء عمليات تشغيل آلي أكثر تعقيدًا من تلك الموضّحة في دليل لغة DSL - عمليات التشغيل الآلي الأساسية على Android.

متسلسل مع إجراءات متعددة

متسلسل مع إجراءات متعددة

يمكن أن تنفّذ عملية التشغيل الآلي أكثر من إجراء واحد. على سبيل المثال، بدلاً من عقدة action واحدة، يمكنك استخدام عقد action متعددة تعمل بترتيب تسلسلي:

automation {
  sequential {
    starter<_>(...)
    condition {...}
    action {...}
    action {...}
    action {...}
    }
}

تسلسلي مع إجراءات متوازية متعددة

تسلسلي مع إجراءات متوازية متعددة

إذا وضعت عُقد action متعددة في عقدة parallel، سيتم تنفيذ الإجراءات بشكل متزامن.

automation {
  sequential {
    starter<_>(...)
    condition {...}
    parallel {
      action {...}
      action {...}
      action {...}
    }
  }
}

إذا كانت هناك عقد action في العقدة sequential تلي العقدة parallel، تنتظر هذه العقد حتى تنتهي جميع العقد داخل العقدة parallel من التنفيذ.

التأخيرات

يمكنك إدراج فواصل في عمليات التشغيل الآلي باستخدام الكلمة الرئيسية delayFor ، التي تتضمّن وسيطة java.time.Duration تمثّل مدة الإيقاف المؤقت قبل مواصلة التنفيذ. يمكن أن تتراوح مدة الإيقاف المؤقت بين خمس ثوانٍ و24 ساعة.

على سبيل المثال، لتبديل حالة المصباح أربع مرات مع إيقاف مؤقت لمدة خمس ثوانٍ بين كل تبديل، اتّبِع الخطوات التالية:

sequential {
  action(light, OnOffLightDevice) { command(OnOff.toggle()) }
  delayFor(Duration.ofSeconds(5))
  action(light, OnOffLightDevice) { command(OnOff.toggle()) }
  delayFor(Duration.ofSeconds(5))
  action(light, OnOffLightDevice) { command(OnOff.toggle()) }
  delayFor(Duration.ofSeconds(5))
  action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}

إيقاف المشغِّل

إيقاف التشغيل هو إحدى الإمكانات التي تتيح لعملية التشغيل الآلي تجاهل starter لفترة زمنية محدّدة بعد حدث التشغيل الأوّلي. على سبيل المثال، إذا كان التشغيل الآلي يتضمّن starter يتم تشغيله عند رصد حركة، وإذا حدّدت مدة إيقاف التشغيل لمدة خمس دقائق، لن يتم تشغيل starter مرة أخرى خلال الدقائق الخمس التالية. يمنع ذلك الأتمتة من التشغيل السريع بشكل متكرر.

لتطبيق ميزة &quot;منع التكرار&quot; على عملية التشغيل الآلي، استخدِم الكلمة الرئيسية suppressFor مع وسيط java.time.Duration يمثّل مدة الانتظار قبل الاستجابة للمشغّلات اللاحقة. قد تستغرق مدة الحظر خمس ثوانٍ أو 24 ساعة.

automation {
  sequential {
    val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
    suppressFor(Duration.ofMinutes(30))
    action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}

يُرجى العِلم أنّ ميزة إيقاف المشغّلات تؤثر في جميع starters في عملية التشغيل الآلي التي تسبق suppressFor.

تقييد عدد عمليات التنفيذ

يمكنك الحدّ من عدد المرّات المسموح فيها بتنفيذ عملية تلقائية.

على سبيل المثال، قد تريد إعداد عملية تشغيل آلي لمرة واحدة تشغّل المكنسة الكهربائية أثناء غيابك عن المنزل طوال اليوم.

لإجراء ذلك، اضبط حقل البيانات الوصفية الخاص بعملية التشغيل الآلي maxExecutionCount. المثال التالي هو عملية تشغيل آلي يمكن تنفيذها مرة واحدة فقط:

automation {
  // The automation can only be executed once.
  maxExecutionCount = 1
  // When the door lock state changes
  sequential {
    val doorLockEvent = starter<_>(doorLock, DoorLockDevice, LockOperationEvent)
    // if the door is unlocked
    condition() {
      expression = (doorLockEvent.lockOperationType equals LockOperationTypeEnum.Unlock)
    }
    // turn the light on
    action(light, DimmableLightDevice) { command(OnOff.on()) }
  }
}

يتم حذف عملية التشغيل الآلي فورًا بعد اكتمال تنفيذها لآخر مرة والوصول إلى maxExecutionCount. يبقى إدخال سجلّ التشغيل الآلي في علامة التبويب Google Home app (GHA) النشاط، بما في ذلك automation_id.

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

لضبط قيمة سمة السلوك، اتّبِع الخطوات التالية:

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

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

action(device, Fan) {
  update(FanControl) {
    setPercentSetting(50u)
    setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
  }
}