مفاهيم DSL في Android

في ما يلي نظرة عامة على المفاهيم الأساسية للغة Automation DSL على Android.

مكوّنات التشغيل الآلي

تتألف عملية التشغيل الآلي من المكوّنات الأساسية التالية، والتي يتم تقييمها عادةً بهذا الترتيب:

  1. إجراء التفعيل: يحدّد الشروط الأولية التي تؤدي إلى تفعيل التشغيل الآلي، مثل تغيير إحدى السمات. يجب أن يتضمّن التشغيل الآلي إجراء تفعيل.
  2. الشرط: أي قيود إضافية يجب تقييمها بعد تفعيل التشغيل الآلي. يجب أن يتم تقييم التعبير في الشرط إلى true لكي يتم تنفيذ إجراءات عملية التشغيل الآلي.
  3. الإجراء: الأوامر أو تعديلات الحالة التي يتم تنفيذها عند استيفاء جميع الشروط.

على سبيل المثال، قد تكون لديك عملية تشغيل آلي تخفّض إضاءة الغرفة عندما يتم تشغيل التلفزيون فيها بين غروب الشمس وشروقها. في هذا المثال:

  1. إجراء التفعيل: تم تشغيل التلفزيون، ما يشكّل تغييرًا في حالة إحدى سمات التلفزيون.
  2. الشرط: يتم تقييم الوقت الحالي في المنزل الذي يقع فيه التلفزيون.
  3. الإجراء: يتم خفض مستوى إضاءة المصابيح في الغرفة نفسها التي يوجد فيها التلفزيون.

سيتم تفعيل عملية التشغيل الآلي عند تشغيل التلفزيون في الغرفة، ولكن لن يتم تنفيذها إلا إذا تم استيفاء شرط "الوقت بين غروب الشمس وشروقها".

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

العُقد

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

الجدول: أنواع عُقد التشغيل الآلي
العقدة نوع العُقدة تنفيذ Kotlin الوصف
Starter السلوكية StarterNodeDsl يبدأ عملية التشغيل الآلي عندما تتغير حالة سمة (أي سمة).
StateReader السلوكية StateReaderNodeDsl تقرأ هذه السمة سمة سمة وتتيح لك تسجيل قيمتها لاستخدامها في عُقد الشرط.
الإجراء السلوكية ActionNodeDsl يستدعي أوامر السمة.
تسلسلي مسار التنفيذ SequentialFlow تنفيذ عقد إجراءات متداخلة بالتسلسل وهذا هو السلوك التلقائي للتنفيذ.
متوازٍ مسار التنفيذ ParallelFlow ينفّذ عقد الإجراءات المتداخلة بالتوازي.
الشرط مسار التنفيذ ConditionNodeDsl تغيير مسار التنفيذ بشكل مشروط استنادًا إلى تقييمات التعبيرات المنطقية قد تكون الشروط مرتبطة بإجراء تفعيل (شروط خاصة بإجراء التفعيل) أو تكون عامة (تنطبق على جميع إجراءات التفعيل).
اختيار مسار التنفيذ SelectFlow يسمح بتفعيل التشغيل الآلي من خلال أكثر من إجراء تفعيل واحد.
التعبير القيمة Expression يمكن أن تكون قيمة سمة أو ثابتًا أو قيمة حرفية، ويجب أن يتم تقييمها إلى قائمة أو رقم أو قيمة منطقية أو سلسلة.

عُقد السلوك

العُقد، مثل إجراءات التفعيل والإجراءات، هي عُقد سلوكية. تفعّل أدوات البدء عملية تشغيل آلي استنادًا إلى تغييرات في سمات الجهاز. تُصدر الإجراءات أوامر إلى الجهاز أو تعدّل سماته.

ترتبط عُقد السلوك عادةً بسمات الجهاز وحالة سمة الإخراج لاستخدامها كمدخلات في عُقد أخرى.

عُقد سير التنفيذ

تمثّل بعض العُقد مسارات التنفيذ، مثل التسلسلية والمتوازية. تحتوي كل عقدة من هذه العُقد على عُقد السلوك التي تحدّد عملية التشغيل الآلي.

على سبيل المثال، قد يحتوي مسار متسلسل على عُقد يتم تنفيذها بترتيب متسلسل. عادةً ما تكون هذه العناصر هي إجراء التفعيل والشرط والإجراء.

مسارات التنفيذ التسلسلي
الشكل 1: مسار التشغيل التلقائي التسلسلي

قد يحتوي التدفق المتوازي على عُقد إجراءات متعددة يتم تنفيذها في الوقت نفسه، مثل تشغيل مصابيح متعددة في الوقت نفسه. لن يتم تنفيذ العُقد التي تتّبع مسارًا متوازيًا إلا بعد انتهاء جميع فروع المسار المتوازي.

مهام سير التنفيذ المتوازية
الشكل 2: مسار التشغيل الآلي المتوازي

نوع آخر من مسار التنفيذ هو مسار الشرط، والذي يمكنه تغيير مسار التنفيذ استنادًا إلى تقييم تعبير.

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

سير العمل الشرطي
الشكل 3: مسار الشرط

يكون مسار التحديد مفيدًا عندما تريد أن يكون لديك أكثر من إجراء تفعيل واحد يمكنه تفعيل عملية التشغيل الآلي. عند تضمين إجراءَي تفعيل أو أكثر في select تسلسل، يمكن لأي من إجراءات التفعيل بدء التشغيل الآلي.

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

اختيار المسار
الشكل 4: اختيار مسار

مسارات المستخدمين المتداخلة

في عمليات التشغيل الآلي المعقّدة، يمكن أيضًا أن تكون عقد تدفّق التنفيذ متداخلة. على سبيل المثال، قد يكون لديك تسلسل ينفّذ تسلسلاً متوازياً.

تسلسلات التنفيذ المتداخلة
الشكل 5: مسارات التنفيذ المتداخلة

يمكن أن تكون عقد DSL متداخلة ومدمجة بطرق مختلفة لتلبية احتياجاتك المحددة، وفقًا للقيود الموضّحة في الجدول التالي. يرتبط عمود "أداة الإنشاء" بمستندات أداة الإنشاء الآمنة من حيث النوع في Kotlin، والتي توضّح بالتفصيل ما يُسمح باستخدامه في كل نوع من أنواع العُقد.

جدول: كيفية دمج العُقد
العقدة قد يحتوي على نوع العُقدة والبيانات التالية يجب أن يكون ضمن أحد أنواع العُقد التالية
Starter التعبير اختيار، تسلسلي
ManualStarter اختيار، تسلسلي
StateReader تعبير (يتألف عادةً من قيمة سمة مميزة) الإجراء، الشرط
الإجراء الأمر والكيان والتعبير التوازي، والاختيار، والتسلسل
تسلسلي التوازي، والاختيار، والتسلسل
متوازٍ الإجراء تسلسلية
الشرط التعبير متوازٍ، تسلسلي
اختيار Condition وSequential وStarter وManualStarter متسلسل، ويجب أن يكون العقدة الأولى في التدفق

Automation DSL

في واجهات برمجة التطبيقات الخاصة بالمنزل الذكي، يتم تحديد عمليات التشغيل الآلي باستخدام Automation DSL (لغة خاصة بالمجال). يتم تنفيذ لغة DSL الخاصة بالتشغيل الآلي على أنّها لغة DSL (لغة خاصة بالنطاق) في Kotlin، وذلك باستخدام أدوات إنشاء Kotlin الآمنة من حيث النوع، وهي مصمَّمة خصيصًا لتحديد النماذج الخاصة بالتشغيل الآلي.

عند تجميع عملية التشغيل الآلي، تنشئ أدوات إنشاء Kotlin الآمنة من حيث النوع فئات بيانات Kotlin يتم بعد ذلك تسلسلها إلى JSON الخاص بـ Protocol Buffers، والذي يُستخدَم لإجراء طلبات إلى "خدمات التشغيل الآلي" من Google.

تُبسّط لغة Automation DSL عملية إنشاء عمليات التشغيل الآلي وتجعلها أكثر سلاسة. تستخدم هذه المنصة بشكلٍ أساسي نموذج البيانات نفسه الذي يتضمّن سمات Matter عادية وسمات smart home واردة في Device API.

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

يشبه بناء جملة DSL بناء جملة Kotlin، وهو آمن من حيث النوع، ولكنّ عملية التشغيل الآلي المكتوبة بلغة Automation DSL تكون أبسط وأكثر إيجازًا من عملية التشغيل الآلي نفسها المكتوبة بلغة Kotlin.

مثال

في ما يلي مثال على عملية تشغيل تلقائية لجهاز، مكتوبة باستخدام Automation DSL:

val automation = automation {
  name = "MyFirstAutomation"
  description = "If light1 is on, turn on light2."
  isActive = true
  sequential {
    val onOffTrait = starter<_>(device1, OnOffLightDevice, OnOff)
    condition() { expression = onOffTrait.onOff equals true }
    action(device2, OnOffLightDevice) { command(OnOff.on()) }
  }
}

عملية التشغيل الآلي هذه بسيطة جدًا: عندما يتم تشغيل device1، وهو مصباح، (تتغير السمة onOff إلى true)، يتم إرسال الأمر on() لتشغيل device2.

تستخدِم عملية التشغيل الآلي عقدة sequential، ما يشير إلى أنّ العُقد سيتم تشغيلها بترتيب تسلسلي.

ضمن عقدة sequential، توجد عقد سلوكية مثل starter وcondition وaction. يتم تعيين ناتج العقدة starter إلى متغيّر لاستخدامه في العقدة condition.