Arrivant de Jeedom, j’ai été assez perdu sur le fait de ne plus pouvoir créer de virtuel sur HA.
J’avais besoin de créer de nombreuses entités comprenant un switch ET le retour d’état.
Exemple: un bouton portail pour l’ouvrir et le fermer mais incluant sur l’icône (allumer ou éteint) le retour d’état réel du portail (capteur).
N’y arrivant pas à l’aide de l’interface UI en créant une nouvelle entrée, chatgpt m’a donné un code yaml à mettre directement dans mon fichier configuration.yaml
Seulement, je trouve que cela devient très vite le foutoir là-bas dedans et j’ai donc voulu ranger / organiser tout cela.
J’ai donc mis cette ligne sur ma configuration.yaml
homeassistant:
packages: !include_dir_named perso
Puis j’ai organisé ainsi:
config/
│
├── configuration.yaml # Fichier principal HA
│
├── perso/ # Dossier des « packages » personnels (déclaré dans configuration.yaml)
│ │
│ ├── portail/ # Dossier pour tout ce qui concerne le portail
│ │ ├── portail_virtuel.yaml # Boutons ou capteurs virtuels pour le portail
│ │ ├── portillon_virtuel.yaml # Boutons ou capteurs virtuels pour le portillon
│ │ └── … # Autres fichiers portail
│ │
│ ├── piscine/ # Dossier pour tout ce qui concerne la piscine
│ │ ├── filtration_virtuel.yaml # Gestion de la filtration
│ │ ├── pac_virtuel.yaml # Autre équipement piscine
│ │ └── … # Autres fichiers piscine
│ │
│ ├── alarme/ # Dossier pour tout ce qui concerne l’alarme
│ │ ├── sirene.yaml # Code complet sirène (input_boolean + automatisations MQTT)
│ │ └── … # Autres équipements alarme
│ │
│ └── … # Autres dossiers ou fichiers d’équipements
Ca fonctionne très bien, je regroupe également mes automations ici, seulement je me demande si c’est bien de faire ainsi?
Par exemple, il n’est plus possible de modifier mes automations dans l’interface ui (ca me demande de migré vers automation.yaml
J’ai oublié de dire que je suis novice et ne touche pas a la programmation (j’arrive tout de meme à comprendre un peu)
C’est chatgpt qui m’a conseillé ce que j’ai fait.
Le package (packages: !include_dir_named perso) permet si j’ai bien compris au fichier configuration.yaml de lire tout ce que contient le dossier perso (et ses sous dossiers) que j’ai créer.
Seulement, je peux plus modifier mes automatisations dans l’interface ui
J’ai voulu changer et en vérifiant la configuration avant de redemarer, je me suis retrouvé avec une pile d’erreur:Avertissements de configuration
Setup of package 'notify' failed: Invalid package definition 'notify': expected a dictionary. Package will not be initialized
Setup of package 'input_boolean' failed: Integration 'on_off_sirene' not found.
Setup of package 'input_boolean' failed: Integration 'test_sirene' not found.
Setup of package 'automation' failed: Invalid package definition 'automation': expected a dictionary. Package will not be initialized
Setup of package 'input_datetime' failed: Integration 'heure_debut_filtration_1_piscine' not found.
Setup of package 'input_datetime' failed: Integration 'heure_fin_filtration_1_piscine' not found.
Setup of package 'input_datetime' failed: Integration 'heure_debut_filtration_2_piscine' not found.
Setup of package 'input_datetime' failed: Integration 'heure_fin_filtration_2_piscine' not found.
Setup of package 'input_datetime' failed: Integration 'heure_pivot_filtration_piscine' not found.
Setup of package 'input_datetime' failed: Integration 'heure_pivot_filtration_hivernage_piscine' not found.
Setup of package 'input_number' failed: Integration 'duree_filtration_piscine' not found.
Setup of package 'input_number' failed: Integration 'duree_coupure_filtration_piscine' not found.
Setup of package 'input_number' failed: Integration 'duree_coupure_filtration_hivernage_piscine' not found.
Setup of package 'input_number' failed: Integration 'coefficient_filtration_piscine' not found.
Setup of package 'input_button' failed: Integration 'recalcul_temps_filtration_piscine' not found.
Setup of package 'input_select' failed: Integration 'mode_filtration_piscine' not found.
Setup of package 'template' failed: Invalid package definition 'template': expected a dictionary. Package will not be initialized
J’ai donc remis comme avant (ca fonctionnait)
Pour les automations, tu fais comment?
Tous dans le fichier automation? tu passes par l’interface ui?
packages: !include_dir_merge_named packages/
Ou
packages: !include_dir_named packages/
Comme tu as pu le voir c’est juste une histoire de première ligne qui doit contenir le nom du package perso avec la même structure que toi j’utilise dir_named.
Par contre je te suggère de nommer ton fichier packages au lieu de perso. C’est à ce nom que tout les tutos de personnes qui partagent des fichier yaml font référence dans leur explications. Ça fait un truc en moins à penser quand on parle package tu sais de suite que c’est dans le dossier packages et tu n’as pas à te dire ‘alors pour moi packages, c’est perso‘.
Pour les automatisations soit tu les laisses dans le package et tu les modifies en yaml (ça va si c’est juste une valeur) sinon tu les migres et tu supprimes l’automatisation du package.
j’ai laissé la configuration par défaut pour automation group scene et script. Je les créer et modifie par le UI.
J’utilise le packages pour tout le reste.
ces 4 fichiers YAML, ce trouve dans /config/ et tout le reste dans packages.
Je re passerai bien en (packages: !include_dir_named packages/ ) comme nombreux d’entres vous mais, si je suis passé en (packages: !include_dir_merge_named packages/ ) c’est à cause de ma sirène zigbee Heiman HS2WD-E.
Celle ci n’a pas de bouton pour l’activé et j’ai bien galéré pour la faire sonner.
Chatgpt m’a fait un code yaml qui a fonctionné du premier coup:
sirene_package:
input_boolean:
on_off_sirene:
name: "ON/OFF Sirène"
icon: mdi:bell-alert
# Bouton principal pour activer/désactiver la sirène (alarme réelle)
test_sirene:
name: "Test Sirène"
icon: mdi:alarm-light
# Bouton pour tester la sirène rapidement (5 secondes)
automation:
- id: alarme_sirene_activation
alias: "Activation Sirène principale"
description: "Quand ON, sirène sonne 30 min (max). Quand OFF, arrêt immédiat."
trigger:
- platform: state
entity_id: input_boolean.on_off_sirene
mode: single
action:
- choose:
- conditions:
- condition: state
entity_id: input_boolean.on_off_sirene
state: "on"
sequence:
- service: mqtt.publish
data:
topic: "zigbee2mqtt/Sirène/set"
payload: '{"warning": {"duration": 1800, "mode": "emergency", "strobe": false}}'
qos: 0
retain: false
# Sirène sonne 1800 secondes = 30 minutes (durée max)
- conditions:
- condition: state
entity_id: input_boolean.on_off_sirene
state: "off"
sequence:
- service: mqtt.publish
data:
topic: "zigbee2mqtt/Sirène/set"
payload: '{"warning": {"mode": "stop"}}'
qos: 0
retain: false
# Arrête la sirène immédiatement
- id: alarme_sirene_test
alias: "Test rapide Sirène"
description: "Quand ON, test court 5s puis le bouton revient à OFF."
trigger:
- platform: state
entity_id: input_boolean.test_sirene
to: "on"
mode: restart
action:
- service: mqtt.publish
data:
topic: "zigbee2mqtt/Sirène/set"
payload: '{"warning": {"duration": 5, "mode": "emergency", "strobe": false}}'
qos: 0
retain: false
# Sirène sonne 5 secondes pour test
- delay: "00:00:06" # Attend 6 secondes pour laisser la sirène sonner
- service: input_boolean.turn_off
target:
entity_id: input_boolean.test_sirene
# Remet le bouton test à OFF automatiquement
L’automation et les input boolean sont dans le même code.yaml.
Je déplacerai bien la partie automation (avec les autres automations) mais il me suggère de laisser ainsi car plus pratique.