YAML'yi anlama
YAML, yazılımı belirtmek için kullanılan popüler bir dildir yapılandırma. Sunumun anlaşılması için net ve okunabilir bir yapılandırmış olabilir. İş ilanlarında karşılaşabileceğiniz birkaç temel bilgiyi YAML'yi temel alın. YAML hakkında daha fazla bilgi genel olarak bu sürümdeki Sürüm 1.1 spesifikasyonlarına göz atın.
Anahtar/değer çiftleri
YAML belgeleri temel olarak anahtar/değer çiftlerinin bir koleksiyonudur. Sonraki
Örneğin, anahtar name
, değer ise TV on lights off
. Anahtar ve değer
iki nokta işareti ve ardından boşlukla ayrılır. Şunlar için her iki karakter de gereklidir:
yardımcı olur.
name: TV on lights off
Değerler
Bir anahtarla ilişkilendirilen değer; dize, sayı veya ya da başka bir anahtar/değer çiftleri koleksiyonu kadar karmaşık olabilir.
Dize
Bir dize değeri şu karakterlerden biriyle başlıyorsa: [
, {
, "
,
'
veya #
ya da dize :
(iki nokta ve ardından boşluklar gelecek şekilde) içeriyorsa
alıntılandı.
Hem tek hem de çift tırnak kabul edilir ancak kapanış tırnak işareti eşleşmelidir açılış tırnak işareti.
Doğru alıntılama:
name: 'TV on lights off'
name: "TV on lights off"
Hatalı alıntı (alınmayan tırnak işaretleri):
name: 'TV on lights off"
Diğer tüm dize türleri için tırnak işaretleri isteğe bağlıdır.
Birden çok satırlık bir dize gerekiyorsa çoklu satırlık skalerlerle ilgili YAML spesifikasyonu bölümüne bakın.
name: "[1] TV"
name: '{1} TV'
name: '#TV'
name: '"1" TV'
name: "'1' TV"
name: "\"1\" TV"
name: "TV: bedroom"
İç içe yerleştirilmiş anahtar/değer çiftleri
Burada metadata
anahtarının değeri, iki anahtar/değer çiftinin bir listesidir (name
ve description
):
metadata:
name: TV on lights off
description: Turn off lights when TV turns on
Girinti
YAML, yapıyı belirtmek için girinti kullanır. Önceki örnekte name
ve
description
, alt öğe olduklarını belirtecek şekilde girintilidir (iki boşlukla)
metadata
anahtarı.
YAML'de girinti katıdır. Alt yapının daha derin girintisi olmalıdır ve aynı düzeydeki anahtar/değer çiftlerinin girintisi aynı olmalıdır.
metadata:
name:
en: TV on lights off
description:
en: Turn off lights when TV turns on
Birden çok değer
Belirli bir anahtarın birden fazla değeri varsa her değer yeni bir satırda listelenir ve satırı ile başlar, ardından bir tire ve bir boşluk gelir. Aşağıdaki örnekte iki liste vardır:
- Bir otomasyonda birden fazla
starters
olabilir, dolayısıyla ilk başlatıcı bir tire ve boşlukla başlar. weekday
birden fazla değere sahip olabilir. Bu nedenle her değer girintili ve bir tire ve boşlukla başlar.
starters:
- type: time.schedule
at: SUNSET
weekday:
- MONDAY
- THURSDAY
state: on
Yorumlar
#
sonrasında gelen metinler yorum olarak kabul edilir ve yoksayılır
elde etti.
#
ile başlayan satırlar yorumdur.
Bir yorum komut dosyası içeriğiyle aynı satırda görünebilir ancak #
öğesinin olması gerekir
işareti bir boşluk olmalıdır.
# This is a comment. It will be ignored.
name: chromecast #This is a TV.
Otomasyon komut dosyası
Otomasyon komut dosyası söz diziminin spesifikasyonu şema olarak adlandırılır.
Otomasyonlar birkaç veri yapısını tanımlar:
- Tek bir anahtar/değer çiftine Field olarak adlandırılır.
- Şema tarafından tanımlanan alan koleksiyonuna Struct adı verilir.
Struct
Otomasyon kodlama dili, birkaç standart "engellemeyi" tanımlar. veya veriler yapılar olarak adlandırılan yapılar.
Dört alanın tanımlandığı automation
Yapısına göz atın:
Anahtar | Tür | Açıklama |
---|---|---|
|
İsteğe bağlı. Otomasyonun adı. Bu bilgi kullanıcılara gösterilmez, yalnızca geliştirici referans amaçlıdır. |
|
|
[Starter] |
Zorunlu. Başlatıcıların listesi. |
|
İsteğe bağlı. Durum. |
|
|
[İşlem] |
Zorunlu. İşlemler listesi. |
Referans bölümünde şema tanımlarını tanımlamayı unutmayın.
Anahtar adları, belirli bir yapıda benzersizdir ve büyük/küçük harfe duyarlıdır.
Olası değer türleri şunlardır:
- Temel tür: bool, sayı, dize, saat vb.
- Yapı türü: bir alan koleksiyonu.
- Veri türü dizisi. Dizi
[]
ile gösterilir. Örneğin,[string]
bir dize dizisidir.[Starter]
ise bir Başlangıç Yapıları dizisidir. - Diğer özel türler: Varlık, FieldPath.
Her alanın açıklamasında aşağıdakiler gibi önemli bilgiler bulunur:
- Zorunlu ve İsteğe bağlı (alanın zorunlu olup olmadığını veya zorunlu olup olmadığını belirten) atlanabilir.
- Alan Bağımlılığı. Yalnızca İsteğe Bağlı Alanlarda Bağımlılıklar Vardır. Bu tanım bu alan kullanılırken ek kontroller sağlar, örneğin B alanını yalnızca A Alanı ayarlayın veya A Alanı kullanıldığında B Alanını veya C Alanını ayarlamayın.
- Olası Değerler. Örneğin, bir Enum'un sınırlı değer kümesi Dize türü alanı veya Numarayı yazın.
Yazılı Yapı
Bazı Yapılar, zaman çizelgesine veya cihaz durumuna göre başlatıcıları temsil edebilir.
unutmayın. Her starter
türü, ayrı bir Alan grubu sağlamalıdır.
# 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
, bir Yazılmış Yapı'dır ve
Sağlanacak type
alanı (ör. time.schedule
veya device.state.OnOff
)
farklı işlevler sunar. condition
ve action
Yapıları da Yazıldı.
Yapıdaki ek alanlar alt yapıya (type
) uygun olmalıdır
bakın. Örneğin type
olarak device.state.OnOff
kullanılırken yalnızca
"the"
alan belirtilmiş
tür
geçerli olduğu ülke
starter
Struct.
Dizi
YAML'de bir değer dizisi, -
(kısa çizgi ve ardından boşluk) ile başlar. İlgili içeriği oluşturmak için kullanılan
dizisi birden çok Yapı değeri veya birden çok Temel değer içerebilir. Ancak
dizideki değerler aynı türde olmalıdır.
Dizi tek bir öğe içerdiğinde tire ve boşluğu çıkarabilirsiniz:
# 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
Çok boyutlu diziler, örneğin:
[[1, 2], [3, 4]]
, otomasyon komut dosyası çalıştırmada desteklenmez. İlgili içeriği oluşturmak için kullanılan
dil ayrıştırıcısı, çok boyutlu bir diziyi otomatik olarak bir
tek boyutlu dizi (bu örnekte, [1, 2, 3, 4]
).
# INVALID: multi-dimensional array
- - 1
- 2
- - 3
- 4
Temel
Otomasyon komut dosyası tarafından aşağıdaki temel veri türleri desteklenir şema:
Bool |
|
Sayı |
Tam sayı veya ondalık sayı |
Dize |
Düz metin Aşağıdakiler dışında dizelerin tırnak içine alınması gerekmez: belirli durumlara neden olabilir. |
Tarih |
Ay ve Gün. Biçim AA-GG veya AA/GG şeklindedir.
|
Saat |
Saat. Saat veya güneş saati olabilir.
Saat için AM/PM biçimi veya 24 saatlik biçim kullanılabilir. Saniye
isteğe bağlıdır.
Güneş vakti için
|
Tarih ve saat |
Yıl, ay, gün ve günün saati. Tarih ve Saat bölümü. Tarih biçimi YYYY-AA-GG veya YYYY/AA/GG şeklindedir. Saat biçimi [Saat](#time) ile aynı. Saat dilimi desteklenmez.
|
Hafta içi |
|
Süre |
Bir zaman aralığı.
|
ColorHex |
Bir rengi temsil eden altı basamaklı onaltılık kod. Önde
|
Sıcaklık | Normal sıcaklık verisi. Her zaman
|
ColorTemperature |
Kelvin cinsinden renk sıcaklığı.
|
Renk
Renkler şu üç yöntemden biriyle belirtilebilir: ColorHex veya ColorTemperature temel türleri, veya SpectrumHSV bileşik türü.
SpectrumHSV
SpectrumHSV türü, üç sayısal alanı kullanarak bir renk belirtir:
- Ton, rengin dalga boyuna karşılık gelir.
- Doygunluk, rengin yoğunluğunu gösterir.
- Değer, rengin göreli açıklığını veya koyuluğunu gösterir.
Dinamik
Bazen bir anahtarın veri türü sabit değildir. İlk elemanlardan biri olabilir değerleri temel alır.
is
, dinamik veri türü alanına örnek olarak verilebilir. Gerçek tür
hem type
hem de state
alanlarının değerlerine göre belirlenir.
# 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
Varlık
Cihaz gibi kullanıcıya ait bir tüzel kişiyi benzersiz şekilde tanımlamak için kullanılan özel bir dize biçimi veya oda içerir.
Cihaz, otomasyonlarda en yaygın olarak kullanılan varlıktır. Varlık dizesinin biçimi
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
Veri yükündeki bir veri parçasını bulmak için kullanılan özel bir dize biçimi.
aşağıdaki örnekte currentVolume
, state
alanı için FieldPath'dir.
# The state field accepts a FieldPath type.
starters:
type: device.state.Volume
device: My TV - Living Room
state: currentVolume
is: 5
Diğer FieldPath'ler, gerekli öğeye ulaşmak için birden fazla seviye gerektirebilir ve biçim, başlatıcı ile işlem arasında farklılık gösterir.
Başlatıcılar, tüm yol aynı alanda olacak şekilde bir nokta gösterimi kullanır. Bu, öncelikle başlatıcı mantığında karşılaştırma amacıyla yapılır. Örneğin,
başlangıç olarak renk sıcaklığını ayarlamak için color.colorTemperature
eyalet:
starters:
- type: device.state.ColorSetting
device: My Device - Room Name
state: color.colorTemperature
is: 2000K
İşlemler ise iç içe yerleştirilmiş alanları kullanır. Bir ampulün rengini mavi yapmak için
color.name
ve is: blue
yerine şunları yapmanız gerekiyor:
actions:
- type: device.command.ColorAbsolute
devices: My Device - Room Name
color:
name: blue