Smart Thermostat - le chauffage contrôlé par PID

Salut @ScratMan
Bon je m en sors pas avec les reglages…
Cf capture la.
Toujours difference a 50 sans avoor modifié le code. Pas touchés les params, j ai juste attendu qq jours.
Je sais pas quels params je dois touchés mais ca se rapproche du 1° au dessus.
Il continue de chauffer alors que la consigne est depassée. Il n’a pas suffisamant anticipé…

Ton P est trop faible, comme tu fais des steps de température sur la consigne, et que ton P est bas, le I augmente rapidement en début du step alors qu’on est très loin de la consigne. Du coup une fois proche de la consigne, le I est déjà trop haut et surcompense le P et le D.
Si tu doubles Kp et Kd ça devrait aller dans le bon sens.

Après, il n’est généralement pas recommandé de faire des changements de consigne sur un plancher chauffant. La conso économisée sur la nuit est perdue le matin pour revenir à la température de confort à cause de l’inertie. Donc je pense que les réglages actuels fonctionneraient sûrement mieux sans ce step.

Pour aller plus en détails, un PID est une solution performante dans deux cas de figure :

  • Reguler la sortie d’un système sur une consigne avec précision.
  • Permettre de faire converger la sortie d’un système vers une consigne le plus rapidement possible en limitant les dépassements de la consigne (en durée ou en amplitude).

Les problèmes apparaissent lorsqu’on veut les deux à la fois. Il faut alors trouver le bon compromis selon la capacité du système en question.

Dans le cas d’un système de chauffage, le second cas est typique d’un chauffage par radiateurs électriques dans une pièce utilisée ponctuellement (genre salle de bain avec sèche serviettes).
Ca chauffe fort, avec une inertie faible. La température peut monter très vite mais aussi dépasser fortement la consigne si ne baisse pas la puissance assez tôt.
Pour ça, on aura des gains Kp et Kd élevés, le P élevé permettra une réactivité élevée (un petit écart demandera une puissance plus forte), et le D deviendra plus fortement négatif lorsque la température va se mettre à monter plus rapidement, compensant le P et limitant l’overshoot.

Le premier cas correspond plus à un système de type chauffage au sol. L’inertie est forte, il faut donc pouvoir anticiper l’évolution future de la température et compenser par petites touches, parce que les effets seront lents à apparaître.
Sur de tels systèmes on va mettre des gains plus faibles pour avoir de la précision et de la stabilité, et se reposer sur la variable qui bouge le moins (I) pour assurer le plus gros de la régulation.
Mais du coup, une consigne qui varie va poser de gros problèmes, car P étant petit, on n’arrivera jamais a la puissance max qui « bloque » l’intégration dans le temps. Et donc I monte alors que c’est le P qui devrait compenser le step, et I ne devrait commencer à bouger que lorsque le système est en régime établi et régule autour de la consigne. I devenant trop fort face à P et D, on surchauffe. On pourrait donc augmenter fortement les gains Kp et Kd, pour avoir plus de réactivité et éviter que I ne monte lors du step, mais un plancher chauffant restera lent, un Kp fort provoquera des dépassements de consigne, et ça peut facilement dégrader le confort.

Complètement d’accord sur la remarque variation consigne inertie et plancher chauffant… Un de mes collegues m’a fait la même remarque la semaine derniere et l’a calculé. Il reste du coup à 20° tout l’hiver sauf vacances 1 semaine mini. J’ai tenté tout de même avec ce thermostat pour les fameux jours rouges TEMPO… 0,75€ du kW/h ça fait mal :frowning: mais je l’oublie.

Du coup consigne fixe dès maintenant. J’attends quelques jours tu penses ou je tente tout de suite modifier Kp et Kd ?
Pour mémo, dans les posts un peu plus haut, tu m’avais déjà fait doubler Kp (par rapport aux calculs théoriques) que j’ai appliqué il y a quelques jours.

Ah oui, tu as un plancher électrique, donc mieux vaut garder le step en heures pleines rouges, oui, mais sinon le reste du temps laisse le à la température de confort, ça sera mieux. Le but d’un thermostat est de faire des économies sans trop rogner sur le confort, et un plancher chauffant électrique en heures pleines rouges ça va grave piquer à l’arrière-train.

Donc, là du coup tu dois être à 20, 0,011 et 2400 pour tes gains PID. Je dirais peut-être booster le Kp à 40 et réduire le Ki à 0,007, histoire de freiner un peu sa montée. Les jours rouges devraient se calmer (ils n’en ont plus que 3 à mettre), ca va permettre de régler tranquillement le PID en régime stabilisé, puis on verra le comportement en jouant avec la consigne.

1 « J'aime »

Hello
Du coup je m équipe pour le sèche serviette et reviendrai sûrement ici pour les réglages

J ai dans ce studîo installe un plancher électrique en Reno avec le thermostat

C est pas top car il prends la température du thermostat qui du coup est relativement faussée quand il fonctionne

Je pourrai mettre ton thermostat par dessus celui ci avec une sonde de température a distance ?

Merci

Oh ben oui, ça devrait marcher. On peut même imaginer utiliser la température mesurée par le thermostat lui-même plutôt qu’utiliser un capteur en plus.
On crée un sensor qui récupère l’attribut température actuelle du thermostat, et une entrée interrupteur template qui va régler une température de consigne haute ou basse sur le thermostat physique selon si le smart thermostat demande à chauffer ou non.

Et je ne vois pas pourquoi le chauffage perturberait le thermostat physique, sauf s’il est mal placé (il faut le mettre à 1m50 du sol, à l’abri du soleil et éloigné des sources de chaleur).

Cool
L’attribut température ça j ai déjà installé le template .
Par contre m interrupteur dont tu parles je vois pas trop ce qu il fait faire

Example: j’ai 3 Smart thermostat qui contrôlent mes vannes Netatmo (vue comme des climate dans HA).

J’ai donc 3 entrées interrupteurs (input_boolean) que mes thermostats contrôlent via le heater

Un des thermostats:

- platform: smart_thermostat
  name: Chambre parentale
  unique_id: chambre_parentale
  heater: input_boolean.chauffage_chambre_parentale
  target_sensor: sensor.popp_mold_chambre_parentale_temperature
  outdoor_sensor: sensor.fgbs222_smart_module_1_garage_temperature_2
  min_temp: 7
  max_temp: 30
  ac_mode: False
  target_temp: 19
  away_temp: 14
  sleep_temp: 18
  eco_temp: 19
  comfort_temp: 20
  boost_temp: 25
  keep_alive: 00:01:00
  min_cycle_duration: 00:05:00
  precision: 0.1
  kp: 100
  ki: 0.007
  kd: 125000
  ke: 0
  pwm : 900
  debug: true

Et l’automatisation qui les gère.
Elle force les températures toutes les 30 minutes car ça actionne le mode manuel des vannes, et il se désactive tout seul au bout d’un moment ; et le tout uniquement si le chauffage est en route (thermostat général dans le couloir en mode planning, s’il est off les vannes sont off et les smart thermostat les laissent tranquilles).

alias: Chauffage chambres
description: ""
trigger:
  - platform: state
    entity_id:
      - input_boolean.chauffage_chambre_parentale
      - input_boolean.chauffage_chambre_ap
      - input_boolean.chauffage_chambre_ad
  - platform: time_pattern
    minutes: /30
condition:
  - condition: state
    entity_id: climate.netatmo_couloir
    attribute: preset_mode
    state: Schedule
action:
  - if:
      - condition: state
        entity_id: input_boolean.chauffage_chambre_ad
        state: "on"
    then:
      - service: climate.set_temperature
        data:
          temperature: 25
        target:
          entity_id: climate.netatmo_chambre_ad
    else:
      - service: climate.set_temperature
        data:
          temperature: 14
        target:
          entity_id: climate.netatmo_chambre_ad
  - if:
      - condition: state
        entity_id: input_boolean.chauffage_chambre_ap
        state: "on"
    then:
      - service: climate.set_temperature
        data:
          temperature: 25
        target:
          entity_id: climate.netatmo_chambre_d_ap
    else:
      - service: climate.set_temperature
        data:
          temperature: 14
        target:
          entity_id: climate.netatmo_chambre_d_ap
  - if:
      - condition: state
        entity_id: input_boolean.chauffage_chambre_parentale
        state: "on"
    then:
      - service: climate.set_temperature
        data:
          temperature: 25
        target:
          entity_id: climate.netatmo_chambre_parentale
    else:
      - service: climate.set_temperature
        data:
          temperature: 14
        target:
          entity_id: climate.netatmo_chambre_parentale
mode: parallel
max: 10

@ScratMan
J’ai modifié les params comme tu m’as dit. C’est pas encore ça…
J’ai aussi appliqué ta modif de code pour le difference, ça va pas mieux. Mon relais se ferme trop longtemps…
Je ne comprends pas trop car avec une difference de 50% et un cycle de 20 minutes.
Le relais ne devrait pas se fermer plus de 10 minutes.
J’ai aussi appliqué le min_cycle_duration: 60. J’avais vu par moment que le relais s’activait pendant 5 secondes, ce qui ne sert pas à grand chose et pas sur que ça soit top pour la résistance.

Le pid_i monte beaucoup trop haut. Et je pense que la modification ne fonctionne pas correctement car l’integrale doit continuer à monter alors qu’on depasse 50%.
Il va me falloir du temps pour debugger ça :face_with_diagonal_mouth:

1 « J'aime »

Ok
A mon avis ça serait peut etre plus simple de pouvoir regler le rapport cyclique de la même façon qu’avec le temps min.
En ajoutant par exemple les paramètres suivants à la conf

  • max_on_cycle_duration (ne doit pas etre plus grand que pwm ou que pwm - min_cycle duration)

C’est à dire que le boiler ne pourra pas être ON plus de max_on_cycle_duration sur le cycle

Probablement plus simple à modifier qu’à gérer une difference ?

Hello @ScratMan
As tu eu le temps de regarder ça ?

Sinon pour info, j’avais mis le thermostat sur OFF.
L’intégration smartthermostat, même à OFF, a tout de même un impact sur la commande de relais.
J’avais réglé les temps min qui sont toujours pris en compte.
Du coup comme j’ai un autre device qui pilote ce relais, ça m’a foutu une belle grouille :wink:

Je sais pas si c’est normal ou pas. En tout cas j’ai du désactivé l’intégration complètement pour me rechauffer un peu :wink:

Oui, c’est normal, c’est une fonction qui avait été demandée car certains utilisateurs avaient le problème inverse avec un switch qui se mettait ON alors qu’ils ne le voulaient pas. Tu as le paramètre force_off_state que tu peux mettre à false pour laisser le switch accessible à un autre thermostat, une utilisation manuelle, etc…

Désolé pour l’attente, j’ai été très pris. J’ai pu faire une modification à l’arrache sur mon temps de pause entre midi et deux. J’ai poussé une release 2024.3.0-beta1 que tu peux tester.

Tu peux ajouter les paramètres suivants à ta config yaml:

output_max: 100
out_clamp_high: 50

Ca va dire au thermostat de travailler avec seulement 50% de rapport cyclique maximum.

Ah top merci
j’enleve le parametre difference du coup ?

Oui, je l’ai retiré et remplacé par les output_xxx

C’est en test. Je te tiens au courant. Pas sur qu’on est le temps de tester correctement avant la fin de l’hiver !

Hello @ScratMan
Ta modif a l’air de fonctionner. Je tente de paufiner les réglages mais pas évident car la journée il faut chaud maintenant. te tiens au courant.

Sinon à chaque redémarrage de HA, le smart thermostat se met en OFF.
Moyen de garder le dernier état ?
J’ai regardé ce param initial_hvac_mode mais je veux pas forcer ON ou OFF à chaque redémarrage, voudrais juste récupérer le dernier état car je gère le mode avec un scénarrio.

Merci

Ben normalement si le initial_hvac_mode n’est pas spécifié, le thermostat redémarre toujours dans son dernier état connu, si HA est arrêté proprement en tout cas. Je vais vérifier de mon côté.

Non ce n’est pas le cas chez moi. A chaque redemarrage (propre) il passe à off.
Le parem n’est pas spécifié dans ma conf