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