في ما يلي نظرة عامة على المفاهيم الأساسية للغة Automation DSL على Android.
مكوّنات التشغيل الآلي
تتألف عملية الإعداد التلقائي من المكوّنات الأساسية التالية، والتي يتم تقييمها عادةً بهذا الترتيب:
- عنصر التفعيل: يحدّد الشروط الأولية التي تؤدي إلى تفعيل التشغيل الآلي، مثل تغيير إحدى السمات. يجب أن يتضمّن التشغيل الآلي إجراء تفعيل.
- الشرط: أي قيود إضافية يجب تقييمها بعد تفعيل عملية تلقائية. يجب أن يتم تقييم التعبير في الشرط إلى
true
لكي يتم تنفيذ إجراءات عملية التشغيل الآلي. - الإجراء: الأوامر أو تعديلات الحالة التي يتم تنفيذها عند استيفاء جميع الشروط.
على سبيل المثال، قد يكون لديك عملية تشغيل آلي تخفّض إضاءة الغرفة عندما يتم تشغيل التلفزيون فيها بين غروب الشمس وشروقها. في هذا المثال:
- بدء: تم تشغيل التلفزيون، ما يشير إلى تغيير في حالة إحدى سمات التلفزيون.
- الشرط: يتم تقييم الوقت الحالي في المنزل الذي يقع فيه التلفزيون.
- الإجراء: يتم خفض مستوى إضاءة المصابيح في الغرفة نفسها التي يوجد فيها التلفزيون.
سيتم تفعيل عملية التشغيل الآلي عند تشغيل التلفزيون في الغرفة، ولكن لن يتم تنفيذها إلا إذا تم استيفاء شرط "الوقت بين غروب الشمس وشروقها".
بالإضافة إلى البنية الأساسية، تحتوي عمليات التشغيل الآلي في واجهات برمجة التطبيقات الخاصة بمنصة 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
.