مفاهيم DSL

إليك نظرة عامة على المفاهيم الأساسية لـ Automation DSL.

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

تتألف العملية المبرمَجة من المكوّنات الأساسية التالية التي يتم تقييمها عادةً بالترتيب التالي:

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

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

  1. Starter (مشغّل): تم تشغيل التلفزيون، ما يشير إلى تغيير في حالة سمة التلفزيون.
  2. الحالة: يتم تقييم الوقت الحالي للمنزل الذي يقع فيه التلفزيون.
  3. الإجراء: يتم تعتيم الأضواء في الغرفة نفسها التي يوجد فيها التلفزيون.

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

بالإضافة إلى البنية الأساسية، تحتوي الإجراءات المبرمَجة في Home APIs أيضًا على data متضمّنة، مثل الاسم والوصف، والتي يمكن استخدامها لتحديد هذه الإجراءات للمطوّرين والمستخدمين.

العُقد

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

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

العقد السلوكية

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

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

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

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

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

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

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

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

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

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

تدفّق الشرط
الشكل 3: تدفّق الحالة

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

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

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

مسارات الإحالة الناجحة المتداخلة

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

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

يمكن تداخل عقد 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.