Bonsoirvinchz31 a écrit :Bonjour à tous,
Nouvel utilisateur de domoticz, j'ai entrepris de piloter ma VMC.
Contraintes / besoins :Objectif :
- - 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 :- 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)
- -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%).
- possibilité de bypasser le programme en utilisant un inter pour piloter la VMC: Off / Petite vitesse / grande vitesse / automatique (utilisation du programme)
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
- 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)
4- définir les variables utilisées dans le script (voir les commentaires du script pour leurs signification)
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 !!!
Est ce que le matériel suivant peut servir d'interrupteurhttp://www.atisys-domotique.fr/lumieres ... 47006.html