-- http://easydomoticz.com/forum/viewtopic.php?f=17&t=2869&hilit=vmc require "scripts/lua/fonctions2" commandArray = {} --recupere les minutes time=os.time() minutes=tonumber(os.date('%M',time)) --jour=tonumber(os.date('%w',time)) heures=tonumber(os.date('%H',time)) if minutes%10 == 6 then 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 = 5 -- 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 = 'TemperatureSDB' NOM_CAPTEUR_HUMIDITE2 = 'TemperatureCuisine' NOM_INTERRUPTEUR_DEBUG = 'Debug' 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 -- MODE_TEST=true if MODE_DEBUGG== true then 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 Humidite_Actuelle_EXT = tonumber(otherdevices_humidity["BarometreLaGacilly"]) Temperature_Actuelle_EXt = tonumber(otherdevices_temperature["BarometreLaGacilly"]) -- ******************************************************************** -- 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 print('Etat_Pilotage_VMC='..tostring(Etat_Pilotage_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 print('NOM_CAPTEUR_HUMIDITE1 '..tostring(tonumber(otherdevices_humidity[NOM_CAPTEUR_HUMIDITE1]))) -- 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(math.floor(tonumber(otherdevices_humidity[NOM_CAPTEUR_HUMIDITE1]))) commandArray['Variable:VMC_VAR_Histo_Hum1_SDB1'] = tostring(math.floor(tonumber(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(math.floor(tonumber(otherdevices_humidity[NOM_CAPTEUR_HUMIDITE2]))) commandArray['Variable:VMC_VAR_Histo_Hum1_SDB2'] = tostring(math.floor(tonumber(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 print('mode automatique') -- ************************************** -- 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] Humidite_Actuelle_CELLIER = otherdevices_humidity["TemperatureCellier"] Hygro_Moyenne_Maison = math.max(Humidite_Actuelle_SDB1, Humidite_Actuelle_CELLIER) -- otherdevices_humidity[NOM_CAPTEUR_VIRTUEL_HYGRO_MOYENNE] end print('Hygro_Moyenne_Maison='..tostring(Hygro_Moyenne_Maison)) -- 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 print('Les capteurs sont ok ') -- ************************************************************************************ -- 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 -- *************************************************************************************************** local humidite_ext = humiditeAbsolue(Temperature_Actuelle_EXt, Humidite_Actuelle_EXT) local humidite_sdb = humiditeAbsolue(tonumber(otherdevices_temperature["TemperatureSDB"]), tonumber(otherdevices_humidity["TemperatureSDB"])) if humidite_ext > humidite_sdb then print("L'humidité extérieure est trop élevée. Arret VMC") commandArray[NOM_INTERRUPTEUR_OnOff_VMC] = 'Off' commandArray[NOM_INTERRUPTEUR_GV_VMC] = 'Off' return commandArray else 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 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(math.floor(tonumber(VMC_VAR_Histo_Hum2_SDB1))) commandArray['Variable:VMC_VAR_Histo_Hum1_SDB1'] = tostring(math.floor(tonumber(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(math.floor(tonumber(VMC_VAR_Histo_Hum2_SDB2))) commandArray['Variable:VMC_VAR_Histo_Hum1_SDB2'] = tostring(math.floor(tonumber(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) end return commandArray