Organisation du fichier configuration.yaml

Home Assistant permet d’ajouter des intégrations, des capteurs et pleins d’autres choses de plusieurs manières.

N’étant pas un expert Home Assistant mais un vrai débutant, j’étais un peu perdu au début.

Je vais essayer de vous parler des différentes manières de structurer votre configuration.yaml.

Mise à jour : 26/06/2020 – Temps de lecture / alisation : < 1 / 05 min – Difficulté : Faible.

To do :

  • Mise a jour du liens Xiaomi.

Prérequis, matériels nécessaires & utilisés :

Organiser sa configuration.

1ère méthode configuration.yaml seul.

Dans cette première méthode, tout se met dans configuration.yaml, c’est la méthode la plus simple mais elle deviendra de plus en plus compliqué à gérer au fur et à mesure que votre domotique s’agrandit.

Donc je pense quelle est plus simple au début, mais il faudra passer à la deuxième méthode très rapidement. Autant bien structurer dés le début.

2ème méthode configuration.yaml et fichiers annexes.

Via cette méthode, vous allez pouvoir séparer votre configuration.yaml et lui ajouter des fichiers annexes (sensors.yaml, plants.yaml, input_booleen.yaml, etc).

Chaque ‘intégration HA’ peut avoir son fichier associé, (notify, sensors, etc).

Cette méthode est la plus utilisée car elle permet de s’y retrouver plus facilement.

Elle permet aussi, une chose que j’ai découverte récemment, l’ajout d’un dossier packages rempli de fichiers nomdevotrefichier.yaml permettant de centraliser tous ce qui concerne un sujet par exemple.

Cette méthode est utilisée dans l’article sur l’intégration du matériels Xiaomi .

Comment ajouter un fichier type.yaml.

Nous allons ajouter le fichier sensors.yaml qui contiendra tous nos senseurs que nous ajouterons à la main. Comme ça, si nous devons faire une modification sur un senseur que nous avons créé, il faudra se rendre dans ce fichier.

Dans File editor, configuration.yaml ajouter ceci au début du fichier à la suite de ceux existant.

sensor: !include sensors.yaml

Créer maintenant le fichier sensors.yaml.

Dans File Editor cliquer sur le dossier en haut à gauche puis sur l’icône ajouter un fichier.

Donner un nom à votre fichier, sensors.yaml ici.

Ouvrez-le puis ajouter vos senseurs sans la ligne suivante, car Home Assistant sait déjà que c’est des senseurs que vous déclarez ici.

sensor:

Exemple de fichier sensors.yaml.

## Raspbery Pi
  - platform: systemmonitor
    resources:
      - type: disk_use_percent
        arg: /home
      - type: memory_use_percent
      - type: swap_use_percent
      - type: processor_use
      - type: last_boot
  - platform: template
    sensors:
      prochaine_certificat_a_expirer_sans_boucle:
        friendly_name: "Prochain certificat à expirer"
        attribute_templates:
          timestamp: >
            {# Définition de la liste des entités #}
            {% set liste_des_entites = ['sensor.cert_expiry_timestamp_ndd1', 'sensor.cert_expiry_timestamp_ndd2'] %}
            {% set timestamp_des_entites = [as_timestamp(states('sensor.cert_expiry_timestamp_ndd1'))|float,as_timestamp(states('sensor.cert_expiry_timestamp_ndd2'))|float] %}
            {% set entite_la_plus_petite = timestamp_des_entites|min %}
            {{timestamp_des_entites[timestamp_des_entites.index(entite_la_plus_petite)]}}
        value_template: >
          {# Définition de la liste des entités #}
          {% set liste_des_entites = ['sensor.cert_expiry_timestamp_ndd1', 'sensor.cert_expiry_timestamp_ndd2'] %}
          {% set timestamp_des_entites = [as_timestamp(states('sensor.cert_expiry_timestamp_ndd1'))|float,as_timestamp(states('sensor.cert_expiry_timestamp_ndd2'))|float] %}
          {% set entite_la_plus_petite = timestamp_des_entites|min %}
          {{liste_des_entites[timestamp_des_entites.index(entite_la_plus_petite)].split('sensor.cert_expiry_timestamp_')[1]}}

Comment utiliser les fichiers package.yaml.

Comme dit plus haut cette méthode est très intéressante lorsqu’il s’agit de centraliser , input*, scènes, scripts, automations, customisations, etc., qui concernent un seul sujet.

Exemple : Panneau de commande de la Gateway Xiaomi ou la gestion de votre alarme.

Dans configuration.yaml, ajouter ceci.

homeassistant:
  packages: !include_dir_named packages

Suivre la méthode décrite au dessus, mais pour ajouter un dossier nommé packages.

A l’intérieur de ce dossier, créer un fichier (exemple gatewayxiaomi.yaml) puis saisissez les différentes choses que vous souhaitez y mettre.

input_boolean:
### Input boolean pour couper le son du gateway ###
  jouer_sonneries_gateway:
    name: Play
    icon: mdi:play
### Input boolean pour stop le son du gateway ###
  stop_sonneries_gateway:
    name: Stop
    icon: mdi:stop
### Input boolean pour ajouter un nouveau device à la gateway ###
  ajout_device:
    name: Ajout Device
    icon: mdi:plus-circle
input_number:
  #Input slider pour contrôler le volume du gateway
  xiaomi_gateway_volume:
    name: Volume
    initial: 50
    min: 0
    max: 100
    step: 10
    icon: mdi:volume-high
input_select:
#Gateway Xiaomi Liste des Sons.
  sonneries_gateway:  ##id de votre input select
    name: Sirènes
    options: 
      - "0 - Police car 1"
      - "1 - Police car 2"
      - "2 - Accident"
      - "3 - Countdown"
      - "4 - Ghost"
      - "5 - Sniper rifle"
      - "6 - Battle"
      - "7 - Air raid"
      - "8 - Bark"
  #    - "9 - None"
      - "10 - Doorbell"
      - "11 - Knock at a door"
      - "12 - Amuse"
      - "13 - Alarm clock"
  #    - "14 - None"
  #    - "15 - None"
  #    - "16 - None"
  #    - "17 - None"
  #    - "18 - None"
  #    - "19 - None"
      - "20 - MiMix"
      - "21 - Enthusiastic"
      - "22 - GuitarClassic"
      - "23 - IceWorldPiano"
    icon: mdi:music-note ## Icône de https://materialdesignicons.com/
totototo
script:
  xiaomi_gateway_play_ringtone:
    alias: "[Xiomi] [Gateway] - Play Ringtone Once"
    sequence:
      - service: xiaomi_aqara.play_ringtone
        data_template:
          gw_mac: 123456789012
          ringtone_id: "{{ states('input_select.xiaomi_gateway_ringtone').split('-')[0] }}"
          ringtone_vol: "{{ states('input_number.xiaomi_gateway_volume')|int }}"

Comme vous pouvez le constater, il y a toutes les données concernant la gateway Xiaomi, ce qui est très utile lorsque l’on modifie le nom d’un bouton par exemple ou d’une scène, sans devoir parcourir tous les fichiers des différents emplacements.

NOTA : Les composants que vous mettez dans le nomdevotrefichier.yaml ne doivent plus figurer dans un autre fichier sinon vous allez avoir des erreurs de fichier configuration.yaml.

Conclusion.

Nous venons de voir de manière simple comment peut se construire la configuration de notre Home Assistant. Organiser votre installation dès le début cela vous évitera de perdre du temps par la suite.

Aides (Forum).

Vous souhaitez signaler un erreur, partager votre configuration, ajouter un matériel fonctionnant, ou bénéficier d’une aide ? Cliquez sur les boutons ci-dessous.

Partager une config.

Signaler une faute.

Ajouter un matériel.

Trucs & astuces.

Erreurs les plus fréquentes.

Faites bien attention aux noms que vous donnez à vos fichiers et à ceux que vous rentrez dans le configuration.yaml.

Pensez aussi à bien vérifier l’indentation de vos fichiers, les erreurs viennent souvent de ça.

Mise à jour : (détails)

26/06/2020 :

  • Publication Officielle. (McFly)

23/05/2020 :

  • Correction (McFly)
  • Images Fichiers Médias.

21/05/2020 :

  • Correction (evenisse)

17/05/2020 :

  • Correction et mise en page. (McFly)

12/05/2020 :

  • Création de l’article.

Sources.

Fusionner des fichiers annexes dans un dossier.

Via cette méthode, vous allez pouvoir intégrer plusieurs fichiers contenus dans un répertoire sous forme de liste en fusionnant tous les fichiers qui s’y trouvent en une grande liste.

Chacun des fichiers contenus dans un dossier seront alors fusionnés (ajoutés comme une liste les un aux autres) comme s’ils n’étaient qu’un seul fichier.

Cette méthode est utile si vous souhaitez découper un fichier assez grand qui vous ferait mal à la tête en plusieurs fichiers tous regroupés dans un dossier pour plus de lisibilité. Le nom des fichiers n’a alors pas d’importance et vous pourrez ainsi les nommer de manière logique pour vous. Vous n’aurez donc pas besoin de déclarer chacun des fichiers que vous aller ajouter au dossier.

Elle est principalement utilisée pour découper votre fichier automatisation.yaml en plusieurs fichiers avec des noms plus explicites pour vous, tous regroupés dans un dossier.

Mise en oeuvre:

Nous allons déclarer dans notre fichier configuration.yaml le dossier (automation dans cet exemple) où seront placés tous nos fichiers d’automatisations.

Dans File editor, configuration.yaml ajouter ceci au début du fichier à la suite de ceux existant.

automation: !include_dir_merge_list automation/

Créer maintenant le dossier automation.

Dans File Editor cliquer sur le dossier en haut à gauche puis sur l’icône ajouter un dossier. Ce dossier devra être placé à la racine.

image

Vous avez maintenant un dossier automation:
image

Vous pouvez maintenant créer autant de fichier en .yaml que vous le souhaitez avec les noms qui vous semblent explicites dans ce dossier. Tous ces fichiers seront alors lus les uns à la suite des autres par HA comme si il ne formaient qu’un seul fichier.

image

Il est important de noter que lors de l’utilisation !include_dir_merge_list , vous devez inclure une liste dans chaque fichier (chaque élément de la liste est indiqué par un tiret [-]). Chaque fichier peut contenir une ou plusieurs automatisations.

Exemple du fichier volet.yaml
image

Exemple du fichier reveil.yaml

Peux tu détailler ceci car je ne comprend pas.

Merci

@Yul merci d’essayer de clarfier cet usage qui est très puissant et ma recommandation. En revanche le sujet est complexe et source de problème quand mal utilisé.

Je me demande si nous ne devrions pas essayer de traduire complètement le contenue de cette page: https://www.home-assistant.io/docs/configuration/splitting_configuration/

C’est le fait d’ajouter un « - » au début de chaque automatisation à l’id ou l’alias. Je ne sais mème pas si ca ne doit pas déjà être comme ca pour toutes les automatisation.

J’ai essayé de faire au plus simple mais effectivement pas forcément complet et une traduction de la page de HA pourrait suffir

Ok oui je crois que c’est déjà obligatoire a confirmer sinon on supprimera cette partie.

Merci bien

Je pense que le laisser ne fait pas de mal.

C’est l’utilisation de !include_dir_merge_list qui attend une liste, qui engendre la nécessité du tiret.

Et tu ne dois pas mettre de tiret si tu utilise include_dir_merge_named par exemple (utilisé pour les thèmes par exemple).

Du coup, je pense que ça fait pas de mal de le laisser…

Salut cette solution est deja expliqué dans l’article

Ah oui, désolé, je n’avais pas vu, pourtant je l’ai lu avant de l’écrire.

Pardon. Je supprime mon post.

pas besoin, t’inquiète

Je voudrais passer à l’édition manuelle des fichiers de configuration.

Comment savoir quels sont les attributs utilisables dans les fichiers yaml.

Par exemple, je voudrais migrer le contenu de la page Configuration > Général vers mon fichier configuration.yaml.
Grâce à la page Splitting up the configuration, j’ai ajouté ceci à mon fichier configuration.yaml :

homeassistant:
  name: Maison
  latitude: !secret latitude_home
  longitude: !secret longitude_home
  # 'metric' for Metric, 'imperial' for Imperial
  unit_system: metric
  time_zone: Europe/Paris

Mais je n’arrive pas à trouver l’attribut qui correspond à l’élévation.
Pareil pour les URL interne et externe.
Est-ce qu’il existe une documentation qui permettrait de connaitre tous les attributs possibles et leur types et valeurs possibles (exemple unit_system qui peut prendre metric ou imperial).

Autre question, j’ai essayé d’organiser mes fichiers comme @oncleben31 avec dans le répertoire config :

/ integrations
  | homeassistant.yaml
  | ....
  configuration.yaml

le contenu de configuration.yaml :

homeassistant:
  packages: !include_dir_named integrations

et celui de integrations/homeassistant.yaml :

homeassistant:
  name: Maison-2
  latitude: !secret latitude_home
  longitude: !secret longitude_home
  unit_system: metric
  time_zone: Europe/Paris

Mais quand j’exporte le bloc homeassistant de configuration.yaml vers un fichier externe, j’ai à nouveau accès aux données dans l’UI Configuration > Général et la mise à jour via le fichier integrations/homeassistant.yaml ne se fait pas (je ne vois pas Maison-2 mais Maison qui était la donnée que j’avais renseignée avant via l’UI).

Comment faire pour tout passer par une configuration fichier ?

A partir de ma configuration :

#Configuration de l'assistant
homeassistant:
  name: Maison
  unit_system: metric
  external_url : !secret homeassistant_url_externe
  internal_url:  !secret homeassistant_url_interne
  elevation: !secret homeassistant_elevation
  time_zone: !secret homeassistant_time_zone

On ne peut pas reprocher à l’équipe HA la documentation (faut juste la trouver :wink: )

As tu vérfifer que tous les autres fichiers dans integration étaient bien pris en compte ?

De mémoire il y avait certaines information que nous ne pouvions sortir du configuration.yaml. Avant de transférer ces paramétrages dans l’UI je les avais dans configuration.yaml

Preuve: https://github.com/oncleben31/home-assistant-config/blob/aeb5eaaf3d7d085deed8890c55fbb23f55d5dfca/config/configuration.yaml

Comme le dit @oncleben31, pas sûr que tout puisse être extrait… :thinking:

Pour sûr, pour ton cas, voici un aperçu de la bonne prise en compte des clés que tu souhaitent exporter :

@Clemalex, cool merci. J’avais pas vu cette page, j’étais parti sur le chapitre Advanced Configuration pensant que c’était pas du basic :unamused:, j’chuis un peu boulet !

Par contre la recherche ne m’avait pas sorti cet article, c’est un peu déroutant

Merci encore, j’adore vraiment votre réactivité à tous :+1:

C’est ce que j’ai fait, lorsque le contenu de homeassistant.yaml est dans le fichier configuration.yaml, l’éditeur via UI est désactivé avec les bonnes informations de mon fichier. Par contre, lorsque ces informations sont exportées dans un fichier externe, l’UI me redonne accès avec des anciennes données.
On n’a pas une liste des attributs exportables et non-exportables ?

J’ai créé un nouveau sensor sytemmonitor et je voudrais l’affecter à une Pièce.
Est-ce que c’est via le group que c’est possible ?

Après attention à ne pas tout mettre en yaml car à chaque mise à jour, Home Assistant supprime de plus en plus de réglages du yaml et donc des erreurs supplémentaires possibles

Rien compris… Et sans le correcteur orthographique, ça donne quoi ? :wink:

Bien vu désolé je viens de modifier

1 J'aime