Smart Thermostat - le chauffage contrôlé par PID

Smart Thermostat est une intégration pour Home Assistant disponible sur le Home Assistant Community Store (HACS).
Elle permet de créer un thermostat virtuel de la même façon que le Generic Thermostat de Home Assistant, mais avec une modulation par un contrôleur proportionnelle, intégrale et dérivée, et non plus un hystérésis.

Il est parfaitement adapté au pilotage de radiateurs électriques ou sèche-serviettes via fil pilote (recommandé) ou relais (déconseillé pour des coupures de fortes puissances) ; ou bien de chaudières équipées de thermostat simples On/Off à hystérésis.

6 « J'aime »

hacs_badge

HASmartThermostat

Smart Thermostat avec contrôleur PID pour Home Assistant

Crée un thermostat virtuel avec une régulation de température précise et réactive par contrôleur PID.
Principe d’un contrôleur PID.
Ce thermostat peut contrôler n’importe quel système de chauffage ou de climatisation via fil pilote ou relais (déconseillé pour les fortes puissances) par modulation PWM en fonction de la température et de sa variation dans le temps.

Installation:

L’installation via Home Assistant Community Store est recommandée.

Installation avec HACS:

Se rendre dans HACS, cliquer sur Intégrations, puis sur le bouton "Ajouter " en bas à droite. Dans le champ de rechercher, entrer « Smart thermostat (PID) » et cliquer sur l’intégration dans la liste en dessous. Cliquer sur « Télécharger avec HACS » pour installer l’intégration.

Installation manuelle:

  1. Télécharger et extraire le code source : https://github.com/ScratMan/HASmartThermostat/archive/refs/heads/master.zip
  2. Se rendre dans le dossier de configuration de Home Assistant (par défaut homeassistant/.homeassistant/ ; où se trouve le fichier configuration.yaml)
  3. Créer un dossier custom_components s’il n’existe pas
  4. Copier le contenu du dossier custom_components/smart_thermostat du code source dans un dossier <conf-dir>/custom_components/smart_thermostat

Configuration:

Le Smart Thermostat peut être ajouté à Home Assistant une fois installé en ajoutant une section climate au fichier configuration.yaml.

Configuration example:

configuration.yaml

climate:
  - platform: smart_thermostat
    name: Smart Thermostat Example
    unique_id: smart_thermostat_example
    heater: switch.on_off_heater
    target_sensor: sensor.ambient_temperature
    min_temp: 7
    max_temp: 28
    ac_mode: False
    target_temp: 19
    keep_alive:
      seconds: 60
    away_temp: 14
    kp : 5
    ki : 0.01
    kd : 500
    pwm : 00:15:00

Utilisation:

Traduction en cours
The target sensor measures the ambient temperature while the heater switch controls an ON/OFF heating system.
The PID controller computes the amount of time the heater should remain ON over the PWM period to reach the temperature
set point, in example with PWM set to 15 minutes, if output is 100% the heater will be kept on for the next 15 minutes
PWM period. If PID output is 33%, the heater will be switched ON for 5 minutes only.

By default, the PID controller will be called each time the target sensor is updated. When using main powered sensor
with high sampling rate, the sampling_period parameter should be used to slow down the PID controller refresh rate.

By adjusting the Kp, Ki and Kd gains, you can tune the system response to your liking. You can find many tutorials for
guidance on the web. Here are a few useful links:

To make it quick and simple:

  • Kp gain adjusts the proportional part of the error compensation. Higher values means
    stronger reaction to error. Increase the value for faster rise time.
  • Ki gain adjusts the integral part. Integral compensates the residual error when temperature settles in a cumulative
    way. The longer the temperature remains below the set point, the higher the integral compensation will be. If your
    system settles below the set point, increase the Ki value. If it overshoots the set point, decrease the Ki value.
  • Kd gain adjusts the derivative part of the compensation. Derivative compensates the inertia of the system. If the
    sensor temperature increases quickly between two samples, the PID will decrease the PWM level accordingly to limit the
    overshoot.

PID output value is the weighted sum of the control terms:
error = set_point - current_temperature
di = temperature change between last two samples
dt = time elapsed between last two samples
P = Kp * error
I = last_I + (Ki * error * dt)
D = -(Kd * di) / dt
output = P + I + D
Output is then limited to 0% to 100% range to control the PWM.

Autotune (not always working, not recommended to use):

You can use the autotune feature to find some working PID parameters.
Add the autotune: parameter with the desired tuning rule, and optionally set the noiseband and lookback duration if the
default 2 hours doesn’t match your HVAC system bandwidth.
Restart Home Assistant to start the thermostat in autotune mode and set the desired temperature on the thermostat.
The autotuner will then start analyzing your heating system, measure the sampling rate of the sensor, control the heater
switch and monitor the temperature changes.

Wait for the autotune to finish by checking the autotune_status attribute for success. The Kp, Ki and Kd gains will
then be computed and set according to the selected rule and the thermostat switches to PID.
The Kp, Ki and Kd gains are also computed using the other rules, and all values are shown in the Home Assistant log
like this: « Smart thermostat PID Autotuner output with ziegler-nichols rule: Kp=######, Ki=######, Kd=###### ».
You should then save for reference the gains computed by the autotuner for future testing.

Warning: The thermostat set point can’t be changed once the autotuner has started monitoring the temperature.
The temperature regulation will work as a basic hysteresis thermostat based on set point and noise band. If your
heating system and temperature monitoring is slow, reducing the noise band will reduce the temperature oscillations
around the set point. If the sampling rate of your temperature sensor is too fast (few seconds) or noisy (frequent
temperature changes) increase the noise band for system stability.

Warning: The autotuner result is saved in the entity attributes and restored after Home Assistant is restarted.
However, it is recommended to save the new gains in the YAML configuration file to keep it in case of Home Assistant
database’s is corrupted.

Services

Services can be used in Home Assistant to configure the thermostat.
The following services are available:\

Set PID gains: smart_thermostat.set_pid_gain
Use this service to adjust the PID gains without requiring a restart of Home
Assistant. Values are saved to Home Assistant database and restored after a restart. Please consider saving
the final gain parameters in YAML configuration file when satisfied to keep it safe in case of database corruption.
Optional parameters : kp, ki and kd, as float.
Example:

service: smart_thermostat.set_pid_gain
data:
  kp: 11.8
  ki: 0.00878
target:
  entity_id: climate.salle_de_bain

Set preset modes temperatures: smart_thermostat.set_preset_temp
Use this service to set the temperatures for the preset modes. It can be adjusted
for all preset modes, if a preset mode is not enabled through YAML, it will be enabled. You can use any preset temp
parameter available in smart thermostat settings.
Example:

service: smart_thermostat.set_preset_temp
data:
  away_temp: 14.6
  boost_temp: 22.5
target:
  entity_id: climate.salle_de_bain

Clear the integral part: smart_thermostat.clear_integral
Use this service to reset the integral part of the PID controller to 0. Useful
when tuning the PID gains to quickly test the behavior without waiting the integral to stabilize by itself.

Reload integration: smart_thermostat.reload
Use this service to reload the thermostat from scratch without requiring a restart of Home Assistant.

Parameters:

  • name (Optional): Name of the thermostat.
  • unique_id (Optional): unique entity_id for the smart thermostat.
  • heater (Required): entity_id for heater switch, must be a toggle device. Becomes air conditioning switch when
    ac_mode is set to True.
  • target_sensor (Required): entity_id for a temperature sensor, target_sensor.state must be temperature.
  • keep_alive (Required): sets update interval for the PWM pulse width. If interval is too big, the PWM granularity
    will be reduced, leading to lower accuracy of temperature control, can be float in seconds, or time hh:mm:ss.
  • kp (Recommended): Set PID parameter, proportional (p) control value (default 100).
  • ki (Recommended): Set PID parameter, integral (i) control value (default 0).
  • kd (Recommended): Set PID parameter, derivative (d) control value (default 0).
  • pwm (Optional): Set period of the pulse width modulation. If too long, the response time of the thermostat will
    be too slow, leading to lower accuracy of temperature control. Can be float in seconds or time hh:mm:ss (default 15mn).
  • min_cycle_duration (Optional): Set a minimum amount of time that the switch specified in the heater option must
    be in its current state prior to being switched either off or on (useful to protect boilers). Can be float in seconds
    or time hh:mm:ss (default 0s).
  • min_off_cycle_duration (Optional): When min_cycle_duration is specified, Set a minimum amount of time that the
    switch specified in the heater option must remain in OFF state prior to being switched ON. The min_cycle_duration
    setting is then used for ON cycle only, allowing different minimum cycle time for ON and OFF. Can be float in seconds
    or time hh:mm:ss (default 0s).
  • sampling_period (Optional): interval between two computation of the PID. If set to 0, PID computation is called
    each time the temperature sensor sends an update. Can be float in seconds or time hh:mm:ss (default 0)
  • target_temp_step (Optional): the adjustment step of target temperature (valid are 0.1, 0.5 and 1.0, default 0.5 for Celsius
    and 1.0 for Fahrenheit)
  • precision (Optional): the displayed temperature precision (valid are 0.1, 0.5 and 1.0, default 0.1 for Celsius
    and 1.0 for Fahrenheit)
  • min_temp (Optional): Set minimum set point available (default: 7).
  • max_temp (Optional): Set maximum set point available (default: 35).
  • target_temp (Optional): Set initial target temperature. If not set target temperature will be set to null on
    startup.
  • ac_mode (Optional): Set the switch specified in the heater option to be treated as a cooling device instead of a
    heating device. Should be a boolean (default: false).
  • away_temp (Optional): Set the temperature used by the « Away » preset. If this is not specified, away_mode feature will not be available.
  • eco_temp (Optional): Set the temperature used by the « Eco » preset. If this is not specified, eco feature will not be available.
  • boost_temp (Optional): Set the temperature used by the « Boost » preset. If this is not specified, boost feature will not be available.
  • comfort_temp (Optional): Set the temperature used by the « Comfort » preset. If this is not specified, comfort feature will not be available.
  • home_temp (Optional): Set the temperature used by the « Home » preset. If this is not specified, home feature will not be available.
  • sleep_temp (Optional): Set the temperature used by the « Sleep » preset. If this is not specified, sleep feature will not be available.
  • activity_temp (Optional): Set the temperature used by the « Activity » preset. If this is not specified, activity feature will not be available.
  • noiseband (Optional): set noiseband for autotune (float): Determines by how much the input value
    must overshoot/undershoot the set point before the state changes (default : 0.5).
  • lookback (Optional): length of the autotune buffer for the signal analysis to detect peaks, can
    be float in seconds, or time hh:mm:ss (default 2 hours).
  • autotune (Optional): Set the name of the selected rule for autotune settings (ie « ziegler-nichols »). If it’s not set, autotune is disabled. The following
    tuning_rules are available:
ruler Kp_divisor, Ki_divisor, Kd_divisor
« ziegler-nichols » 34, 40, 160
« tyreus-luyben » 44, 9, 126
« ciancone-marlin » 66, 88, 162
« pessen-integral » 28, 50, 133
« some-overshoot » 60, 40, 60
« no-overshoot » 100, 40, 60
« brewing » 2.5, 6, 380

Sources

Ce code est issue du projet Smart Thermostat PID:
https://github.com/aendle/custom_components
Le module Python PID avec Autotune est basé sur pid-autotune:
https://github.com/hirschmann/pid-autotune

1 « J'aime »

Réservation pour tuto

Les types de régulation pour les thermostats:

Hystérésis:

Les thermostats avec hystérésis sont les plus courants. Ce sont des systèmes de type ON/OFF, ils allument le chauffage lorsque la température ambiante tombe sous la température de consigne, et éteignent le chauffage dès lors qu’elle repasse au dessus de la consigne.

Ils ont une fenêtre (l’hystérésis) générant une zone morte autour de la température de consigne pour éviter les bascules trop rapprochées, par exemple de +/- 0,1°C. Il faut que la température tombe sous la consigne - 0,1°C pour passer ON, et se coupent lorsque la température dépasse la consigne + 0,1°C.

Il en résulte une température qui fluctue beaucoup en fonction de l’inertie du système de chauffage. Par exemple sur un plancher chauffant qui diffuse lentement la chaleur, lorsque le thermostat détecte une température suffisante et coupe le chauffage, le plancher chauffant a déjà accumulé beaucoup d’énergie, qu’il continuera à diffuser, faisant monter la température bien au delà de la consigne.
Même chose lors de la descente, le thermostat attendra que la température ambiante tombe sous sa consigne pour allumer le chauffage, mais il faut alors que le plancher chauffant remonte en température avant qu’il ne puisse diffuser la chaleur dans la pièce, ce qui laissera descendre la température ambiante dans la pièce bien en dessous de la consigne.

Proportionnelle (P):

Ce type de thermostat module la puissance du chauffage en fonction de la différence entre la température ambiante et la température de consigne. Par exemple en faisant varier l’ouverture d’une vanne de chauffage, ou en allumant un chauffage électrique plus ou moins longtemps. Plus l’écart à la consigne est élevé, plus on allume le chauffage longtemps ou plus on ouvre la vanne. C’est ainsi que fonctionnent les vannes thermostatiques mécaniques de radiateurs à eau chaude, par exemple.

Le principal défaut de ce type de thermostat est que lorsque l’on s’approche de la température de consigne, le chauffage se coupe de plus en plus, laissant redescendre la température. On n’atteint donc jamais la température de consigne, laissant une erreur résiduelle.

Un gain Kp permet de connaître la relation entre l’erreur de température et la modulation de la puissance. LKa formule de la régulation du thermostat donne: Sortie = P = Kp * erreur
Un gain Kp élevé rend le système très réactif, mais peu précis la modulation passant rapidement à des valeurs élevées pour une erreur encore faible. Un Kp faible permet de s’approcher plus proche de la consigne, mais au prix d’un système peu réactif sur les fortes variations de température.

Proportionnelle et intégrale (PI):

Cette fois, on vient coupler la régulation proportionnelle à un système intégrateur pour compenser l’erreur résiduelle laissée par la régulation proportionnelle.
L’intégrateur dépend d’un temps d’échantillonnage: à intervalles de temps réguliers, il mesure l’erreur résiduelle, et l’additionne à sa mesure précédente. S’il reste 1°C à l’instant T0, son erreur va être de 1 ; puis si l’erreur est de 0,9°C à T1, il va additionner 1 + 0,9 et mémoriser la somme 1,9 ; si l’erreur est encore à 0,9°C à T2, il mémorisera 2,8, etc…

Cette erreur cumulée est multipliée par un gain Ki pour ajuster la modulation. La formule de régulation du thermostat devient la suivante: Sortie = P + I avec I += Ki * erreur * dt (dt étant le temps d’échantillonnage du thermostat).

Lorsqu’on approche de la consigne, la composante proportionnelle tend vers 0, diminuant la modulation et laissant une erreur résiduelle.
Mais plus l’erreur résiduelle reste longtemps, plus la composante intégrale devient importante, augmentant la modulation et compensant cette erreur. On conserve ainsi une puissance de chauffage régulière qui permet de compenser les pertes caloriques de la pièce.
Si la température monte trop haut (par exemple avec le soleil qui chauffe à travers les fenêtres), l’erreur devient négative, la composante intégrale se réduit avec le temps et revient stabiliser la température à la consigne.

On le voit, ce type de régulation est très efficace. La principale limitation vient de la composante proportionnelle qui lorsque le gain est élevé rend le système réactif (si la consigne monte brutalement de 2°C le chauffage va chauffer fortement pour atteindre rapidement la consigne), mais peut provoquer un overshoot plus ou moins important selon l’inertie du système de chauffage.

Proportionnelle, intégrale et dérivée (PID):

Cette régulation ajoute une composante dérivative à la régulation PI : Sortie = P + I + D. Cette composante D mesure la variation de la température ambiante dans le temps D = -Kd * di / dt ; di étant la variation de température et dt le temps écoulé depuis la dernière mesure. Ainsi, plus la température montera vite, plus la composante D sera négative, faisant diminuer la sortie du régulateur.

Sur un système de chauffage à l’inertie forte, ça permet d’utiliser un gain Kp plus élevé, forçant le chauffage à la puissance maximale si la consigne monte, permettant une montée en température plus franche, et lorsque la température commence à monter de plus en plus vite, la composante D compense une composante P encore élevée, pour réduire la puissance en sortie et limiter l’overshoot.

Autre avantage, lorsque suite à un fort ensoleillement ou une activité humaine la température est fortement montée dans la pièce, lorsque la température baisse et se rapproche de la consigne, la composante dérivative sera positive, compensant la composante proportionnelle qui sera alors négative ; ce qui permet au thermostat d’anticiper l’approche de la consigne, allumant le chauffage en avance pour éviter de descendre trop bas sous la consigne.

Les types de modulations

Pulse Width Modulation (PWM):

C’est une modulation temporelle, faisant varier la durée des cycles ON et OFF. Par exemple, si la sortie du thermostat est de 50% pour une période PWM de 20 minutes, le chauffage sera allumé 10 minutes et éteint 10 minutes.

Ce type de modulation est adaptable à tout type de chauffage, avec des contraintes dépendant du type de chauffage. Par exemple, les chaudière à gaz ou au fioul nécessitant un certain temps pour démarrer et fournir une puissance suffisante, il faut une durée minimum pour les cycles ON et OFF plus élevée. Les radiateurs électriques sont plus rapides et peuvent avoir des cycles plus courts, permettant une modulation plus fine.

Modulation de puissance:

Cette modulation agit directement sur la puissance générée par le système de chauffage, par exemple en ajustant le nombre de brûleurs actifs sur une chaudière gaz, ou en agissant sur l’ouverture d’une vanne trois voie pour ajuster la température de l’eau injectée dans un circuit de chauffage

1 « J'aime »

Non, le 100 vient de la plage de sortie qui pour le PID est fixée à 0/100 pour correspondre à un pourcentage. Du coup comme l’autotune utilise le même paramètre en entrée, on a 100 par défaut.

2 « J'aime »

J’ai généré une version bêta permettant de régler les gains du PID ainsi que les températures des modes preset via des services, directement dans l’interface de Home Assistant. Ca devrait faciliter le tuning.

1 « J'aime »

Bravo pour toutes ces améliorations qui vont dans le bon sens !

Toutefois la notion de valeurs PID reste un peu floue et trop technique pour le commun des utilisateurs.

Une idée d’amélioration pourrait être de fournir des templates qui seraient une sorte de preset de base en fonction de facteurs plus ou moins standard :

  • Type de chauffage
  • Type de convecteurs (tous n’ont pas le même temps de montée en température et d’inertie)
  • Région
  • Niveau de l’isolation
  • Etc…

Je en sais pas si c’est techniquement envisageable, mais cela permettrait aux utilisateurs de débuter autrement qu’avec un copié collé de l’exemple initial et ensuite d’ajuster.

La modification des consignes se faisant maintenant via un service, je suppose qu’il n’est plus utile de les laisser dans la config de base ? Qui a le dernier mot au reboot, la config ou les valeurs définie par le service ? (idem PID).

On peut encore les laisser dans la configuration YAML, au reboot les dernières valeurs utilisées sont restaurées. Le fichier de configuration n’est alors utilisé qu’en cas de suppression ou corruption de la base de données de Home Assistant. Donc autant copier dans le YAML les valeurs de température et de gains PID une fois le bon réglage trouvé.

Pour la base de données avec des exemples, j’y pense, mais il faudrait un retour des utilisateurs de l’intégration avec le type d’installation et les réglages utilisés.

Une des prochaines étapes est de pouvoir démarrer et arrêter l’autotune sans devoir redémarrer Home Assistant, et pouvoir forcer une analyse pour plus de flexibilité. Associé à un mode PID Off ça permettrait de faire une mesure et de sortir des coefficients de base en quelques heures à peine.

1 « J'aime »

Hello encore :slight_smile:
Autre question : j’ai du mal à comprendre la différence dans les paramètres entre le keep_alive, et le pwm…

J’avais mis un keep_alive à 1min comme dans l’« exemple » et un pwm à 10min pour avoir 6 périodes dans 1h, mais je me retrouve avec mes chauffages qui s’allument parfois pendant 30s toutes les 2min… Si je ne dis pas de bêtise, quand le thermostat donne une puissance de 10%, il est sensé lancer la chauffe durant 1min sur les 10min du PWM, et attendre le cycle suivant pour relancer une chauffe non ? Et le keep_alive devrait juste faire la MAJ du PWM, et ajuster la durée suivant le besoin, non ? (genre au lancement de la chauffe ça devait être 10%, mais aux vues des infos MAJ, on passe à 12%, donc reste allumé encore un moment)

Oui, c’est bien ce principe. Le keep_alive ne gère que le « rafraîchissement » pour s’assurer que le PWM bascule bien.
Si le thermostat bascule le chauffage off/on/off trop fréquemment c’est souvent lié à un sensor de température qui envoie une information bruitée, les changements de température provoquant un nouveau calcul du PID. Avec des variations de 0,1/0,2°C très fréquentes, le delta t est très court, la composante dérivation qui évolue en di/dt passe donc de fortement négative à fortement positive selon le sens de la variation de la température + ou -, ce qui fait basculer le thermostat de 0 à 100%.

Pour éviter ce phénomène, on peut soit :

  • Réduire le nombre de mesures faites par le capteur s’il est réglable
  • Utiliser le paramètre sampling_period dans la configuration du thermostat pour ne prendre qu’un échantillon toutes les X minutes (10 ou 15mn par exemple) pour stabiliser la boucle de régulation

Il faut aussi adapter les gains Ki et Kd au taux d’échantillonnage du système. Si le delta t est court le gain Kd sera plus petit, et Ki plus grand ; si le delta t est long il faudra augmenter le Kd et réduire le Ki.

Ce n’était pas le cas, j’ai justement mis un sampling à 5min pour éviter les dérives trop rapides…
En revanche, j’avais modifié mon PWM et mon keep_alive au format hh:mm:ss et c’est là que les problèmes sont apparus. Je suis passé en secondes, et là ça a l’air mieux.

Hello, il lui faut combien de cycle à l’auto tune pour faire le boulot?

Tout à fait.
@Moderateur serait-il possible de déplacer les messages sur le thermostat PID dans un sujet dédié ?
Merci

Normalement, 1,5 cycle.

Ok merci.
Je vais l’arrêter parce que depuis ce matin 9h il a pas terminé

Note l’amplitude et la durée de la période de l’oscillation comme indiqué dans un de mes messages plus haut, ça te permettra au moins de calculer les gains à la main. Ca marche plutôt bien.

Bonjour a tous

Est ce qu’il y a une raison pourquoi le mode chauffe ne se declanche pas ?
J’ai du changer quelques reglage du PID depuis ce matin, mais j’ai reboot et fait un smart_thermostat.clear_integral entre temps.

Je sais pas ou ragerder, j’ai rien dans les logs

Il fait 17.7 dans mon salon, et le target est 19.5

platform: smart_thermostat
name: Living Room
heater: switch.living_room_heater_relay
target_sensor: sensor.living_room_temperature
min_temp: 16
max_temp: 20
ac_mode: false
target_temp: 18
keep_alive:
  seconds: 60
initial_hvac_mode: "off" # J'ai une automation qui le rallume au boot
away_temp: 18
boost_temp: 20
comfort_temp: 19.5
kp: 50
ki: 0.01
kd: 200
pwm: 00:15:00
target_temp_step: 0.1
precision: 0.1
#autotune: "ziegler-nichols"

J’ai testé avec cette configuration sur mon environnement de test, et ça a l’air de marcher, si je baisse la température sous la consigne ça déclenche la chauffe.

Le thermostat étant restauré dans le dernier état connu avant l’arrêt de HA, quel est l’état du thermostat dans les outils de développement ? (voir http://xxx.xxx.xxx.xxx:8123/developer-tools/state).

hvac_modes:
  - heat
  - 'off'
min_temp: 16
max_temp: 20
target_temp_step: 0.1
preset_modes:
  - none
  - away
  - boost
  - comfort
current_temperature: 17.3
temperature: 19.5
hvac_action: heating
preset_mode: none
away_temp: 18
eco_temp: null
boost_temp: 20
comfort_temp: 19.5
home_temp: null
sleep_temp: null
activity_temp: null
control_output: 100
Kp: 15
Ki: 0.02
Kd: 1000
pid_p: 32.999999999999986
pid_i: 18.542237342834472
pid_d: 55.50668377623727
autotune_status: 'off'
autotune_sample_time: 0
autotune_tuning_rule: none
autotune_set_point: 0
autotune_peak_count: 0
autotune_buffer_full: 0
autotune_buffer_length: 0
friendly_name: Salle de bain
supported_features: 17

On dirait que ça vient de tomber en marche.

J’avais désactivé les thermostats et remis le chauffage en marche forcée en attendant.

J’ai remis les smart_thermostat en marche, et remis un coup de set_pid_gain et ça s’est rallumé a l’instant

hvac_modes:

  • heat
  • ‹ off ›
    min_temp: 16
    max_temp: 20
    target_temp_step: 0.1
    preset_modes:
  • none
  • away
  • boost
  • comfort
    current_temperature: 19.3
    temperature: 20
    hvac_action: heating
    preset_mode: none
    away_temp: 18
    eco_temp: null
    boost_temp: 20
    comfort_temp: 19.5
    home_temp: null
    sleep_temp: null
    activity_temp: null
    control_output: 89.01063604452769
    Kp: 50
    Ki: 0.01
    Kd: 200
    pid_p: 34.999999999999964
    pid_i: 67.45539606809623
    pid_d: -0.0
    autotune_status: ‹ off ›
    autotune_sample_time: 0
    autotune_tuning_rule: none
    autotune_set_point: 0
    autotune_peak_count: 0
    autotune_buffer_full: 0
    autotune_buffer_length: 0
    friendly_name: Living Room
    supported_features: 17