في ما يلي نظرة عامة على المفاهيم الأساسية للغة Automation DSL على Android.
مكوّنات التشغيل الآلي
تتألف عملية التشغيل الآلي من المكوّنات الأساسية التالية، والتي يتم تقييمها عادةً بهذا الترتيب:
- إجراء التفعيل: يحدّد الشروط الأولية التي تؤدي إلى تفعيل عملية التشغيل الآلي، مثل تغيير إحدى السمات. يجب أن يتضمّن التشغيل الآلي إجراء تفعيل.
- الشرط: أي قيود إضافية يجب تقييمها بعد تفعيل عملية تلقائية. يجب أن يتم تقييم التعبير في "الشرط" إلى
trueلكي يتم تنفيذ إجراءات عملية التشغيل الآلي. - الإجراء: الأوامر أو تعديلات الحالة التي يتم تنفيذها عند استيفاء جميع الشروط.
على سبيل المثال، قد يكون لديك عملية تشغيل آلي تخفّض إضاءة الغرفة عندما يتم تشغيل التلفزيون فيها بين غروب الشمس وشروقها. في هذا المثال:
- المبتدئ: تم تشغيل التلفزيون، ما يشكّل تغييرًا في حالة سمة التلفزيون.
- الشرط: يتم تقييم الوقت الحالي في المنزل الذي يقع فيه التلفزيون.
- الإجراء: يتم خفض مستوى إضاءة المصابيح في الغرفة نفسها التي يوجد فيها التلفزيون.
سيتم تفعيل عملية التشغيل الآلي عند تشغيل التلفزيون في الغرفة، ولكن لن يتم تنفيذها إلا إذا تم استيفاء شرط "الوقت بين غروب الشمس وشروقها".
بالإضافة إلى البنية الأساسية، تحتوي عمليات التشغيل الآلي في واجهات برمجة التطبيقات الخاصة بمنصة Home على بيانات وصفية، مثل الاسم والوصف، والتي يمكن استخدامها لتحديدها للمطوّرين والمستخدمين.
العُقد
في واجهات برمجة التطبيقات Home APIs، يتألف البنية المنطقية لعملية التشغيل الآلي من عُقد. العُقد هي وحدات مجرّدة وقابلة لإعادة الاستخدام تمثّل سلوكيات الكيانات أو مسارات التنفيذ. يمكن أن تحتوي كل عقدة على متغيرات إدخال، بالإضافة إلى متغيرات إخراج يمكن أن تستهلكها عقد أخرى.
| العقدة | نوع العُقدة | تنفيذ 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 (لغة خاصة بالمجال). يتم تنفيذ لغة DSL الخاصة بالأتمتة على أنّها لغة DSL (لغة خاصة بالنطاق) في Kotlin باستخدام أدوات إنشاء آمنة الأنواع في Kotlin، وهي مصمَّمة خصيصًا لتحديد نماذج الأتمتة.
عند تجميع عملية تشغيل آلي، تنشئ أدوات إنشاء Kotlin الآمنة من حيث النوع فئات بيانات Kotlin يتم بعد ذلك تسلسلها إلى JSON الخاص ببروتوكول المخزن المؤقت، والذي يُستخدَم لإجراء طلبات إلى "خدمات التشغيل الآلي" من Google.
تسهّل لغة Automation DSL عملية إنشاء عمليات التشغيل الآلي وتبسّطها. تستخدِم هذه الخدمة بشكلٍ أصلي نموذج البيانات نفسه الذي يتضمّن سمات Matter عادية وسمات smart home واردة في Device API.
تحدّد لغة Automation 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.