Bonjour,
J’ai besoin de connaître le temps d’ouverture et de fermeture des volets (temps pour passer de 0 à 99 et inversement) pour gérer le blocage de mes volets roulants.
En effet, certains de mes volets peuvent se bloquer, à cause des lames PVC qui collent.
Le problème en question :
-
Si le volet est fermé (état 0), et qu’une tentative d’ouverture est faite, si blocage, le module Fibaro FGR-223 renvoie immédiatement l’état 99 (ouvert), ce qui est faux ;
-
Si le volet est ouvert (état 99), et qu’une tentative de fermeture est faite, si blocage, le module Fibaro FGR-223 renvoie immédiatement l’état 0 (fermé), ce qui est faux.
La solution :
Créer un scénario déclenché par le changement d’état du volet avec un bloc SI :
SI (les états 0 et 99 du volet existent dans l’historique ET ((l’état du volet = 0 ET la durée de fermeture du volet s’il était dernièrement ouvert < 10s) OU (l’état du volet = 99 ET la durée d’ouverture du volet s’il était dernièrement fermé < 10s))
ALORS le volet est bloqué
Sachant que :
-
Durée de fermeture du volet s’il était dernièrement ouvert (en s) :
(durée depuis le dernier changement d’état à ouvert) - (durée depuis le dernier changement d’état à fermé) - (durée pendant laquelle le volet a dernièrement eu l’état ouvert) -
Durée d’ouverture du volet s’il était dernièrement fermé (en s) :
(durée depuis le dernier changement d’état à fermé) - (durée depuis le dernier changement d’état à ouvert) - (durée pendant laquelle le volet a dernièrement eu l’état fermé)
Soit (exemple avec le volet de la salle à manger) :
(lastChangeStateDuration(#[Ouvrants][Volet_sam][Etat]#,0) != -1 ET lastChangeStateDuration(#[Ouvrants][Volet_sam][Etat]#,99) != -1) ET ((#[Ouvrants][Volet_sam][Etat]# == 0 ET (lastChangeStateDuration(#[Ouvrants][Volet_sam][Etat]#,99) - lastChangeStateDuration(#[Ouvrants][Volet_sam][Etat]#,0) - lastStateDuration(#[Ouvrants][Volet_sam][Etat]#,99)) < 10) OU (#[Ouvrants][Volet_sam][Etat]# == 99 ET (lastChangeStateDuration(#[Ouvrants][Volet_sam][Etat]#,0) - lastChangeStateDuration(#[Ouvrants][Volet_sam][Etat]#,99) - lastStateDuration(#[Ouvrants][Volet_sam][Etat]#,0)) < 10))
Cette solution fonctionne, mais je m’oriente vers vous pour savoir si cela peut être optimisé.
Qu’en pensez-vous ?