Avant d'écrire une ligne de code — les User Stories de GEMMA


Il y a une habitude que j’ai prise pendant ma formation : ne jamais ouvrir un éditeur de code sans avoir d’abord compris ce qu’on cherche à résoudre. Pas techniquement — humainement.

Pour GEMMA, j’aurais pu commencer directement par AppDaemon et écrire des automatisations. J’ai fait autre chose. J’ai ouvert un document et j’ai écrit des user stories.

Pourquoi des user stories pour une maison ?

Les user stories viennent du développement logiciel. Elles formalisent un besoin du point de vue de l’utilisateur, pas de la machine. Le format est simple : En tant que… je veux… afin de…

Ce format force à se poser la bonne question : quel problème est-ce qu’on résout vraiment ?

Une automatisation classique pense en événements : “la TV s’allume → j’active la scène cinéma”. Une user story pense en besoin : “en tant qu’humain qui regarde la télévision, je veux que la luminosité s’adapte selon l’heure et la météo, afin d’éviter les reflets et la fatigue visuelle.”

La différence semble subtile. Elle change tout. La première solution est fragile — elle casse dès que la réalité ne correspond pas au scénario. La deuxième est un objectif — le système trouve comment l’atteindre selon le contexte.

La hiérarchie des états GEMMA

Avant d’écrire la moindre user story, j’ai modélisé les états possibles de la maison. Pas les états des appareils — les états de l’humain qui y vit.

Niveau 0Niveau 1Niveau 2Niveau 3
MAISONABSENTVeilleAttend arrivée
PRÉSENTSOMMEILEndormissement / Profond / Besoin / Réveil
NUTRITIFPréparation rapide / longue / Dégustation
ENTRETIENMénage / Réparation
REPOSTV / Musique / Jeu vidéo / Réception

Cette hiérarchie est le squelette du système. Chaque état de niveau 3 est une situation de vie réelle, avec ses propres besoins de confort. C’est à partir de ces états que les user stories ont été écrites.

Extraits du backlog — v1.0

Voici quelques user stories représentatives, organisées par thème.

Présence

IDEn tant que…Je veux…Afin de…
US-01Humain rentrant au foyerque la maison détecte mon arrivée via plusieurs signaux combinéséviter de dépendre uniquement du smartphone
US-03Humain ayant oublié son smartphoneque la maison détecte tout de même ma présence via d’autres capteursne pas perturber le confort du foyer

US-03 est particulièrement intéressante : elle force à ne jamais reposer sur un seul signal. Un système robuste se construit sur la redondance des sources.

Sommeil

IDEn tant que…Je veux…Afin de…
US-06Humain se levant la nuit pour un besoin naturelque la maison allume une lumière douce et guidéene pas être agressé par une lumière forte et faciliter le retour au sommeil
US-07Humain ayant du mal à se rendormirque la maison reconnaisse cet état intermédiaire entre sommeil et activitéadapter l’ambiance pour favoriser le retour au sommeil

Ces deux user stories ne sont pas encore implémentées — elles dépendent du capteur de présence Aqara FP2 qui arrive prochainement. Mais elles existent dans le backlog. Le système est conçu pour les accueillir.

Scalabilité — les user stories qui pensent long terme

IDEn tant que…Je veux…Afin de…
US-22Humain changeant de maisonque mon profil de confort soit portable et réutilisablene pas reconfigurer entièrement le système
US-23Humain dont le mode de vie évolueque le modèle s’adapte progressivement sans tout recasseravoir un système vivant qui suit mon évolution

US-22 et US-23 ne concernent pas une fonctionnalité. Elles concernent l’architecture. Elles ont directement influencé la décision de séparer l’inventaire physique (index.yaml) des comportements (comportements.yaml) et des poids (poids.yaml). Changer de maison = changer l’index. Le reste suit.

La formule de scoring

Au cœur de GEMMA, il y a une formule simple :

État = Σ ( signal × poids × contexte )
TermeDéfinitionExemple
SignalValeur brute du capteurTV allumée = 1
PoidsImportance du signalAmpli = 0.8
ContexteModificateur situationnel23h = ×1.2 pour sommeil
SeuilDéclenchement de l’action> 0.8 = action automatique

Cette formule permet au système de peser l’évidence plutôt que de chercher une certitude. Si plusieurs signaux pointent vers le même état avec des poids élevés, l’état est confirmé. Si aucun état ne dépasse le seuil, le système reste en INDÉTERMINÉ et n’agit pas.

C’est un principe emprunté à la théorie des systèmes de contrôle : en situation ambiguë, on ne force pas une sortie.

Ce que ce backlog m’a appris

Écrire ces user stories avant de coder a eu trois effets concrets :

Il a révélé des cas limites invisibles. US-07 — l’humain qui a du mal à se rendormir — n’aurait jamais émergé en pensant uniquement aux capteurs disponibles. C’est en pensant au vécu de l’occupant qu’on découvre les vrais besoins.

Il a structuré les priorités. Le backlog distingue ce qui est implémenté aujourd’hui de ce qui attend le bon matériel ou le bon budget. Pas de dette technique cachée — juste un backlog honnête.

Il a guidé les choix d’architecture. Chaque décision technique — AppDaemon plutôt que YAML, séparation index/comportements, formule de scoring — trouve sa justification dans une user story. Le code n’est pas une fin en soi. Il répond à un besoin.


Le backlog complet, les états GEMMA détaillés et l’implémentation AppDaemon feront l’objet des prochains articles. Le système tourne déjà — mais il attend encore deux capteurs pour être complet. On en reparle dans quelques semaines.