언어 기본사항

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의 값은 두 개의 키-값 쌍 (namedescription) 목록입니다.

metadata:
  name: TV on lights off
  description: Turn off lights when TV turns on

들여쓰기

YAML은 들여쓰기를 사용하여 구조를 나타냅니다. 이전 예에서 namedescription는 2개의 공백으로 들여쓰기되어 키 metadata의 하위 요소임을 나타냅니다.

YAML에서는 들여쓰기가 엄격합니다. 하위 구조는 상위 구조보다 들여쓰기가 더 깊어야 하며 동일한 수준의 키-값 쌍은 들여쓰기가 동일해야 합니다.

metadata:
  name:
    en: TV on lights off
  description:
    en: Turn off lights when TV turns on

여러 개의 값

지정된 키에 여러 개의 값이 있는 경우 각 값은 새 줄에 나열되며 각 줄은 대시와 공백으로 시작됩니다. 다음 예에는 두 개의 목록이 있습니다.

  1. 자동화에는 여러 개의 starters가 있을 수 있으므로 첫 번째 시작 조건은 대시와 공백으로 시작합니다.
  2. 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.

자동화 스크립트

자동화 스크립트 문법의 사양을 스키마라고 합니다.

자동화 스키마는 몇 가지 데이터 구조를 정의합니다.

  • 단일 키-값 쌍을 필드라고 합니다.
  • 스키마에 의해 정의된 필드 모음을 구조체라고 합니다.

구조체

자동화 스크립트 언어는 구조체라고 하는 여러 표준 '블록' 또는 데이터 구조를 정의합니다.

다음과 같이 4개의 필드를 정의하는 automation 구조체를 살펴보세요.

유형 설명

name

문자열

선택사항입니다.

자동화 이름입니다.

이는 사용자에게 표시되지 않으며 개발자 참조용입니다.

starters

[시작]

필수 항목입니다.

시작 조건 목록입니다.

condition

조건

선택사항입니다.

조건

actions

[작업]

필수 항목입니다.

작업 목록입니다.

참조 섹션에서는 사용 가능한 모든 구조체의 스키마 정의를 제공합니다.

키 이름은 지정된 구조체 내에서 고유하며 대소문자를 구분합니다.

가능한 값 유형은 다음과 같습니다.

  • 기본 유형: 불리언, 숫자, 문자열, 시간 등
  • 구조체 유형: 필드 모음입니다.
  • 데이터 유형의 배열입니다. 배열은 []로 표시됩니다. 예를 들어 [string]는 문자열 배열이고 [Starter]는 시작 구조체 배열입니다.
  • 기타 특수 유형: Entity, FieldPath

각 필드의 설명에는 다음과 같은 중요한 정보가 포함되어 있습니다.

  • 필수 여부: 필수 입력란인지 아니면 건너뛸 수 있는 입력란인지를 나타냅니다.
  • 필드 종속 항목 선택 필드에만 종속 항목이 있습니다. 여기에는 필드 A가 설정된 경우에만 필드 B 사용 또는 필드 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

startertype 필드의 다른 하위 구조체(예: time.schedule 또는 device.state.OnOff)에 의해 확장되어 다양한 함수를 제공하는 유형 지정된 구조체입니다. conditionaction 구조체도 유형이 지정됩니다.

구조체의 추가 필드는 하위 구조체 (type) 사양을 따라야 합니다. 예를 들어 device.state.OnOfftype로 사용하는 경우해당 유형에 지정된 필드 만 해당 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

기본 역할

자동화 스크립트 스키마에서 지원되는 원시 데이터 유형은 다음과 같습니다.

부울

  • true
  • false

숫자

정수 또는 소수입니다.

문자열

일반 텍스트

특정 사례를 제외하고 문자열은 따옴표로 묶을 필요가 없습니다.

날짜

월 및 일입니다. 형식은 MM-DD 또는 MM/DD입니다.

  • 09/01
  • 09-01

시간

시간입니다. 시계 시간 또는 일광 절약 시간일 수 있습니다. 시계 시간의 경우 AM/PM 형식 또는 24H 형식 중 하나를 사용할 수 있습니다. 초는 선택사항입니다. 일광 절약 시간의 경우 sunrisesunset가 키워드이며, 그 뒤에 오프셋 (Duration 단위)이 올 수 있습니다.

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

일시

연도, 월, 일, 시간입니다. 날짜 부분과 시간 부분 사이에는 공백이 있어야 합니다. 날짜 형식은 YYYY-MM-DD 또는 YYYY/MM/DD입니다. 시간 형식은 [시간](#time)과 동일합니다. 시간대는 지원되지 않습니다.

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

평일

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

기간

일정한 시간입니다.

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

ColorHex

색상을 나타내는 6자리의 16진수 코드입니다.

선행 #가 없습니다.

  • FFFFFF
  • B5D2A1
  • DFA100

온도

정상 온도 데이터입니다. 항상 값에 'C' 또는 'F'를 추가하여 온도 측정을 나타냅니다.

  • 20.5C
  • 90F

ColorTemperature

색상 온도이며 단위는 켈빈(K)입니다.

  • 5000K

색상

색상은 ColorHex 또는 ColorTemperature 원시 유형 또는 복합 유형 SpectrumHSV를 사용하여 세 가지 방법 중 하나로 지정할 수 있습니다.

SpectrumHSV

SpectrumHSV 유형은 다음 세 개의 숫자 필드를 사용하여 색상을 지정합니다.

  • 색조는 색상 파장에 해당합니다.
  • 채도는 색상의 강도를 나타냅니다.
  • 은 색상의 상대적 밝기 또는 어두움을 나타냅니다.

동적

키의 데이터 유형이 고정되지 않은 경우도 있습니다. 다른 필드의 값에 따라 기본 유형 중 하나일 수 있습니다.

동적 데이터 유형 필드의 예는 is입니다. 실제 유형은 typestate 필드의 값에 따라 결정됩니다.

# 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

데이터 페이로드에서 데이터를 찾는 데 사용되는 특수 문자열 형식입니다. 다음 예에서 currentVolumestate 필드의 FieldPath입니다.

# The state field accepts a FieldPath type.
starters:
  type: device.state.Volume
  device: My TV - Living Room
  state: currentVolume
  is: 5

다른 FieldPaths의 경우 필수 항목에 도달하기 위해 여러 수준이 필요할 수 있으며, 시작 조건과 작업 간에 형식이 다릅니다.

시작 조건은 점 표기법을 사용하며 전체 경로가 동일한 필드에 있습니다. 이는 주로 시작 로직에서 비교 목적으로 수행됩니다. 예를 들어 색온도를 시작 조건으로 사용하려면 상태에 color.colorTemperature를 사용합니다.

starters:
- type: device.state.ColorSetting
  device: My Device - Room Name
  state: color.colorTemperature
  is: 2000K

그러나 작업은 중첩 필드를 사용합니다. 전구의 색상을 color.nameis: blue 대신 파란색으로 변경하려면 다음을 실행해야 합니다.

actions:
- type: device.command.ColorAbsolute
  devices: My Device - Room Name
  color:
    name: blue