Comprendre le langage YAML
YAML est un langage courant utilisé pour spécifier la configuration logicielle. Il permet de représenter des informations structurées de manière claire et lisible. Voici quelques points à connaître sur le YAML avant de créer votre première automatisation à l'aide de l'éditeur de script. Pour en savoir plus sur YAML en général, consultez la spécification 1.1.
Paires clé/valeur
Les documents YAML sont essentiellement
une collection de paires clé/valeur. Dans l'exemple suivant, la clé est name
et la valeur est TV on lights off
. La clé et la valeur sont séparées par le signe deux-points, suivi d'un espace. Les deux caractères sont requis pour un fichier YAML bien formé.
name: TV on lights off
Valeurs
La valeur associée à une clé peut être aussi basique qu'une chaîne, un nombre ou une date, ou aussi complexe qu'une autre collection de paires clé/valeur.
Strings
Si une valeur de chaîne commence par l'un des caractères suivants: [
, {
, "
, '
ou #
, ou si la chaîne contient :
(un deux-points suivi d'espaces), elle doit être placée entre guillemets.
Les guillemets simples et doubles sont acceptés, mais le guillemet fermant doit correspondre au guillemet d'ouverture.
Citation correcte:
name: 'TV on lights off'
name: "TV on lights off"
Citation incorrecte (guillemets non concordants):
name: 'TV on lights off"
Les guillemets sont facultatifs pour tous les autres types de chaînes.
Si vous avez besoin d'une chaîne multiligne, consultez la section de spécification YAML sur les scalaires multilignes.
name: "[1] TV"
name: '{1} TV'
name: '#TV'
name: '"1" TV'
name: "'1' TV"
name: "\"1\" TV"
name: "TV: bedroom"
Paires clé-valeur imbriquées
Ici, la valeur de la clé metadata
est une liste de deux paires clé/valeur (name
et description
):
metadata:
name: TV on lights off
description: Turn off lights when TV turns on
Retrait
YAML utilise des retraits pour indiquer la structure. Dans l'exemple précédent, name
et description
sont mis en retrait (de deux espaces) pour indiquer qu'il s'agit des enfants de la clé metadata
.
La mise en retrait est stricte dans YAML. Une structure enfant doit avoir un retrait plus profond que son parent, et les paires clé-valeur du même niveau doivent avoir le même retrait.
metadata:
name:
en: TV on lights off
description:
en: Turn off lights when TV turns on
Plusieurs valeurs
Si une clé donnée comporte plusieurs valeurs, chaque valeur est répertoriée sur une nouvelle ligne, et chaque ligne commence par un tiret et un espace. L'exemple suivant comporte deux listes:
- Une automatisation peut avoir plusieurs
starters
. Par conséquent, le premier déclencheur commence par un tiret et une espace. weekday
peut avoir plusieurs valeurs. Par conséquent, chaque valeur est davantage mise en retrait et commence par un tiret et un espace.
starters:
- type: time.schedule
at: SUNSET
weekday:
- MONDAY
- THURSDAY
state: on
Commentaires
Tout texte situé après un élément #
est considéré comme un commentaire et est ignoré par le moteur d'automatisation.
Une ligne commençant par #
est un commentaire.
Un commentaire peut apparaître sur la même ligne que le contenu du script, mais l'élément #
doit être précédé d'un espace.
# This is a comment. It will be ignored.
name: chromecast #This is a TV.
Script d'automatisation
La spécification de la syntaxe du script d'automatisations est appelée schéma.
Le schéma des automatisations définit deux structures de données:
- Une seule paire clé-valeur est appelée champ.
- Un ensemble de champs défini par le schéma est appelé un Struct.
Struct
Le langage de script d'automatisation définit plusieurs "blocs" ou structures de données standards, appelés structs.
Examinez le Struct automation
, qui définit quatre champs:
Clé | Type | Description |
---|---|---|
|
Facultatif. Nom de l'automatisation. Les utilisateurs ne le verront pas. Il est réservé aux développeurs. |
|
|
Obligatoire. Liste de déclencheurs. |
|
|
Facultatif. État. |
|
|
[Action] |
Obligatoire. Une liste d'actions. |
La section Référence fournit des définitions de schéma pour tous les objets STRUCT disponibles.
Les noms de clé sont uniques au sein d'un objet struct donné et sont sensibles à la casse.
Les types de valeurs possibles sont les suivants:
- Un type primitif: valeur booléenne, nombre, chaîne, heure, etc.
- Un type Struct: une collection de champs.
- Tableau du type de données. Le tableau est désigné par
[]
. Par exemple,[string]
est un tableau de chaînes et[Starter]
est un tableau de structures Starter. - Autres types spéciaux: Entity, FieldPath.
La description de chaque champ contient des informations importantes, y compris:
- Obligatoire ou facultatif, indiquant si le champ est obligatoire ou s'il peut être ignoré.
- Dépendance d'un champ. Seuls les champs facultatifs comportent des dépendances. Cette section décrit les vérifications supplémentaires qui s'appliquent lors de l'utilisation de ce champ, telles que Utiliser le champ B uniquement si le champ A est défini ou Lorsque le champ A est utilisé, ne définissez pas le champ B ni le champ C.
- Valeurs possibles. Par exemple, l'ensemble de valeurs limité d'un champ d'énumération de type chaîne ou une plage de nombres pouvant être utilisée dans un champ de type numéro.
Struct typé
Certains structs peuvent représenter des déclencheurs en fonction d'un horaire ou d'un changement d'état de l'appareil. Chaque type de starter
doit fournir un ensemble distinct de champs.
# 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
Un starter
est un struct typé, étendu par d'autres structs enfants dans le champ type
, tels que time.schedule
ou device.state.OnOff
, pour fournir différentes fonctions. Les structs condition
et action
sont également typés.
Les champs supplémentaires du Struct doivent suivre la spécification enfant (type
). Par exemple, lorsque vous utilisez device.state.OnOff
comme type
, seuls les champsspécifiés pour ce type
sont valides dans cette structure starter
.
Tableau
En YAML, un tableau de valeurs commence par -
(un tiret suivi d'un espace). Le tableau peut contenir plusieurs valeurs Struct ou plusieurs valeurs primitives. Toutefois, les valeurs du tableau doivent être du même type.
Lorsque le tableau contient un seul élément, vous pouvez omettre le tiret et l'espace:
# 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
Les tableaux multidimensionnels, comme [[1, 2], [3, 4]]
, ne sont pas compatibles avec les scripts d'automatisation. L'analyseur de langues aplatit automatiquement un tableau multidimensionnel en un tableau à une seule dimension, dans ce cas, [1, 2, 3, 4]
.
# INVALID: multi-dimensional array
- - 1
- 2
- - 3
- 4
Primitif
Les types de données primitifs suivants sont compatibles avec le schéma de script "Automatisations" :
Valeur booléenne |
|
Nombre |
Nombre entier ou décimal |
Chaîne |
Texte brut Il n'est pas nécessaire de mettre les chaînes entre guillemets, sauf dans des cas spécifiques. |
Date |
Jour et mois. Format : MM-JJ ou MM/JJ.
|
Temps |
Heure de la journée. Il peut s'agir de l'heure de l'horloge ou de l'heure du soleil.
Pour l'heure, vous pouvez utiliser le format AM/PM ou 24 h. Les secondes sont facultatives.
Pour l'heure de l'énergie solaire,
|
DateTime |
Année, mois, jour et heure. Vous devez indiquer un espace blanc entre les parties "Date" et "Heure". Le format de date est AAAA-MM-JJ ou AAAA/MM/JJ. Le format de l'heure est identique au format [Heure](#time). Le fuseau horaire n'est pas accepté.
|
Jour de la semaine |
|
Durée |
Une durée.
|
ColorHex |
Code hexadécimal à six chiffres qui représente une couleur. Il n'y a pas de
|
Température | Données de température normale. Ajoutez toujours
|
ColorTemperature |
Température de couleur en Kelvin.
|
Couleur
Les couleurs peuvent être spécifiées de l'une des trois manières suivantes : à l'aide des types primitifs ColorHex ou ColorTemperature, ou du type composé SpectrumHSV.
SpectrumHSV
Le type SpectrumHSV spécifie une couleur à l'aide de trois champs numériques:
- La teinte correspond à la longueur d'onde de la couleur.
- La saturation indique l'intensité de la couleur.
- Valeur : indique la luminosité ou l'obscurité relative de la couleur.
Dynamique
Parfois, le type de données d'une clé n'est pas fixe. Il peut s'agir de l'un des types primitifs, en fonction des valeurs d'autres champs.
Voici un exemple de champ de type de données dynamique : is
. Le type réel est déterminé par les valeurs des champs type
et 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
Entité
Format de chaîne spécial permettant d'identifier de manière unique une entité détenue par un utilisateur, telle qu'un appareil ou une salle.
L'appareil est l'entité la plus couramment utilisée dans les automatisations. Le format de la chaîne de l'entité est 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
Format de chaîne spécial utilisé pour localiser une donnée dans une charge utile de données. Dans l'exemple suivant, currentVolume
est le chemin FieldPath du champ state
.
# The state field accepts a FieldPath type.
starters:
type: device.state.Volume
device: My TV - Living Room
state: currentVolume
is: 5
D'autres éléments FieldPath peuvent nécessiter plusieurs niveaux pour accéder à l'élément requis. Le format diffère entre le déclencheur et l'action.
Les déclencheurs utilisent une notation par points, avec l'intégralité du chemin d'accès dans le même champ. Cette opération est principalement effectuée à des fins de comparaison dans la logique de démarrage. Par exemple, pour utiliser la température des couleurs comme déclencheur, vous devez utiliser color.colorTemperature
comme état:
starters:
- type: device.state.ColorSetting
device: My Device - Room Name
state: color.colorTemperature
is: 2000K
Les actions, en revanche, utilisent des champs imbriqués. Pour modifier la couleur d'une ampoule en bleu, au lieu d'utiliser color.name
et is: blue
, procédez comme suit:
actions:
- type: device.command.ColorAbsolute
devices: My Device - Room Name
color:
name: blue