فهم YAML
YAML هي لغة شائعة تُستخدم لتحديد تهيئة البرامج. يوفر طريقة واضحة ويسهل على الإنسان قراءتها لتمثيل المعلومات المهيكلة. إليك بعض الأشياء الأساسية التي تحتاج إلى فهمها حول YAML قبل إنشاء أول أتمتة نصية. للحصول على مزيد من المعلومات حول YAML بشكل عام، يمكنك الاطّلاع على مواصفات الإصدار 1.1.
أزواج المفتاح/القيمة
مستندات YAML هي في الأساس مجموعة من أزواج المفتاح/القيمة. في المثال التالي، المفتاح هو name
والقيمة هي TV on lights off
. يتم الفصل بين المفتاح والقيمة
بنقطتين تليها مسافة. كلا الحرفين مطلوبان
لملفات YAML الصحيحة.
name: TV on lights off
القيم
يمكن أن تكون القيمة المرتبطة بمفتاح أساسية كسلسلة أو رقم أو تاريخ، أو معقدة مثل مجموعة أخرى من أزواج المفتاح/القيمة.
السلاسل
إذا كانت قيمة سلسلة تبدأ بأحد الأحرف التالية: [
أو {
أو "
'
أو #
، أو كانت السلسلة تحتوي على :
(نقطتان متبوعة بمسافات)، يجب
اقتباسها.
يتم قبول كل من علامتَي الاقتباس المفردة والمزدوجة، لكن علامة الاقتباس يجب أن تتطابق مع علامة الاقتباس الافتتاحية.
اقتباس صحيح:
name: 'TV on lights off'
name: "TV on lights off"
اقتباس غير صحيح (اقتباسات غير متطابقة):
name: 'TV on lights off"
علامات الاقتباس اختيارية لجميع أنواع السلاسل الأخرى.
إذا كنت بحاجة إلى سلسلة متعدّدة الأسطر، يُرجى الاطّلاع على قسم مواصفات YAML حول الكميات المتعددة الأسطر.
name: "[1] TV"
name: '{1} TV'
name: '#TV'
name: '"1" TV'
name: "'1' TV"
name: "\"1\" TV"
name: "TV: bedroom"
أزواج المفتاح/القيمة المُدمجة
في ما يلي قيمة المفتاح metadata
في قائمة بزوجين من المفاتيح/القيمة (name
وdescription
):
metadata:
name: TV on lights off
description: Turn off lights when TV turns on
المسافة البادئة
يستخدم YAML المسافة البادئة للدلالة على الهيكل. في المثال السابق، تم وضع مسافة بادئة (بمسافتين) للسمتَين name
وdescription
للإشارة إلى أنّ هذين العنصرَين
هو العناصر الثانوية للمفتاح metadata
.
المسافة البادئة صارمة في YAML. يجب أن تحتوي البنية الفرعية على مسافة بادئة أعمق من الأصل، ويجب أن تحتوي أزواج المفتاح/القيمة ذات المستوى نفسه على المسافة البادئة ذاتها.
metadata:
name:
en: TV on lights off
description:
en: Turn off lights when TV turns on
القيم المتعدّدة
إذا كان لمفتاح معين قيم متعددة، فسيتم إدراج كل قيمة في سطر جديد ويبدأ كل سطر متبوعًا بشرطة ومسافة. في المثال التالي، هناك قائمتان:
- يمكن أن يحتوي التشغيل الآلي على عدة
starters
، وبالتالي يبدأ إجراء التفعيل الأول بشرطة ومسافة. - يمكن أن يحتوي
weekday
على قيم متعددة، وبالتالي، تتم إضافة مسافة بادئة لكل قيمة وتبدأ بشرطة ومسافة.
starters:
- type: time.schedule
at: SUNSET
weekday:
- MONDAY
- THURSDAY
state: on
التعليقات
ويُعدّ أي نص بعد #
تعليقًا ويتجاهله محرّك التشغيل الآلي.
السطر الذي يبدأ بـ #
هو تعليق.
قد يظهر التعليق في نفس سطر محتوى النص البرمجي، ولكن #
يجب أن يسبقه مسافة.
# This is a comment. It will be ignored.
name: chromecast #This is a TV.
النص البرمجي للتشغيل الآلي
تُسمى مواصفات بنية النص البرمجي للتشغيل الآلي المخطّط.
يحدِّد مخطّط عمليات التشغيل الآلي بعض بُنى البيانات:
- يُطلق على زوج المفتاح/القيمة اسم حقل.
- تُسمى مجموعة الحقول المحدّدة في المخطط البنية.
بنية
تحدِّد لغة البرمجة النصية للبرمجة العديد من "عمليات الحظر" أو بُنى البيانات العادية، ويُشار إليها باسم البُنى.
ألقِ نظرة على بنية automation
التي تحدّد أربعة حقول:
المفتاح | النوع | الوصف |
---|---|---|
|
اختياريّ. تمثّل هذه السمة اسم قاعدة التشغيل الآلي. لن يظهر هذا الاسم للمستخدمين، بل هو كمرجع لمطوّري البرامج فقط. |
|
|
مطلوبة. تمثّل هذه السمة قائمة بالمبتدئين. |
|
|
اختياريّ. الحالة. |
|
|
[الإجراء] |
مطلوبة. قائمة بالإجراءات |
يوفّر قسم المرجع تعريفات المخططات لجميع البنى المتاحة.
تكون أسماء المفاتيح فريدة داخل بنية معيّنة وهي حساسة لحالة الأحرف.
أنواع القيم المحتملة هي:
- النوع الأساسي: قيمة منطقية ورقم وسلسلة ووقت وما إلى ذلك.
- نوع الهيكل: مجموعة من الحقول.
- مصفوفة من نوع البيانات. يُشار إلى المصفوفة بـ
[]
. على سبيل المثال،[string]
هي مصفوفة من السلاسل، و[Starter]
هي مصفوفة من بنية المبتدئين. - أنواع خاصة أخرى: Entity وFieldPath.
يتضمن وصف كل حقل معلومات مهمة، ومنها:
- مطلوب مقابل اختياري، مما يشير إلى ما إذا كان الحقل إلزاميًا أو ما إذا كان يمكن تخطيه.
- تبعية الحقل: الحقول الاختيارية فقط هي التي تحتوي على تبعيات. يصف هذا عمليات التحقق الإضافية عند استخدام هذا الحقل، مثل استخدام الحقل ب فقط في حالة تعيين الحقل أ أو عند استخدام الحقل أ، لا يتم تعيين الحقل ب أو الحقل ج.
- القيم المحتملة على سبيل المثال، مجموعة القيم المحدودة لحقل التعداد من نوع السلسلة، أو نطاق الأرقام التي يمكن استخدامها في حقل من النوع رقم.
هيكل مكتوب
يمكن أن تمثل بعض الهياكل إجراءات التفعيل استنادًا إلى جدول زمني أو تغيير حالة الجهاز. يجب أن يوفّر كل نوع من starter
مجموعة فريدة من الحقول.
# A time schedule starter.
starter:
type: time.schedule
at: 10:00
# A device state change starter.
starter:
type: device.state.OnOff
device: TV - Living Room
state: on
is: true
starter
هي بنية مكتوبة يتم توسيعها بواسطة بُنى فرعية أخرى في حقل type
، مثل time.schedule
أو device.state.OnOff
، لتقديم وظائف مختلفة. تتم أيضًا كتابة منهجي condition
وaction
.
يجب أن تتّبع الحقول الإضافية في "البنية" مواصفات "البنية الأساسية" الفرعية (type
). على سبيل المثال، عند استخدام device.state.OnOff
على أنّه type
، تكون الحقولالحقول المحدّدة لهذا النوع
فقط صالحة في بنية starter
.
مصفوفة
في YAML، تبدأ صفيفة من القيم بـ -
(شرطة متبوعة بمسافة). يمكن أن يحتوي الصفيف على قيم هيكل متعددة أو قيم أولية متعددة. ولكن يجب أن تكون القيم في الصفيفة من النوع نفسه.
عندما تحتوي الصفيفة على عنصر واحد، يمكنك حذف الشرطة والمسافة:
# The starters field accepts an array of Starter Structs.
# This is the standard format.
starters:
- type: time.schedule
at: sunset
- type: time.schedule
at: sunrise
# The dash can be omitted if the array only has one item.
# This is also valid.
starters:
type: time.schedule
at: sunset
لا تتوفر الصفائف متعددة الأبعاد، مثل
[[1, 2], [3, 4]]
، في البرمجة النصية المبرمَجة. سيعمل محلّل اللغة تلقائيًا على دمج صفيف متعدد الأبعاد في مصفوفة أحادية البُعد، في هذه الحالة، [1, 2, 3, 4]
.
# INVALID: multi-dimensional array
- - 1
- 2
- - 3
- 4
المجموعة الأولية
تتوافق أنواع البيانات الأساسية التالية مع مخطط النص البرمجي للتشغيل الآلي:
منطقية |
|
العدد |
عدد صحيح أو عدد عشري |
سلسلة |
نص عادي لا حاجة إلى اقتباس السلاسل إلا في حالات معيّنة. |
التاريخ |
الشهر واليوم التنسيق هو MM-DD أو MM/DD.
|
الوقت |
وقت اليوم يمكن أن يكون توقيت الساعة أو الوقت الشمسي.
بالنسبة إلى وقت الساعة، يمكن أن يستخدم إما تنسيق صباحًا/مساءً أو تنسيق 24 ساعة. أما الثواني، فاختيارية.
بالنسبة إلى التوقيت الشمسي، يكون
|
DateTime |
السنة والشهر واليوم والوقت من اليوم. يجب إضافة مسافة بيضاء بين جزء "التاريخ" والجزء "الوقت". تنسيق التاريخ هو YYYY-MM-DD أو YYYY/MM/DD. تنسيق الوقت هو نفسه [Time](#time). المنطقة الزمنية غير متاحة.
|
أيام الأسبوع |
|
المدة |
فترة زمنية.
|
ColorHex |
رمز سداسي عشري مكوَّن من ستة أرقام يمثل لونًا. لا توجد
|
درجة الحرارة | بيانات درجة الحرارة الطبيعية أضِف دائمًا
|
ColorTemperature |
درجة حرارة الألوان بالكلفن.
|
اللون
يمكن تحديد الألوان بطريقة من ثلاث طرق، إما باستخدام النوع الأساسي ColorHex أو ColorTemperature أو النوع المركّب SpectrumHSV.
SpectrumHSV
يحدد النوع SpectrumHSV لونًا باستخدام ثلاثة حقول رقمية:
- يتوافق تدرج اللون مع الطول الموجي اللون.
- يشير تشبّع اللون إلى كثافة اللون.
- تشير القيمة إلى إضاءة أو قتامة اللون النسبية.
ديناميكية
في بعض الأحيان، لا يكون نوع بيانات المفتاح ثابتًا. يمكن أن يكون أحد الأنواع الأساسية، بناءً على القيم من الحقول الأخرى.
إليك مثال على حقل نوع البيانات الديناميكية: is
. ويتم تحديد النوع الفعلي من خلال قيم كل من الحقلين type
وstate
.
# The 'is' field accepts a number type.
type: device.state.Volume
device: My TV - Living Room
state: currentVolume
is: 1
# The 'is' field accepts a boolean type.
type: device.state.OnOff
device: My TV - Living Room
state: on
is: false
الكيان
تنسيق سلسلة خاص لتحديد كيان يملكه المستخدم بشكل فريد مثل الجهاز أو الغرفة.
الجهاز هو العنصر الأكثر شيوعًا المستخدَم في عمليات التشغيل الآلي. تنسيق سلسلة الكيان
هو device name - room name
.
# The device field accepts a Device Entity type.
type: device.state.Volume
device: My TV - Living Room
state: currentVolume
is: 1
FieldPath
يشير ذلك المصطلح إلى تنسيق "سلسلة" خاص يُستخدَم لتحديد موقع جزء من البيانات في حمولة بيانات. في المثال التالي، currentVolume
هو FieldPath للحقل state
.
# The state field accepts a FieldPath type.
starters:
type: device.state.Volume
device: My TV - Living Room
state: currentVolume
is: 5
وقد تتطلّب مسارات الحقول الأخرى مستويات متعدّدة للوصول إلى العنصر المطلوب، ويختلف التنسيق بين إجراء التفعيل والإجراء.
تستخدم البداية ترميزًا نقطيًا، مع وجود المسار بالكامل في نفس الحقل. يتم ذلك بشكل أساسي
لأغراض المقارنة في منطق البدء. على سبيل المثال، لاستخدام درجة حرارة الألوان كإجراء تفعيل، عليك استخدام color.colorTemperature
للحالة التالية:
starters:
- type: device.state.ColorSetting
device: My Device - Room Name
state: color.colorTemperature
is: 2000K
ومع ذلك، يمكنك استخدام حقول متداخلة. لتغيير لون المصباح إلى الأزرق،
بدلاً من color.name
وis: blue
، عليك إجراء ما يلي:
actions:
- type: device.command.ColorAbsolute
devices: My Device - Room Name
color:
name: blue