Mettre chaque automation (automatisme) dans un fichier yaml

Bonjour la communauté,

Gérer les nombreux automatismes

Je viens de Lifedomus et tous les automatismes étaient rangés dans un « fichier » bloc.
Je me demande s’il n’est pas possible de placer chaque automatisme dans un fichier yaml séparé, afin de ne pas avoir un fichier automation.yaml important et difficile à lire.
Avez-vous une idée de comment faire ?
D’avance merci de votre coopération.

Facile avec les « packages », mais uniquement pour les automations non GUI. Tout ce qui est GUI va dans le fichier racine automations.yaml, et ce fichier on ne le touche pas !

3 « J'aime »

Bonjour

je n’ai pas complètement compris la réponse !

J’ai un fichier automations.yaml avec plein de choses, dont ceci :

- id: '1723966877784'
  alias: **remote 1 bouton 3 lampe sejour hall**
  description: ''
  trigger:
  - device_id: 3c859eed9aa62daa9bd35a97fc0f0ec3
    domain: zha
    platform: device
    type: remote_button_short_press
    subtype: button_3
  condition: []
  action:
  - service: light.toggle
    metadata: {}
    data: {}
    target:
      entity_id: light.lampe_hall_tz3000_lmlsduws_ts0002_lumiere
  mode: single
- id: '1724676465663'
  alias: **lampe_sas_porte_hall_bas** __  Éteindre la lumière lorsque le timer expire
    à condition que le detecteur n est pas actif et qu il n'a pas entre temps relancé
    le timer
  description: Éteindre la lumière lorsque le timer expire à condition que le detecteur
    n est pas actif et qu il n'a pas entre temps relancé le timer
  trigger:
  - platform: event
    event_type: timer.finished
    event_data:
      entity_id: timer.sas_porte_timer
  action:
  - delay: 00:00:01
  - choose:
    - conditions:
      - condition: state
        entity_id: timer.sas_porte_timer
        state: idle
      sequence:
      - target:
          entity_id: light.lampe_sas_porte_hall_bas
        data: {}
        action: light.turn_off
- id: '1724678162539'
  alias: **lampe_sas_porte_hall_bas** __ arrêter le timer lorsque la lumière lampe_sas_porte_hall_bas
    passe à off
  description: ''


J’aurais bien voulu que l’ensemble de mes automatismes correspondant à « lampe_sas_porte_hall_bas » soit dans un fichier séparé automation_quecchose.yaml, et qu’il ne se retrouve pas dans le même fichier automation.yaml que « remote 1 » et autres.

Je ne vois pas comment utiliser les packages ! Il y a quelque chose que je n’ai pas compris.

Merci d’avance de votre aide.

Bonne journée

Salut

Si ce sont des automatisations que tu écris à la main, avec l’éditeur texte, directement en YAML c’est possible.
Si ce sont des automatisations que tu construits avec l’interface graphique de HA, c’est impossible. Toutes ces automatisations sont obligatoirement dans un seul est même fichier : automation.yaml. ça semble être ton cas actuellement :wink:

Salut
Merci pour la réponse.

ils ont été écrit à la main dans l’interface automatisation en basculant en yaml. je pense que c’est pour ça qu’ils ont un ID que je n’ai pas décidé.

Je suppose qu’à la main, il doit falloir déclarer le nom des fichiers d’automation dans le fichier principale automation.yaml. Mais je n’ai pas compris comment faire.

Sauf de créer l’automatisme avec UI, puis d’ôter les lignes du fichier automation.yaml et les mettre dans un autre fichier ex : mon_automatisme.yaml que tu ranges dans le dossier packages, créer dans homeassistant, en ayant pris soin d’ajouter :

homeassistant:
    packages: !include_dir_named packages/

dans configuration.yaml

Il ne faut pas oublier de relancer HA.

Il te sera ensuite impossible (disons plus difficile) de modifier ton automatisme avec UI.

salut

Merci pour la réponse.

Donc si j’ai bien compris, je créer un répertoire « packages » avec à l’intérieur des sous répertoires avec mes fichiers automation_machin.yaml.
Le répertoire « packages » doit se trouver au même niveau configuration.yaml
Dans configuration.yaml, j’ajoute « packages » :


automation: !include automations.yaml
packages: !include_dir_merge_named packages/
script: !include scripts.yaml
scene: !include scenes.yaml
sensor: !include sensors.yaml
switch: !include switchs.yaml
timer: !include all_timers.yaml

et tout mes fichiers d’automation vont être vus et utilisés.

Par contre dans mes fichiers de « automation_machin.yaml », je suppose qu’il faut déclarer comme automation ?
comme par exemple :

automation:
  - alias: "Démarrer le timer sas_porte_timer lorsque la lumière est allumée"
    trigger:
      - platform: state
        entity_id: light.lampe_sas_porte_hall_bas
        from: 'off'
        to: 'on'
    action:
      - service: timer.start
        target:
          entity_id: timer.sas_porte_timer

c’est bien ça ?

merci pour vos réponses

je viens de faire un essai, j’ai ce message :

Integration error: packages - Integration ‹ packages › not found.

:face_with_raised_eyebrow:

Dans configuration tu dois avoir par exemple ceci :

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

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

frontend:
  themes: !include_dir_merge_named themes

automation: !include automations.yaml
binary_sensor: !include binary_sensors.yaml
group: !include group.yaml
input_boolean: !include input_boolean.yaml
input_button: !include input_button.yaml
input_datetime: !include input_datetime.yaml
input_number: !include input_number.yaml
input_select: !include input_select.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
sensor: !include sensors.yaml
# template: !include template.yaml
timer: !include timer.yaml

Il y a une indentation entre homeassistant et packages

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

Le reste me semble correct.

Ha OK, merci !!!

c’est étonnant comme syntaxe d’ajouter « homeassistant: »
J’ai donc ça, et je n’ai plus d’erreur :+1:


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

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

homeassistant:
  packages: !include_dir_named packages/

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
sensor: !include sensors.yaml
switch: !include switchs.yaml
timer: !include all_timers.yaml

Maintenant, il faudra que je bascule mes automatismes. Ce sera mieux ordonné. C’est toujours pénible d’avoir des fichiers trop longs avec tout de mélangé.

Grand merci

PS: c’est quoi le

customize: !include customize.yaml

que tu as dans ton fichier ?

Je l’utilisais pour styliser quelques sensors en affectant une couleur ou une icone en fonction de l’état.
pour cela maintenant j’utilise des sensors ou binary-sensors {template}.
Plus simple.

Moi je suis revenu de ranger les automatismes dans chaque fichier, car il est très souvent plus facile de modifier un automatisme avec UI que directement dans le fichier yaml.

Pour les ranger, j’utilise beaucoup les étiquettes et les catégories. Je ne regarde plus le fichier automation.yaml, effectivement il devient de plus en plus lourd et difficile à gérer.

2 « J'aime »

100% en accord. L’UI est de mieux en mieux pour gérer le contenu du fichier. Plus besoin de passer par l’éditeur. Et dans le pire des cas, bascule en mode yaml pendant l’écriture/édition

1 « J'aime »

c’est ce que j’ai fait jusqu’à present : [quote=« Pulpy-Luke, post:11, topic:46544 »]
Et dans le pire des cas, bascule en mode yaml pendant l’écriture/édition
[/quote]

mais j’avais envie de mettre de l’ordre !! En résumé, vous ne m’encouragez pas à le faire.

Tu dis [quote=« BLANCA, post:10, topic:46544 »]
Pour les ranger, j’utilise beaucoup les étiquettes et les catégories. Je ne regarde plus le fichier automation.yaml, effectivement il devient de plus en plus lourd et difficile à gérer.
[/quote]

Si tu as un exemple à me montrer. Parce qu’après tout, je ne suis pas intégriste, et si ça me plait, je peux l’adopter et abandonner les packages, ou faire un mix des deux.

Voilà une partie des mes automatismes rangés par catégorie et avec étiquettes.
C’est mon choix de rangement. Peut-être une déformation de Lifedomus…

Bonjour

merci pour l’info .

C’est pas mal ce principe, ça réconcilie avec le dispositif.

comment tu fais pour avoir ce système avec la possibilité de dérouler arrosage :

moi j’ai ça :

Tu as trois petits points à gauche de chaque automatisme, tu choisis Attribuer une catégorie/ Ajouter une nouvelle catégorie - tu valides.
Il va se créer un onglet de la catégorie avec ton automatisme rangé dessous.
Voilà.
Bon rangement.

1 « J'aime »

Grand merci

ça marche nickel, et c’est mieux rangé.

Et voilà le résultat :

Une petite question supplémentaire.
En réalité, ce groupement qui est le premier réalisé pour le sas hall avec timer va être identique pour les autres lampes du séjour, cuisine, etc… avec juste pour différence le nom des détecteurs, le nom des lampes, et le nom du timer. L’idée est que toutes les lampes finissent toujours par être éteintes, et ne reste pas toutes la journée allumées même s’il n’y a plus personne depuis 2h.
La question est de savoir s’il est possible de faire une fonction en yaml qui fasse ces automatismes juste en lui présentant les noms en question. Et donc ne ne pas répéter plusieurs fois le même code avec des noms différents. (comme en python)

c’est vrai c’est un autre sujet, mais au passage, ça m’a donné une idée :grinning:

Oui.

Cherches la notion de blueprint.

Perso j’en utilise des déjà tout faits, mais je n’en ai jamais généré… Mais c’est à priori ce que tu cherches.

Merci pour l’info

Jusqu’à présent, j’avais contourné le blueprint. Ce que j’avais vu de déjà créé m’avait semblé touffu, et je ne voyais pas trop l’intérêt de se compliquer la vie avec des trucs qui pouvait tout faire de façon compliqué, et pas ce que je voulais.

Mais, je n’avais pas pensé que l’on pouvait en créer soit même pour de la réutilisation de code. Je vais donc fouiller dans ce sens, et voir ce que je peux faire avec ça.

Malgré tout ça semble bien plus compliqué qu’une simple fonction sous python. Après, je ne sais pas utiliser python dans le cadre de home assistant.

merci, c’est une bonne piste :smiley:

Pour éteindre toutes les lampes avec un seul automatisme, il te faut créer un sensor groupe, qui regroupe toutes tes lampes.
Là par un automatisme tu éteins ou allumes tout d’un seul coup.
Voilà mon rangement des sensors avec des groupes de volets :
volets étage (étiquettes ouvrants - groupe)
volets rez-de-chaussée
volets cuisine
volets maison

Rangement avec catégorie aussi.
Au-dessus il y a la catégorie Éclairages (idem avec des groupes)

Cette solution de groupe marche très bien pour éteindre/allumer toutes les lampes ou des groupes de lampes.

Par forcément pour appliquer le même modèle d’automatisations à toutes les lampes afin d’avoir le même type de comportement… (par exemple avoir le même type d’allumage/extinction avec timer et detection de mouvement dans l’escalier, dans le couloir ou sur la terrasse…) => pour ça il faut définir des blueprints et les appliquer à chaque groupe de lampe.

Tout dépend ce que voulais dire @jean-francois_pingue avec