Commande de la GV d’une VMC par capteur de tendance

Discussion et échanges de scripts pour la box eedomus

Commande de la GV d’une VMC par capteur de tendance

Messagepar bm72 » 23 Fév 2017 13:30

Bonjour à tous.

Comme bien d’autres avant moi, je me suis attelé à la recherche d’une solution de commande de la grande vitesse d’une VMC en fonction du taux d’humidité d’une salle d’eau au moment d’une douche. Le net regorge de solutions plus ou moins simplistes : par exemple déclenchement de la GV au-delà d’un certain seuil du taux d’humidité qui peut être très variable selon les conditions météorologiques du moment…

Ma première solution s’est avérée proche d’une « usine à gaz » : détection de présence dans la pièce, stockage de la valeur du taux d’humidité dans un périphérique, attente d’un délai, stockage de la nouvelle valeur du taux d’humidité, soustraction de l’ancienne valeur à la nouvelle et comparaison du résultat à un seuil et déclenchement de la GV le cas échéant. Ouf… enfin terminé ! Mais cela fonctionnait.

Je suis tombé un jour sur le topic suivant : http://www.abavala.com/creer-un-capteur-de-tendances-dans-une-domotique-eedomus/ (merci Hervé), présent aussi dans les guides pratiques de la documentation eedomus. Immédiatement, j’ai compris que le script en php présenté, reprenant la même logique, allait me simplifier les choses en le modifiant légèrement.

Toutefois, pour arriver aux valeurs hausse, stable ou basse, le test conditionnel porte sur la soustraction de l’ancienne valeur à la nouvelle. Or, vous avez sûrement remarqué les sauts aléatoires (au moins ± 1 % - initiés par la limite de résolution des capteurs) du pourcentage d’humidité donné par les sondes se traduisant par des pics ou des creux resserrés sur les courbes. Pour gommer ces variations aléatoires, j’ai simplement fait intervenir l’écart entre l’ancienne et la nouvelle valeur que je compare à 3 pour la hausse et à -1 pour la baisse (ou autres valeurs au choix). En ce qui concerne la GV de la VMC, seule la tendance à la hausse a un intérêt.

Partie du script original :

// tendance par rapport à la mesure précédente
$last_value = loadVariable('last_value'.$id);
if ($value > $last_value)
{
$trend = +1;
}
else if ($value < $last_value)
{
$trend = -1;
}
else
{
$trend = 0;
}

Modifications apportées en rouge :

// tendance par rapport à la mesure précédente
$last_value = loadVariable('last_value'.$id);
$ecart = $value - $last_value ;
if ($ecart > 3)
{
$trend = +1;
}
else if ($ecart < -1)
{
$trend = -1;
}
else
{
$trend = 0;
}

Dans la pratique, il faut ajuster cette valeur d’écart à la hausse, estimée à 3, et la durée de calcul – 4 minutes dans mon cas – pour s’adapter à sa propre situation (volume du local, durée de la douche…). Cette valeur de 3 pourrait être passée en variable (pour faciliter son estimation empirique, au lieu de revenir dans le script pour la modifier), un emplacement ([VAR3]) est disponible dans le descriptif du capteur http, en ajustant le script bien sûr.

Si ces quelques lignes peuvent aider certains d’entre vous, j’en serais très heureux. A+.
bm72
 
Messages : 7
Inscription : 21 Sep 2015

Re: Commande de la GV d’une VMC par capteur de tendance

Messagepar Herbert » 24 Août 2018 19:27

Merci pour le post. Voici une autre solution pour la régulation de VMC simple flux...

J’utilise le matériel suivant (pour 1 caisson VMC) : relais double FIBARO FGS222 (sorties sur petite et grande vitesse du caisson, et 1 (thermo)-hygromètre OREGON THGR122NX pour chaque pièce avec une prise d’air + 1 pour l’extérieur.
L’humidité est mesurée dans chaque pièce à contrôler, et comparée à l'humidité extérieure afin d’éliminer les variations naturelles de la météo. Le résultat est stocké pour chaque capteur sur un périphérique virtuel « variations d'humidité ».
var_hum.jpg
var_hum.jpg (186.64 Kio) Consulté 4153 fois

Le petit script suivant exécute les calculs et doit être lancé par règle à intervalles régulier (p.e. 15 minutes).
Code : Tout sélectionner
<?

function sdk_val($idper) {
//Lecture Valeur périphérique
  $per = getValue($idper) ;
  $id_val = $per["value"] ;
  return $id_val ;
}

// Paramètres
$idhext = getArg('ext') ; // Capteur Humidité extérieur
$idhroom1 = getArg('room1') ; // Capteur  Humidité pièce n°1
$idhroom2 = getArg('room2') ; // Capteur  Humidité pièce n°2
$idhroom3 = getArg('room3') ; // Capteur  Humidité pièce n°1

// Périphériques
$hum0 = sdk_val($idhext) ; // Extérieur
$hum1 = sdk_val($idhroom1) ; // Pièce n°1
$hum2 = sdk_val($idhroom2) ; // Pièce n°2
$hum3 = sdk_val($idhroom3) ; // Pièce n°3

// Traitement
$room1_0 =  loadVariable('room1') ; // Delta Humidité pièce n°1 précédent (%)
$room2_0 =  loadVariable('room2') ; // Delta Humidité pièce n°2 précédent (%)
$room3_0 =  loadVariable('room3') ; // Delta Humidité pièce n°3 précédent (%)

$deltah_room1 = $hum1 - $hum0 ; // Pièce n°1
$deltah_room2 = $hum2 - $hum0 ; // Pièce n°2
$deltah_room3 = $hum3 - $hum0 ; // Pièce n°3

$varh_room1 = $deltah_room1 - $room1_0 ; // Variation instantanée
$varh_room2 = $deltah_room2 - $room2_0 ; // Variation instantanée
$varh_room3 = $deltah_room3 - $room3_0 ; // Variation instantanée

$idvarh_room1 = xxxxxx ; // Variation humidité pièce n°1 - A COMPLéTER
setValue($idvarh_room1, $varh_room1) ;
$idvarh_room2 = xxxxxx ; // Variation humidité pièce n°2 - A COMPLéTER
setValue($idvarh_room2, $varh_room2) ;
$idvarh_room3 = xxxxxx ; // Variation humidité pièce n°3 - A COMPLéTER
setValue($idvarh_room3, $varh_room3) ;

/* Si la variation instantanée est supérieure à un certain seuil (à définir),
on démarre la VMC Grande Vitesse pour une certaine durée (à définir)*/
saveVariable('room1', $deltah_room1) ; // %
saveVariable('room2', $deltah_room2) ; // %
saveVariable('room3', $deltah_room3) ; // %
 
?>

 

Les résultats déclenchent la règle suivante : si la variation humidité de l’une ou l’autre des pièces est supérieure à un seuil défini (ici 2%), un autre petit script est lancé pour contrôler (via macros) les séquences de changements de vitesses (GV pendant 20 minutes puis PV après 25 minutes).
GV.jpg
GV.jpg (173.27 Kio) Consulté 4153 fois

Les paramètres du script prennent en compte les différents cas de figure (démarrage/arrêt/changement de vitesse …) :
&cas : type de traitement (1: passage en GV, 2: Arrêt, 3: Démarrage en PV)
&idpv : code API relais PV
&idgv : code API relais GV
&mpv : Code API macro (PV après 25 minutes)
&mgv : Code API macro (GV pendant 20 minutes)
Code : Tout sélectionner
<?php

function sdk_val($idper) {
//Lecture Valeur périphérique
  $per = getValue($idper) ;
  $id_val = $per["value"] ;
  return $id_val ;
}

// Paramètres
$case = getArg('cas') ; // Type de traitement (1: Passage en GV, 2: Arrêt, 3: Démarrage en PV)
$id_PV = getArg('idpv') ; // Code API Petite vitesse
$id_GV = getArg('idgv') ; // Code API Grande vitesse
$macro_PV = getArg('mpv') ; // Code API macro (PV après 25 minutes)
$macro_GV = getArg('mgv') ; // Code API macro (GV pendant 20 minutes)

// Périphériques
$PV = sdk_val($id_PV) ; // Petite vitesse VMC
$GV = sdk_val($id_GV) ; // Grande vitesse VMC

// Traitement
switch ($case) {
    case 1 :
        $json_result = setMacro($PV, $macro_PV) ; // PV Off après 1 secondes, PV ON après 25 Minutes
        // Stoppe pour 10 secondes
        usleep(10000000) ;
        $json_result = setMacro($GV, $macro_GV) ; // GV ON après 10 secondes, GV Off après 20 Minutes
        break ;
    case 2 :
        setValue($id_PV, 0) ; /*Arrêt PV*/
        // Stoppe pour 10 secondes
        usleep(10000000) ;
        setValue($id_GV, 0) ; /*Arrêt GV*/
        break ;
    case 3 :
        setValue($id_GV, 0) ; /*Arrêt GV*/
        // Stoppe pour 10 secondes
        usleep(10000000) ;
        setValue($id_PV, 100) ; /*Démarrage PV*/
        break ;
}

?>

Macros :
macro_pv.jpg
Macro Petite Vitesse
macro_pv.jpg (96.04 Kio) Consulté 4153 fois


macro_gv.jpg
Macro Grande Vitesse
macro_gv.jpg (94.69 Kio) Consulté 4153 fois

En guise de bonus, on peut aussi facilement calculer les coûts de fonctionnement, soit sur base des puissances nominales du (ou des) caisson(s), soit en substituant le relais par un modèle avec mesure de la consommation.
Bien que les VMC soient destinées à fonctionner en permanence, je les arrête (par macros) la nuit ou quand la maison est vide et je les redémarre en petite vitesse le matin ou au retour. Cependant la régulation automatique les relance à tout moment sur détection d’humidité.
Herbert
 
Messages : 27
Inscription : 16 Août 2018

Re: Commande de la GV d’une VMC par capteur de tendance

Messagepar RAR69 » 21 Sep 2018 16:52

Herbert a écrit:Merci pour le post. Voici une autre solution pour la régulation de VMC simple flux...

J’utilise le matériel suivant (pour 1 caisson VMC) : relais double FIBARO FGS222 (sorties sur petite et grande vitesse du caisson, et 1 (thermo)-hygromètre OREGON THGR122NX pour chaque pièce avec une prise d’air + 1 pour l’extérieur.
L’humidité est mesurée dans chaque pièce à contrôler, et comparée à l'humidité extérieure afin d’éliminer les variations naturelles de la météo. Le résultat est stocké pour chaque capteur sur un périphérique virtuel « variations d'humidité ».

Bonjour Herbert,
Afin de compléter mes connaissances, avec quelle type d'interface physique (RFXCom ?, RFPlayer ?) et avec quel protocole as-tu interfacé les sondes OREGON THGR122NX ?
Ces sondes ne peuvent être connectées à leur base via 3 canaux uniquement. Il me faudrait 5 sondes : 4 pour mes pièces humides et une pour l’extérieur. Est-ce possible ?
Merci d'avance pour ton aide et en tous les cas, bravo pour ton retour d'expérience...
En fonction de tes réponses, je ne manquerai pas de te recontacter... ;)
J'en ai rêvé, Thibautg16, Havok, P@t, merguez07, Xeos, influman et MaDomotic les ont fait !!!
RAR69
 
Messages : 539
Inscription : 30 Août 2018
Localisation : Rhône

Re: Commande de la GV d’une VMC par capteur de tendance

Messagepar Herbert » 04 Oct 2018 10:26

Bonjour et désolé pour le retard (absent). J'utilise un RFXCOM avec un paquet de sondes à 433 Mhz, et cela fonctionne très bien. J'ai parfois (rarement) quelques déconnexions, mais il y a des solutions, voir ce post :
https://forum.eedomus.com/viewtopic.php?f=50&t=6435&start=80#p67825
Herbert
 
Messages : 27
Inscription : 16 Août 2018

Re: Commande de la GV d’une VMC par capteur de tendance

Messagepar RAR69 » 04 Oct 2018 10:45

Herbert a écrit:Bonjour et désolé pour le retard (absent). J'utilise un RFXCOM avec un paquet de sondes à 433 Mhz, et cela fonctionne très bien. J'ai parfois (rarement) quelques déconnexions, mais il y a des solutions, voir ce post :
viewtopic.php?f=50&t=6435&start=80#p67825[/url]

Bonjour @Herbert et merci pour ta réponse.
J'utilise personnellement un RFPlayer et entre temps j'ai ouvert un nouveau topic : https://forum.eedomus.com/viewtopic.php?f=8&t=7504
En conclusion, la portée de ma sonde THGR228N avec le protocole OREGON V2 est trop faible et j'ai finalement acheté dans un premier temps pour test deux sondes THGR810 avec le protocole OREGON V3 qui ont une portée bien supérieure (environ x3).
J'attends aussi la sortie du "Smart Implant FIBARO" pour piloter ma VMC.
Roland
J'en ai rêvé, Thibautg16, Havok, P@t, merguez07, Xeos, influman et MaDomotic les ont fait !!!
RAR69
 
Messages : 539
Inscription : 30 Août 2018
Localisation : Rhône

Re: Commande de la GV d’une VMC par capteur de tendance

Messagepar Herbert » 04 Oct 2018 11:38

OK, bonne chance.
NB: j'ai aussi une sonde THGR810 (et 6 x THGR122NX). Effectivement la portée peut être un problème suivant la configuration (distance et obstacles). Pour une de mes pièces, j'ai dû casser ma tirelire et opter pour le zwave (AEOTEC ZW100 MultiSensor6). Par contre, je n'ai pas remarqué de comportement différent des sondes OREGON THGR810 et THGR122NX en ce qui concerne les (rares) déconnexions.
Herbert
 
Messages : 27
Inscription : 16 Août 2018


Retour vers Scripts & Périphériques du store

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 14 invité(s)