Discuté ici : Associer un bouton +/- au slider de couleur ou luminosité - #16 par lmilcent
Description
Permettre dans une scène, de répéter une action jusqu’à un ou plusieurs critères.
Exemple
Permettre en appuyant sur un bouton d’augmenter la luminosité d’une ampoule pas à pas.
Tant que : action = « brightness_move_up » et luminosité < 100
Alors :
Luminosité = luminosité + 10
Attendre 200ms
je relance cette demande car c’est exactement ce qu’il me faut pour mes boutons ikea
Comme c’est la fonctionnalité la plus demandée, j’ai lancé Fable 5 dessus !
Sa proposition :
Image Docker :
ghcr.io/gladysassistant/gladys-preview:claude-scenes-controlled-loops-sceu7j
La PR :
master ← claude/scenes-controlled-loops-sceu7j
ouvert 09:16AM - 02 Aug 26 UTC
### Description
This PR adds a new "while loop" action (`ACTIONS.CONDITION.WHIL… E`) to the scene automation system, enabling users to repeatedly execute a block of actions as long as specified conditions remain true.
**Key features:**
- Conditions are re-evaluated before each iteration
- Safety limits: default max 1000 iterations, absolute max 10000 (configurable)
- Minimum 100ms per iteration to prevent CPU-intensive tight loops
- Loop aborts if conditions are empty (prevents infinite loops)
- Full error handling and propagation from condition evaluation
**Changes include:**
- Backend action handler in `scene.actions.js` with iteration logic and safety guards
- Frontend UI component (`ConditionWhile.jsx`) with collapsible repeat section and max iterations input
- Comprehensive unit tests covering: normal execution, condition re-evaluation, max iterations limit, empty conditions error, and error handling
- i18n translations for English, French, and German
- Schema validation in MCP and Joi models
- Integration with scene variable tracking and action card rendering
### Checklist
- [x] Tests pass: Added comprehensive unit tests in `scene.action.conditionWhile.test.js` covering all scenarios (5 test cases with 100% coverage of new code)
- [x] Linter and prettier pass on both front and server
- [x] No breaking changes
https://claude.ai/code/session_01EAhGR17j5RnYsLsVU5CdWu
## Summary by CodeRabbit
* **New Features**
* Added a **While** condition action for scenes.
* Configure conditions, repeated actions, and a maximum of 10,000 iterations.
* Conditions are re-evaluated during execution, and actions run sequentially.
* Added English, German, and French translations.
* **Bug Fixes**
* Improved validation and handling of nested While actions.
* Added safeguards against invalid or unbounded loop configurations.
* While loops stop when conditions fail, execution is aborted, or the iteration limit is reached.
Qu’en pensez-vous ?
J’ai pas regardé la PR mais est-ce que le cas « la condition n’est jamais remplie » est gérée ? Pour ne pas avoir des scènes zombies
Il y a un nombre maximum d’itération qui est défini par l’utilisateur (on le voit sur le screenshot d’ailleurs!)
Super que tu lances ce devt là
Je suggère de remonter le paramètre ‹ nombre max d’iterations › en haut de la structure, pour qu’il ne se retrouve pas trop loin si le bloc ‹ répéter › est un peu long…
très bien : mais je vois que dans les conditions de déclenchement il y a le « OU », mais il faudrait surtout le « ET » (ex : appui sur un bouton plus ET luminosité < 100%)
Pour faire des « ET » il suffit simplement d’ajouter une condition !
Effectivement, je viens de découvrir qu’on pouvait faire des ET sur les conditions ! Merci
Faudrait l’indiquer clairement dans la doc !
Très bon retour, j’améliore le bloc :
Parfait : là au moins c’est très clair et on ne peut pas ne pas le voir !