في ما يلي نظرة عامة على المفاهيم الأساسية للغة Automation DSL على Android.
مكوّنات التشغيل الآلي
تتألف عملية التشغيل الآلي من المكوّنات الأساسية التالية، والتي يتم تقييمها عادةً بهذا الترتيب:
- إجراء التفعيل: يحدّد الشروط الأولية التي تؤدي إلى تفعيل التشغيل الآلي، مثل تغيير إحدى السمات. يجب أن يتضمّن التشغيل الآلي إجراء تفعيل.
- الشرط: أي قيود إضافية يجب تقييمها بعد تفعيل عملية تلقائية. يجب أن يتم تقييم التعبير في الشرط إلى
trueلكي يتم تنفيذ إجراءات التشغيل الآلي. - الإجراء: الأوامر أو تعديلات الحالة التي يتم تنفيذها عند استيفاء جميع الشروط.
على سبيل المثال، قد يكون لديك عملية تشغيل آلي تخفّض إضاءة المصابيح في غرفة معيّنة عندما يتم تشغيل التلفزيون في تلك الغرفة بين غروب الشمس وشروقها. في هذا المثال:
- بدء: تم تشغيل التلفزيون، ما يشكّل تغييرًا في حالة إحدى سمات التلفزيون.
- الشرط: يتم تقييم الوقت الحالي في المنزل الذي يقع فيه التلفزيون.
- الإجراء: يتم خفض مستوى إضاءة المصابيح في الغرفة نفسها التي يوجد فيها التلفزيون.
سيتم تفعيل عملية التشغيل الآلي عند تشغيل التلفزيون في الغرفة، ولكن لن يتم تنفيذها إلا إذا تم استيفاء شرط "الوقت بين غروب الشمس وشروقها".
بالإضافة إلى البنية الأساسية، تحتوي عمليات التشغيل الآلي في واجهات برمجة التطبيقات الخاصة بمنصة Home أيضًا على بيانات وصفية، مثل الاسم والوصف، والتي يمكن استخدامها لتحديدها للمطوّرين والمستخدمين.
العُقد
في واجهات برمجة التطبيقات Home، يتألف البناء المنطقي لعملية التشغيل الآلي من عُقد. العُقد هي وحدات مجرّدة وقابلة لإعادة الاستخدام تمثّل سلوكيات الكيانات أو مسارات التنفيذ. يمكن أن تحتوي كل عقدة على متغيرات إدخال، بالإضافة إلى متغيرات إخراج يمكن أن تستخدمها عقد أخرى.
| العقدة | نوع العُقدة | تنفيذ Kotlin | الوصف |
|---|---|---|---|
| Starter | السلوكية |
StarterNodeDsl
|
يبدأ عملية التشغيل الآلي عندما تتغير حالة سمة (أي سمة). |
| StateReader | السلوكية |
StateReaderNodeDsl
|
تقرأ هذه الوظيفة سمة خاصة بالسمات وتتيح لك تسجيل قيمتها لاستخدامها في عُقد الشروط. |
| الإجراء | السلوكية |
ActionNodeDsl
|
يستدعي أوامر السمة. |
| تسلسلي | مسار التنفيذ |
SequentialFlow
|
تنفيذ عُقد الإجراءات المتداخلة بالتسلسل وهذا هو السلوك التلقائي للتنفيذ. |
| متوازٍ | مسار التنفيذ |
ParallelFlow
|
تنفيذ عُقد الإجراءات المتداخلة بالتوازي |
| الشرط | مسار التنفيذ |
ConditionNodeDsl
|
تغيير مسار التنفيذ بشكل مشروط استنادًا إلى تقييمات التعبيرات المنطقية يمكن ربط الشروط بإجراء تفعيل (شروط خاصة بإجراء التفعيل) أو أن تكون عامة (تنطبق على جميع إجراءات التفعيل). |
| اختيار | مسار التنفيذ |
SelectFlow
|
تسمح بتفعيل عملية التشغيل الآلي من خلال أكثر من إجراء تفعيل واحد. |
| التعبير | القيمة |
Expression
|
يمكن أن تكون قيمة سمة أو ثابتًا أو قيمة حرفية، ويجب أن يتم تقييمها كقائمة أو رقم أو قيمة منطقية أو سلسلة. |
عُقد السلوك
العُقد، مثل إجراءات التفعيل والإجراءات، هي عُقد سلوكية. تفعّل أدوات البدء عملية تشغيل آلي استنادًا إلى تغييرات في سمات الجهاز. تُصدر الإجراءات أوامر للجهاز أو تعدّل سماته.
ترتبط عُقد السلوك عادةً بسمات الجهاز وحالة سمة الإخراج لاستخدامها كمدخل في عُقد أخرى.
عُقد مسار التنفيذ
تمثّل بعض العُقد مسارات التنفيذ، مثل التسلسلية والمتوازية. تحتوي كل عقدة من هذه العُقد على عُقد السلوك التي تحدّد عملية التشغيل الآلي.
على سبيل المثال، قد يحتوي مسار متسلسل على عُقد يتم تنفيذها بترتيب متسلسل. عادةً ما تكون هذه العناصر هي المشغّل والشرط والإجراء.
قد يحتوي التدفق المتوازي على عُقد إجراءات متعددة يتم تنفيذها في الوقت نفسه، مثل تشغيل مصابيح متعددة في الوقت نفسه. لن يتم تنفيذ العُقد التي تتبع مسارًا متوازيًا إلا بعد انتهاء جميع فروع المسار المتوازي.
نوع آخر من مسار التنفيذ هو مسار الشرط، الذي يمكنه تغيير مسار التنفيذ استنادًا إلى تقييم تعبير.
على سبيل المثال، قد يكون لديك عملية تشغيل آلي تنفّذ إجراءً استنادًا إلى ما إذا كان الوقت ليلاً. تعمل عقدة الشرط على التحقّق من الوقت من اليوم، ثم تتّبع مسار التنفيذ المناسب استنادًا إلى هذا التقييم.
يكون مسار التحديد مفيدًا عندما تريد توفير أكثر من
مشغّل واحد يمكنه تفعيل عملية التشغيل الآلي. عند تضمين إجراءَي تفعيل أو أكثر في select تسلسل، يمكن لأي من إجراءات التفعيل بدء التشغيل الآلي.
على سبيل المثال، يمكنك إنشاء عملية تلقائية لخفض الستائر عند غروب الشمس، أو إذا ارتفعت درجة الحرارة فوق حد معيّن، أو إذا تجاوزت درجة السطوع حدًا معيّنًا. تتعامل ثلاثة تطبيقات منفصلة مع كل سيناريو من هذه السيناريوهات، وسيتم تضمين التطبيقات الثلاثة في مسار select.
مهام سير العمل المتداخلة
في عمليات التشغيل الآلي المعقّدة، يمكن أيضًا أن تكون عقد تدفّق التنفيذ متداخلة. على سبيل المثال، قد يكون لديك تسلسل ينفّذ تسلسلاً متوازياً.
يمكن أن تكون عقد DSL متداخلة ومدمجة بطرق مختلفة لتلبية احتياجاتك المحددة، وفقًا للقيود الموضّحة في الجدول التالي. يرتبط عمود "أداة الإنشاء" بمستندات أداة الإنشاء الآمنة من حيث النوع في Kotlin، والتي توضّح بالتفصيل ما يُسمح باستخدامه في كل نوع من أنواع العُقد.
| العقدة | قد يحتوي على نوع العقدة والبيانات التالية | يجب أن يكون ضمن أحد أنواع العُقد التالية |
|---|---|---|
| Starter | التعبير | اختيار "تسلسلي" |
| ManualStarter | اختيار "تسلسلي" | |
| StateReader | تعبير (يتألف عادةً من قيمة سمة مميزة) | الإجراء، الشرط |
| الإجراء | الأمر، الكيان، التعبير | التوازي، والاختيار، والتسلسل |
| تسلسلي | التوازي، والاختيار، والتسلسل | |
| متوازٍ | الإجراء | تسلسلية |
| الشرط | التعبير | متوازٍ، تسلسلي |
| اختيار | Condition وSequential وStarter وManualStarter | متسلسل، ويجب أن يكون العقدة الأولى في التدفق |
Automation DSL
في واجهات برمجة التطبيقات الخاصة بالمنزل الذكي، يتم تحديد عمليات التشغيل الآلي باستخدام لغة Automation DSL (Domain-Specific Language). يتم تنفيذ Automation DSL على شكل Kotlin DSL (لغة خاصة بالنطاق) باستخدام أدوات إنشاء Kotlin الآمنة من حيث النوع، وهي مصمَّمة خصيصًا لتحديد نماذج التشغيل الآلي.
عند تجميع عملية التشغيل الآلي، تنشئ أدوات إنشاء Kotlin الآمنة من حيث النوع فئات بيانات Kotlin يتم بعد ذلك تسلسلها إلى JSON الخاص بمخزن البروتوكولات المؤقتة، ويتم استخدامها لإجراء طلبات إلى "خدمات التشغيل الآلي" من Google.
تسهّل لغة Automation DSL عملية إنشاء عمليات التشغيل الآلي وتبسّطها. تستخدم هذه المنصة بشكلٍ أساسي نموذج البيانات نفسه الذي يتضمّن سمات Matter عادية وسمات smart home واردة في Device API.
تحدّد لغة البرمجة الخاصة بالمجال (DSL) الخاصة بالتشغيل الآلي أيضًا منطق عملية التشغيل الآلي من حيث أنواع الأجهزة المجردة، بدلاً من مثيلات الأجهزة المحددة الموجودة في منزل المستخدم. ويتيح للمطوّر تقديم مَعلمات إدخال يمكن استخدامها في وقت التشغيل لتحديد مثيلات الأجهزة الفعلية، بالإضافة إلى قيم المَعلمات المهمة الأخرى.
يشبه بناء جملة 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.