Skip to content

Home Assistant : modes, ventilateurs, scripts et scènes - #28

Open
NeuTroNBZh wants to merge 3 commits into
lfpoulain:betafrom
NeuTroNBZh:ha-modes-scripts-scenes
Open

NeuTroNBZh wants to merge 3 commits into
lfpoulain:betafrom
NeuTroNBZh:ha-modes-scripts-scenes

Conversation

@NeuTroNBZh

@NeuTroNBZh NeuTroNBZh commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

Ticket : #27

But

Commander à la voix les modes (input_boolean), ventilateurs, scripts et scènes de Home Assistant : « passe en mode nuit », « lance l'allumage du bureau », « active la scène soirée ».

Ce qui change

  • HOME_ASSISTANT_CONTROL_DOMAINS : light, switch, input_boolean, fan, script, scene. Le motif des identifiants de commande est construit depuis cette liste.
  • input_boolean quitte les capteurs (lecture seule) : c'est un changement de comportement, noté dans le CHANGELOG.
  • Nouvelles aides dans shared/home-assistant.ts : controlActions() (une scène n'a que turn_on) et isTriggered() (scripts et scènes).
  • Confirmation : pour un script lancé ou une scène activée, confirmed signifie que Home Assistant a mis à jour l'état (last_updated ou état changé). Un script court repasse aussitôt à « off », et l'état d'une scène est l'heure de sa dernière activation. Les autres domaines gardent la confirmation par l'état on / off. Compromis documenté : toute mise à jour pendant les 3 s vaut confirmation, et l'arrêt d'un script déjà arrêté est confirmé aussitôt.
  • Une scène jamais activée (unknown) reste utilisable ; un turn_off de scène est refusé sans appel.
  • Import Assist : fan et scene ajoutés à l'exposition par défaut, comme dans Home Assistant (exposed_entities.py) : ils sont précochés à l'import (testé, et dit dans la doc), à vérifier puis enregistrer.
  • Administration : type affiché (Scène, Script, Mode, Ventilateur), état adapté (script « En cours » / « Arrêté », mode « Activé » / « Désactivé ») et boutons « Lancer » / « Arrêter » / « Activer ». La doc avertit que le bouton « Lancer » exécute vraiment un script, même non coché.
  • Documentation (home-assistant.md en entier, architecture.md) et CHANGELOG.md.

Vérifications

  • Rebasée sur beta (0.3.0, avec Home Assistant : couleur et blanc des lumières #26).
  • npm run check : OK.
  • tests/home-assistant.test.ts, tests/home-assistant-api.test.ts, tests/live.test.ts : 97/97 avec storage.test.ts, dont un test pour les 4 domaines (mode, ventilateur, script court, scène jamais activée, turn_off de scène refusé sans appel). Le test de normalisation qui refusait script.* vérifie désormais automation.* (toujours hors de portée).
  • Le faux Home Assistant des tests fait finir un script aussitôt et date la scène à son activation.
  • Pas encore essayé sur mon installation : je le ferai et je compléterai la PR.

Rebasée sur #26 (couleur des lumières, fusionnée) : les deux touchaient server/home-assistant.ts à trois endroits (description de l'outil, validation de la couleur et état unknown d'une scène, fonction reached), plus la doc et les tests ; conflits résolus en gardant les deux. Conflit attendu avec #30 sur server/storage.ts et tests/helpers/home-assistant.ts : je rebaserai celle qui passe en second.

Copilot AI balanced review requested due to automatic review settings November 8, 2026 22:15

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota. Try requesting a review at a lower effort level.

@NeuTroNBZh

Copy link
Copy Markdown
Contributor Author

Ajout (commit suivant) : comme input_boolean passe de la lecture à la commande, une installation existante qui avait coché un mode pour le lire le verrait devenir commandable sans nouvel accord. Une migration retire donc les input_boolean.* de la sélection (révision incrémentée), et le CHANGELOG demande de recocher ceux que Cornelius doit pouvoir changer. Test ajouté dans tests/storage.test.ts (décochage, révision, rejouable sans effet). npm run check OK, storage + HA : 33/33.

@lfpoulain

Copy link
Copy Markdown
Owner

Merci Louis. Côté sécurité c'est solide : le motif des commandes vient de HOME_ASSISTANT_CONTROL_DOMAINS, authorized() exige toujours une entité cochée, un turn_off de scène est refusé avant tout appel, et climate, cover et lock restent exclus. La migration qui décoche les input_boolean est correcte et testée. Quelques points avant de fusionner.

À corriger

  1. Doc périmée. docs/fonctionnalites/home-assistant.md n'est mis à jour que sur les lignes de liste. Il reste « Cornelius ne peut utiliser que les deux actions marche et arrêt, et la luminosité », « Cornelius allume ou éteint les lumières et prises cochées » et « Les boutons Allumer et Éteindre […] pour toutes les lumières et prises ». Même chose pour docs/developpement/architecture.md:134. La doc dit aussi qu'Allumer et Éteindre fonctionnent même non cochés : c'est maintenant vrai pour les scripts, qui peuvent faire n'importe quoi. Une phrase de plus s'impose.
  2. Description de la PR inexacte. Elle dit « indépendante de Home Assistant : couleur et blanc des lumières #26 : endroits différents ». Les deux touchaient server/home-assistant.ts à trois endroits (la chaîne description de l'outil, le bloc de validation couleur et « unknown » de scène, la fonction reached), plus la doc et les tests. Home Assistant : couleur et blanc des lumières #26 est maintenant fusionnée.

À préciser ou à couvrir

  1. Confirmation d'un script ou d'une scène (reached) : la condition observedAt !== … || state !== … est vraie pour toute mise à jour d'état pendant les 3 s, pas seulement pour la commande envoyée. Pour un turn_off d'un script déjà arrêté, state === 'off' confirme aussitôt sans rien avoir fait. Le compromis est assumé, mais il mérite une ligne dans la doc.
  2. Import Assist non testé : aucun test ne couvre fan et scene dans defaultExposedDomains. Les scènes exposées par défaut dans Home Assistant seront précochées à l'import, il faut ensuite enregistrer. À noter dans la doc.
  3. Interface : un script en cours s'affiche « Allumé ».

Rebase

beta a avancé avec #26, #34, #36, #38 et la 0.3.0. Conflits attendus sur server/home-assistant.ts (les trois zones ci-dessus), docs/fonctionnalites/home-assistant.md, tests/home-assistant.test.ts et CHANGELOG.md, plus server/storage.ts et tests/helpers/home-assistant.ts avec #30. Pour limiter les conflits, il vaut mieux faire passer #30 et #32 avant elle. Je te suggère de rebaser #28 en dernier.

@lfpoulain lfpoulain added home-assistant Intégration Home Assistant modifications demandées Relue : des corrections sont attendues avant la fusion à rebaser À mettre à jour depuis la branche beta labels Nov 9, 2026
NeuTroNBZh and others added 3 commits November 9, 2026 17:08
input_boolean, fan, script et scene rejoignent light et switch dans
home_assistant__control. Une scène s'active seulement (turn_off refusé
sans appel) ; une scène jamais activée (« unknown ») reste utilisable.
Le lancement d'un script ou d'une scène est confirmé par la mise à jour
de l'état (un script court repasse aussitôt à « off »). fan et scene
suivent l'exposition par défaut de Home Assistant pour l'import Assist.
L'administration affiche « Lancer », « Arrêter » ou « Activer ».

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
input_boolean passe de la lecture à la commande : une entité cochée
pour lire un mode ne doit pas devenir commandable sans nouvel accord.
Une migration la retire de la sélection (révision incrémentée) ; elle
est sans effet sur une base qui n'en a pas et rejouable.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Doc à jour : introduction, actions possibles, « Autoriser Cornelius »,
  boutons de test (tous les appareils commandables, et un script lancé
  depuis l'administration s'exécute vraiment), architecture.md.
- Compromis de confirmation documenté : pour un script ou une scène,
  toute mise à jour d'état pendant l'attente vaut confirmation, et
  l'arrêt d'un script déjà arrêté est confirmé aussitôt.
- Import Assist : ventilateurs et scènes exposés par défaut, donc
  précochés (doc + test) ; scripts et modes seulement s'ils sont exposés.
- Interface : un script en cours s'affiche « En cours » (« Arrêté »
  sinon), un mode « Activé » ou « Désactivé ».

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@NeuTroNBZh
NeuTroNBZh force-pushed the ha-modes-scripts-scenes branch from 34d6936 to 7d8d474 Compare November 9, 2026 16:11
@NeuTroNBZh

Copy link
Copy Markdown
Contributor Author

Merci pour la relecture. Corrigé dans 7d8d474, branche rebasée sur beta (0.3.0, avec #26) :

  1. Doc : home-assistant.md relu en entier (introduction, actions possibles, « Autoriser Cornelius », boutons de test, limites) et architecture.md:134. Une phrase avertit que le bouton Lancer de l'administration exécute vraiment un script, même non coché, et qu'un script peut faire n'importe quoi. La route est derrière l'authentification admin.
  2. Description de PR corrigée : elle n'était pas indépendante de Home Assistant : couleur et blanc des lumières #26 (trois zones de server/home-assistant.ts, plus la doc et les tests). Le rebase garde les deux.
  3. Confirmation script/scène : le compromis est écrit dans la doc. Toute mise à jour d'état pendant les 3 s vaut confirmation, et l'arrêt d'un script déjà arrêté est confirmé aussitôt.
  4. Import Assist : test avec fan, scene (précochés), script et input_boolean (non précochés sans exposition explicite), et une phrase dans la doc.
  5. Interface : un script en cours s'affiche « En cours » (« Arrêté » sinon), un mode « Activé » ou « Désactivé ».

npm run check OK ; home-assistant, home-assistant-api, storage, live : 97/97. Avec #30 (conflits sur storage.ts et le faux Home Assistant des tests), je rebaserai celle qui passe en second.

@lfpoulain

Copy link
Copy Markdown
Owner

Merci, presque tout est bon. Il reste deux choses :

  1. docs/fonctionnalites/home-assistant.md:151 (Limites) dit encore « Ne sont pas pris en charge : la couleur des lumières, les scènes… ». C'est faux pour les scènes, et la couleur est gérée depuis Home Assistant : couleur et blanc des lumières #26.
  2. La doc (:47) annonce des boutons Activer et Désactiver pour les modes, mais actionLabel (web/components/admin/HomeAssistant.tsx:34) affiche « Allumer » et « Éteindre » pour input_boolean. Un mode affiche donc l'état « Activé » avec un bouton « Allumer ». Il faut aligner l'un sur l'autre.

Rebase : #42 est fusionnée et touche reached. Garde la branche triggered de #28 en y reportant fullIntensity. Les migrations restent en fin de liste dans storage.ts.

@lfpoulain

Copy link
Copy Markdown
Owner

Salut Louis, celle-ci est presque prête : il ne reste que les deux points de doc et de libellé (la ligne « Limites » de home-assistant.md, et « Activer » / « Désactiver » contre « Allumer » / « Éteindre » pour les modes), puis le rebase sur beta, qui a encore avancé depuis.

Dis-nous si tu as le temps de la finir ; sinon on peut faire ces retouches nous-mêmes en gardant tes commits.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

home-assistant Intégration Home Assistant modifications demandées Relue : des corrections sont attendues avant la fusion à rebaser À mettre à jour depuis la branche beta

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants