Pilotage d’une VMC

Bonjour,

J’ai vu que je n’étais pas le seul à me poser des questions sur la vitesse de la VMC.Elle n’est jamais éteinte, donc je n’utilise qu’un simple switch pour activer la grande vitesse.

Le sujet récent dans la même rubrique était centré sur les moyen de piloter (suivez ce lien, très interessant).Mais quand déclancher la grande vitesse??

Là je vous donne mon approche:

  • L’humidité relative telle que donnée par une sonde dépend de la température. Donc comparer l’humidité d’une sonde exterieure vs une sonde intérieur est inutile.
  • Il faut calculer l’humidité absolue pour l’extérieur et l’intérieur (pièce humide) via un template (en mg/m3). L’humidité absolue est la quantité d’eau dans l’air, indépendamment de sa température
  • L’humidité relative est celle qui donne un indicateur de confort.
{% set temp = states(‹ sensor.thermometre_cuisine_temperature ›) | float %}
{% set humidity = states(‹ sensor.thermometre_cuisine_humidity ›) | float %}
{% if temp is not none and humidity is not none %}
{{ (6.112 * (2.71828 ** ((17.62 * temp) / (243.12 + temp))) * humidity * 2.1674) / (273.15 + temp) | round(2) }}
{% else %}
{{ states(‹ sensor.humidite_absolue_cuisine ›) | default(0) }}
{% endif %}

Ensuite, il faut calculer la différence d’humidité absolue intérieur et extérieur:

{% set h0 = states(‹ sensor.humidite_absolue_exterieur ›) | float(0) %}
{% set h1 = states(‹ sensor.humidite_absolue_salle_de_bain_bas ›) | float(0) %}
{% set h2 = states(‹ sensor.humidite_absolue_cuisine ›) | float(0) %}
{% set hmin = min(h1, h2) %}
{{ (h0 - hmin) | round(2) }}

Je prends la pièce la moins humide car je veux savoir si ça vaut le coup d’allumer la VMC. Si l’écart est faible, alors ça ne sert à rien de faire rentrer de l’air aussi humide que l’air qui sort.

Ensuite, je regarde l’écart. Perso j’active la VMC sous différentes conditions:

  • Si l’écart est supérieur à 1.5 mg/m3
  • Si l’humidité relative est supérieur à la zone de confort pour les pièces de vie. Une petite recherche sur le web permet de connaître les zones de confort de l’humidité relative pour chaque pièce
  • Si ça n’est pas la nuit
  • Mon rêve : si on n’est pas à la maison

Voici mon visuel (au milieu, c’est un interrupteur, il y a 2 fois SdB Bas car je n’ai pas encore zigbee dans la salle de bain du haut :/):

1 « J'aime »

Salut,

Ça semble une bonne idée. Tes mesures de mg/m³ viennent d’où? Tu laisses donc ta vmc allumée tout le temps en basse vitesse ou pas? Pour renouveler l’air j’entends.

Thx

Bonjour

Oui, ma VMC est allumée tout le temps. Ce que je module, c’est la vitesse 2;

Je calcule la masse d’eau par m3 à partir de l’humidité relative et la température.
L’humidité relative dépend de la température : à 100%, cela correspond au point de rosée, c’est à dire le moment où il y a trop de vapeur pour un volume donné et une température donnée: ça condense (rosée).

La formule est donnée dans mon premier post

Je n’avais pas bien lu, merci.

Bonjour

Il existe un addon qui donne pas mal d’infos qu’on peut paramétrer pièces par pièces

Il y a quelques temps j’étais parti dans la même démarche pour piloter deux déshumidificateurs, depuis je suis revenu à quelque chose de plus basique avec “hygrostat”

Automatisation déshumidificateurs

Merci je vais regarder

Salut,

Je pense qu’il y a une erreur d’unité.
Vous devrier plutôt exprimer votre humidité absolue en g/m3 et non en mg/m3.
Les valeurs usuelles dhumidité absolue sont généralement comprise entre 5 et 20 g/m3

Bien vu!

Merci pour la remarque. C’est une précision qui peut avoir son importance à long terme…

Ceci dit, d’un point de vue purement fonctionnel, cela à peu d’importance :wink:

Bonjour

Quand je suis passé de jeedom à home assistant j’ai essayé de reproduire les différents scénarios que j’avais et notamment sur cette base comme @TroyLeChat : “Si l’humidité relative est supérieur à la zone de confort pour les pièces de vie”

Je n’ai jamais été satisfait du résultat

Ensuite je suis passé à une solution base “hygrostat” mais là encore, la cible de déclenchement dans une région humide comme la mienne n’est pas évidente et doit pouvoir être dynamique avec des critères fiables.

Ce thread m’a donné envie de retravailler le sujet et en creusant j’en suis venu à définir que le critère le plus fiable est le “dew point” “point de rosée” puisqu’il varie en fonction de l’humidité et de la température de la pièce. A partir de là il suffisait de trouver les bons calculs et les bons seuils.

A force de lectures il semble que ce soit l’équation d’Arden Buck qui donne les résultats les plus précis. Et qu’on peut se baser pour les Pièce sur les recommandations d’indices de Point de Rosée suivants :

  • Pour une cuisine il est conseillé de maintenir un indice “dew point” < à 16° C
  • Pour une Salle de Bain il est conseillé de maintenir un indice “dew point” < 16°C ou 18°C sachant qu’évidemment il y aura des pics et qu’on déclenchera la vitesse 2 de la VMC.

- Un exemple pour une salle de bain ou j’ai un extracteur deux vitesses, la vitesse 1 tourne en permanence et la vitesse 2 se déclenche si on prend une douche.

template:
  - sensor:
## Sdb1er dewpoint
      - name: "sdb1er_dewpoint"
        unique_id: sdb1er_dewpoint
        unit_of_measurement: "°C"
        device_class: temperature
        state: >-
          {% set temp = states('sensor.sdb1er_temperature_median') %}
          {% set hum = states('sensor.sdb1er_humidite_median') %}
          {% if temp in ['unavailable', 'unknown'] or hum in ['unavailable', 'unknown'] %}
            unavailable
          {% else %}
            {% set T = temp | float %}
            {% set RH = hum | float %}
            {% if RH <= 0 %}
              unavailable
            {% else %}
              {% set a = 6.1121 %}
              {% set b = 18.678 %}
              {% set c = 257.14 %}
              {% set d = 234.5 %}
              {% set e = 2.718281828459045 %}
              {# Calcul de l'exposant #}
              {% set exponent = (b - (T / d)) * (T / (c + T)) %}
              {% set Ps_m = a * (e ** exponent) %}
              {# gamma_m = ln(RH/100 * exp(exponent)) = ln(RH/100) + exponent #}
              {% set gamma_m = log(RH / 100) + exponent %}
              {% set dew = (c * gamma_m) / (b - gamma_m) %}
              {{ dew | round(1) }}
            {% endif %}
          {% endif %}

      - name: "sdb1er_dewpoint_comfort"
        unique_id: sdb1er_dewpoint_comfort
        state: >-
          {% set td = states('sensor.sdb1er_dewpoint') %}
          {% if td in ['unavailable', 'unknown'] %}
            Inconnu
          {% else %}
            {% set td = td | float %}
            {% if td <= 10 %}
              Très sec
            {% elif td <= 12 %}
              Sec
            {% elif td <= 16 %}
              Confortable
            {% elif td <= 18 %}
              Légèrement Humide
            {% elif td <= 21 %}
              Humide
            {% elif td <= 24 %}
              Très Humide
            {% else %}
              Extrêmement Humide
            {% endif %}
          {% endif %}

- Un exemple pour la cuisine ou j’ai un déshumidificateur, je le déclenche si le point de rosée est > ou = à 16°C

template:
  - sensor:

## Cuisine dewpoint
      - name: "cuisine_dewpoint"
        unique_id: cuisine_dewpoint
        unit_of_measurement: "°C"
        device_class: temperature
        state: >-
          {% set temp = states('sensor.cuisine_temperature_median') %}
          {% set hum = states('sensor.cuisine_humidite_median') %}
          {% if temp in ['unavailable', 'unknown'] or hum in ['unavailable', 'unknown'] %}
            unavailable
          {% else %}
            {% set T = temp | float %}
            {% set RH = hum | float %}
            {% if RH <= 0 %}
              unavailable
            {% else %}
              {% set a = 6.1121 %}
              {% set b = 18.678 %}
              {% set c = 257.14 %}
              {% set d = 234.5 %}
              {% set e = 2.718281828459045 %}
              {# Calcul de l'exposant #}
              {% set exponent = (b - (T / d)) * (T / (c + T)) %}
              {% set Ps_m = a * (e ** exponent) %}
              {# gamma_m = ln(RH/100 * exp(exponent)) = ln(RH/100) + exponent #}
              {% set gamma_m = log(RH / 100) + exponent %}
              {% set dew = (c * gamma_m) / (b - gamma_m) %}
              {{ dew | round(1) }}
            {% endif %}
          {% endif %}

      - name: "cuisine_dewpoint_comfort"
        unique_id: cuisine_dewpoint_comfort
        state: >-
          {% set td = states('sensor.cuisine_dewpoint') %}
          {% if td in ['unavailable', 'unknown'] %}
            Inconnu
          {% else %}
            {% set td = td | float %}
            {% if td <= 10 %}
              Très sec
            {% elif td <= 12 %}
              Sec
            {% elif td <= 16 %}
              Confortable
            {% elif td <= 18 %}
              Légèrement Humide
            {% elif td <= 21 %}
              Humide
            {% elif td <= 24 %}
              Très Humide
            {% else %}
              Extrêmement Humide
            {% endif %}
          {% endif %}

A partir des sensor.*_dewpoint on peut facilement faire ses automatisations

Exemple d’automatisation :

J’ai créé un “helper” Timer VMC dewpoint qui me permet de définir une tempo avant que la vitesse 2 s’arrête quand le point de rosée est inférieur à 16°C, je l’ai paramètré à 10mn mais c’est au choix

description: ""
triggers:
  - trigger: state
    entity_id:
      - sensor.sdb1er_dewpoint
    id: "DEWPOINT ON #"
  - trigger: state
    entity_id:
      - timer.timer_vmc_dewpoint
    to: idle
    id: "TIMER OFF #"
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - "DEWPOINT ON #"
          - condition: numeric_state
            entity_id: sensor.sdb1er_dewpoint
            above: 16
        sequence:
          - action: switch.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: switch.vmc_fgs223
          - action: timer.start
            metadata: {}
            data: {}
            target:
              entity_id: timer.timer_vmc_dewpoint
      - conditions:
          - condition: trigger
            id:
              - "TIMER OFF #"
        sequence:
          - if:
              - condition: numeric_state
                entity_id: sensor.sdb1er_dewpoint
                below: 16
            then:
              - action: switch.turn_off
                metadata: {}
                data: {}
                target:
                  entity_id: switch.vmc_fgs223
            else:
              - action: timer.start
                metadata: {}
                data: {}
                target:
                  entity_id: timer.timer_vmc_dewpoint
mode: single

Et avoir des indications sur le dashboard

Pour l’instant j’ai de bons résultats

Sinon pour ceux qui sont allergiques au yaml, il y a l’excellente intégration Thermal Comfort qui donne ces mêmes données plus bien d’autres.

Sympa l’approche.
Content de t’avoir donné un peu de motivation pour approfondir la question et d’identifier une solution intéressante.

1 « J'aime »