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

Vous avez créé 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.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

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

Message par vil1driver »

La cible est +2 de la moyenne du jour, donc variable.
Le capteur virtuel est continuellement alimenté et lu pour vérifier la condition précédemment citée.
Tant qu'elle est remplie on relance la mise en route (pour 1h ici, OffDelay propre au device)

Seul bémol, la moyenne est plus facilement influencée en début qu'en fin de journée (moins d'échantillons), la vmc tournera plus longtemps lors d'une douche à 18h qu'a 6h du mat.. (tant soit peu que ce soit perceptible)

C'est simple à mettre en place, essai et juge par toi même.
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Greg.O
Messages : 148
Inscription : 07 oct. 2017, 18:04

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

Message par Greg.O »

Je suis désolé mais il y a un point qui m'échappe et je voudrais être sûr de comprendre :
tu calcules régulièrement l'humidité absolue d'une pièce car cela permet de s'affranchir des conditions météo. Ce calcul alimente un capteur virtuel qui est mis à jour tous les 15 minutes.

Alors je ne comprends pas comment tu détectes une élévation d'humidité absolue : étant donné que ton capteur virtuel est mis à jour relativement souvent, il est possible que tu passes à côté d'une douche rapide, non ?

Ou alors, est ce qu'il faut comprendre que ton capteur virtuel est en fait alimenté par par tes relevés mais en représente une moyenne ?
Domoticz v2021.1 sur Raspberry Pi 3B+
Raspbian Buster
Capteurs T/Hum Xiaomi / ConBee II
Zwave
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

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

Message par vil1driver »

La sonde virtuelle est alimentée aussi souvent que la vraie.
La moyenne du jour est prise sur le graph du mois de cette sonde virtuelle.
Le check toutes les 15 minutes c'est pour tester l'augmentation de l'humidité.

L'usage de l'humidité absolue c'est pour ne pas être influencé par la température.
La moyenne du jour est pour avoir un seuil qui va suivre les saisons.

J'espère que c'est suffisamment clair.

Voila, c'est la méthode que j'ai choisie car simple, rien ne t'empêche d'en utiliser une autre plus sophistiquée comme celles présentées ici
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
DavidTrier
Messages : 62
Inscription : 07 nov. 2017, 20:05

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

Message par DavidTrier »

DavidTrier a écrit : 22 janv. 2019, 22:38 Ah, j'oubliais : j'aimerais bien aussi pouvoir choisir facilement, via deux potentiomètres virtuels, les valeur de Hygro_Max_SDB et Hygro_Max_Maison alors je vais y travailler!

EDIT : j'ai créé 2 dimmers virtuels qui me permettront de choisir ces 2 niveaux. Il me reste maintenant à comprendre comment les intégrer dans le script, mais on verra ça demain ;-)
Bonsoir,

Bin, je n'y arrive pas tout seul :oops: Les deux potentiomètres virtuels sont créés mais je ne sais pas comment modifier le script pour que les valeurs limites soient lues à partir des potentiomètres virtuels et plus les variables utilisateurs déclarées.

Merci d'avance.
chacal1985
Messages : 129
Inscription : 10 juin 2017, 11:22

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

Message par chacal1985 »

Bonsoir,

Je m'intéresse à l'automatisation de ma VMC et le script proposé en 1ère page semble correspondre à mes attentes.

J'utilise des capteurs de températures XIAOMI, qui me relèvent la température l'hygrométrie et la pression.

Par contre je bloque au niveau du script qui permet de calculé l'humidité moyenne, voici ce que j'ai fait :

Code : Tout sélectionner

commandArray = {}

ModeDebug = 'ModeDebug' 
Temperature_Salon = 'Salon'
Temperature_Cuisine = 'Cuisine'
Temperature_Cellier = 'Cellier'
Temperature_Ch_Nous = 'Chambre1'
Temperature_Ch_Theo = 'Chambre2'
Temperature_Ch_Clea = 'Chambre3'


temperature1, hygro1, baro1 = otherdevices_svalues[Temperature_Salon]:match("([^;]+);([^;]+);([^;]+)")
temperature2, hygro2, baro2 = otherdevices_svalues[Temperature_Cuisine]:match("([^;]+);([^;]+);([^;]+)")
temperature3, hygro3, baro3 = otherdevices_svalues[Temperature_Cellier]:match("([^;]+);([^;]+);([^;]+)")
temperature4, hygro4, baro4 = otherdevices_svalues[Temperature_Ch_Nous]:match("([^;]+);([^;]+);([^;]+)")
temperature5, hygro5, baro5 = otherdevices_svalues[Temperature_Ch_Theo]:match("([^;]+);([^;]+);([^;]+)")
temperature6, hygro6, baro6 = otherdevices_svalues[Temperature_Ch_Clea]:match("([^;]+);([^;]+);([^;]+)")

-- Calcul de la moyenne hygro
Moyenne_Hygro = (hygro1 + hygro2 + hygro3 + hygro4 + hygro5 + hygro6) / 6 

-- Mise à jour du capteur virtuel d'humidité (qui porte l'Idx n°224 --
commandArray['UpdateDevice'] = 224 .. '|' .. 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_Ch_Nous = ' .. hygro4 ..'% , Hygro_Ch_Theo = ' .. hygro5 .. '% , Hygro_Ch_Clea = ' .. hygro6 ..'% , Hygro_Salon = ' .. hygro1 ..'% , Hygro_Cuisine = ' .. hygro2 ..'% , Hygro_Cellier = ' .. hygro3 ..'% , Hygro moyenne calculee = ' ..Moyenne_Hygro .. '%.' )
end

return commandArray
Malheureusement je me retrouve avec une erreur dans le log qui est sur la ligne 9, la voici :

Error: EventSystem: in MoyenneHygro: [string "commandArray = {}..."]:12: attempt to index field '?' (a nil value)

Malgré pas mal de temps passé à trouver une solution, je bloque, et mon niveau de connaissance dans la programmation est proche de 0.

Est-ce que quelqu'un aurait une idée pour résoudre mon problème ?

Merci
Greg.O
Messages : 148
Inscription : 07 oct. 2017, 18:04

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

Message par Greg.O »

Par curiosité et pour voir si je ne me suis pas planté dans mon script (je suis parti du du dzvents et pas du lua, j'ai donc un peu ré-inventé l'eau chaude !), vous pouvez me dire l'échelle de valeur de vos humidité absolue dans une salle de bain ?

Pour ma part, depuis hier, elle oscille entre 11,3 g/m3 et 9,7 g/m3 avec une pointe à 14,5 g/m3 lors d'une douche. Ça vous parait cohérent ?
Domoticz v2021.1 sur Raspberry Pi 3B+
Raspbian Buster
Capteurs T/Hum Xiaomi / ConBee II
Zwave
J.M.B
Messages : 67
Inscription : 26 déc. 2017, 15:43

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

Message par J.M.B »

chacal1985 a écrit : 24 févr. 2019, 21:24 Bonsoir,

Je m'intéresse à l'automatisation de ma VMC et le script proposé en 1ère page semble correspondre à mes attentes.

J'utilise des capteurs de températures XIAOMI, qui me relèvent la température l'hygrométrie et la pression.

Par contre je bloque au niveau du script qui permet de calculé l'humidité moyenne, voici ce que j'ai fait :

Code : Tout sélectionner

commandArray = {}

ModeDebug = 'ModeDebug' 
Temperature_Salon = 'Salon'
Temperature_Cuisine = 'Cuisine'
Temperature_Cellier = 'Cellier'
Temperature_Ch_Nous = 'Chambre1'
Temperature_Ch_Theo = 'Chambre2'
Temperature_Ch_Clea = 'Chambre3'


temperature1, hygro1, baro1 = otherdevices_svalues[Temperature_Salon]:match("([^;]+);([^;]+);([^;]+)")
temperature2, hygro2, baro2 = otherdevices_svalues[Temperature_Cuisine]:match("([^;]+);([^;]+);([^;]+)")
temperature3, hygro3, baro3 = otherdevices_svalues[Temperature_Cellier]:match("([^;]+);([^;]+);([^;]+)")
temperature4, hygro4, baro4 = otherdevices_svalues[Temperature_Ch_Nous]:match("([^;]+);([^;]+);([^;]+)")
temperature5, hygro5, baro5 = otherdevices_svalues[Temperature_Ch_Theo]:match("([^;]+);([^;]+);([^;]+)")
temperature6, hygro6, baro6 = otherdevices_svalues[Temperature_Ch_Clea]:match("([^;]+);([^;]+);([^;]+)")

-- Calcul de la moyenne hygro
Moyenne_Hygro = (hygro1 + hygro2 + hygro3 + hygro4 + hygro5 + hygro6) / 6 

-- Mise à jour du capteur virtuel d'humidité (qui porte l'Idx n°224 --
commandArray['UpdateDevice'] = 224 .. '|' .. 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_Ch_Nous = ' .. hygro4 ..'% , Hygro_Ch_Theo = ' .. hygro5 .. '% , Hygro_Ch_Clea = ' .. hygro6 ..'% , Hygro_Salon = ' .. hygro1 ..'% , Hygro_Cuisine = ' .. hygro2 ..'% , Hygro_Cellier = ' .. hygro3 ..'% , Hygro moyenne calculee = ' ..Moyenne_Hygro .. '%.' )
end

return commandArray
Malheureusement je me retrouve avec une erreur dans le log qui est sur la ligne 9, la voici :

Error: EventSystem: in MoyenneHygro: [string "commandArray = {}..."]:12: attempt to index field '?' (a nil value)

Malgré pas mal de temps passé à trouver une solution, je bloque, et mon niveau de connaissance dans la programmation est proche de 0.

Est-ce que quelqu'un aurait une idée pour résoudre mon problème ?

Merci
Bonjour,

Je crois qu'il y a 4 paramètres : temperature,hygro,baro,etat
tu peux tester : temperature1,hygro1,baro1,etat1 = otherdevices_svalues['Temperature_Salon']:match("([^;]+);([^;]+);([^;]+);([^;]+)")
Bonne soirée
samourai47
Messages : 286
Inscription : 04 déc. 2018, 19:44

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

Message par samourai47 »

hello
deterrage de sujet...
J'essaye de faire marcher le script mais je n'y arrive pas... Snifff Le script s'appelle "Humid"
Le calcul de la moyenne se fait bien

Code : Tout sélectionner

 2022-02-26 11:47:00.575 Status: LUA: >>>>>>>>>>>>>> Script de calcul de la moyenne hygrometrique de la maison <<<<<<<<<<<<<<<<<<<<<
2022-02-26 11:47:00.575 Status: LUA: Hygro cellier = 57% , Hygro T° Bureau = 52% , Hygro T° Séjour = 50% , Hygro Chambre Marie = 59% , Hygro Chambre Christelle = 58% , Hygro moyenne calculee = 55.2%.
2022-02-26 11:47:00.583 Status: EventSystem: Script event triggered: Calcul moyenne humidité
2022-02-26 11:47:00.586 Status: LUA:
2022-02-26 11:47:00.586 Status: LUA:
2022-02-26 11:47:00.586 Status: LUA:
2022-02-26 11:47:00.586 Status: LUA:
2022-02-26 11:47:00.586 Status: LUA: >>>>>>>>>>>>>> Script de controle de la VMC v1.0 <<<<<<<<<<<<<<<<<<<<<
2022-02-26 11:47:00.586 Error: EventSystem: in Humid: attempt to compare nil with number 
PAr contre la suite non..
J'ai déclaré toutes les varaible en entier et mis 0 par defaut

Code : Tout sélectionner

NOM_INTERRUPTEUR_PILOTAGE_VMC = 'Pilotage VMC'
NOM_INTERRUPTEUR_OnOff_VMC = 'VMC'
NOM_INTERRUPTEUR_GV_VMC = 'VMC-GV'  
NOM_CAPTEUR_HUMIDITE1 = '$Humidite Douche'
NOM_CAPTEUR_HUMIDITE2 = '$Humidite Salle de Bain Etage'
NOM_INTERRUPTEUR_DEBUG = 'ModeDebug'   
NOM_INTERRUPTEUR_TEST = 'Test-GV-SDB'   
NOM_CAPTEUR_VIRTUEL_HYGRO_MOYENNE= 'Humidite 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

Code : Tout sélectionner

26	VMC_TST_HUM_SDB2	Entier	72	2022-02-26 11:07:47
25	VMC_TST_HUM_SDB1	Entier	70	2022-02-26 11:07:20
24	Cible_Humidite_SDB2	Entier	0	2022-02-26 11:16:24
23	Cible_Humidite_SDB1	Entier	0	2022-02-26 11:16:18
22	VMC_VAR_Deshumidification_On_SDB2	Entier	0	2022-02-26 09:32:46
21	VMC_VAR_Deshumidification_On_SDB1	Entier	0	2022-02-26 09:32:31
20	VMC_VAR_TimerSecuriteArret_SDB2	Entier	0	2022-02-26 09:32:14
19	VMC_VAR_TimerSecuriteArret_SDB1	Entier	0	2022-02-26 09:32:00
18	VMC_VAR_Cible_Hum_GV_Off_SDB2	Entier	0	2022-02-26 11:21:28
17	VMC_VAR_Cible_Hum_GV_Off_SDB1	Entier	0	2022-02-26 11:21:34
16	VMC_VAR_Histo_Hum2_SDB2	Entier	0	2022-02-26 09:31:07
15	VMC_VAR_Histo_Hum2_SDB1	Entier	0	2022-02-26 09:30:46
14	VMC_VAR_Histo_Hum1_SDB2	Entier	0	2022-02-26 09:30:28
13	VMC_VAR_Histo_Hum1_SDB1	Entier	0	2022-02-26 09:30:11
12	VMC_VAR_Compteur_Cycles	Entier	0	2022-02-26 09:29:45
Meme le cycle ne demarre pas
Je ne comprends pas pourquoi...
Un peu d'aide ssvp. Suis en domoticz 2022.1 et buster

Le s.rcipt modifié en entier

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 = 'Pilotage VMC'
NOM_INTERRUPTEUR_OnOff_VMC = 'VMC'
NOM_INTERRUPTEUR_GV_VMC = 'VMC-GV'  
NOM_CAPTEUR_HUMIDITE1 = '$Humidite Douche'
NOM_CAPTEUR_HUMIDITE2 = '$Humidite Salle de Bain Etage'
NOM_INTERRUPTEUR_DEBUG = 'ModeDebug'   
NOM_INTERRUPTEUR_TEST = 'Test-GV-SDB'   
NOM_CAPTEUR_VIRTUEL_HYGRO_MOYENNE= 'Humidite 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
vinchz31
Messages : 312
Inscription : 21 nov. 2016, 07:51

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

Message par vinchz31 »

Il y a eu une modif Lua depuis que j'avais publié ce script.
Il me semble que j'avais eu le même souci et j'avais corrigé ainsi :

commandArray['Variable:VMC_VAR_Histo_Hum2_SDB1'] = tostring(math.floor(otherdevices_humidity[NOM_CAPTEUR_HUMIDITE1]))

L'utilisation de math.floor (à positionner sur toutes les lignes de ce type) permet de renvoyer un entier pour faire la comparaison...
samourai47
Messages : 286
Inscription : 04 déc. 2018, 19:44

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

Message par samourai47 »

merci pour l aide
Je l'ai change sur les 4 premieres lignes du script qui ressemblent ce que tu me propose
ca ne change rien
Faut il changer dans toutes les lignes qui ont commandarray et tostring comme celles ci?

Code : Tout sélectionner

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)
Sinon si tu as toujours le script qui tourne.... une copie? Merci d'avance
Répondre