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