Un planning décrit une semaine type, pas des dates. Ce sont les
périodes qui l'appliquent du 15 au 29 août.
C'est ce découpage qui permet de réutiliser « Absence longue » pour les vacances
d'été et celles de la Toussaint sans rien resaisir.
Planning ──▶ Jour-type ──▶ Étape ──▶ Action
« Absence « SEMAINE » 07:15 Ouvrir « Volet Chambre 1 »
longue » « Réveil » Allumer « Lum Ilot 1 »
| Niveau | Ce qu'il porte |
|---|---|
| Planning | un nom, une description, les réglages d'aléa, l'affectation des jours de la semaine |
| Jour-type | un nom (SEMAINE, WEEK-END…), et les jours de la semaine qui le servent |
| Étape | une heure d'horloge, un intitulé libre (« Départ de la maison ») |
| Action | un équipement, une action, éventuellement une durée et une note |
Plannings liste ce qui existe, avec pour chacun le nombre de jours-types,
d'étapes, d'actions — dont les désactivées — et de routines placées.
Un planning sur lequel s'appuie une période n'est pas supprimable, et la
ligne le dit : elle porte l'historique de ses déploiements.


La grille couvre de 5 h à minuit, par créneaux de 15 minutes — 76 créneaux.
Une colonne par jour-type.
| Geste | Effet |
|---|---|
| Cliquer dans un créneau vide | crée une étape à cette heure |
| Cliquer sur un bloc | ouvre son panneau à droite |
| Glisser-déposer un bloc | change son heure |
| Changer l'heure dans le panneau | idem, au quart d'heure près |
Le code couleur des blocs : bleu pour les volets, ambre pour les
éclairages, hachuré quand l'étape ne contient que des actions désactivées.

On y règle l'heure et l'intitulé, on ajoute des actions, on les désactive d'un
interrupteur, on les supprime.
L'intitulé ne sert à rien techniquement — il finit dans l'alias de
l'automatisation. Il sert à vous, dans six mois, quand il faudra comprendre
pourquoi le salon s'allume à 18:45.
La note d'une action sert au même usage, en plus précis : « Entrebâillé : on
devine une présence sans exposer le salon. »
L'interrupteur d'une action ne la supprime pas : elle reste visible et
documentée, mais n'est pas générée. C'est la bonne réponse à « je ne veux pas
de ça cette fois-ci, mais je veux m'en souvenir ».
| Action | Nature | YAML produit |
|---|---|---|
| Ouvrir | Volet | cover.open_cover |
| Fermer | Volet | cover.close_cover |
| Fermer partiellement | Volet | close_cover, delay, stop_cover |
| Allumer | Éclairage | light.turn_on ou switch.turn_on |
| Éteindre | Éclairage | light.turn_off ou switch.turn_off |
Aucune action de positionnement. Aucun volet n'est supposé calibré — bug
connu des modules Sonoff — donc jamais de set_cover_position. « Fermer
partiellement » demande une durée en secondes : c'est le temps de descente avant
l'arrêt.
Le service vient du domaine réel de l'entité, pas de la nature choisie. Un
éclairage branché sur une prise connectée porte un entity_id du domaine
switch : l'application appelle switch.turn_on. Se tromper là produirait une
automatisation qui ne fait rien, sans erreur.
Chaque jour-type se renomme, se duplique et se supprime depuis son
en-tête. Dupliquer est le geste utile : partir de SEMAINE pour fabriquer
MERCREDI, puis ajuster deux étapes.
Le tableau du bas affecte un jour-type à chaque jour de la semaine. Un jour sans
affectation ne produit rien — le validateur le signale.
Trois réglages, en haut à droite de l'éditeur :
| Réglage | Rôle |
|---|---|
| Aléa jour | amplitude maximale du décalage, en minutes |
| Aléa étape | amplitude appliquée à chaque étape |
| Écart mini | espacement plancher garanti entre deux étapes consécutives |
Une simulation de présence dont les volets s'ouvrent à 07:15:00 pile chaque jour
n'est pas crédible. Chaque étape tire donc son retard dans une borne calculée de
sorte que l'écart plancher reste garanti même dans le pire tirage — la
garantie est mathématique, pas espérée.
Concrètement, le YAML commence par :
action:
- delay:
seconds: '{{ range(0, 420) | random }}'
Chaque automatisation reste ainsi autonome : rien à coordonner entre elles.
Il tourne à chaque enregistrement et affiche ses constats en haut de l'éditeur.
Quatorze règles, trois niveaux.
| Niveau | Effet | Sens |
|---|---|---|
| Erreur | bloque le déploiement | ça ne marchera pas, ou ça fera n'importe quoi |
| Avertissement | n'empêche rien | c'est probablement une étourderie |
| Information | n'empêche rien | c'est surprenant mais souvent voulu |
| Constat | Pourquoi c'est bloquant |
|---|---|
| Un volet reste ouvert la nuit | la journée simulée le démontre ; c'est le contraire du but recherché |
| Un éclairage est allumé et jamais éteint | il brûlera jusqu'au retour |
| Deux étapes trop rapprochées pour l'aléa demandé | l'ordre d'exécution deviendrait imprévisible |
| Une action vise une entité indisponible | l'automatisation échouera en silence |
| Une routine s'appuie sur un capteur indisponible | une protection hors service sans le savoir est pire qu'une protection absente |
Actions redondantes (allumer ce qui est déjà allumé, fermer ce qui est déjà
fermé, fermer partiellement un volet déjà fermé), jour-type sans aucune action
active, journée sans rien entre le matin et le soir, jour-type affecté à aucun
jour de la semaine, routine sans condition ou sans action.
Une routine et une étape pilotent le même équipement en sens opposé. C'est le
plus souvent voulu — ouvrir le matin, refermer quand le soleil tape — et
crier au loup sur le cas normal apprendrait à ne plus lire le validateur.
Voir la journée simulée, sous la grille.

L'application rejoue la journée heure par heure et en déduit l'état de chaque
équipement. Deux lectures sur le même écran :
C'est ce qui permet de dire « ce volet reste ouvert la nuit » — et c'est ce que
vous relisez avant de partir, parce qu'une erreur d'enchaînement ne se voit pas
sur une grille. Le sélecteur en haut passe d'un jour-type à l'autre.
Sous la grille, la section Routines de contrôle liste les routines placées
dans ce planning, avec leur portée (tous les jours, ou un jour-type précis).
On les désactive ou on les retire d'ici sans toucher à la bibliothèque :
la routine reste disponible pour les autres plannings. Voir
Routines de contrôle.
Documentation Domodrive 1.0.0 — copie conforme du répertoire docs/ du dépôt gitlab.ev1.fr/ev1/domodrive (dépôt privé).