Posté(e) 30 janvier30 janv. Bonjour,Malgré quelques automatismes simples déjà réalisés pour mes volets ou mes éclairages, j'ai toujours beaucoup de mal avec les interfaces de programmation des conditions de déclenchement d'actions dans le temps (je regrette que HA ne propose pas une interface du type "crontab" sous Unix, que je trouve beaucoup plus intuitif).En effet, comment faire pour programmer (avec les interfaces de HA) quelque chose du genre :Tous les soirs, 15' après le couché de soleil, allumer la lumière toutes 30 minutes, pendant 20 minutes, jusqu'à 23h30 ?Si quelqu'un peut "m'éclairer" ;-) je le remercie d'avance. Modifié 31 janvier31 janv. par BièreNard Titre trop long
Posté(e) 31 janvier31 janv. Solution Salut @BièreNard on peut réaliser ton scénario avec une automation en YAML (ou via l’interface graphique, mais le YAML est plus précis pour les boucles). Voici comment programmer : tous les soirs, 15 minutes après le coucher du soleil, allumer la lumière toutes les 30 minutes pendant 20 minutes, jusqu’à 23h30.Prérequis• Assure-toi que l’intégration “Sun” est activée dans HA (elle l’est par défaut).• Remplace light.ta_lumiere par l’ID réel de ton entité lumière (vérifie dans les États des développeurs).Automation en YAMLAjoute ceci dans ton fichier automations.yaml (ou crée une nouvelle automation via l’interface et édite en YAML) :- id: 'allumer_lumiere_apres_coucher_soleil' alias: Allumer lumière après coucher du soleil description: Allume la lumière toutes les 30 min pendant 20 min, jusqu'à 23h30 trigger: - platform: sun event: sunset offset: '+00:15:00' # 15 minutes après le coucher du soleil condition: [] # Pas de conditions supplémentaires ici action: - repeat: while: - condition: time before: '23:30:00' # Répète tant que l'heure est avant 23h30 sequence: - service: light.turn_on target: entity_id: light.ta_lumiere # Remplace par ton entité - delay: minutes: 20 # Allumée pendant 20 minutes - service: light.turn_off target: entity_id: light.ta_lumiere - delay: minutes: 10 # Éteinte pendant 10 minutes (pour un cycle de 30 min total) mode: single # Mode single pour éviter les chevauchementsExplications• Déclencheur : Se déclenche 15 minutes après le coucher du soleil (via l’offset positif).• Boucle (repeat while) : Avant chaque cycle, HA vérifie si l’heure est avant 23h30. Si oui, il exécute le cycle ; sinon, il arrête. Cela évite de démarrer un nouveau cycle après 23h30.• Cycle : Allume la lumière, attend 20 min, éteint, attend 10 min (ce qui fait un intervalle de 30 min entre allumages).• Si le cycle en cours dépasse 23h30 (par exemple, si un allumage commence à 23h25), il se terminera normalement. Pour forcer une extinction pile à 23h30, tu pourrais ajouter une automation séparée avec un déclencheur à heure fixe (platform: time à 23:30) qui éteint la lumière.Via l’interface graphique de HASi tu préfères l’UI :1. Va dans Paramètres > Automatisations & Scènes > Créer une automation.2. Ajoute un déclencheur : Type “Soleil”, Événement “Coucher du soleil”, Offset “+00:15:00”.3. Ajoute une action : Type “Répéter”, Sous-type “Tant que” (while), Condition “Heure” avant 23:30:00.4. Dans la séquence de la répétition : • Action “Allumer la lumière” (sélectionne ton entité). • Action “Attendre” 20 minutes. • Action “Éteindre la lumière”. • Action “Attendre” 10 minutes.5. Enregistre et teste (tu peux simuler le déclencheur via les outils dev).
Posté(e) 31 janvier31 janv. Auteur Salut XAV59213,Un grand merci pour ta réponse précise, complète et pédagogique.Grace à toi j'ai découverts l'onglet "Bloc" de l'écran "Ajouter une action" et donc, ce que je cherchais depuis longtemps : "les structures de contrôle" !Du coup, effectivement c'est assez simple de programmer n'importe quel scénario comportant des actions répétitives à réaliser durant une période donnée.J'ai programmé un petit exemple avec une lampe et des intervalles très courts pour vérifier et tout fonctionne !Je te remercie à nouveau et j'indique le sujet résolu.BièreNard PS : je voudrais aussi ajouter une tempo de durée aléatoire dans la séquence, mais comme le sujet "durée aléatoire" peut intéresser d'autres membres du forum, je vais ouvrir un nouveau fil.
Posté(e) 31 janvier31 janv. salut @BièreNard ,Super, content que ça t'ait aidé à découvrir les blocs de contrôle (repeat, while, choose, etc.) dans l'interface de Home Assistant.c'est effectivement très puissant une fois qu'on maîtrise un peu le YAML ou les blocs correspondants !Pour ton PS sur la durée aléatoire (random duration) dans la séquence, c'est une demande très courante (simulation de présence, variation naturelle, etc.). Voici comment l'intégrer facilement dans ton scénario existant.Option la plus simple et recommandée (YAML templaté)Remplace ton délai fixe par un délai aléatoire avec le filtre Jinja2 random intégré à HA :Dans la boucle repeat, modifie les deux delay comme suit :action: - repeat: while: - condition: time before: '23:30:00' sequence: - service: light.turn_on target: entity_id: light.ta_lumiere - delay: minutes: "{{ range(15, 26) | random }}" # durée ON aléatoire entre 15 et 25 min (exemple) - service: light.turn_off target: entity_id: light.ta_lumiere - delay: minutes: "{{ range(5, 16) | random }}" # durée OFF aléatoire entre 5 et 15 min (exemple)range(a, b) | random choisit un entier aléatoire de a inclus à b-1 inclus (donc pour 15–25 min → range(15, 26)).Tu peux aussi mixer minutes et secondes pour plus de finesse :- delay: minutes: "{{ range(15, 21) | random }}" seconds: "{{ range(0, 60) | random }}" # variation de 0–59 s en plusL'aléatoire est recalculé à chaque itération de la boucle → chaque cycle aura une durée différente.Via l'interface graphique (UI)Quand tu ajoutes ou édites un bloc « Attendre » (delay),Passe en mode YAML pour ce bloc uniquement (clique sur les 3 points > Éditer en YAML),Mets par exemple :minutes: "{{ range(10, 31) | random }}"ouseconds: "{{ range(300, 1201) | random }}" # 5 à 20 minutes en secondesValide → ça reste compatible UI, même si le délai est templaté.Variantes avancées si besoinDurée ON fixe mais départ aléatoire : ajoute un premier delay aléatoire juste après le trigger (avant la boucle).action: - delay: minutes: "{{ range(0, 16) | random }}" # décalage initial 0–15 min - repeat: ...Aléatoire plus fin ou avec seed : le random de base est suffisant pour la plupart des usages. Si tu veux vraiment du « vrai » random (pas reproductible), c'est déjà le cas ici.Éviter les dépassements à 23h30 : ton while before: '23:30:00' est déjà très bien. Si un cycle long commence juste avant, il finira naturellement (comme tu l'as noté). Pour forcer l'extinction à 23h30 pile :Crée une automation séparée :trigger: - platform: time at: '23:30:00' action: - service: light.turn_off target: entity_id: light.ta_lumiereTeste avec des valeurs courtes (ex. range(1,6) pour 1–5 min) comme tu l'as fait pour valider une fois OK, remets tes plages réelles.Si tu veux poster ton exemple finalisé dans ton nouveau fil (avec la durée aléatoire), n'hésite pas à partager le YAML ou une capture, ça aidera sûrement d'autres membres !Bonne continuation avec tes automatisations 😊
Posté(e) 31 janvier31 janv. Auteur MERCI @XAV59213 !J'ai testé avec des valeurs aléatoires courtes pour l'allumage et l'extinction, le tout durant une période courte également et ... tout fonctionne nickel !Je suis maintenant en possession de tous les outils pour écrire un simulateur de présence plus complet et plus réaliste (je vais y intégrer plusieurs éclairages de pièces et mon simulateur de TV).Pour être honnête, j'ai utilisé la méthode de l'UI avec la modification du YAML, car je n'ai toujours pas bien compris où ranger les automatismes que j'écrirais avec l'éditeur, dans l'arborescence de HA et j'ai peur de faire des bêtises, il faut encore que je lise des tutos à ce sujet. D'ailleurs j'ai constaté que mes commentaires avaient disparu quand je réédite le code YAML à partir de l'UI (je suppose qu'ils sont encore présents dans le code, mais là non plus, je n'arrive pas à retrouver le code de mon automatisation dans l'arborescence des fichiers HA.En résumé : MERCI pour toutes les infos que tu m'as données, même si j'ai encore pas mal de trucs à apprendre avant de programmer directement mes futurs automatismes en YAML.
Rejoindre la conversation
Vous pouvez commenter maintenant et vous inscrire plus tard. Si vous possédez un compte, connectez-vous.