Skip to content

feat: Ajoute le mode Séquenceur de relais et sa documentation#8

Open
tsabran wants to merge 1 commit intoF1ATB:mainfrom
tsabran:feature/mode-sequenceur
Open

feat: Ajoute le mode Séquenceur de relais et sa documentation#8
tsabran wants to merge 1 commit intoF1ATB:mainfrom
tsabran:feature/mode-sequenceur

Conversation

@tsabran
Copy link
Copy Markdown

@tsabran tsabran commented Mar 25, 2026

feat: Mode Séquenceur de relais (MODE_SEQUENCEUR = 6)

Note de l'auteur: Description/documentation essentiellement générée par AI, mais j'ai repris une bonne partie du code moi-même, surtout coté JS :)

J'ai splitté l'an dernier mon routeur de chauffe-eau 3000W avec 3 SSR (1 par resistance de 1000W) au lieu d'un gros SSR pour reduire les clignotements sur mon reseau electrique, mais j'avais beaucoup perdu en efficacité de régulation à cause des conflits/seuils/delais entre les 3 actions. J'ai donc voulu gérer les 3 relais à partir d'une seule régulation composite, gérant les 3 charges de maniere séquentielle. Je l'utilise depuis 1 semaine et ca fonctionne beaucoup mieux depuis.

La PR fournit 3 fichiers de documentation dans /docs:

  • specs fonctionnelles: décrit le probleme et la solution proposée
  • guide utilisateur: detaille l'impact coté utilisateur
  • guide d'implementation: explique les changements de code effectués, pour review

Contexte

Sur une installation solaire avec plusieurs charges résistives (chauffe-eau, radiateurs…), piloter chaque charge importante via une action PID indépendante crée des harmoniques et des appels de courant simultanés non désirables. Ce PR introduit un nouveau mode de régulation qui mitige ce problème en distribuant l'énergie disponible séquentiellement sur un groupe de relais, depuis un seul régulateur PID central.

Une cascade de seuils (chaque relais utilise sa propre régulation qui s'active quand le précédent atteint 100 %) ne résout pas non plus le problème : les PIDs créent des oscillations au seuil de saturation, entraînant plusieurs relais en commutation partielle simultanée, et des délais de réactivité diminuant l'efficacité du routage d'énergie non utilisée/


Fonctionnement

Un séquenceur (mode 6) est une action virtuelle : elle porte un PID mais n'a pas de GPIO propre. Elle distribue son ouverture calculée vers ses relais gérés selon une formule staircase pondérée par la puissance nominale de chaque charge.

Exemple pour 3 relais de 2 000 W / 1 000 W / 1 500 W — puissance totale = 4 500 W :

Ouverture séquenceur Relais 1 (2 kW) Relais 2 (1 kW) Relais 3 (1,5 kW)
0 % OFF OFF OFF
30 % 135 % → 100 % OFF OFF
55 % 100 % 47,5 % OFF
90 % 100 % 100 % 60 %
100 % 100 % 100 % 100 %

Modifications

Fichier Rôle
Actions.h +2 champs : IdxSequenceur (index du séquenceur parent, -1 si autonome), PuissanceCharge (W nominaux)
Actions.cpp Init par défaut + neutralisation des sorties GPIO/appels externes pour les actions MODE_SEQUENCEUR
Solar_Router_V17_16.ino Boucle de distribution staircase dans GestionOverproduction, neutralisation dans GestionIT_10ms et InitGPIOs, log Telnet de debug
Stockage.ino Sérialisation/désérialisation JSON de IdxSequenceur et PuissanceCharge
JS_Actions.h UI : sélection du séquenceur parent, champ puissance nominale, masquage conditionnel des champs GPIO/périodes pour les actions séquencées, compatibilité save path

3 documents ajoutés dans docs : spécifications fonctionnelles, guide d'implémentation, guide utilisateur.


Compatibilité

  • Pleine rétrocompatibilité : IdxSequenceur = -1 et PuissanceCharge = 0 par défaut → toutes les actions existantes se comportent exactement comme avant.
  • Coût mémoire : +8 octets par action (2 × int).
  • Coût CPU : ~1–2 µs par cycle de 200 ms, < 0,001 % du CPU core 1.
  • Aucune modification d'architecture : pas de nouvelle tâche, pas de nouveau timer, pas de changement de protocol MQTT ou de format de sauvegarde incompatible.

- Ajoute le mode Séquenceur (mode 6) et la logique de distribution staircase vers les relais gérés
- Introduit IdxSequenceur et PuissanceCharge dans le modèle Action et dans la sérialisation JSON
- Met à jour la logique UI pour configurer les actions séquencées et préserver la compatibilité existante
- Renforce la neutralisation des sorties physiques pour une action parent séquenceur
- Met à jour la documentation fonctionnelle, implémentation et guide utilisateur
@tsabran
Copy link
Copy Markdown
Author

tsabran commented Mar 25, 2026

image On peut voir l'ouverture (virtuelle) du chauffe-eau (en mode sequentiel) en bas, qui se repercute sur les 3 ouvertures physiques (SSR demi-sinus) au dessus.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant