# Répartir le fichier configuration.yaml en plusieurs fichiers

**URL:** <https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480>\
**Category:** Général\
**Tags:** traduction\
**Created:** [Janvier 27, 2021, 8:24 UTC](https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480 "2021-01-27T08:24:08Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tank](https://forum.hacf.fr/user_avatar/forum.hacf.fr/tank/32/3190_2.png) [@Tank](https://forum.hacf.fr/u/Tank)\
**Post date:** [Janvier 27, 2021, 8:24 UTC](https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480/1 "2021-01-27T08:24:09Z")

</div>

Ceci est une traduction de la documentation : [Splitting up the configuration - Home Assistant](https://www.home-assistant.io/docs/configuration/splitting_configuration/)

Pour approfondir vos connaissances, n’hésitez pas à lire le tutoriel de @McFly :

> [@Organisation du fichier configuration.yaml](https://forum.hacf.fr/t/organisation-du-fichier-configuration-yaml/205):
>
> 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 / réalisation : \< 1 / 05 min – Difficulté : Faible. To do : Mise a jour du liens Xiaomi. Prérequis, matériels nécessaires & utilisés : Version de HA…

* * *

## Introduction

Vous utilisez Home Assistant depuis un certain temps déjà et votre fichier `configuration.yaml` devient incompréhensible, ou tout simplement, vous voulez commencer avec l’approche distribué de ce fichier. Voici comment commencer scinder le `configuration.yaml` en morceaux plus compréhensibles (lire : pour les humains).

Tout d’abord, plusieurs membres de la communauté ont nettoyé (lire : sans clés/mots de passe API, etc.) les versions de leurs configurations disponibles pour consultation, vous pouvez en voir la [liste ici](https://www.home-assistant.io/examples/#example-configurationyaml), et certains membres de HACF disponible dans la Awesome List [disponible ici](https://github.com/hacf-fr/awesome-francophone-home-assistant#configurations).

Avant de vous jeter dessus, prenez le temps de lire ce qui suit. Ça facilitera la compréhension, surtout quand il n’y a pas de commentaire (assez explicite) dans les fichiers.

Maintenant, malgré le fait que nous allons découper le fichier `configuration.yaml` dans les explications plus bas, ce fichier va dans tous les cas continuer à exister, bien que sous forme bien moins encombrante, voir presque complètement dénudé.

Dans cette version plus légère, nous aurons encore besoin de ce que l’on pourrait appeler le code principal (exemple) :

```auto
homeassistant:
  # Name of the location where Home Assistant is running
  name: "My Home Assistant Instance"
  # Location required to calculate the time the sun rises and sets
  latitude: 37
  longitude: -121
  # 'metric' for Metric, 'us_customary' for US Customary
  unit_system: us_customary
  # Pick yours from here: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
  time_zone: "America/Los_Angeles"
  customize: !include customize.yaml

```

Notez que chaque ligne après `homeassistant:` est indentée de deux (2) espaces. Comme les fichiers de configuration de Home Assistant sont basés sur le langage YAML, l’indentation et l’espacement sont importants. Notez également que l’entrée apparemment étrange après `customize:`

`!include customize.yaml` est la déclaration qui indique à Home Assistant d’insérer le contenu de `customize.yaml` à ce moment-là. C’est ainsi que nous allons pouvoir décomposer un fichier monolithique et difficile à lire (lorsqu’il devient volumineux) en morceaux plus faciles à gérer.

Maintenant, avant de commencer à répartir les différents composants, examinons les autres intégrations (dans notre exemple) qui resteront dans le fichier de base :

```auto
history:
frontend:
logbook:
http:
  api_password: "ImNotTelling!"

ifttt:
  key: ["nope"]

mqtt:
  sensor:
    - name: "test sensor 1"
      state_topic: "test/some_topic1"
    - name: "test sensor 2"
      state_topic: "test/some_topic2"

```

Comme pour le code principal, l’indentation fait la différence. Les en-têtes d’intégration (par exemple : `mqtt:`) doivent être alignés à gauche (sans indentation), et le paramètre (`sensor`) doit être indenté de deux (2) espaces. a liste `-` sous la clé `sensor` doit être indentée de deux (2) espaces supplémentaires suivis d’un espace unique. La liste des capteurs `mqtt` contient deux (2) configurations contenant deux (2) clés chacune.

Notez qu’il est techniquement possible de séparer ces intégrations de ce fichier. A vous de mesurer les avantages/inconvénients pour de si petites et " uniques" intégrations.  
Vous remarquerez également le symbole `#` (dièse). Il débute une ligne de commentaire, dans la mesure où ce qui suit sur la même ligne ne sera pas interprété. Cela améliore la lisibilité du fichier, permet de désactiver des fonctionnalités ou de laisser une explication sur ce qui l’entoure.

Supposons désormais qu’un fichier vierge ait été créé dans le répertoire de configuration de Home Assistant pour chacun des éléments suivants :

```auto
automation.yaml
zone.yaml
sensor.yaml
switch.yaml
device_tracker.yaml
customize.yaml

```

`automation.yaml` contiendra tous les détails d’intégration de l’automatisation. zone.yaml contiendra les détails d’intégration de la zone, etc. Ces fichiers peuvent être nommés de la façon que vous désirez, mais leur donner des noms correspondant à leur fonction facilitera le suivi, et le partage avec les autres membres (aussi bien pour avoir de l’aide que pour aider quelqu’un d’autre).

Ce qui induit que le fichier `configuration.yaml` doit contenir les lignes suivantes :

```auto
automation: !include automation.yaml
zone: !include zone.yaml
sensor: !include sensor.yaml
switch: !include switch.yaml
device_tracker: !include device_tracker.yaml

```

L’imbrication des `!include` (le fait d’avoir un `!include` dans un fichier qui est lui-même `!include`) fonctionnera.  
Certaines intégrations supportent plusieurs `!include`s de haut niveau, cela inclut les intégrations définissant un domaine IoT, par exemple `light`, `switch`, `sensor` ainsi que les intégrations `automation`, `script` et `template`, si vous donnez un label différent à chacune d’entre elles. La configuration des autres intégrations peut être divisée en utilisant des paquets. Pour en savoir plus sur les paquets, voir la page [Paquets](https://www.home-assistant.io/docs/configuration/packages).

Exemple de clés de premier niveau multiples pour la plateforme `light` :

```auto
light:
- platform: group
  name: "Bedside Lights"
  entities:
    - light.left_bedside_light
    - light.right_bedside_light

# define more light groups in a separate file
light groups: !include light-groups.yaml

# define some light switch mappings in a different file
light switches: !include light-switches.yaml

```

Avec `!include light-groups.yaml` pouvant ressembler à ceci :

```auto
- platform: group
  name: "Outside Lights"
  entities:
    - light.porch_lights
    - light.patio_lights

```

Et `!include light-switches.yaml` à cela :

```auto
- platform: switch
  name: "Patio Lights"
  entity_id: switch.patio_lights

- platform: switch
  name: "Floor Lamp"
  entity_id: switch.floor_lamp_plug

```

Très bien, nous avons donc les intégrations uniques et les déclarations d’inclusion dans le fichier de base, mais que peut-on mettre dans ces fichiers supplémentaires ?  
Regardons un exemple issu de la documentation officielle d’Home Assistant, `device_tracker.yaml` :

```auto
- platform: owntracks
- platform: nmap_tracker
  
  home_interval: 3
  hosts: 192.168.2.0/24

  track_new_devices: true
  interval_seconds: 40
  consider_home: 120

```

Ce petit exemple illustre le fonctionnement des fichiers fractionnés. Dans ce cas, nous commençons avec deux entrées de suivi de périphérique (`owntracks` et `nmap`). Ces fichiers suivent le «&nbsp;[style 1](https://www.home-assistant.io/docs/configuration/devices#style-1-collect-every-entity-under-the-parent)&nbsp;», c’est-à-dire une entrée de tête alignée entièrement à gauche (`- platform: owntracks`) suivie des entrées de paramètres indentées de deux espaces.

Voici un autre exemple de configuration, avec une sonde (`sensor`) plus complexe :

```auto
### sensor.yaml
### METEOBRIDGE #############################################
- platform: tcp
  name: "Outdoor Temp (Meteobridge)"
  host: 192.168.2.82
  timeout: 6
  payload: "Content-type: text/xml; charset=UTF-8\n\n"
  value_template: "{{value.split (' ')[2]}}"
  unit: C
- platform: tcp
  name: "Outdoor Humidity (Meteobridge)"
  host: 192.168.2.82
  port: 5556
  timeout: 6
  payload: "Content-type: text/xml; charset=UTF-8\n\n"
  value_template: "{{value.split (' ')[3]}}"
  unit: Percent

#### STEAM FRIENDS ##################################
- platform: steam_online
  api_key: ["not telling"]
  accounts:
    - 76561198012067051

#### TIME/DATE ##################################
- platform: time_date
  display_options:
      - "time"
      - "date"
- platform: worldclock
  time_zone: Etc/UTC
  name: "UTC"
- platform: worldclock
  time_zone: America/New_York
  name: "Ann Arbor"

```

Vous remarquerez que cet exemple comprend une section de paramètres secondaires (sous la section STEAM) ainsi qu’un meilleur exemple de la façon dont les commentaires peuvent être utilisés pour décomposer les fichiers en sections.  
Tous les éléments ci-dessus peuvent être appliqués lors de la division de fichiers à l’aide de paquets. Pour en savoir plus en savoir plus sur les paquets, consultez la page [Paquets](https://www.home-assistant.io/docs/configuration/packages).

Si vous avez des problèmes, consultez le fichier `home-assistant.log` dans le répertoire de configuration ainsi que vos indentations. Si malgré tout, ça ne fonctionne pas, n’hésitez pas à poser vos questions sur ce [forum](https://forum.hacf.fr) ou sur [Discord](https://discord.gg/PaZFEjX).

## Débogage de fichiers de configuration

Si vous disposez de nombreux fichiers de configuration, Home Assistant fournit une interface en ligne commande (CLI) qui vous permet de voir comment c’est interprété, chaque type d’installation sa propre section. Ces commandes sont utilisables via l’add-on `SSH & Web Terminal` :

- Lister tous les fichiers chargés : `hass --script check_config --files`
- Visualisation de la configuration d’un composant : `hass --script check_config --info light`
- Ou la configuration de tous les composants : `hass --script check_config --info all`  
Vous pouvez obtenir de l’aide sur la ligne de commande en utilisant : `hass --script check_config --help`

## Utilisation avancée

Il existe quatre options avancées pour inclure des répertoires entiers en une seule fois. Veuillez noter que vos fichiers doivent porter l’extension de fichier `.yaml`, le format `.yml` n’est pas pris en charge.  
Cela vous permettra d’ `!include` des fichiers avec des extensions `.yml` depuis les fichiers `.yaml` ; sans que ces fichiers `.yml` soient importés par les commandes suivantes elles-mêmes.

- `!include_dir_list` renvoie le contenu d’un répertoire sous forme de liste, chaque contenu de fichier étant une entrée dans la liste. Les entrées de la liste sont classées selon l’ordre alphanumérique des noms des fichiers.
- `!include_dir_named` renverra le contenu d’un répertoire sous la forme d’un dictionnaire qui met en correspondance nom de fichier =\> contenu du fichier.
- `!include_dir_merge_list` renvoie le contenu d’un répertoire sous forme de liste en fusionnant tous les fichiers (qui doivent contenir une liste) en une seule grande liste.
- `!include_dir_merge_named` renverra le contenu d’un répertoire sous forme de dictionnaire en chargeant chaque fichier et en le fusionnant dans un grand dictionnaire.

Ces options fonctionnent de façon récursive. À titre d’exemple, en utilisant `!include_dir_list automation`, comprendra les 6 fichiers indiqués suivant :

```auto
.
└── .homeassistant
    ├── automation
    │ ├── lights
    │ │ ├── turn_light_off_bedroom.yaml
    │ │ ├── turn_light_off_lounge.yaml
    │ │ ├── turn_light_on_bedroom.yaml
    │ │ └── turn_light_on_lounge.yaml
    │ ├── say_hello.yaml
    │ └── sensors
    │ └── react.yaml
    └── configuration.yaml (non inclus)

```

Voir ci-dessous pour les exemples de chacune des options.

### Exemple : `!include_dir_list`

À l’origine, seulement le fichier `configuration.yaml` contenant :

```auto
automation:
  - alias: "Automation 1"
    trigger:
      platform: state
      entity_id: device_tracker.iphone
      to: "home"
    action:
      action: light.turn_on
      target:
        entity_id: light.entryway
  - alias: "Automation 2"
    trigger:
      platform: state
      entity_id: device_tracker.iphone
      from: "home"
    action:
      action: light.turn_off
      target:
        entity_id: light.entryway

```

Avec cette option, cela devient :

- `configuration.yaml` :

```auto
automation: !include_dir_list automation/presence/

```

- `automation/presence/automation1.yaml` :

```auto
alias: "Automation 1"
trigger:
  platform: state
  entity_id: device_tracker.iphone
  to: "home"
action:
  action: light.turn_on
  target:
    entity_id: light.entryway

```

- `automation/presence/automation2.yaml` :

```auto
alias: "Automation 2"
trigger:
  platform: state
  entity_id: device_tracker.iphone
  from: "home"
action:
  action: light.turn_off
  target:
    entity_id: light.entryway

```

Il est important de noter que chaque fichier ne doit contenir qu’une seule entrée lorsque vous utilisez `!include_dir_list`.

### Exemple : `!include_dir_named`

À l’origine, seulement le fichier `configuration.yaml` contenant :

```auto
alexa:
  intents:
    LocateIntent:
      action:
        action: notify.pushover
        data:
          message: "Your location has been queried via Alexa."
      speech:
        type: plaintext
        text: >
          {%- for state in states.device_tracker -%}
            {%- if state.name.lower() == User.lower() -%}
              {{ state.name }} is at {{ state.state }}
            {%- endif -%}
          {%- else -%}
            I am sorry. Pootie! I do not know where {{User}} is.
          {%- endfor -%}
    WhereAreWeIntent:
      speech:
        type: plaintext
        text: >
          {%- if is_state('device_tracker.iphone', 'home') -%}
            iPhone is home.
          {%- else -%}
            iPhone is not home.
          {% endif %}

```

Avec cette option, cela devient :

- `configuration.yaml` :

```auto
alexa:
  intents: !include_dir_named alexa/

```

- `alexa/LocateIntent.yaml` :

```auto
action:
  action: notify.pushover
  data:
    message: "Your location has been queried via Alexa."
speech:
  type: plaintext
  text: >
    {%- for state in states.device_tracker -%}
      {%- if state.name.lower() == User.lower() -%}
        {{ state.name }} is at {{ state.state }}
      {%- endif -%}
    {%- else -%}
      I am sorry. Pootie! I do not know where {{User}} is.
    {%- endfor -%}

```

- `alexa/WhereAreWeIntent.yaml` :

```auto
speech:
  type: plaintext
  text: >
    {%- if is_state('device_tracker.iphone', 'home') -%}
      iPhone is home.
    {%- else -%}
      iPhone is not home.
    {% endif %}

```

### Exemple `!include_dir_merge_list`

À l’origine, seulement le fichier `configuration.yaml` contenant :

```auto
automation:
  - alias: "Automation 1"
    trigger:
      - platform: state
        entity_id: device_tracker.iphone
        to: "home"
    action:
      - action: light.turn_on
        target:
          entity_id: light.entryway
  - alias: "Automation 2"
    trigger:
      - platform: state
        entity_id: device_tracker.iphone
        from: "home"
    action:
      - action: light.turn_off
        target:
          entity_id: light.entryway

```

Avec cette option, cela devient :

- `configuration.yaml` :

```auto
automation: !include_dir_merge_list automation/

```

- `automation/presence.yaml` :

```auto
- alias: "Automation 1"
  trigger:
    - platform: state
      entity_id: device_tracker.iphone
      to: "home"
  action:
    - action: light.turn_on
      target:
        entity_id: light.entryway
- alias: "Automation 2"
  trigger:
    - platform: state
      entity_id: device_tracker.iphone
      from: "home"
  action:
    - action: light.turn_off
      target:
        entity_id: light.entryway

```

Il est important de noter que lorsque vous utilisez `!include_dir_merge_list`, vous devez inclure une liste dans chaque fichier (chaque élément de la liste est désigné par un trait d’union [-]). Et que chaque fichier peut contenir une ou plusieurs entrées.

### Exemple : `!include_dir_merge_named`

À l’origine, seulement le fichier `configuration.yaml` contenant :

```auto
group:
  bedroom:
    name: "Bedroom"
    entities:
      - light.bedroom_lamp
      - light.bedroom_overhead
  hallway:
    name: "Hallway"
    entities:
      - light.hallway
      - thermostat.home
  front_yard:
    name: "Front Yard"
    entities:
      - light.front_porch
      - light.security
      - light.pathway
      - sensor.mailbox
      - camera.front_porch

```

Avec cette option, cela devient :

- `configuration.yaml` :

```auto
group: !include_dir_merge_named group/

```

- `group/interior.yaml` :

```auto
bedroom:
  name: "Bedroom"
  entities:
    - light.bedroom_lamp
    - light.bedroom_overhead
hallway:
  name: "Hallway"
  entities:
    - light.hallway
    - thermostat.home

```

- `group/exterior.yaml` :

```auto
front_yard:
  name: "Front Yard"
  entities:
    - light.front_porch
    - light.security
    - light.pathway
    - sensor.mailbox
    - camera.front_porch

```

### Exemple : combiner `!include_dir_merge_list` avec `automations.yaml`

Vous voulez passer à l’étape avancée et diviser vos automatismes, mais vous voulez quand même pouvoir créer des [automatismes](https://my.home-assistant.io/redirect/automations) depuis l’interface graphique ?  
Comme indiqué plus haut, il est possible d’imbriquer les `includes`. Voici comment nous pouvons faire cela pour les automatismes.

L’utilisation d’étiquettes comme `manual` ou `ui` permet d’utiliser plusieurs clés dans la configuration :  
`configuration.yaml` :

```auto
# automations faites à la main
automation manual: !include_dir_merge_list automations/

# automations créées via l’interface graphique
automation ui: !include automations.yaml

```

* * *

MAJ 12/05/2021 : pour correspondre à la mise à jour de la documentation (n° commit : 2a083a8)  
MAJ 12/11/2023 : pour correspondre à la dernière version de la documentation  
MAJ 22/12/2023 : pour correspondre à la dernière version de la documentation  
MAJ 14/08/2024 : Les `service` sont désormais des `action` (2024.8)

---

<div class="post-metadata">

**Author:** ![Twinsen](https://forum.hacf.fr/user_avatar/forum.hacf.fr/twinsen/32/258_2.png) [@Twinsen](https://forum.hacf.fr/u/Twinsen)\
**Post date:** [Janvier 27, 2021, 10:52 UTC](https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480/8 "2021-01-27T22:52:23Z")

</div>

Super post. Mériterait de le mettre dans les tutoriels officiel. Un petit mot sur les packages ?  
Actuellement je ne regroupe plus par fichier automation: Script: … mais plutôt par projet via les packages. L’avantage est de trouver au même endroit toutes les sensors, automation script … du projet.

---

<div class="post-metadata">

**Author:** ![Clemalex](https://forum.hacf.fr/user_avatar/forum.hacf.fr/clemalex/32/3691_2.png) [@Clemalex](https://forum.hacf.fr/u/Clemalex)\
**Post date:** [Janvier 27, 2021, 11:23 UTC](https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480/9 "2021-01-27T23:23:33Z")

</div>

> [@Twinsen](#):
>
> Mériterait de le mettre dans les tutoriels officiel

C’est déjà dans #Home Assistant - Tutoriels & Partages … 🙃

> [@Twinsen](#):
>
> Un petit mot sur les packages ?

Non car ici c’est la traduction 🇫🇷 de la documentation concernant la configuration partagée.

La méthode package est abordé dans ce tutoriel : [Organisation du fichier configuration.yaml](https://forum.hacf.fr/t/organisation-du-fichier-configuration-yaml/205)

---

<div class="post-metadata">

**Author:** ![Tank](https://forum.hacf.fr/user_avatar/forum.hacf.fr/tank/32/3190_2.png) [@Tank](https://forum.hacf.fr/u/Tank)\
**Post date:** [Janvier 28, 2021, 5:54 UTC](https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480/10 "2021-01-28T05:54:54Z")

</div>

C’est dans la partie [utilisation avancée](https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480#utilisation-avanc%C3%A9e) de cette documentation.  
Ainsi, que dans le tuto de @McFly cité par @Clemalex

---

<div class="post-metadata">

**Author:** ![Lychee](https://forum.hacf.fr/letter_avatar_proxy/v4/letter/l/eada6e/32.png) [@Lychee](https://forum.hacf.fr/u/Lychee)\
**Post date:** [Février 29, 2024, 7:03 UTC](https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480/11 "2024-02-29T19:03:13Z")

</div>

Bon même si la discussion date un peu, il y a eu un update fin 2023  
Du coup je me permets d’y poser ma question

Du coup je crée un fichier pour y mettre ma conf perso  
Bon j’ai repris pour de la facilité les infos de la présentation pour les deux capteurs

 ![yaml001](https://forum.hacf.fr/uploads/default/original/3X/8/7/87fad542c19cdeb97735e730de3480b90c637fde.jpeg)

J’ajoute ensuite dans le configuration.yaml la ligne pour inclure mon fichier  
Sauf erreur je ne vois cela expliqué nul part  
 ![yaml002](https://forum.hacf.fr/uploads/default/original/3X/6/e/6e9c9eb98f89a7a6d173501b33313fd9fc9432c9.jpeg)

La première question que j’ai en faîtes c’est à quoi correspond ce qui est avant les deux points  
Du coup j’ai essayé avec ces deux syntaxes :

```auto
test: !include 0test.yaml
0test: !include 0test.yaml

```

Et j’ai ces erreurs

 ![yaml003](https://forum.hacf.fr/uploads/default/original/3X/0/7/078a7e7dd00a2ce345d6ae38458b757c194dcf86.jpeg)  
 ![yaml004](https://forum.hacf.fr/uploads/default/original/3X/6/0/60d1b68c2238765cb532b1262e1794187bafc6af.jpeg)

J’en conclu qu’il faut une intégration test ou 0test  
Mais du coup que faut-il mettre exactement ? L’un de vous peut-il me faire un refresh la dessus ?

Par avance merci

@+

---

<div class="post-metadata">

**Author:** ![Idaho947](https://forum.hacf.fr/user_avatar/forum.hacf.fr/idaho947/32/36207_2.png) [@Idaho947](https://forum.hacf.fr/u/Idaho947)\
**Post date:** [Février 29, 2024, 7:33 UTC](https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480/12 "2024-02-29T19:33:58Z")

</div>

Je pense que tu mets pas les lignes au bon endroit mais on voit pas ton config complet. Il faut les mettre sous home assistant : ou indente deux espaces.

Pourquoi tu inclus les yaml automation, scene et scripts ?

---

<div class="post-metadata">

**Author:** ![Lychee](https://forum.hacf.fr/letter_avatar_proxy/v4/letter/l/eada6e/32.png) [@Lychee](https://forum.hacf.fr/u/Lychee)\
**Post date:** [Mars 1, 2024, 6:48 UTC](https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480/13 "2024-03-01T06:48:42Z")

</div>

Le début de mon fichier configuration.yaml  
Les 11 premières lignes sont les lignes par défaut, j’y ai jamais touché

 ![yaml005](https://forum.hacf.fr/uploads/default/original/3X/f/5/f56cc70a56c64d42deba37bb65dd6d7843a179fc.jpeg)

---

<div class="post-metadata">

**Author:** ![Lychee](https://forum.hacf.fr/letter_avatar_proxy/v4/letter/l/eada6e/32.png) [@Lychee](https://forum.hacf.fr/u/Lychee)\
**Post date:** [Mars 1, 2024, 7:18 UTC](https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480/14 "2024-03-01T07:18:58Z")

</div>

Alors j’ai contourné le pb car depuis hier au soir ça me chauffait les oreilles 🤣

J’ai crée un folder à la racine, j’ai mis le fichier test.yaml dedans

Et dans le configuration.yaml j’ai ajouté ceci  
le _ **homeassistant:** _ est nécessaire

![image](https://forum.hacf.fr/uploads/default/original/3X/2/e/2ef50d8995da36792c94d0dc29d315321d8fe4fc.png)

---

<div class="post-metadata">

**Author:** ![MilesTEG1](https://forum.hacf.fr/user_avatar/forum.hacf.fr/milesteg1/32/45824_2.png) [@MilesTEG1](https://forum.hacf.fr/u/MilesTEG1)\
**Post date:** [Mars 1, 2024, 8:29 UTC](https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480/15 "2024-03-01T08:29:34Z")

</div>

@Lychee  
Bonjour 👋🏻

Tu te fourvoies sur l’utilisation des includes.

En gros, les entêtes comme :

```yaml
automation: 
  ...
script: 
  ...
scene: 
  ...
input_number:  
  ...
template:  
  ...
sensor:  
  ...
switch: 
  ...
utility_meter:  
  ...
http:
  ...

```

sont des en-têtes système, tu ne peux pas les renommer, car ils correspondent à un point particulier de la configuration.

Si tu veux déporter ces élements, pas de soucis, tu peux les mettres en includes, mais dans les fichiers `.yaml` que tu vas créer, il ne faut pas répéter l’en-tête.  
Ainsi pour ton mqtt, il faudrait que tu fasses ça :

1. Tu crées un dossier que je nomme `separate_yaml` dans le dossier `config` de HA :

2. Dans `configuration.yaml`, tu mets :

```yaml
mqtt: !include /config/separate_yaml/mqtt.yaml

```

1. Dans le fichier `/config/separate_yaml/mqtt.yaml`, tu mets :

```yaml
sensor
  - name: "test sensor 1"
    state_topic: "test/some_topic1"
  - name: "test sensor 2"
    state_topic: "test/some_topic2"

```

Si tu as besoin de séparer encore plus, par exemple avec les template, tu peux aussi faire un include de dossier comme tu as fait avec le packages :

```yaml
template: !include_dir_merge_list /config/separate_yaml/templates

```

 ![CleanShot 2024-03-01 at 09.28.28@2x](https://forum.hacf.fr/uploads/default/original/3X/e/b/eb291f68bc8f678b9661d68684247859538d1b79.png)

Ta méthode fonctionne, mais elle est un peu brutale, et sans finesse 😉  
Je pense que séparer comme je le propose est plus logique et moins source de problèmes.

---

<div class="post-metadata">

**Author:** ![Lychee](https://forum.hacf.fr/letter_avatar_proxy/v4/letter/l/eada6e/32.png) [@Lychee](https://forum.hacf.fr/u/Lychee)\
**Post date:** [Mars 1, 2024, 7:32 UTC](https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480/16 "2024-03-01T19:32:42Z")

</div>

> [@MilesTEG1](#):
>
> … mais elle est un peu brutale, et sans finesse 😉  
> Je pense que séparer comme je le propose est plus logique et moins source de problèm

Comment ça je suis brutal 🤣 🤣 🤣  
Ouais j’aime bien y envoyer

Ok je vais, à tête reposée, demain matin matin prendre en compte ton retour  
Merci beaucoup

---

<div class="post-metadata">

**Author:** ![Oles67](https://forum.hacf.fr/letter_avatar_proxy/v4/letter/o/73ab20/32.png) [@Oles67](https://forum.hacf.fr/u/Oles67)\
**Post date:** [Mars 1, 2024, 7:56 UTC](https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480/17 "2024-03-01T19:56:13Z")

</div>

Je fais aussi comme @MilesTEG1

---

<div class="post-metadata">

**Author:** ![Patrick\_MX](https://forum.hacf.fr/user_avatar/forum.hacf.fr/patrick_mx/32/2958_2.png) [@Patrick\_MX](https://forum.hacf.fr/u/Patrick_MX)\
**Post date:** [Mars 28, 2024, 11:48 UTC](https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480/18 "2024-03-28T23:48:50Z")

</div>

Bonjour.  
Si ça peut aider quelqu’un (car ayant consulté aussi votre sujet pour tenter de résoudre un problème perso sur les `sensors`), j’ai fait un résumé dans [ce post](https://forum.hacf.fr/t/creation-dun-sensor-via-un-fichier-yaml/39135/13) de la solution adoptée _(traite uniquement des_ `sensors`_, mais est peut-être utile pour le problème de @Lychee)_.

---

<div class="post-metadata">

**Author:** ![Lychee](https://forum.hacf.fr/letter_avatar_proxy/v4/letter/l/eada6e/32.png) [@Lychee](https://forum.hacf.fr/u/Lychee)\
**Post date:** [Juin 25, 2024, 4:59 UTC](https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480/19 "2024-06-25T16:59:15Z")

</div>

Avec un peu de retard  
Merci Patrick\_MX

---

<div class="post-metadata">

**Author:** ![lilp](https://forum.hacf.fr/user_avatar/forum.hacf.fr/lilp/32/39729_2.png) [@lilp](https://forum.hacf.fr/u/lilp)\
**Post date:** [Décembre 14, 2024, 8:50 UTC](https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480/20 "2024-12-14T08:50:51Z")

</div>

Salut, je tente aussi d'organiser au mieux mes fichiers YAML.  
J'ai réussi à mettre en place la partie (automations, scripts, scenes), via l'organisation suivante :

```auto
# Loads default set of integrations. Do not remove.
default_config:

expose_camera_stream_source:

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes/
  extra_module_url:
    - /hacsfiles/Bubble-Card/bubble-pop-up.js
    - /hacsfiles/lovelace-card-mod/card-mod.js
    - /hacsfiles/swiss-army-knife-card/swiss-army-knife-card.js

# Automations
automation: !include_dir_merge_list custom_configs/automations/

# Scripts
script: !include_dir_merge_named custom_configs/scripts/

# Scenes
scene: !include_dir_merge_list custom_configs/scenes/

#Switch
#switch: !include_dir_merge_list custom_configs/switches/
switch: !include switches.yaml

# Sensors
#sensor: !include_dir_merge_list custom_configs/templates/sensors/
#template: !include_dir_merge_named custom_configs/templates/sensors
template: !include_dir_merge_list template/
#template: !include template.yaml

# Binary sensors
#binary_sensor: !include_dir_merge_list custom_configs/templates/binary_sensors/

command_line: !include command_line.yaml
homeassistant:
  packages: !include_dir_named packages
  customize: !include customize.yaml

# Inclure le fichier device_tracker.yaml
device_tracker: !include device_trackers.yaml

```

Mais j'ai les switch ne semblent pas passer.

 ![image](https://forum.hacf.fr/uploads/default/original/3X/3/e/3ef6b741dad8b542c52f888a476117540121310f.png)

Exemple d'un switch :

```auto
switch:
  - platform: template
    switches:
      radiateur_bureau:
        friendly_name: "Radiateur bureau"
        unique_id: switch_pilotage_radiateur_bureau
        value_template: "{{ is_state('select.radiateur_bureau_pilot_wire_mode', 'comfort') }}"
        turn_on:
          service: select.select_option
          data:
            option: comfort
          target:
            entity_id:
              - select.radiateur_bureau_pilot_wire_mode
        turn_off:
          service: select.select_option
          data:
            option: eco
          target:
            entity_id:
              - select.radiateur_bureau_pilot_wire_mode
        icon_template: "{% if is_state('sensor.radiateur_bureau_pilot_wire_mode', 'comfort') %}mdi:radiator-disabled{% else %}mdi:radiator{% endif %}"

```

---

<div class="post-metadata">

**Author:** ![cocof](https://forum.hacf.fr/user_avatar/forum.hacf.fr/cocof/32/20416_2.png) [@cocof](https://forum.hacf.fr/u/cocof)\
**Post date:** [Décembre 14, 2024, 5:23 UTC](https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480/21 "2024-12-14T17:23:42Z")

</div>

bonjour  
je crois que ca a été expliqué plus haut.  
si dans le conf.yaml tu mets switch: include …switches.yaml  
alors dans le switches.yaml il ne faut pas remettre switch sinon Ha le voit 2 fois.

---

<div class="post-metadata">

**Author:** ![lilp](https://forum.hacf.fr/user_avatar/forum.hacf.fr/lilp/32/39729_2.png) [@lilp](https://forum.hacf.fr/u/lilp)\
**Post date:** [Décembre 18, 2024, 10:39 UTC](https://forum.hacf.fr/t/repartir-le-fichier-configuration-yaml-en-plusieurs-fichiers/2480/22 "2024-12-18T10:39:30Z")

</div>

Salut,  
J’ai un autre soucis, mais avec les automations.  
J’ai bien l’ensemble des automations de visibles et prises en comptes via le fichier configuration.yaml suivant :

```auto
# My own handmade automations
automation manual: !include_dir_merge_list custom_configs/automations/

# Automations I create in the UI
automation ui: !include automations.yaml

```

Mais j’ai quelques automations qui ne se lancent plus toutes seules lorsqu’elles sont dans leurs fichiers spécifiques et d’autres oui. Mais qui se tournent bien à la main.  
Automations qui ne se lancent plus toute seule :

```auto
- id: "1724660984859"
  alias: Activation de l'alarme en mode absence
  description: Activation de l'alarme lors du départ.
  triggers:
    - device_id: XxX
      domain: device_tracker
      entity_id: XxX
      type: leaves
      zone: zone.home
      trigger: device
  conditions:
    - condition: state
      entity_id: sensor.oneplus_wifi_connection
      state: <not connected>
  actions:
    - action: notify.mobile_app_oneplus
      data:
        message: Que voulez-vous faire ?
        data:
          actions:
            - action: alarme
              title: Activer l'alarme
            - action: ne_pas_activer
              title: Ne pas activer l'alarme
        title: "Activation de l'alarme :"
      enabled: true
    - wait_for_trigger:
        - event_type: mobile_app_notification_action
          event_data:
            action: alarme
          trigger: event
        - event_type: mobile_app_notification_action
          event_data:
            action: ne_pas_activer
          trigger: event
        - event_type: mobile_app_notification_action
          event_data: {}
          trigger: event
      enabled: true
      timeout:
        hours: 0
        minutes: 5
        seconds: 0
        milliseconds: 0
    - choose:
        - conditions:
            - condition: template
              value_template: '{{ wait.trigger.event.data.action == "alarme" }}'
          sequence:
            - action: script.scriptalarm
              metadata: {}
              data: {}
            - if:
                - type: is_open
                  condition: device
                  device_id: XxX
                  entity_id: XxX
                  domain: binary_sensor
              then:
                - action: notify.mobile_app_oneplus
                  metadata: {}
                  data:
                    title: "Incident activation de l'alarme :"
                    message: La baie vitrée est ouverte.
        - conditions:
            - condition: template
              value_template: '{{ wait.trigger.event.data.action == "ne_pas_activer" }}'
          sequence: []
        - conditions:
            - condition: template
              value_template: "{{ wait.trigger == None }}"
          sequence:
            - action: script.scriptalarm
              metadata: {}
              data: {}
            - if:
                - type: is_open
                  condition: device
                  device_id: XxX
                  entity_id: XxX
                  domain: binary_sensor
              then:
                - action: notify.mobile_app_oneplus
                  metadata: {}
                  data:
                    title: "Incident activation de l'alarme :"
                    message: La baie vitrée est ouverte.

```

Automations qui tournent bien toute seule, malgré qu’elle soit dans son fichier propre :

```auto
- id: "1732542303911"
  alias: Notification de MAJ
  description: Notification de MAJ
  triggers:
    - trigger: numeric_state
      entity_id:
        - sensor.nombre_de_mise_a_jour_total
      above: 1
  conditions: []
  actions:
    - choose:
        - conditions:
            - condition: numeric_state
              entity_id: sensor.tplt_available_updates_system
              above: 0
          sequence:
            - data:
                title: "Mise à jour disponible :"
                message: "TPLT

                  "
              action: notify.notify
        - conditions:
            - condition: numeric_state
              entity_id: sensor.tplt_available_updates_addon
              above: 1
          sequence:
            - data:
                title: "Mise à jour disponible :"
                message: "TPLT Addons

                  "
              action: notify.notify
        - conditions:
            - condition: numeric_state
              entity_id: sensor.tplt_available_updates_hacs
              above: 1
          sequence:
            - data:
                title: "Mise à jour disponible :"
                message: "TPLT HACS

                  "
              action: notify.notify
        - conditions:
            - condition: state
              entity_id: update.home_assistant_core_update
              state: "on"
          sequence:
            - data:
                title: "Mise à jour disponible :"
                message: "HA Core

                  "
              action: notify.notify
        - conditions:
            - condition: state
              entity_id: update.home_assistant_supervisor_update
              state: "on"
          sequence:
            - data:
                title: "Mise à jour disponible :"
                message: "HA Supervisor

                  "
              action: notify.notify
        - conditions:
            - condition: state
              entity_id: update.home_assistant_operating_system_update
              state: "on"
          sequence:
            - data:
                title: "Mise à jour disponible :"
                message: "HA OS

                  "
              action: notify.notify
        - conditions:
            - condition: state
              entity_id: binary_sensor.node_proxmox_updates_packages_2
              state: "on"
          sequence:
            - data:
                title: "Mise à jour disponible :"
                message: "Proxmox

                  "
              action: notify.notify
        - conditions:
            - condition: state
              entity_id: update.plex_media_server
              state: "on"
          sequence:
            - data:
                title: "Mise à jour disponible :"
                message: "LilP'Plex

                  "
              action: notify.notify
        - conditions:
            - condition: state
              entity_id: update.plex_media_server
              state: "on"
          sequence:
            - data:
                title: "Mise à jour disponible :"
                message: "Nebula'Plex

                  "
              action: notify.notify
        - conditions:
            - condition: state
              entity_id: update.file_editor_update
              state: "on"
          sequence:
            - data:
                title: "Mise à jour disponible :"
                message: "FileEditor

                  "
              action: notify.notify
        - conditions:
            - condition: state
              entity_id: update.home_assistant_google_drive_backup_update
              state: "on"
          sequence:
            - data:
                title: "Mise à jour disponible :"
                message: "GoogleBackup

                  "
              action: notify.notify
        - conditions:
            - condition: state
              entity_id: update.samba_share_update
              state: "on"
          sequence:
            - data:
                title: "Mise à jour disponible :"
                message: "Samba

                  "
              action: notify.notify
        - conditions:
            - condition: state
              entity_id: update.advanced_ssh_web_terminal_update
              state: "on"
          sequence:
            - data:
                title: "Mise à jour disponible :"
                message: "Terminal

                  "
              action: notify.notify
        - conditions:
            - condition: state
              entity_id: update.mosquitto_broker_update
              state: "on"
          sequence:
            - data:
                title: "Mise à jour disponible :"
                message: "Mosquitto

                  "
              action: notify.notify
        - conditions:
            - condition: state
              entity_id: update.zigbee2mqtt_update
              state: "on"
          sequence:
            - data:
                title: "Mise à jour disponible :"
                message: "Zigbee2Mqtt

                  "
              action: notify.notify
        - conditions:
            - condition: state
              entity_id: update.frigate_server
              state: "on"
          sequence:
            - data:
                title: "Mise à jour disponible :"
                message: "Frigate Server

                  "
              action: notify.notify
        - conditions:
            - condition: state
              entity_id: update.frigate_update
              state: "on"
          sequence:
            - data:
                title: "Mise à jour disponible :"
                message: "Frigate

                  "
              action: notify.notify
        - conditions:
            - condition: state
              entity_id: update.air_visual_card_update
              state: "on"
          sequence:
            - data:
                title: "Mise à jour disponible :"
                message: "Visual Code

                  "
              action: notify.notify
  mode: single

```
