jmcollin78 / versatile_thermostat

A full featured Thermostat for Home Assistant: presets, window, motion, presence and overpowering management
MIT License
292 stars 27 forks source link

Load balancing for sharing limited house power between heating and other usages #65

Closed dominig closed 1 year ago

dominig commented 1 year ago

sharing limited house power between heating and other usages I leave in a flat with limited electric power ueo to the building old age. Not only I cannot fire all my radiators at the same time but I need to stop them when the washing machine, the cooker or the kettle are on.

Limiting power use is nice, but heat needs to be distributed for all the house I had to fix my issue, so I created 2 Python scripts which do it, but it's not as nice and integrated as your solution. I wonder if your code could cover a tight load balancing use case like mine.

Today my solution is to use my code Currently I use my code which does the job but is not nicely integrated. It requires external Thermostat configuration, virtual switches, ... Description and demo video can be found here: https://github.com/dominig/pyscript_power_load_balance

PID Thermostat and relay wearing out Ideally I would love to see the load balancing done as a time share during the PID quite periods. On the other side, I had to implement a damping effect on radiator reactivation, as it can quickly drive the controlling relays mad.

Do you think that it would make sense to add load balancing to your solution ? Would it be possible without breaking your vision of the solution and the code structure ?

Kenavo. Dominig

jmcollin78 commented 1 year ago

Bonjour @dominig ,

Je te propose de switcher en Français ce sera plus simple pour moi, ma compréhension pourrait être biaisée (pour rester poli).

J'ai regardé ta vidéo et en effet, l'esprit est bien le même : être capable de limiter la puissance consommée à un instant t. J'utilise un capteur (input_number basiquement) qui donne la puissance max à ne pas dépasser, au lieu de ton powerSavingMode mais l'esprit est le même.

La différence, c'est que j'interviens directement dans le thermostat et pas sur l'équipement piloté. Ca me permet d'être couplé à la gestion des ouvertures (ne pas chauffer si les fenêtre sont ouvertes) de la présence (ton away mode). Tout ça directement dans le thermostat car les scripts, automatisations, natifs dans HA ont leur limite.

Dans ma solution le load-balancing se fait "tout seul" mais de façon relativement aléatoire : chacun de mes thermostats à un cycle différent en évitant les multiples (3, 4, 5, 7 par exemple) et à chaque cycle, avant d'allumer on vérifie qu'on a la puissance nécessaire. Donc à tour de role, de façon irrégulière et en fonction de la consommation réelle mesurée, le thermostat commande le radiateur (ou attend le cycle suivant). Ca fait un lissage naturel, un peu aléatoire de la puissance. Comme tu le dis bien dans la video, il faut garder une marge sur la puissance max admissible car il n'est pas impossible de dépasser temporairement. J'ai un abonnement 18KVA et je limite à 15 typiquement.

Ceci dit, ce n'est pas parfait et j'avoue ne pas avoir bien compris ce passage de ton message :

PID Thermostat and relay wearing out Ideally I would love to see the load balancing done as a time share during the PID quite periods. On the other side, I had to implement a damping effect on radiator reactivation, as it can quickly drive the controlling relays mad.

Avant de répondre oui ou non à tes questions, j'ai vraiment besoin de comprendre cette partie. Qu'est-ce qu'une "PID quite periods" ? "load balancing done as a time share" : je pense que c'est ce que je fais, "damping effect" : je ne vois pas bien ce que c'est.

Si tu préfères que l'on discute dans un forum plutot qu'ici, pas de soucis, peut être sur le forum hacf ici : https://forum.hacf.fr/u/jean-marc_collin/summary

A bientot

dominig commented 1 year ago

Bonjour,

je suis franco anglais et parfaitement bilingue. Même si la grammaire française me complique un peu la vie à l'écrit :-(

En effet partir sur un partir saving mode ou un  nombre de radiateur ne change pas le concept pour résoudre le problème. Ayant un contrat à 6kW ma contrainte est encore plus critique que la tienne. J'ai donc ajouté une méthode de calcul plus précise basé sur plus de capteurs de façon à pouvoir avoir une valeur plus juste de la puissance restante pour le chauffage. Mon power_saving_mode étant une information disponible pour les autres automation, elle me permet de couper ma machine à laver quand je n'ai plus de jus même tout chauffage éteint (plaques+four). Ta solution est plus élégante car tu intègres l'ensemble du problème. Je gère les fenêtres ouvertes par des automations qui désactivent les thermostats. C'est une solution simple pour avoir une relation non bijective n<>m capteurs <> thermostats en particulier pour les grandes pièces. Mais ce n'est pas élégant et pas forcement indispensable. Je préfère ta solution.

Le gros avantage de ton système est qu'en intervenant directement sur le thermostat, tu as un contrôle fin des périodes de chauffe (même si le thermostat des radiateurs vie à son propre rythme qui reste incontrôlable). La faiblesse que je crois comprendre de ton système est le non contrôle de l'uniformité de la distribution du chauffage. Pour toi, car ta limite est haute, ce n'est sans doute pas un problème. Dans mon cas où la puissance électrique n'est jamais suffisante, il est important de gérer la diffusion du chauffage de manière contrôlée. C'est pour cette même raison que j'ai du implémenter un mode Boost afin de garantir à mon seiche serviette des périodes continue sans coupure car elle coupe le mode Boost du seiche serviette.

"Relay wearing out" ou usure des relais. Comme je suis toujours aux limites, le système passe sa vie à vouloir faire des ajustements. En particulier dans le mode de calcul global (option "G") où la puissance disponible pour le chauffage est calculé mon pas avec la consommation hors chauffage mais avec le nombre de radiateurs en marche.  Dans ce cas, quand le système coupe des radiateurs il augmente de suite la puissance disponible ce qui relance les radiateurs. On se retrouve rapidement avec des relais qui travaillent 10 fois par seconde. Ce pour quoi ils ne sont pas fait. Au moins dans mon cas comme je contrôle le fil pilote, je n'ai pas d'étincelle et donc, ni chauffe, ni risque de départ de feu, mais ça fait du bruit et les relais ne supportaient pas cette danse rapide bien longtemps. J'ai donc prévu un système d'amortissement "damping" qui laisse la baisse de puissance être rapide (<1s) mais ralenti la remise en chauffe. En pratique je règle mon "damping" à 90s. Je met donc au moins 90s avant d’augmenter de nouveau la puissance disponible pour le chauffage.

PID Thermostat J'utilise un thermostat avec un calcul par PID (Proportionnel Intégral Dérivé). C'est modèle un peu compliqué à régler mais qui marche bien. Ton modèle ne semble pas en être très loin même si tu as moins de paramètres. Dans ce mode le thermostat impose des marche/arrêt sur les radiateurs en approche de consigne. Ce qui est le cas le plus fréquent car le mode stabilisé est le mode le plus fréquent. En pratique on ne change la consigne que 2 à 4 fois par jour. Si les Thermostats étaient tous synchronisés, on pourrait optimiser leurs demandes de chauffe courtes, en approche de consigne, pour que certains soit en repos, pendant que les autres demandent du chauffage, la difficulté étant de donner plus de 'slot' de chauffe aux pièces qui sont plus loin de leur consigne. Un simple modèle avec 2 priorité serait sans doute suffisant.

Voilà. J'espère avoir clarifié mon propos. Kenavo. Dominig

Le 19/03/2023 à 11:09, Jean-Marc Collin a écrit :

aluBonjour @dominig https://github.com/dominig ,

Je te propose de switcher en Français ce sera plus simple pour moi, ma compréhension pourrait être biaisée (pour rester poli).

J'ai regardé ta vidéo et en effet, l'esprit est bien le même : être capable de limiter la puissance consommée à un instant t. J'utilise un capteur (input_number basiquement) qui donne la puissance max à ne pas dépasser, au lieu de ton powerSavingMode mais l'esprit est le même.

La différence, c'est que j'interviens directement dans le thermostat et pas sur l'équipement piloté. Ca me permet d'être couplé à la gestion des ouvertures (ne pas chauffer si les fenêtre sont ouvertes) de la présence (ton away mode). Tout ça directement dans le thermostat car les scripts, automatisations, natifs dans HA ont leur limite.

Dans ma solution le load-balancing se fait "tout seul" mais de façon relativement aléatoire : chacun de mes thermostats à un cycle différent en évitant les multiples (3, 4, 5, 7 par exemple) et à chaque cycle, avant d'allumer on vérifie qu'on a la puissance nécessaire. Donc à tour de role, de façon irrégulière et en fonction de la consommation réelle mesurée, le thermostat commande le radiateur (ou attend le cycle suivant). Ca fait un lissage naturel, un peu aléatoire de la puissance. Comme tu le dis bien dans la video, il faut garder une marge sur la puissance max admissible car il n'est pas impossible de dépasser temporairement. J'ai un abonnement 18KVA et je limite à 15 typiquement.

Ceci dit, ce n'est pas parfait et j'avoue ne pas avoir bien compris ce passage de ton message :

PID Thermostat and relay wearing out
Ideally I would love to see the load balancing done as a time
share during the PID quite periods. On the other side, I had to
implement a damping effect on radiator reactivation, as it can
quickly drive the controlling relays mad.

Avant de répondre oui ou non à tes questions, j'ai vraiment besoin de comprendre cette partie. Qu'est-ce qu'une "PID quite periods" ? "load balancing done as a time share" : je pense que c'est ce que je fais, "damping effect" : je ne vois pas bien ce que c'est.

Si tu préfères que l'on discute dans un forum plutot qu'ici, pas de soucis, peut être sur le forum hacf ici : https://forum.hacf.fr/u/jean-marc_collin/summary

A bientot

— Reply to this email directly, view it on GitHub https://github.com/jmcollin78/versatile_thermostat/issues/65#issuecomment-1475188937, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAJDJIGTXYREABG6Z6XPL3LW43LNJANCNFSM6AAAAAAV7TW7T4. You are receiving this because you were mentioned.Message ID: @.***>

jmcollin78 commented 1 year ago

Hello @dominig ,

Je viens de livrer une release 3.2 qui permet d'améliorer les pics de consommation. En affectant plusieurs switch (radiateur) au même Versatile Thermostat, je peux maintenant les déclencher de façon simultanée en minimisant les périodes de recouvrement. Ca me permet de lisser la charge en la répartissant sur plusieurs radiateur si l'écart à la consigne n'est pas trop important.

Ca ne résoud pas totalement ton problème puisque je n'ai pas de coordinateur central qui permet de jouer sur un ensemble d'équipements (radiateur, ballons d'eau chaude, ...) mais ça va dans le sens de la régulation.

Je me demandais si je ne devrais pas ajouter un service de forçage du mode "overpowering" qui est pour l'instant déclenché uniquement en interne du VTherm (Versatile Thermostat). Ca permettrait à un coordinateur externe de forcer le passage en mode "overpowering" du VTherm et donc de limiter la puissance consommée.

Il y a déjà des services qui permettent une intégration avec des coordinateurs externes mais je n'ai pas services pour piloter le mode "overpowering".

Penses-tu que ce serait intéressant dans ton cas ?

Sinon par rapport à ton dernier retour, j'ai quelques précisions à apporter:

tu as un contrôle fin des périodes de chauffe (même si le thermostat des radiateurs vie à son propre rythme qui reste incontrôlable).

Dans mon cas et même dans le cas d'un radiateur avec fil pilote, il est possible de véritablement commandé l'allumage / extinction du radiateur et pas juste une consigne de température. Il n'y a pas dans ce cas de radiateurs qui a son propre rythme de vie.

"Relay wearing out" ou "damping"

J'ai bien la même fonction (ou quelque-chose de proche). C'est un délai minimal (en secondes) de chauffe avant d'allumer. Si le temps d'allumage calculé est inférieur à un seuil paramétrable, l'allumage est reporté. Ca évite en effet de sur-solliciter les relais et les "clics - clics" désagréables.

Kenavo

Jean-Marc

dominig commented 1 year ago

Hello @dominig ,

Je viens de livrer une release 3.2 qui permet d'améliorer les pics de consommation. En affectant plusieurs switch (radiateur) au même Versatile Thermostat, je peux maintenant les déclencher de façon simultanée en minimisant les périodes de recouvrement. Ca me permet de lisser la charge en la répartissant sur plusieurs radiateur si l'écart à la consigne n'est pas trop important. Intéressant: Par contre, si je comprends bien, dans ce cas tes radiateurs du groupe utilisent le même capteur de température, ce qui est parfait pour une grande pièce. Je regarderai ça plus tard car je suis pour l'instant bloqué avec les travaux avant mise à l'eau de mon bateau. En plus l'été arrivant, mon problème de chauffage s'éloigne :-)

Ça ne résout pas totalement ton problème puisque je n'ai pas de coordinateur central qui permet de jouer sur un ensemble d'équipements (radiateur, ballons d'eau chaude, ...) mais ça va dans le sens de la régulation. Moi non plus, je n'ai pas vraiment de coordinateur central qui gère directement autre chose que le chauffage.

  • J'ai un report sur une variable externe qui me donne un indicateur sur le niveau d'énergie restante qui me permet de prendre des devisions par des automations externes (par exemple pour couper ma machine à laver).
  • un mode de calcul qui permet d'avoir une valeur soit estimer soit juste de l'énergie disponible pour le chauffage qui permet de jouer plus prêt de la limite.

Je me demandais si je ne devrais pas ajouter un service de forçage du mode "overpowering" qui est pour l'instant déclenché uniquement en interne du VTherm (Versatile Thermostat). Ça permettrait à un coordinateur externe de forcer le passage en mode "overpowering" du VTherm et donc de limiter la puissance consommée.

Il y a déjà des services qui permettent une intégration avec des coordinateurs externes mais je n'ai pas services pour piloter le mode "overpowering". Ton mode overpowering est un peu simple pour les gens comme moi qui sont toujours en limite car il travaille par radiateur. Seul un système central qui gère la quantité d’énergie disponible pour le chauffage et une distribution assez uniforme du chauffage dans toutes les pièces peut résoudre le problème. Avoir un service qui permet de forcer l'overpowering ne résout pas vraiment le problème car il n'y a pas la connaissance du fait que le/les radiateurs attachés à ce thermostat sont actifs.

Penses-tu que ce serait intéressant dans ton cas ? Dans mon cas, je ne vois pas comment je pourrait m'en sortir sans, mais sans indication du fait que le radiateur est actif c'est peu utile car trop primaire. En effet, la décision d'allocation d’énergie ne peut pas être en 2 endroits. Si tu publiais l'énergie demandée par chaque thermostat (en fonction de la valeur en W des radiateurs configurés et du nombre de radiateurs actifs) un système central pourrait te retourner par un service+data une limite de consommation en W que le thermostat pourrait gérer en local. Pour simplifier les configurations, il faudrait aussi publier les valeurs min et max d'énergie possiblement requise. Si tu ajoutais une publication du delta consigne/température pièce, le centralisateur pourrait prendre une décision motivée des pièces à chauffer.

Sinon par rapport à ton dernier retour, j'ai quelques précisions à apporter:

tu as un contrôle fin des périodes de chauffe (même si le thermostat des radiateurs vie à son propre rythme qui reste incontrôlable).

Dans mon cas et même dans le cas d'un radiateur avec fil pilote, il est possible de véritablement commandé l'allumage / extinction du radiateur et pas juste une consigne de température. Il n'y a pas dans ce cas de radiateurs qui a son propre rythme de vie.

Le contrôle direct par fil pilote n'est pas complètement possible. Les ordres toujours disponible sont confort (0V), eco (220V) et off (220V demi onde positive) et hors gel (demi onde négative). Le thermosat local du radiateur est donc toujours actifs quelque soit le mode. On contrôle la mise en position off mais en position on, le radiateur fait ce qu'il veut en fonction de son thermostat interne. Positionner la consigne intégrée sur une valeur Max est une solution mais en cas d'erreur du système (e.g. plantage HA comme j'ai eu pour la première fois la nuit dernière), le chauffage part pour cuire la maison). C'est thermostat interne, en général conçu en mode PID et donc en approche de sa consigne il a sa propre vie. De plus le capteur du thermostat interne n'est pas au même endroit. Le contrôle en est donc assez indirect. Pas grand chose qui peut être fait à part prendre des radiateurs sans contrôle, ce qui n'est pas si simple à trouver en produit de qualité.

"Relay wearing out" ou "damping"

J'ai bien la même fonction (ou quelque-chose de proche). C'est un délai minimal (en secondes) de chauffe avant d'allumer. Si le temps d'allumage calculé est inférieur à un seuil paramétrable, l'allumage est reporté. Ca évite en effet de sur-solliciter les relais et les "clics - clics" désagréables.

C'est pas tout à fait la même chose car un délais fait que la chauffe est retardée. C'est par contre simple à implémenter. Il suffit de mettre un délais minium en seconde (autour de 5mn chez moi) entre deux allumages consécutifs. De ce fait on ne retarde pas une mise en chauffe sauf si celle ci est proche de la consigne, ce qui dans ce cas n'est pas un problème. Le damping ou amortissement est différent. En effet lors que le délestage s'active, il coupe instantanément des radiateurs et donc de la puissance redevient disponible autorisant le délestage à se désactiver. Il faut en fait ralentir cette désactivation du délestage afin d'éviter les effets d'aller retour. J'ai un délais en seconde mais qui ne contrôle pas directement les radiateurs. Je pense que le délais mini entre deux allumages de radiateurs pourrait faire l'affaire si une valeur aléatoire était introduite par radiateur. Mais ça ne serait pas optimal mais beaucoup mieux que rien. En effet lors que le délestage s'active (par exemple démarrage du four), il faut couper 2 ou 3 radiateurs, lorsque le four atteint sa température, il ne faut pas redémarrer 3 radiateurs mais au contraire les activer 1 par 1. Un décalage aléatoire éviterait le black out, ce qui est critique, mais peu l’usure des relais.

Quelque soit le côté par lequel je regarde le problème, un système de gestion central qui synchronise les radiateurs me parait inévitable. Ces fonctions

En résumer. Si ton Thermostat *publiait des variables indiquant:

Il serait possible de créer un service de gestion de l'énergie et dispatch du chauffage assez simplement dont les fonctions seraient

Bonne Soirée Dominig

adi90x commented 1 year ago

J'avais ouvert une autre issue #71 pour justement réfléchir à l'implémentation d'un service pour le overpowering

jmcollin78 commented 1 year ago

Hello, @dominig et @adi90x ,

Je vais prendre la demande. Je centralise dans la demande #71 ouverte par @adi90x, et je vais fermer celle-là si vous êtes d'accord.

dominig commented 1 year ago

Will covered by requirement #71