YAML'yi anlama
YAML, yazılım yapılandırmasını belirtmek için kullanılan popüler bir dildir. Yapılandırılmış bilgileri net ve okunabilir bir şekilde temsil etmenizi sağlar. İlk komut dosyası otomasyonunuzu oluşturmadan önce YAML hakkında bilmeniz gereken bazı temel bilgiler aşağıda verilmiştir. YAML hakkında genel olarak daha fazla bilgi edinmek için 1.1 sürümü spesifikasyonuna bakın.
Anahtar/değer çiftleri
YAML belgeleri temel olarak anahtar/değer çiftleri koleksiyonudur. Aşağıdaki örnekte anahtar name
, değer ise TV on lights off
'tır. Anahtar ve değer, iki nokta ve ardından boşluk ile ayrılır. Düzgün biçimlendirilmiş YAML için her iki karakter de gereklidir.
name: TV on lights off
Değerler
Bir anahtarla ilişkilendirilen değer, dize, sayı veya tarih kadar basit ya da başka bir anahtar/değer çifti koleksiyonu kadar karmaşık olabilir.
Dize
Bir dize değeri [
, {
, "
, '
veya #
karakterlerinden biriyle başlıyorsa ya da dize :
(iki nokta üst üste işareti ve ardından boşluk) içeriyorsa tırnak içine alınmalıdır.
Hem tek hem de çift tırnak kabul edilir ancak kapanış tırnağı, açılış tırnağıyla eşleşmelidir.
Doğru alıntılama:
name: 'TV on lights off'
name: "TV on lights off"
Yanlış tırnak işareti kullanımı (eşleşmeyen 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 (name
ve description
) listesidir:
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
, metadata
anahtarının alt öğeleri olduklarını belirtmek için girintilendirilmiştir (iki boşluk).
YAML'de girinti katı kurallara tabidir. Alt yapının girintisi, üst yapınınkinden daha derin 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 her satır kısa çizgi ve boşlukla başlar. Aşağıdaki örnekte iki liste vardır:
- Bir otomasyonda birden fazla
starters
olabilir. Bu nedenle, ilk başlatıcı kısa çizgi ve boşlukla başlar. weekday
birden fazla değere sahip olabilir. Bu nedenle, her değer daha fazla girinti alır ve kısa çizgi ve boşluk ile başlar.
starters:
- type: time.schedule
at: SUNSET
weekday:
- MONDAY
- THURSDAY
state: on
Yorumlar
#
'den sonra gelen tüm metinler yorum olarak kabul edilir ve otomasyon motoru tarafından yoksayılır.
#
ile başlayan satırlar yorumdur.
Yorum, komut dosyası içeriğiyle aynı satırda görünebilir ancak #
önce bir boşluk olmalıdır.
# This is a comment. It will be ignored.
name: chromecast #This is a TV.
Otomasyon komut dosyası
Otomasyonlar komut dosyası söz dizimine ilişkin spesifikasyona şema denir.
Otomasyonlar şeması birkaç veri yapısı tanımlar:
- Tek bir anahtar/değer çiftine Alan denir.
- Şema tarafından tanımlanan bir alan koleksiyonuna Struct denir.
Struct
Otomasyon komut dosyası dili, Structs olarak adlandırılan çeşitli standart "bloklar" veya veri yapıları tanımlar.
Dört alan tanımlayan automation
Struct'e göz atın:
Anahtar | Tür | Açıklama |
---|---|---|
|
İsteğe bağlı. Otomasyonun adı. Bu, yalnızca geliştirici referansı içindir ve kullanıcılara gösterilmez. |
|
|
[Starter] |
Zorunlu. Başlatıcıların listesi. |
|
İsteğe bağlı. Durum. |
|
|
[İşlem] |
Zorunlu. İşlemlerin listesi. |
Referans bölümü, mevcut tüm Yapılar için şema tanımları sağlar.
Anahtar adları, belirli bir yapı içinde benzersizdir ve büyük/küçük harfe duyarlıdır.
Olası değer türleri şunlardır:
- Basit tür: boole, sayı, dize, zaman vb.
- Struct türü: bir alan koleksiyonu.
- Veri türünün bir dizisi. Dizi
[]
ile gösterilir. Örneğin,[string]
bir dize dizisi,[Starter]
ise Başlatıcı Yapı dizisidir. - Diğer özel türler: Entity, FieldPath.
Her alanın açıklamasında aşağıdakiler gibi önemli bilgiler bulunur:
- Zorunlu veya İsteğe bağlı: Alanın zorunlu olup olmadığını ya da atlanıp atlanamayacağını belirtir.
- Alan Bağımlılığı. Yalnızca isteğe bağlı alanların bağımlılıkları vardır. Bu alanda, B alanını yalnızca A alanı ayarlandığında kullan veya A alanı kullanıldığında B veya C alanını ayarlamayın gibi bu alan kullanılırken yapılan ek kontroller açıklanır.
- Olası değerler. Örneğin, dize türüne sahip bir Enum alanının sınırlı değer kümesi veya sayı türüne sahip bir alanda kullanılabilecek bir sayı aralığı.
Yazılı Yapı
Bazı yapılandırmalar, zaman planlamasına veya cihaz durumu değişikliğine dayalı başlatıcıları temsil edebilir. Her starter
türü farklı 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
, farklı işlevler sağlamak için type
alanındaki diğer alt yapıların (ör. time.schedule
veya device.state.OnOff
) genişlettiği bir Typed Struct'tir. condition
ve action
yapıları da türü belirtilmiş olmalıdır.
Yapıdaki ek alanlar, alt yapı (type
) spesifikasyonuna uymalıdır. Örneğin, type
olarak device.state.OnOff
kullanıldığında, söz konusu starter
Yapı'da yalnızcabu tür için belirtilen alanlar
geçerli olur.
Dizi
YAML'de değer dizisi -
(tire ve ardından boşluk) ile başlar. Dizi, birden fazla Yapı değeri veya birden fazla İlkel değer içerebilir. Ancak dizideki değerler aynı türde olmalıdır.
Dizi tek bir öğe içeriyorsa kısa çizgiyi ve boşluğu atlayabilirsiniz:
# 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]]
gibi çok boyutlu diziler, otomasyon komut dosyalarında desteklenmez. Dil ayrıştırıcı, çok boyutlu bir diziyi otomatik olarak tek boyutlu bir diziye (bu durumda [1, 2, 3, 4]
) düzleştirir.
# INVALID: multi-dimensional array
- - 1
- 2
- - 3
- 4
Primitive
Otomasyonlar komut dosyası şeması aşağıdaki ilkel veri türlerini destekler:
Bool |
|
Sayı |
Tam sayı veya ondalık sayı |
Dize |
Düz metin Belirli durumlar dışında dizelerin tırnak içine alınmasına gerek yoktur. |
Tarih |
Ay ve gün. Biçim AA-GG veya AA/GG şeklindedir.
|
Saat |
Günün saati. Saat veya güneş zamanı olabilir.
Saat için AM/PM biçimi veya 24 saatlik biçim kullanılabilir. Saniyeler isteğe bağlıdır.
Güneş zamanı için
|
Tarih ve saat |
Yıl, ay, gün ve günün saati. Tarih bölümü ile saat bölümü arasında boşluk olmalıdır. Tarih biçimi YYYY-AA-GG veya YYYY/AA/GG şeklindedir. Saat biçimi, [Saat](#time) ile aynıdır. Saat dilimi desteklenmez.
|
Hafta içi |
|
Süre |
Bir zaman aralığı.
|
ColorHex |
Bir rengi temsil eden altı haneli on altılık kod. Başında
|
Sıcaklık | Normal sıcaklık verileri. Sıcaklık ölçümünü belirtmek için değere her zaman
|
ColorTemperature |
Kelvin cinsinden renk sıcaklığı.
|
Renk
Renkler, ColorHex veya ColorTemperature ilkel türleri ya da SpectrumHSV birleşik türü kullanılarak üç şekilde belirtilebilir.
SpectrumHSV
SpectrumHSV türü, üç sayısal alan kullanarak bir rengi belirtir:
- Ton, renk dalga boyuna karşılık gelir.
- Doygunluk, rengin yoğunluğunu gösterir.
- Değer, rengin göreceli açıklığını veya koyuluğunu gösterir.
Dinamik
Bazen bir anahtarın veri türü sabit değildir. Diğer alanlardaki değerlere bağlı olarak ilkel türlerden biri olabilir.
Dinamik veri türü alanına örnek olarak is
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
Kullanıcıya ait bir öğeyi (ör. cihaz veya oda) benzersiz şekilde tanımlamak için kullanılan özel bir dize biçimi.
Cihaz, otomasyonlarda en sık kullanılan öğedir. Öğe dize biçimi device name - room name
'tür.
# 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ının FieldPath değeridir.
# The state field accepts a FieldPath type.
starters:
type: device.state.Volume
device: My TV - Living Room
state: currentVolume
is: 5
Diğer FieldPaths'lerin, gerekli öğeye ulaşmak için birden fazla düzeye ihtiyacı olabilir ve başlatıcı ile işlem arasında biçim farklıdır.
Başlatıcılar, yolun tamamının aynı alanda olduğu bir nokta notasyonu kullanır. Bu, öncelikle başlatıcı mantığında karşılaştırma amacıyla yapılır. Örneğin, başlatıcı olarak renk sıcaklığını kullanmak için durum için color.colorTemperature
değerini kullanırsınız:
starters:
- type: device.state.ColorSetting
device: My Device - Room Name
state: color.colorTemperature
is: 2000K
Ancak işlemler 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 gerekir:
actions:
- type: device.command.ColorAbsolute
devices: My Device - Room Name
color:
name: blue