Dille İlgili Temel Bilgiler

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:

  1. Bir otomasyonda birden fazla starters olabilir, dolayısıyla ilk başlatıcı bir tire ve boşlukla başlar.
  2. 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

name

Dize

İsteğe bağlı.

Otomasyonun adı.

Bu bilgi kullanıcılara gösterilmez, yalnızca geliştirici referans amaçlıdır.

starters

[Starter]

Zorunlu.

Başlatıcıların listesi.

condition

Durum

İsteğe bağlı.

Durum.

actions

[İş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

  • true
  • false

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.

  • 09/01
  • 09-01

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 sunrise ve sunset anahtar kelimelerdir, ve ardından bir ofset kullanılabilir (Süre açısından).

  • 12:30 am
  • 13:00:01
  • sunrise/sunset
  • sunset+30min/sunset-1hour

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.

  • 2022/01/01 14:00
  • 2022-12-31 sunrise+30min

Hafta içi

  • MONDAY (veya MON)
  • TUESDAY (veya TUE)
  • WEDNESDAY (veya WED)
  • THURSDAY (veya THU)
  • FRIDAY (veya FRI)
  • SATURDAY (veya SAT)
  • SUNDAY (veya SUN)

Süre

Bir zaman aralığı.

  • 30min
  • 1hour
  • 20sec
  • 1hour10min20sec

ColorHex

Bir rengi temsil eden altı basamaklı onaltılık kod.

Önde # yok.

  • FFFFFF
  • B5D2A1
  • DFA100

Sıcaklık

Normal sıcaklık verisi. Her zaman 'C' veya Sıcaklık ölçümünü göstermek için değere 'F' ekleyin.

  • 20.5C
  • 90F

ColorTemperature

Kelvin cinsinden renk sıcaklığı.

  • 5000K

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