Pilotage VMC (on/off, petite et grande vitesse) avec deux salles de bain

Vous avez crée un script lua dont vous êtes fier, un .sh génial, un programme python hors du commun, un tuto , c'est ici que vous pouvez les partager.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
baboun2807
Messages : 29
Inscription : 30 déc. 2015, 23:43

Re: Pilotage VMC (on/off, petite et grande vitesse) avec deux salles de bain

Messagepar baboun2807 » 09 janv. 2017, 22:56

vinchz31 a écrit :Bonjour à tous,

Nouvel utilisateur de domoticz, j'ai entrepris de piloter ma VMC.

Contraintes / besoins :
    - deux salles de bain dans la maison
    - arrêt complet de la VMC lorsque l'hygro moyenne de la maison est inférieure à une valeur déterminée (60%) afin de ne pas faire rentrer d'air froid dans la maison (VMC simple flux)
    - mise en route de la VMC petite vitesse si :
      -l'hygro moyenne de la maison dépasse la valeur max (pour que la VMC joue son rôle lorsque nécessaire). Cette valeur est positionnée à 60% ce qui semble être la valeur max fixée dans la norme ;
      - OU si une des deux Salles de Bain présente un taux d'humidité supérieur à un taux maximum acceptable dans une salle de bain (car une salle de Bain est toujours un peu plus humide que la maison dans sa globalité. Le seuil est donc différent (je l'ai fixé à 65%).
    - mise en route de la VMC en marche forcée si l'humidité augmente soudainement dans une des salles de bain (et j'ai pour cela adapté le script suivant : http://www.domoticz.com/wiki/Humidity_control)
    - possibilité de bypasser le programme en utilisant un inter pour piloter la VMC: Off / Petite vitesse / grande vitesse / automatique (utilisation du programme)
Objectif :
L'intérêt est de pouvoir optimiser le fonctionnement de la VMC et n'activer celle-ci que lorsque nécessaire ce qui permet :
- de déshumidifier / désembuer rapidement les salles de bains lorsqu'elles sont utilisées ;
- d'économiser sur la facture de chauffage en :
    - coupant la VMC lorsqu'elle n'est pas nécessaire (évite de faire rentrer de l'air froid) ;
    - activant la VMC lorsque les conditions le nécessitent

------------------------------------------

Il faut en pré-requis :

1- Avoir deux interrupteurs On/off pour :
    - l'alimentation de la VMC (arrêt / marche)
    - l'alimentation de la marche forcée de la VMC
    NB: j'ai utilisé pour ma part deux modules On/off lumière 433Mhz que j'ai raccordés à ma VMC


2- Avoir un capteur virtuel pour l'humidité moyenne de la maison

    HygroVMC.jpg


    Ainsi qu'un script LUA permet de faire la moyenne des capteurs d'humidité de la maison pour alimenter ce capteur virtuel:
    NB: les capteurs des SDB ne sont pas intégrés dans la calcul de l'humidité moyenne de la maison car l'humidité de la SDB est toujours un peu supérieure et varie fortement.

    Code : Tout sélectionner

    commandArray = {}

    NOM_INTERRUPTEUR_DEBUG = 'ModeDebug'
    NOM_CAPTEUR_HUMIDITE1 = 'Chambre1'
    NOM_CAPTEUR_HUMIDITE2 = 'Chambre2'
    NOM_CAPTEUR_HUMIDITE3 = 'Salon'


    temperature1, hygro1, etat1 = otherdevices_svalues[NOM_CAPTEUR_HUMIDITE1]:match("([^;]+);([^;]+);([^;]+)")
    temperature2, hygro2, etat2 = otherdevices_svalues[NOM_CAPTEUR_HUMIDITE2]:match("([^;]+);([^;]+);([^;]+)")
    temperature3, hygro3, etat3 = otherdevices_svalues[NOM_CAPTEUR_HUMIDITE3]:match("([^;]+);([^;]+);([^;]+)")

    -- Calcul de la moyenne hygro
    Moyenne_Hygro = (hygro1 + hygro2 + hygro3) / 3

    -- Mise à jour du capteur virtuel d'hulidité (qui porte l'Idx n°5 --
    commandArray['UpdateDevice'] = 5 .. '|' .. tostring(Moyenne_Hygro) ..'|' .. 0

    if(otherdevices[NOM_INTERRUPTEUR_DEBUG]=='On') then   -- Si le mode debug est activé dans Domoticz (inter debug sur on)
    print('>>>>>>>>>>>>>>  Script de calcul de la moyenne hygrometrique de la maison <<<<<<<<<<<<<<<<<<<<<') 
    print('Hygro chambre 1 = ' .. hygro1 ..'% , Hygro chambre 2 = ' .. hygro2 .. '% , Hygro Salon = ' .. hygro3 ..'% , Hygro moyenne calculee = ' ..Moyenne_Hygro .. '%.' )
    end

    return commandArray


3- Disposer de interrupteurs :
    - Deux interrupteurs qui contrôlent les modules On/off 433 raccordés à la VMC (VMC-OnOff et VMC-GV pour "grande vitesse")
    - Trois interrupteurs virtuels :
      - un pour mettre en route le mode debugg (qui écrit dans les logs de domoticz)
      - un pour mettre en route le mode test (qui utilise des valeurs d'humidité positionnées dans des variables domoticz plutôt que celles des capteurs réels)
      - un 4 positions pour gérer la VMC (off / PV / GV / Automatique)
    InterrupteursVMC.jpg


4- définir les variables utilisées dans le script (voir les commentaires du script pour leurs signification)
    VariablesVMC2.jpg

Et voici le script qui gère tout ça :
-------------------------------------------

Code : Tout sélectionner

commandArray = {}
 
INTERVAL_MESURE = 2               -- Nombre d'intervals de mesure entre deux cycles d'analyse de l'humidité (en nombre de cycles = nombre de minutes)
SEUIL_DECLENCHEMENT_VMC = 2       -- Augmentation en % au-delà de laquelle on déclenche la GV de la VMC
NbCycles_Max_GV_VMC = 8          -- Nombre de cycles maximum durant lequel la GV de la VMC peut rester ON
                                  -- à partir du moment où il n'y a plus d'augmentation de l'humidité entre deux mesures                                 
Anticipation_Arret= 1             -- l'arrêt de la grande vitesse se fera à l'humidité avant déclenchement de la GV plus cette valeur
                                  -- ce qui permet d'anticiper l'arrêt de la grande vitesse avant d'atteindre la valeur initiale   
                                   
NOM_INTERRUPTEUR_PILOTAGE_VMC = 'VMC'
NOM_INTERRUPTEUR_OnOff_VMC = 'VMC-OnOff'
NOM_INTERRUPTEUR_GV_VMC = 'VMC-GV' 
NOM_CAPTEUR_HUMIDITE1 = 'SDB-Parents'
NOM_CAPTEUR_HUMIDITE2 = 'SDB-Enfants'
NOM_INTERRUPTEUR_DEBUG = 'ModeDebug'   
NOM_INTERRUPTEUR_TEST = 'Test-GV-SDB'   
NOM_CAPTEUR_VIRTUEL_HYGRO_MOYENNE= 'Hygro_Maison_Moyenne'
VALEUR_TEST_HUMIDITE1 = 'VMC_TST_HUM_SDB1'   -- valeur de test pour l'umidité positionné dans les variables domoticz
VALEUR_TEST_HUMIDITE2 = 'VMC_TST_HUM_SDB2'   -- valeur de test pour l'umidité positionné dans les variables domoticz

-- ---------------------------------------------------------------------
-- Récupération de paramètres de Domoticz passés par les interrupteurs               
-- ---------------------------------------------------------------------
  if(otherdevices[NOM_INTERRUPTEUR_DEBUG]=='On') then   -- Si le mode debug est activé dans Domoticz (inter debug sur on)
    MODE_DEBUGG= true
  else
    MODE_DEBUGG= false
  end

  if(otherdevices[NOM_INTERRUPTEUR_TEST]=='On') then   -- Si le mode test est activé dans Domoticz (inter Test sur on)
    MODE_TEST=true
  else
    MODE_TEST=false
  end

 
  if MODE_DEBUGG== true then
    print(' ')
    print(' ')
    print(' ')
    print(' ')
    print('>>>>>>>>>>>>>>  Script de controle de la VMC v1.0 <<<<<<<<<<<<<<<<<<<<<')
  end
 

-- ----------------------------------------------------------------------------------
-- --Récupération de toutes les variables Domoticz servant au script et remise à 0 --
-- ----------------------------------------------------------------------------------
  VMC_VAR_Compteur_Cycles = tonumber(uservariables['VMC_VAR_Compteur_Cycles'])            -- compteur de cycles
  VMC_VAR_Histo_Hum1_SDB1 = tonumber(uservariables['VMC_VAR_Histo_Hum1_SDB1'])              -- mesure la plus récente SDB1
  VMC_VAR_Histo_Hum1_SDB2 = tonumber(uservariables['VMC_VAR_Histo_Hum1_SDB2'])              -- mesure la plus récente SDB2
  VMC_VAR_Histo_Hum2_SDB1 = tonumber(uservariables['VMC_VAR_Histo_Hum2_SDB1'])              -- mesure la plus ancienne SDB1
  VMC_VAR_Histo_Hum2_SDB2 = tonumber(uservariables['VMC_VAR_Histo_Hum2_SDB2'])              -- mesure la plus ancienne SDB2

  VMC_VAR_Cible_Hum_GV_Off_SDB1 = tonumber(uservariables['VMC_VAR_Cible_Hum_GV_Off_SDB1'])   -- Cible à atteindre pour arrêter la deshumidification SDB1 lorsqu'elle est active
  VMC_VAR_Cible_Hum_GV_Off_SDB2 = tonumber(uservariables['VMC_VAR_Cible_Hum_GV_Off_SDB2'])   -- Cible à atteindre pour arrêter la deshumidification SDB2 lorsqu'elle est active

  VMC_VAR_TimerSecuriteArret_SDB1 = tonumber(uservariables['VMC_VAR_TimerSecuriteArret_SDB1']) -- Nb de cycles restants avant l'arrête automatique de sécurité de la SDB1
  VMC_VAR_TimerSecuriteArret_SDB2 = tonumber(uservariables['VMC_VAR_TimerSecuriteArret_SDB2']) -- Nb de cycles restants avant l'arrête automatique de sécurité de la SDB2

  VMC_VAR_Deshumidification_On_SDB1 = tonumber(uservariables['VMC_VAR_Deshumidification_On_SDB1']) -- Vaut 1 si la deshumidification est en cours dans la SDB1, 0 sinon
  VMC_VAR_Deshumidification_On_SDB2 = tonumber(uservariables['VMC_VAR_Deshumidification_On_SDB2']) -- Vaut 1 si la deshumidification est en cours dans la SDB2, 0 sinon
       
  Cible_Humidite_SDB1 = 0  -- Variable servant à calculer la cible d'humidité lorsuqe la déshumidification s'active pour la SDB1
  Cible_Humidite_SDB2 = 0  -- Variable servant à calculer la cible d'humidité lorsuqe la déshumidification s'active pour la SDB2


  -- ********************************************************************
  -- SI L'UTILISATEUR A ACTIVé LA VMC DE MANIERE MANUELLE ON N'EXECUTE --
  --     PAS LE SCRIPT ET ON POSITIONNE LA VMC A LA BONNNE VALEUR
  -- ********************************************************************
  Etat_Pilotage_VMC = tonumber(otherdevices_svalues[NOM_INTERRUPTEUR_PILOTAGE_VMC])  -- récupération de l'état de l'inter 4 positions de pilotage de la VMC
  if Etat_Pilotage_VMC < 30 then   -- Si inter sur mode différent d'automatique (qui vaut 30)
    if Etat_Pilotage_VMC == 0 then -- Si inter sur VMC Off
      print('VMC arretee manuellement via l interrupteur. Sortie du script')
      commandArray[NOM_INTERRUPTEUR_OnOff_VMC] = 'Off'
      commandArray[NOM_INTERRUPTEUR_GV_VMC] = 'Off'
    end
    if Etat_Pilotage_VMC == 10 then -- Si inter sur VMC petite vitesse
      print('VMC positionnee en marche / petite vitesse via l interrupteur. Sortie du script')
      commandArray[NOM_INTERRUPTEUR_OnOff_VMC] = 'On'
      commandArray[NOM_INTERRUPTEUR_GV_VMC] = 'Off'
    end
    if Etat_Pilotage_VMC == 20 then -- si inter sur VMC grande vitesse
      print('VMC positionnee en marche / grande vitesse via l interrupteur. Sortie du script')
      commandArray[NOM_INTERRUPTEUR_OnOff_VMC] = 'On'
      commandArray[NOM_INTERRUPTEUR_GV_VMC] = 'On'
    end
    -- On n'est plus en mode automatique donc on sort du script après l'avoir remis à 0 (réinitialisation de toutes les variables)
    commandArray['Variable:VMC_VAR_Compteur_Cycles'] = '0'
    commandArray['Variable:VMC_VAR_Histo_Hum2_SDB1'] = tostring(otherdevices_humidity[NOM_CAPTEUR_HUMIDITE1])
    commandArray['Variable:VMC_VAR_Histo_Hum1_SDB1'] = tostring(otherdevices_humidity[NOM_CAPTEUR_HUMIDITE1])
    commandArray['Variable:VMC_VAR_Cible_Hum_GV_Off_SDB1'] = '0'
    commandArray['Variable:VMC_VAR_TimerSecuriteArret_SDB1'] = '0'
    commandArray['Variable:VMC_VAR_Deshumidification_On_SDB1'] = '0'
    commandArray['Variable:VMC_VAR_Histo_Hum2_SDB2'] = tostring(otherdevices_humidity[NOM_CAPTEUR_HUMIDITE2])
    commandArray['Variable:VMC_VAR_Histo_Hum1_SDB2'] = tostring(otherdevices_humidity[NOM_CAPTEUR_HUMIDITE2])
    commandArray['Variable:VMC_VAR_Cible_Hum_GV_Off_SDB2'] = '0'
    commandArray['Variable:VMC_VAR_TimerSecuriteArret_SDB2'] = '0'
    commandArray['Variable:VMC_VAR_Deshumidification_On_SDB2'] = '0'
   return commandArray
  end


-- **************************************
-- Recuperation des valeurs d'humidite
-- **************************************
  if (MODE_TEST) then
    -- Si on est en mode test, on prends les valeurs fixées dans les variables DOMOTICZ
    Humidite_Actuelle_SDB1 = tonumber(uservariables['VMC_TST_HUM_SDB1'])
    Humidite_Actuelle_SDB2 = tonumber(uservariables['VMC_TST_HUM_SDB2'])
    Hygro_Moyenne_Maison= tonumber(uservariables['VMC_TST_HUM_MOYENNE_MAISON'])
  else
    -- Si on est en mode normal, on prends les valeurs remontées par les capteurs
    Humidite_Actuelle_SDB1 = otherdevices_humidity[NOM_CAPTEUR_HUMIDITE1]
    Humidite_Actuelle_SDB2 = otherdevices_humidity[NOM_CAPTEUR_HUMIDITE2]
    Hygro_Moyenne_Maison= otherdevices_humidity[NOM_CAPTEUR_VIRTUEL_HYGRO_MOYENNE]
  end
 
-- L'humidité maximum acceptable dans la salle de bain est le maximum de la valeur moyenne humidité en cours dans la maison et de la valeur fixées
-- Cette humidité max permet de maintenir la VMC en petite vitesse même si l'humidité de la salle de bain est redescendue après un pic
  Maximum_Humidite_Acceptable_SDB = math.max(tonumber(uservariables['Hygro_Max_SDB']), Hygro_Moyenne_Maison)

-- ******************************************************************************
-- Sortie du script si les valeurs d'humidité récupérées ne sont pas exploitables
-- *******************************************************************************
  if (Humidite_Actuelle_SDB1 == 0 or Humidite_Actuelle_SDB1 == nil) then
    print('Pas de signal du capteur ' .. NOM_CAPTEUR_HUMIDITE1 .. '. Sortie du script')
    return commandArray
  end
  if (Humidite_Actuelle_SDB2 == 0 or Humidite_Actuelle_SDB2 == nil) then
    print('Pas de signal du capteur ' .. NOM_CAPTEUR_HUMIDITE2 .. '. Sortie du script')
    return commandArray
  end
  if (Hygro_Moyenne_Maison== 0 or Hygro_Moyenne_Maison== nil) then
    print('Pas de signal du capteur virtuel d humidite moyenne de la maison, Sortie du script')
    return commandArray
  end



-- ************************************************************************************
-- Le script est executé toutes les minutes, on augmente la valeur du compteur de cycle
-- ************************************************************************************
  VMC_VAR_Compteur_Cycles = VMC_VAR_Compteur_Cycles + 1



-- ***************************************************************************************************
-- On commence par traiter l'humidité globale de la maison pour savoir si la VMC doit être activée ou non
-- ***************************************************************************************************
  if Hygro_Moyenne_Maison > uservariables['Hygro_Max_Maison'] then
    Hygro_Max_Depassee = 1                             -- L'humidité de la maison est trop importante on active la VMC
   commandArray[NOM_INTERRUPTEUR_OnOff_VMC] = 'On'
  else                                                 -- L'humidité de la maison est correcte
    Hygro_Max_Depassee = 0
    if  VMC_VAR_Deshumidification_On_SDB1 == 0 and  VMC_VAR_Deshumidification_On_SDB2 == 0 then
      if Humidite_Actuelle_SDB1 <= Maximum_Humidite_Acceptable_SDB and Humidite_Actuelle_SDB2 <= Maximum_Humidite_Acceptable_SDB then
         commandArray[NOM_INTERRUPTEUR_OnOff_VMC] = 'Off'  -- on arrête la VMC si aucune des salles de bains n'est utilisée et que l'humidité des salles de bain est acceptable
      else
         commandArray[NOM_INTERRUPTEUR_OnOff_VMC] = 'On'  -- on allume la VMC si aucune des salles de bains n'est utilisée mais que l'humidité des salles de bain n'est pas acceptable
      end
    end
  end


  -- -----------------------------------
  -- Affichage des infos en mode debug
  -- -----------------------------------
  if MODE_DEBUGG== true then
    print('***************')
    print('ETAT ACTUEL : ')
    print('***************')
    if  Hygro_Moyenne_Maison <= uservariables['Hygro_Max_Maison']  and VMC_VAR_Deshumidification_On_SDB1 ==0 and  VMC_VAR_Deshumidification_On_SDB2 == 0 then
      if Humidite_Actuelle_SDB1 <= Maximum_Humidite_Acceptable_SDB and Humidite_Actuelle_SDB2 <= Maximum_Humidite_Acceptable_SDB then
         print('[Hygro Maison] - Hygrometrie correcte (' .. Hygro_Moyenne_Maison .. '% vs ' .. uservariables['Hygro_Max_Maison'] ..'% max) et aucune salle de bain en cours d utilisation, desactivation de la vmc')
      else
         print('[Hygro Maison] - Hygrometrie correcte (' .. Hygro_Moyenne_Maison .. '% vs ' .. uservariables['Hygro_Max_Maison'] ..'% max), aucune salle de bain en cours d utilisation mais humidite SDB toujours trop elevee, VMC laissee active en petite vitesse')
       end
   else
      if VMC_VAR_Deshumidification_On_SDB1 ==0 and  VMC_VAR_Deshumidification_On_SDB2 == 0 then
        print('[Hygro Maison] - Hygrometrie incorrect (' .. Hygro_Moyenne_Maison .. '% vs ' .. uservariables['Hygro_Max_Maison'] ..'% max), maintien de la VMC meme si aucune salle de bain en cours d utilisation')
      end
   end
    if VMC_VAR_Deshumidification_On_SDB1 == 0 then
      print('[' .. NOM_CAPTEUR_HUMIDITE1 .. '] - Deshumidification OFF - actuelle : ' .. Humidite_Actuelle_SDB1 .. '% / Precedente : ' .. VMC_VAR_Histo_Hum1_SDB1 .. '% / Cycle -2 : ' .. VMC_VAR_Histo_Hum2_SDB1 .. '%')
    else
      print('[' .. NOM_CAPTEUR_HUMIDITE1 .. '] - Deshumidification ON - actuelle : ' .. Humidite_Actuelle_SDB1 .. '% / Precedente : ' .. VMC_VAR_Histo_Hum1_SDB1 ..'% / Cycle -2 : ' .. VMC_VAR_Histo_Hum2_SDB1 .. '% / Cible arret : ' .. VMC_VAR_Cible_Hum_GV_Off_SDB1 .. '% / arret de securite dans ' .. VMC_VAR_TimerSecuriteArret_SDB1 .. ' cycle(s)')
    end
    if VMC_VAR_Deshumidification_On_SDB2 == 0 then
      print('[' .. NOM_CAPTEUR_HUMIDITE2 .. '] - Deshumidification OFF - actuelle : ' .. Humidite_Actuelle_SDB2 .. '% / Precedente : ' .. VMC_VAR_Histo_Hum1_SDB2 .. '% / Cycle -2 : ' .. VMC_VAR_Histo_Hum2_SDB2 .. '%')
    else
      print('[' .. NOM_CAPTEUR_HUMIDITE2 .. '] - Deshumidification ON - actuelle : ' .. Humidite_Actuelle_SDB2 .. '% / Precedente : ' .. VMC_VAR_Histo_Hum1_SDB2 ..'% / Cycle -2 : ' .. VMC_VAR_Histo_Hum2_SDB2 .. '% / Cible arret : ' .. VMC_VAR_Cible_Hum_GV_Off_SDB2 .. '% / arret de securite dans ' .. VMC_VAR_TimerSecuriteArret_SDB2 .. ' cycle(s)')
    end   
  end
 


if (VMC_VAR_Compteur_Cycles >= INTERVAL_MESURE) then
   -- *************************************************************************************
   -- Si le nombre de cycles a atteint l'interval de mesure fixé on commence l'analyse pour
   -- identifier les besoins d'activation ou désactivation de la grande vitesse de la VMC
   -- *************************************************************************************
   VMC_VAR_Compteur_Cycles = 0   -- remise à 0 du compteur de cycle
   
   
   -- -----------------------------------
   -- Affichage des infos en mode debug
   -- -----------------------------------
   if MODE_DEBUGG== true then
          print(' ')
          print('***************')
          print('ANALYSE : ')
          print('***************')
          print('Nombre de cycles atteint (' .. VMC_VAR_Compteur_Cycles .. '/' .. INTERVAL_MESURE .. '), realisation des tests pour adapter la vitesse VMC')
   end


   -- ***************************************************************************
   -- Initialisation des historiques s'ils ne contiennent aucune information. On
   -- positionne alors dans les deux historiques les valeurs d'hulidité actuelles
   -- ***************************************************************************
   if (VMC_VAR_Histo_Hum1_SDB1 == 0) then
      -- Initialisation des valeurs historiques
      VMC_VAR_Histo_Hum1_SDB1 = Humidite_Actuelle_SDB1
      VMC_VAR_Histo_Hum2_SDB1 = Humidite_Actuelle_SDB1
   end
   if (VMC_VAR_Histo_Hum1_SDB2 == 0) then
      -- Initialisation des valeurs historiques
      VMC_VAR_Histo_Hum1_SDB2 = Humidite_Actuelle_SDB2
      VMC_VAR_Histo_Hum2_SDB2 = Humidite_Actuelle_SDB2
   end


   -- ********************************************************************
   -- Calcul des écarts maximum d'humidité constatés dans chacune des SDB
   -- ********************************************************************
   Ecart_Max_Humidite_SDB1 = Humidite_Actuelle_SDB1 - math.min(VMC_VAR_Histo_Hum2_SDB1, VMC_VAR_Histo_Hum1_SDB1)
   Ecart_Max_Humidite_SDB2 = Humidite_Actuelle_SDB2 - math.min(VMC_VAR_Histo_Hum2_SDB2, VMC_VAR_Histo_Hum1_SDB2)
 

   -- -----------------------------------
   -- Affichage des infos en mode debug
   -- -----------------------------------
   if MODE_DEBUGG== true then
      print('[' .. NOM_CAPTEUR_HUMIDITE1 .. '] - Ecart max d humidite constate sur les dernieres periodes : ' .. Ecart_Max_Humidite_SDB1)
       print('[' .. NOM_CAPTEUR_HUMIDITE2 .. '] - Ecart max d humidite constate sur les dernieres periodes : ' .. Ecart_Max_Humidite_SDB2)
   end
 
    -- ********************************************************************************************************
   -- Identification de la cible humidité à atteindre si la grande vitesse de la VMC est activée. Il s'agira
   -- de redescendre à la plus basse des valeurs d'humidité de l'historique + un % défini dans "Anticipation_Arret"   
   -- ********************************************************************************************************
   Cible_Humidite_SDB1 = math.min(VMC_VAR_Histo_Hum2_SDB1, VMC_VAR_Histo_Hum1_SDB1) + Anticipation_Arret
   Cible_Humidite_SDB2 = math.min(VMC_VAR_Histo_Hum2_SDB2, VMC_VAR_Histo_Hum1_SDB2) + Anticipation_Arret
 

   -- *****************************************************************************
   -- Sauvegarde dans l'historique des mesures précédentes et de la mesure actuelle
   -- *****************************************************************************
   VMC_VAR_Histo_Hum2_SDB1 = VMC_VAR_Histo_Hum1_SDB1   -- L'historique le plus ancien reçoit l'historique plus récent de l'humidité
   VMC_VAR_Histo_Hum2_SDB2 = VMC_VAR_Histo_Hum1_SDB2   
   VMC_VAR_Histo_Hum1_SDB1 = Humidite_Actuelle_SDB1    -- L'historique plus récent reçoit la valeur actuelle d'humidité
   VMC_VAR_Histo_Hum1_SDB2 = Humidite_Actuelle_SDB2


   -- ********************************************************************************************************
   -- Remise à 0 des indicateurs précisant s'il y a eu un déclenchement de la GV pour une des SDB lors
   -- de l'execution du script en cours. Pour l'instant aucune mise en route n'a été décidée/effectuée
    -- ********************************************************************************************************
   Declenchement_SDB1 = 0
   Declenchement_SDB2 = 0

   -- *****************************************************************************
   -- Si le ventilateur est off alors qu'un des deux programmes est en route, on
   -- force l'arrêt des programmes de déshumidification (arrêt manuel extérieur)
   -- *****************************************************************************
   if (otherdevices[NOM_INTERRUPTEUR_GV_VMC]=='Off') and (VMC_VAR_Deshumidification_On_SDB1 == 1 or VMC_VAR_Deshumidification_On_SDB2 ==1)  then
      VMC_VAR_Deshumidification_On_SDB1 = 0
      VMC_VAR_Deshumidification_On_SDB2 = 0
   end


   -- *****************************************************************************************
   -- Si la VMC n'est pas en grande vitesse ou si une des deux SDB n'est pas en grande vitesse
   -- on identifie s'il est nécessaire de mettre en route la marche forcée pour une des SDBs
   -- *****************************************************************************************
     if otherdevices[NOM_INTERRUPTEUR_GV_VMC]=='Off' or  VMC_VAR_Deshumidification_On_SDB1 == 0 or  VMC_VAR_Deshumidification_On_SDB2 == 0 then

      -- **************************************************************************
      -- Identification du besoin éventuel de déclenchement de la VMC pour la SDB1
        -- Besoin identifié si humidité > au seuil de déclenchement et que le programme
        -- de déshumidification n'est pas déjà activé pour cette SDB
      -- **************************************************************************
       if Ecart_Max_Humidite_SDB1 >= SEUIL_DECLENCHEMENT_VMC and VMC_VAR_Deshumidification_On_SDB1 == 0 then
         commandArray[NOM_INTERRUPTEUR_GV_VMC] = 'On'
         commandArray[NOM_INTERRUPTEUR_OnOff_VMC] = 'On'
         VMC_VAR_Deshumidification_On_SDB1 = 1
         VMC_VAR_Cible_Hum_GV_Off_SDB1 = Cible_Humidite_SDB1
         VMC_VAR_TimerSecuriteArret_SDB1 = NbCycles_Max_GV_VMC
         Declenchement_SDB1 = 1

         -- -----------------------------------
         -- Affichage des infos en mode debug
         -- -----------------------------------
           if MODE_DEBUGG== true then
                print('[' .. NOM_CAPTEUR_HUMIDITE1 .. '] - Augmentation soudaine de l humidite. Activation de la VMC en grande vitesse. Ecart d humidite observe: ' .. Ecart_Max_Humidite_SDB1)
              print('[' .. NOM_CAPTEUR_HUMIDITE1 .. '] - Cible a atteindre pour l extinction du ventilateur : ' ..VMC_VAR_Cible_Hum_GV_Off_SDB1)   
         end
          
      else
            if MODE_DEBUGG== true and Ecart_Max_Humidite_SDB2 >= SEUIL_DECLENCHEMENT_VMC and VMC_VAR_Deshumidification_On_SDB1 == 0 then
              print('[' .. NOM_CAPTEUR_HUMIDITE1 .. '] - Ecart non significatif, pas de mise en route du programme de deshumidification')
            end
      end


      -- **************************************************************************
      -- Identification du besoin éventuel de déclenchement de la VMC pour la SDB2
        -- Besoin identifié si humidité > au seuil de déclenchement et que le programme
        -- de déshumidification n'est pas déjà activé pour cette SDB
      -- **************************************************************************
      if Ecart_Max_Humidite_SDB2 >= SEUIL_DECLENCHEMENT_VMC and VMC_VAR_Deshumidification_On_SDB2 == 0 then
         commandArray[NOM_INTERRUPTEUR_GV_VMC] = 'On'
         commandArray[NOM_INTERRUPTEUR_OnOff_VMC] = 'On'
         VMC_VAR_Deshumidification_On_SDB2 = 1
         VMC_VAR_Cible_Hum_GV_Off_SDB2 = Cible_Humidite_SDB2
              VMC_VAR_TimerSecuriteArret_SDB2 = NbCycles_Max_GV_VMC
         Declenchement_SDB2 = 1

         -- -----------------------------------
         -- Affichage des infos en mode debug
         -- -----------------------------------
         if MODE_DEBUGG== true then
            print('[' .. NOM_CAPTEUR_HUMIDITE2 .. '] - Augmentation soudaine de l humidite. Activation de la VMC en grande vitesse. Ecart d humidite observe: ' .. Ecart_Max_Humidite_SDB2)
            print('[' .. NOM_CAPTEUR_HUMIDITE2 .. '] - Cible a atteindre pour l extinction du ventilateur : ' ..VMC_VAR_Cible_Hum_GV_Off_SDB2)
         end
       else
            if MODE_DEBUGG== true  and Ecart_Max_Humidite_SDB1 >= SEUIL_DECLENCHEMENT_VMC and VMC_VAR_Deshumidification_On_SDB2 == 0 then
            print('[' .. NOM_CAPTEUR_HUMIDITE2 .. '] - Ecart non significatif, pas de mise en route du programme de deshumidification')
            end
       end
   end
   
   
   -- -----------------------------------
   -- Affichage des infos en mode debug
   -- -----------------------------------
   if Ecart_Max_Humidite_SDB1 < SEUIL_DECLENCHEMENT_VMC and Ecart_Max_Humidite_SDB2 < SEUIL_DECLENCHEMENT_VMC then
         if MODE_DEBUGG== true then
           print('Ecarts non significatif sur les deux SDB, pas de mise en route du programme de deshumidification')
         end
      end
 
 
   -- *****************************************************************************************
   -- Si la VMC est en grande vitesse après l'analyse du besoin effectuée ci-dessus
   -- *****************************************************************************************
   if (otherdevices[NOM_INTERRUPTEUR_GV_VMC]=='On') or  VMC_VAR_Deshumidification_On_SDB1 == 1 or  VMC_VAR_Deshumidification_On_SDB2 == 1 then
      if (VMC_VAR_TimerSecuriteArret_SDB1 > 0) then               -- Si le déshumidification est en courspour la SDB1 on diminue
         VMC_VAR_TimerSecuriteArret_SDB1 = VMC_VAR_TimerSecuriteArret_SDB1 - 1   -- la valeur du timer de sécurité pour l'arrêt automatique
      end
      if (VMC_VAR_TimerSecuriteArret_SDB2 > 0) then               -- Si le déshumidification est en courspour la SDB2 on diminue
         VMC_VAR_TimerSecuriteArret_SDB2 = VMC_VAR_TimerSecuriteArret_SDB2 - 1   -- la valeur du timer de sécurité pour l'arrêt automatique
      end
    end
   
   -- *****************************************************************************************
   -- Si la VMC est en grande vitesse pour la SDB1 et que l'humidité continue d'augmenter
   -- *****************************************************************************************
   if (VMC_VAR_Deshumidification_On_SDB1 == 1) then
      if (Ecart_Max_Humidite_SDB1 >= SEUIL_DECLENCHEMENT_VMC and Declenchement_SDB1 == 0) then
           -- S'il y a encore un écart d'humidité constaté sur la dernière période (augmentation humidité toujours en cours) et qu'il n'y a pas
           -- eu de déclenchement dans ce cycle, on considère qu'on n'a pas encore atteint l'humidité max et on remet à 0 la VMC_VAR_TimerSecuriteArret_SDB1
             VMC_VAR_TimerSecuriteArret_SDB1 = NbCycles_Max_GV_VMC
              
         if MODE_DEBUGG== true then
                   print('[' .. NOM_CAPTEUR_HUMIDITE1 .. '] - L humidite est toujours en augmentation, remise a 0 de la Securite Arret. Ecart constate sur la derniere periode : ' .. Ecart_Max_Humidite_SDB1)
           end

         end
   end

   -- *****************************************************************************************
   -- Si la VMC est en grande vitesse pour la SDB2 et que l'humidité continue d'augmenter
   -- *****************************************************************************************
   if (VMC_VAR_Deshumidification_On_SDB2 == 1) then
      if (Ecart_Max_Humidite_SDB2 >= SEUIL_DECLENCHEMENT_VMC  and Declenchement_SDB2 == 0) then
           -- S'il y a encore un écart d'humidité constaté sur la dernière période (augmentation humidité toujours en cours) et qu'il n'y a pas
           -- eu de déclenchement dans ce cycle, on considère qu'on n'a pas encore atteint l'humidité max et on remet à 0 la VMC_VAR_TimerSecuriteArret_SDB2
         VMC_VAR_TimerSecuriteArret_SDB2 = NbCycles_Max_GV_VMC
         
         if MODE_DEBUGG== true then
            print('[' .. NOM_CAPTEUR_HUMIDITE2 .. '] - L humidite est toujours en augmentation, remise a 0 de la Securite Arret. Ecart constate sur la derniere periode : ' .. Ecart_Max_Humidite_SDB2)
         end
      end   
   end 

   -- *************************************************************************************************************
   -- Analyse pour identifier si la grande vitesse peut être arrêtée si elle a été activée auparavant.
   -- Si les Timers de sécurité sont atteints ou que l'humidité est redescendu pour les deux SDB  on
    -- arrête la grande vitesse et on regarde si on peut arrêter complètement la VMC (si l'humidité globale est Ok)   
   -- *************************************************************************************************************
   if (VMC_VAR_TimerSecuriteArret_SDB1 == 0 or Humidite_Actuelle_SDB1 <= VMC_VAR_Cible_Hum_GV_Off_SDB1) and (VMC_VAR_TimerSecuriteArret_SDB2 == 0 or Humidite_Actuelle_SDB2 <= VMC_VAR_Cible_Hum_GV_Off_SDB2) then
      commandArray[NOM_INTERRUPTEUR_GV_VMC] = 'Off'
      if Hygro_Max_Depassee == 0 then                                                                            -- Si l'humidité maximum globale de la maison n'est pas atteinte
         if Humidite_Actuelle_SDB1<= uservariables['Hygro_Max_SDB'] and Humidite_Actuelle_SDB2<= uservariables['Hygro_Max_SDB'] then -- Si l'humidité des deux SDB est inférieure à l'humidité maximum acceptable dans une SDB
            commandArray[NOM_INTERRUPTEUR_OnOff_VMC] = 'Off'  -- on arrête complètement la VMC
            if MODE_DEBUGG== true then
               print('[Hygro Maison] - Hygrometrie correcte (' .. Hygro_Moyenne_Maison .. '% vs ' .. uservariables['Hygro_Max_Maison'] ..'% max) et aucune salle de bain en cours d utilisation, desactivation de la vmc')
            end
         else
             -- sinon (hygro maison Ok, mais humidité d'une des deux SDB dépasse la valeur maximum acceptable), on active la VMC en petite vitesse
            commandArray[NOM_INTERRUPTEUR_OnOff_VMC] = 'On'
            if MODE_DEBUGG== true then
               print('[Hygro Maison] - Hygrometrie correcte (' .. Hygro_Moyenne_Maison .. '% vs ' .. uservariables['Hygro_Max_Maison'] ..'% max), aucune salle de bain en cours d utilisation mais humidite SDB toujours trop elevee, VMC laissee active en petite vitesse')
            end
         end
      end
   end

   
   -- *************************************************************************************************************
   -- Analyse pour identifier s'il faut arrêter  la grande vitesse suite à atteinte du timer de sécurité  sur la SDB1
   -- *************************************************************************************************************
   if (VMC_VAR_TimerSecuriteArret_SDB1 == 0 and Humidite_Actuelle_SDB1 > VMC_VAR_Cible_Hum_GV_Off_SDB1 and VMC_VAR_Deshumidification_On_SDB1 == 1) then
      -- -----------------------------------
      -- Affichage des infos en mode debug
      -- -----------------------------------
      if MODE_DEBUGG== true then
         print('[' .. NOM_CAPTEUR_HUMIDITE1 .. '] - L humidite n est pas redescendue a sa valeur initiale (avant activation de la grande vitesse) mais le TimeOut de securite pour l arret est atteint. Arret de la grande vitesse de la VMC pour ' .. NOM_CAPTEUR_HUMIDITE1)
      end
      -- Si on a atteint le timer de sécurité on réinitialise l'historique avec la valeur d'hulidité actuelle ainsi que les variables de la SDB1
      VMC_VAR_Histo_Hum2_SDB1 = VMC_VAR_Histo_Hum1_SDB1 
      VMC_VAR_Deshumidification_On_SDB1 = 0
      VMC_VAR_Cible_Hum_GV_Off_SDB1 = 0
      VMC_VAR_TimerSecuriteArret_SDB1 = 0
      VMC_VAR_Deshumidification_On_SDB1 = 0
    end
   
   -- *************************************************************************************************************
   -- Analyse pour identifier s'il faut arrêter  la grande vitesse suite à retour à au taux d'humidité initial sur la SDB1
   -- *************************************************************************************************************
    if (VMC_VAR_TimerSecuriteArret_SDB1 > 0 and Humidite_Actuelle_SDB1 <= VMC_VAR_Cible_Hum_GV_Off_SDB1 and VMC_VAR_Deshumidification_On_SDB1 == 1) then
      -- -----------------------------------
      -- Affichage des infos en mode debug
      -- -----------------------------------
      if MODE_DEBUGG== true then
         print('[' .. NOM_CAPTEUR_HUMIDITE1 .. '] - L humidite est redescendue a une valeur proche de sa valeur initiale ('.. VMC_VAR_Cible_Hum_GV_Off_SDB1 ..'%). Arret de la grande vitesse de la VMC pour ' .. NOM_CAPTEUR_HUMIDITE1)
      end
      -- On réinitialise l'historique avec la valeur d'hulidité actuelle ainsi que les variables de la SDB1
      VMC_VAR_Histo_Hum2_SDB1 = VMC_VAR_Histo_Hum1_SDB1 
      VMC_VAR_Deshumidification_On_SDB1 = 0
      VMC_VAR_Cible_Hum_GV_Off_SDB1 = 0
      VMC_VAR_TimerSecuriteArret_SDB1 = 0
      VMC_VAR_Deshumidification_On_SDB1 = 0
      end


   -- *************************************************************************************************************
   -- Analyse pour identifier s'il faut arrêter  la grande vitesse suite à atteinte du timer de sécurité  sur la SDB2
   -- *************************************************************************************************************
   if (VMC_VAR_TimerSecuriteArret_SDB2 == 0 and Humidite_Actuelle_SDB2 > VMC_VAR_Cible_Hum_GV_Off_SDB2 and VMC_VAR_Deshumidification_On_SDB2 == 1) then
      -- -----------------------------------
      -- Affichage des infos en mode debug
      -- -----------------------------------
      if MODE_DEBUGG== true then
         print('[' .. NOM_CAPTEUR_HUMIDITE2 .. '] - L humidite n est pas redescendue a sa valeur initiale (avant activation de la grande vitesse) mais le TimeOut de securite pour l arret est atteint. Arret de la grande vitesse de la VMC pour ' .. NOM_CAPTEUR_HUMIDITE2)
      end
      -- Si on a atteint le timer de sécurité on réinitialise l'historique avec la valeur d'hulidité actuelle ainsi que les variables de la SDB2
      VMC_VAR_Deshumidification_On_SDB2 = 0
      VMC_VAR_Cible_Hum_GV_Off_SDB2 = 0
      VMC_VAR_TimerSecuriteArret_SDB2 = 0
      VMC_VAR_Deshumidification_On_SDB2 = 0
      VMC_VAR_Histo_Hum2_SDB2 = VMC_VAR_Histo_Hum1_SDB2
   end


   -- *************************************************************************************************************
   -- Analyse pour identifier s'il faut arrêter  la grande vitesse suite à retour à au taux d'humidité initial sur la SDB2
   -- *************************************************************************************************************
   if (VMC_VAR_TimerSecuriteArret_SDB2 > 0 and Humidite_Actuelle_SDB2 <= VMC_VAR_Cible_Hum_GV_Off_SDB2 and VMC_VAR_Deshumidification_On_SDB2 == 1) then
      -- -----------------------------------
      -- Affichage des infos en mode debug
      -- -----------------------------------      
      if MODE_DEBUGG== true then
         print('[' .. NOM_CAPTEUR_HUMIDITE2 .. '] - L humidite est redescendue a une valeur proche de sa valeur initiale ('.. VMC_VAR_Cible_Hum_GV_Off_SDB2 ..'%). Arret de la grande vitesse de la VMC pour ' .. NOM_CAPTEUR_HUMIDITE2)
      end
      -- On réinitialise l'historique avec la valeur d'hulidité actuelle ainsi que les variables de la SDB2
      VMC_VAR_Deshumidification_On_SDB2 = 0
      VMC_VAR_Cible_Hum_GV_Off_SDB2 = 0
      VMC_VAR_TimerSecuriteArret_SDB2 = 0
      VMC_VAR_Deshumidification_On_SDB2 = 0
      VMC_VAR_Histo_Hum2_SDB2 = VMC_VAR_Histo_Hum1_SDB2   
   end

   -- -----------------------------------
   -- Affichage des infos en mode debug
   -- -----------------------------------   
   if MODE_DEBUGG== true then
      if (Humidite_Actuelle_SDB1 > VMC_VAR_Cible_Hum_GV_Off_SDB1 and VMC_VAR_TimerSecuriteArret_SDB1 > 0 and Declenchement_SDB1 == 0) then
         print('[' .. NOM_CAPTEUR_HUMIDITE1 .. '] - Deshumidification toujours en cours, humidite actuelle = ' .. Humidite_Actuelle_SDB1.. '% ,cible = ' .. VMC_VAR_Cible_Hum_GV_Off_SDB1 .. '% ,TimerSecurite= ' .. VMC_VAR_TimerSecuriteArret_SDB1)
      end
      if (Humidite_Actuelle_SDB2 > VMC_VAR_Cible_Hum_GV_Off_SDB2 and VMC_VAR_TimerSecuriteArret_SDB2 > 0 and Declenchement_SDB2 == 0) then
         print('[' .. NOM_CAPTEUR_HUMIDITE2 .. '] - Deshumidification toujours en cours, humidite actuelle = ' .. Humidite_Actuelle_SDB2.. '% ,cible = ' .. VMC_VAR_Cible_Hum_GV_Off_SDB2 .. '% ,TimerSecurite= ' .. VMC_VAR_TimerSecuriteArret_SDB2)
      end
   end
else
   -- -----------------------------------
   -- Affichage des infos en mode debug
   -- -----------------------------------   
   if MODE_DEBUGG== true then
      print('Nombre de cycles avant la realisation des tests d adaptation de la vitesse VMC non atteint (' .. VMC_VAR_Compteur_Cycles .. '/' .. INTERVAL_MESURE .. ')')
   end
end




-- *******************************************************
-- Si la VMC est arrêtée on arrête aussi la grande vitesse
-- *******************************************************
if commandArray[NOM_INTERRUPTEUR_OnOff_VMC] == 'Off' then
        commandArray[NOM_INTERRUPTEUR_GV_VMC] = 'Off'
end



if MODE_DEBUGG== true then
   print(' ')
   print('***************')
   print('ETAT EN SORTIE : ')
   print('***************')


   if VMC_VAR_Deshumidification_On_SDB1 == 0 then
      print('[' .. NOM_CAPTEUR_HUMIDITE1 .. '] - Deshumidification OFF - actuelle : ' .. Humidite_Actuelle_SDB1 .. '% / Precedente : ' .. VMC_VAR_Histo_Hum1_SDB1 .. '% / Cycle -2 : ' .. VMC_VAR_Histo_Hum2_SDB1 .. '%')
   else
      print('[' .. NOM_CAPTEUR_HUMIDITE1 .. '] - Deshumidification ON - actuelle : ' .. Humidite_Actuelle_SDB1 .. '% / Precedente : ' .. VMC_VAR_Histo_Hum1_SDB1 ..'% / Cycle -2 : ' .. VMC_VAR_Histo_Hum2_SDB1 .. '% / Cible arret : ' .. VMC_VAR_Cible_Hum_GV_Off_SDB1 .. '% / arret de securite dans ' .. VMC_VAR_TimerSecuriteArret_SDB1 .. ' cycle(s)')
   end

   if VMC_VAR_Deshumidification_On_SDB2 == 0 then
      print('[' .. NOM_CAPTEUR_HUMIDITE2 .. '] - Deshumidification OFF - actuelle : ' .. Humidite_Actuelle_SDB2 .. '% / Precedente : ' .. VMC_VAR_Histo_Hum1_SDB2 .. '% / Cycle -2 : ' .. VMC_VAR_Histo_Hum2_SDB2 .. '%')
   else
      print('[' .. NOM_CAPTEUR_HUMIDITE2 .. '] - Deshumidification ON - actuelle : ' .. Humidite_Actuelle_SDB2 .. '% / Precedente : ' .. VMC_VAR_Histo_Hum1_SDB2 ..'% / Cycle -2 : ' .. VMC_VAR_Histo_Hum2_SDB2 .. '% / Cible arret : ' .. VMC_VAR_Cible_Hum_GV_Off_SDB2 .. '% / arret de securite dans ' .. VMC_VAR_TimerSecuriteArret_SDB2 .. ' cycle(s)')
   end
   
   if  Hygro_Moyenne_Maison <= uservariables['Hygro_Max_Maison']  and VMC_VAR_Deshumidification_On_SDB1 ==0 and  VMC_VAR_Deshumidification_On_SDB2 == 0 then
      if Humidite_Actuelle_SDB1 <= Maximum_Humidite_Acceptable_SDB and Humidite_Actuelle_SDB2 <= Maximum_Humidite_Acceptable_SDB then
        print('[Hygro Maison] - Hygrometrie correcte (' .. Hygro_Moyenne_Maison .. '% vs ' .. uservariables['Hygro_Max_Maison'] ..'% max) et aucune salle de bain en cours d utilisation, VMC desactivee')
      else
        print('[Hygro Maison] - Hygrometrie correcte (' .. Hygro_Moyenne_Maison .. '% vs ' .. uservariables['Hygro_Max_Maison'] ..'% max), aucune salle de bain en cours d utilisation mais humidite SDB toujours trop elevee, VMC laissee active en petite vitesse')
      end 
   else
      if  Hygro_Moyenne_Maison > uservariables['Hygro_Max_Maison'] then
         print('[Hygro Maison] - Hygrometrie incorrecte (' .. Hygro_Moyenne_Maison .. '% vs ' .. uservariables['Hygro_Max_Maison'] ..'% max), VMC activee')
      end
   end
end

-- Sauvegarde des variables
commandArray['Variable:VMC_VAR_Compteur_Cycles'] = tostring(VMC_VAR_Compteur_Cycles)
commandArray['Variable:VMC_VAR_Histo_Hum2_SDB1'] = tostring(VMC_VAR_Histo_Hum2_SDB1)
commandArray['Variable:VMC_VAR_Histo_Hum1_SDB1'] = tostring(VMC_VAR_Histo_Hum1_SDB1)
commandArray['Variable:VMC_VAR_Cible_Hum_GV_Off_SDB1'] = tostring(VMC_VAR_Cible_Hum_GV_Off_SDB1)
commandArray['Variable:VMC_VAR_TimerSecuriteArret_SDB1'] = tostring(VMC_VAR_TimerSecuriteArret_SDB1)
commandArray['Variable:VMC_VAR_Deshumidification_On_SDB1'] = tostring(VMC_VAR_Deshumidification_On_SDB1)


commandArray['Variable:VMC_VAR_Histo_Hum2_SDB2'] = tostring(VMC_VAR_Histo_Hum2_SDB2)
commandArray['Variable:VMC_VAR_Histo_Hum1_SDB2'] = tostring(VMC_VAR_Histo_Hum1_SDB2)
commandArray['Variable:VMC_VAR_Cible_Hum_GV_Off_SDB2'] = tostring(VMC_VAR_Cible_Hum_GV_Off_SDB2)
commandArray['Variable:VMC_VAR_TimerSecuriteArret_SDB2'] = tostring(VMC_VAR_TimerSecuriteArret_SDB2)
commandArray['Variable:VMC_VAR_Deshumidification_On_SDB2'] = tostring(VMC_VAR_Deshumidification_On_SDB2)
 
return commandArray


----------------------------------------------

Bonne utilisation !!!


Bonsoir
Est ce que le matériel suivant peut servir d'interrupteurhttp://www.atisys-domotique.fr/lumieres/49-di-o-micro-module-interrupteur-emetteur-onoff-433mhz-chacon-54700-5411478547006.html
Domoticz sur Raspberry Pi 2/ ECO DEVICE / compteur d'eau à impulsion / Plusieurs sondes Oregon / Chacon ON/OFF encastrable CH54555 ou CH54755

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Chrominator
Messages : 273
Inscription : 19 déc. 2015, 07:29

Re: Pilotage VMC (on/off, petite et grande vitesse) avec deux salles de bain

Messagepar Chrominator » 25 févr. 2017, 10:28

@vinchz31,

Ton second script fonctionne très bien, pas de désagrément quand à son utilisation.
J'évite probablement grâce à lui de rejeter de l'air chaud à l'extérieur inutilement.

A propos de ce script ;
C'est un script de type 'time', et l'action sur un interrupteur est systématique, non conditionnée par un état préalable.
En clair, si le script détermine qu'il faut actionner un interrupteur, il le fait sans vérifier si ça change son état.
Ce n'est pas grave en soit, mais ça charge domoticz et sa base de données inutilement.

A titre d'exemple, le log d'un mois de mon inter de VMC petite vitesse a plus de 42 000 entrées !
Avec en plus un "database disk image is malformed" en lien avec cet interrupteur, sur une carte sd changée préventivement il y a deux mois.

J'ai réparé ma base et modifié le script, ça va soulager le système.

Par exemple là ou tu écrivais :

Code : Tout sélectionner

        commandArray[NOM_INTERRUPTEUR_OnOff_VMC] = 'Off'

J'ai modifié comme suit :

Code : Tout sélectionner

      if otherdevices[NOM_INTERRUPTEUR_OnOff_VMC] == 'On' then
        commandArray[NOM_INTERRUPTEUR_OnOff_VMC] = 'Off'
      end


Je joins une copie de mon code au cas où.
script_time_vmc.zip
(6.18 Kio) Téléchargé 80 fois
Dernière édition par Chrominator le 25 févr. 2017, 11:28, édité 1 fois.

vinchz31
Messages : 50
Inscription : 21 nov. 2016, 07:51

Re: Pilotage VMC (on/off, petite et grande vitesse) avec deux salles de bain

Messagepar vinchz31 » 25 févr. 2017, 10:39

Bonjour,

Merci pour ton retour !
De mon côté, je n'ai pas eu de pb de base de données avec cette utilisation (depuis plusieurs mois) ...

J'avais au départ mis la condition que tu as positionnée.
Toutefois, j'ai fait face à une problématique relative à l'utilisation du 433Mhz qui n'émet pas d’acquittement. De ce fait, il arrivait que l'ordre ait été envoyé (et donc noté comme tel dans Domoticz) mais qu'il n'ait pas été reçu de l'autre côté. Ainsi, Domoticz dans le test suivant considérait que l'inter était On (ou off) et n'envoyait pas à nouveau d'ordre (je me suis retrouvé ainsi avec une VMC arrêtée ou allumée alors qu'elle ne devait pas l'être).

Le fait d'enlever la condition permet de renvoyer systématiquement l'ordre et s'il n'est pas reçu à un cycle, il l'est au cycle suivant...
A voir donc en fonction de l'utilisation de chacun ;-)

Très bonne journée !

Chrominator
Messages : 273
Inscription : 19 déc. 2015, 07:29

Re: Pilotage VMC (on/off, petite et grande vitesse) avec deux salles de bain

Messagepar Chrominator » 25 févr. 2017, 11:02

pas faux.gif
pas faux.gif (506.89 Kio) Consulté 2289 fois

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


mig6r
Messages : 3
Inscription : 14 janv. 2018, 22:40

Re: Pilotage VMC (on/off, petite et grande vitesse) avec deux salles de bain

Messagepar mig6r » 14 janv. 2018, 23:02

Bonjour vinchz31,
Tout d'abord un grand merci pour le partage de ton script, c'est exactement le projet que je souhaite réaliser.

Je n'ai pas encore regarder ton script en détails car j'ai déja un problème de compréhension sur les branchements de ta VMC.
Je pensais pour ma part utiliser deux relais, le premier pour l'etat ON/OFF qui une fois sur ON, alimenterait le deuxième.
Puis le deuxième une fois alimenté, alimenterait par défaut la vmc en petite vitesse sur son contact normalement fermé, puis à son tour, une fois sur ON couperait la PV pour alimenter la GV sur son contact normalement ouvert.

Dans ton cas je ne vois pas, j'ai l'impression que tes modules sont indépendants et donc branchés en direct sur la vmc. mais dans ce cas si tu alimentes en meme temps la PV et la GV, la VMC explose non ? :o
Désolé pour mon ignorance mais je ne suis peut être potentiellement pas le seul à être ignard. Un petit shema de ton branchement serait le bienvenu :D

TG76
Messages : 20
Inscription : 10 nov. 2017, 12:04

Re: Pilotage VMC (on/off, petite et grande vitesse) avec deux salles de bain

Messagepar TG76 » 10 févr. 2018, 14:31

Bonjour,

je voudrais attaquer à domotiser une VMC double flux et ton script pourrait me permettre de partir d'un point de départ, en effet, je suis novice en la matière et il me parait plus simple de partir de quelque chose.

mais il y aura de grosse modification

Un seul capteur d'humidité placé dans la VMC et d'autre en température pour gérer le bypass
dessus 2 vitesses mais en réalité 3 : - PV * logement inferieur à T5 (1 SDB/1WC/1 cuisine/2 chambres
*logement supérieur à T5 (2 SDB/2WC/1 cuisine/ plus de chambres (3 dans mons cas)
-GV

Du coup, je vais chercher à utiliser les 3 vitesses car il y a juste un Schunt pour amener la phase pour accelerer le ventilo.

PV humidité <à 60
MV 60<=humidité<=80
GV >80

tout en gardant la possibilité de passer la GV en manuel. ca risque de me prendre un peu de temps et je reviendrais vers vous quand ca avancera

Bonne journée
Domoticz installé sur NAS synology DS214SE + station météo WMR86 + Detecteurs de fumées Chacon

Tonio16
Messages : 142
Inscription : 13 oct. 2017, 17:00

Re: Pilotage VMC (on/off, petite et grande vitesse) avec deux salles de bain

Messagepar Tonio16 » 22 févr. 2018, 14:07

Salut

Je couplerais votre système avec une mesure du CO2 dans la maison. Dans une maison moderne, ie étanche, je crains que ce mode de fonctionnement, uniquement l'humidité, ne soit pas sain pour la maison et ses habitants, du fait d'une qualité d'air médiocre.

Ma VMC, DF fonctionne sur le CO2: 600ppm =0, 700 = 1; 800 = 2; 1000 = 3
Voici le principe si vous pouvez lire l'allemand.

Tcho

Antoine
Domoticz V3.8153 sous raspbian-Stretch
Raspberry pi B+
Clé Z-Wave Plus Z-Stick GEN5 - Aeon Labs

Cyclone14
Messages : 2
Inscription : 20 avr. 2018, 18:14

Re: Pilotage VMC (on/off, petite et grande vitesse) avec deux salles de bain

Messagepar Cyclone14 » 20 avr. 2018, 18:29

Bonjour.
Bravo pour ce script très bien conçu.
Effectivement, comme l'indique Tonio16, l'idée du capteur de CO2 est intéressante...
La VMC évacue l'humidité certes, mais ce n'est pas sa seule fonction. Elle améliore grandement la qualité de l'air ambiant et remplace l'air de la maison qui devient rapidement vicié/pollué faute de renouvellement (l'air ambiant est aussi contaminé par des agents chimiques volatiles dans les tissus, les peintures, aérosols, etc.).
Aussi, pensez à faire tourner très régulièrement la vmc en basse vitesse (même dans des conditions d'humidité saines) afin de dépolluer l'air ambiant. C'est peut-être moins économique, mais c'est mieux pour les poumons.
A+
Fabien

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.



Revenir vers « La Bibliothèque Scripts et Tutos »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 3 invités