YAML के बारे में जानकारी
YAML एक लोकप्रिय भाषा है. इसका इस्तेमाल सॉफ़्टवेयर कॉन्फ़िगरेशन तय करने के लिए किया जाता है. इससे स्ट्रक्चर्ड जानकारी को साफ़ तौर पर और आसानी से समझा जा सकता है. स्क्रिप्ट की मदद से पहला ऑटोमेशन बनाने से पहले, आपको YAML के बारे में कुछ बुनियादी बातें पता होनी चाहिए. YAML के बारे में ज़्यादा जानने के लिए, वर्शन 1.1 स्पेसिफ़िकेशन देखें.
की-वैल्यू पेयर
वाईएएमएल दस्तावेज़, बुनियादी तौर पर की-वैल्यू पेयर का कलेक्शन होते हैं. इस उदाहरण में, कुंजी 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.
ऑटोमेशन स्क्रिप्ट
ऑटोमेशन स्क्रिप्ट के सिंटैक्स के स्पेसिफ़िकेशन को स्कीमा कहा जाता है.
ऑटोमेशन स्कीमा, डेटा के कुछ स्ट्रक्चर तय करता है:
- एक की-वैल्यू पेयर को फ़ील्ड कहा जाता है.
- स्कीमा में तय किए गए फ़ील्ड के कलेक्शन को स्ट्रक्ट कहा जाता है.
Struct
ऑटोमेशन स्क्रिप्टिंग की भाषा में कई स्टैंडर्ड 'ब्लॉक' या डेटा स्ट्रक्चर तय किए जाते हैं. इन्हें स्ट्रक्ट कहा जाता है.
automation
स्ट्रक्ट देखें. इसमें चार फ़ील्ड तय किए गए हैं:
कुंजी | समस्या | ब्यौरा |
---|---|---|
|
ज़रूरी नहीं. ऑटोमेशन का नाम. यह उपयोगकर्ताओं को नहीं दिखता. यह सिर्फ़ डेवलपर के लिए है. |
|
|
[Starter] |
ज़रूरी है. स्टार्टर की सूची. |
|
ज़रूरी नहीं. स्थिति. |
|
|
[Action] |
ज़रूरी है. कार्रवाइयों की सूची. |
रेफ़रंस सेक्शन में, सभी उपलब्ध स्ट्रक्चर के लिए स्कीमा की परिभाषाएं दी गई हैं.
किसी स्ट्रक्चर में, हर कुंजी का नाम यूनीक होता है. साथ ही, यह केस-सेंसिटिव होता है.
वैल्यू के ये टाइप हो सकते हैं:
- प्रिमिटिव टाइप: bool, number, string, time वगैरह.
- स्ट्रक्ट टाइप: फ़ील्ड का कलेक्शन.
- यह डेटा टाइप का एक ऐरे होता है. ऐरे को
[]
से दिखाया जाता है. उदाहरण के लिए,[string]
स्ट्रिंग का एक कलेक्शन है और[Starter]
, स्टार्टर स्ट्रक्चर का एक कलेक्शन है. - अन्य खास टाइप: Entity, FieldPath.
हर फ़ील्ड की जानकारी में अहम जानकारी शामिल होती है. जैसे:
- 'ज़रूरी है' बनाम 'ज़रूरी नहीं है' से पता चलता है कि फ़ील्ड को भरना ज़रूरी है या इसे छोड़ा जा सकता है.
- फ़िल्टर फ़ील्ड की निर्भरता. सिर्फ़ उन फ़ील्ड में डिपेंडेंसी होती है जो ज़रूरी नहीं हैं. इससे इस फ़ील्ड का इस्तेमाल करते समय, अतिरिक्त जांचों के बारे में पता चलता है. जैसे, फ़ील्ड B का इस्तेमाल सिर्फ़ तब करें, जब फ़ील्ड A सेट हो या फ़ील्ड A का इस्तेमाल करते समय, फ़ील्ड B या फ़ील्ड C को सेट न करें.
- इस्तेमाल की जा सकने वाली वैल्यू. उदाहरण के लिए, स्ट्रिंग टाइप के Enum फ़ील्ड का सीमित वैल्यू सेट या संख्याओं की ऐसी रेंज जिसका इस्तेमाल, नंबर टाइप के फ़ील्ड में किया जा सकता है.
टाइप किया गया स्ट्रक्चर
कुछ स्ट्रक्ट, समय के शेड्यूल या डिवाइस की स्थिति में बदलाव के आधार पर स्टार्टर दिखा सकते हैं. हर तरह के 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
स्ट्रक्चर भी टाइप किए गए हैं.
Struct में मौजूद अन्य फ़ील्ड, चाइल्ड स्ट्रक्ट (type
) की खास बातों के मुताबिक होने चाहिए. उदाहरण के लिए, type
के तौर पर device.state.OnOff
का इस्तेमाल करने पर, सिर्फ़उस टाइप के लिए तय किए गए फ़ील्ड
उस starter
स्ट्रक्ट में मान्य होते हैं.
Array
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 है.
|
समय |
दिन का समय. यह घड़ी का समय या सौर समय हो सकता है.
घड़ी के समय के लिए, AM/PM फ़ॉर्मैट या 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
यह एक खास स्ट्रिंग फ़ॉर्मैट होता है. इसका इस्तेमाल, डेटा पेलोड में मौजूद डेटा के किसी हिस्से का पता लगाने के लिए किया जाता है. यहां दिए गए उदाहरण में, state
फ़ील्ड के लिए FieldPath, currentVolume
है.
# The state field accepts a FieldPath type.
starters:
type: device.state.Volume
device: My TV - Living Room
state: currentVolume
is: 5
ज़रूरी आइटम तक पहुंचने के लिए, अन्य FieldPath में कई लेवल की ज़रूरत पड़ सकती है. साथ ही, स्टार्टर और ऐक्शन के बीच फ़ॉर्मैट अलग-अलग होता है.
स्टार्टर में डॉट नोटेशन का इस्तेमाल किया जाता है. इसमें पूरा पाथ एक ही फ़ील्ड में होता है. यह मुख्य रूप से, स्टार्टर लॉजिक में तुलना करने के लिए किया जाता है. उदाहरण के लिए, अगर आपको कलर टेम्परेचर को शुरुआती सेटिंग के तौर पर इस्तेमाल करना है, तो आपको 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