Valeur erroné pour la fonction duration()

Tags: #<Tag:0x00007fa7a9e42c78>

Bonjour,
Dans un scenario j’utilise la fonction duration() pour connaître le nombre de fois qu’un capteur de mouvement est passé à 1 au cours des 5 dernières minutes.

duration(#[Cuisine][Detecteur Mouvement][Mouvement]#, 1, 5 min)

Cela fonctionne très bien pendant la journée mais le matin quand c’est le premier mouvement, la valeur passe directement à 5.

Sur l’historique des commandes, nous pouvons voir qu’il n’y a pas eu de mouvement entre [2021-04-23 03:02:43] et [2021-04-23 08:07:31] :
image

On retrouve la même choisi dans les logs (simplifiés) du scénario:

------------------------------------
[2021-04-23 03:02:43][SCENARIO] Start : Scenario execute automatiquement sur evenement venant de : [Cuisine][Detecteur Mouvement][Mouvement].
[2021-04-23 03:02:43][SCENARIO] Log : ********************************* Trigger = [Cuisine][Détecteur Mouvement][Mouvement]  1 *********************************
[2021-04-23 03:02:44][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-04-23 03:02:44][SCENARIO] Evaluation de la condition : [0 >= 5] = Faux
[2021-04-23 03:02:44][SCENARIO] ….
------------------------------------
[2021-04-23 08:07:31][SCENARIO] Start : Scenario execute automatiquement sur evenement venant de : [Cuisine][Detecteur Mouvement][Mouvement].
[2021-04-23 08:07:31][SCENARIO] Log : ********************************* Trigger = [Cuisine][Détecteur Mouvement][Mouvement]  1 *********************************
[2021-04-23 08:07:31][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-04-23 08:07:32][SCENARIO] Evaluation de la condition : [5 >= 5] = Vrai
[2021-04-23 08:07:32][SCENARIO] ….
------------------------------------

Nous pouvons voir que l’évaluation de la condition est correcte à 03:02:44 mais incorrecte à 08:07:32 car elle est directement égale à 5.

Est-ce un problème de vidage du cache pendant la nuit ou quelque chose du genre? Si quelqu’un a une idée, ça m’intéresse.
Merci.
Bonne journée.
Guillaume.

Bonjour.

Et si le 1 er mouvement a lieu à 7 heures vous aurez 4 ?
Je pense que oui.

Utilisez statduration à la place pour voir.

Bonjour,
Non, quelquefois l’heure, la première évaluation est toujours égale à 5 puis après le comptage s’effectue correctement.

Pour faire les tests, je dois toujours attendre qu’une nuit passe car je ne peux pas reproduire autrement.

Pour le choix de la fonction je veux prendre en compte le cas des mouvements = 1 puis 0 puis 1 dans les 5 minutes. Avec stateDuration(commande), je ne prendrais en compte que le dernier changement à 1.
Pour info c’est un capteur Xiaomi donc, qui repasse a 0 au bout de 2 minutes si pas de mouvement.

Je viens de remarquer que le matin l’évaluation de la condition remonte une valeur vide puis après directement 5.

[2021-04-24 08:45:54][SCENARIO] Evaluation de la condition : ["" >= 5] = Faux
[2021-04-24 08:45:55][SCENARIO] Evaluation de la condition : [5 >= 5] = Faux

Je relance mon poste, personnes n’a eu le même problème ?

Bonsoir,
Peux-tu mettre une photo de ton scripte ?
Il doit y avoir une erreur et Jeedom ne comprend pas car 5 >= 5 devrait renvoyer VRAI !!
De plus, pour suivre cette valeur, et regarder quand elle est juste ou pas, tu pourrais l’envoyer dans une variable. Puis créer une virtuel avec une info qui est égale à la variable. Historiciser cette info, pour enfin pouvoir regarder la courbe qu’elle sort… Et donc comment ta valeur évolue dans la journée…
PS: j’utilise cette fonction sans soucis apparent, par contre, je ne mets pas d’espace avant les virgules (pas testé si ça change quelque chose…)

Merci pour tes informations. Le script fonctionne sauf pour la première valeur mais je vais essayer de supprimer les virgules, pourquoi pas. L’idée du virtuel est pas mal non plus même si je pense qu’il voit les " " comme des zéro. J’avais essayé de déclancher un scénario avec cette valeur mais il ne se déclenchait pas. Je ne sais pas si Jeedom comprend les ===.
Bonne soirée.

Pas supprimer les « virgules » mais l’espace apres les virgules…
mais je viens de test, ça change rien…
Capture 2021-05-02 à 02.18.13
Capture 2021-05-02 à 02.18.22

Envoie une photo du scénario, il doit y avoir une coquille…

Exemple d’utilisation (ici une durée sur le bruleur de ma chaudière pour avoir le volume de gasoil consommé)
Capture 2021-05-02 à 02.14.10
et la courbe du virtuel:
Capture 2021-05-02 à 02.14.18

Bonjour,
Voila une copie du script qui fonctionne tres bien sauf pour la première valeur de la journée du capteur de mouvement.
image
J’ai mis quelques tests en place mais je n’aurais les résultats que demain car tout fonctionne correctement le reste du temps.

Bonjour @blusy38
Selon la doc des scénarios duration() ne donne pas le nombre de fois mais la durée en minutes pendant laquelle l’équipement avait la valeur choisie sur la période. https://doc.jeedom.com/fr_FR/core/4.1/scenario?theme=light#Les%20fonctions%20de%20calcul

Je pense que c’est bel et bien un bug de la fonction duration ().
J’ai comparé les fonctions duration() et durationbetween() sur les mêmes périodes:

------------------------------------
[2021-05-04 07:12:43][SCENARIO] Start : Scenario execute automatiquement sur evenement venant de : [Appartement][Home Capteurs][Présence Cuisine].
[2021-05-04 07:12:43][SCENARIO] Exécution du sous-élément de type [action] : action
[2021-05-04 07:12:43][SCENARIO] Log : ********************************* Trigger = [Appartement][Home Capteurs][Présence Cuisine]  1 *********************************
[2021-05-04 07:12:43][SCENARIO] Log : [Appartement][Home Capteurs][Présence Cuisine] = 1
[2021-05-04 07:12:44][SCENARIO] Log : lastChangeStateDuration ( [Appartement][Home Capteurs][Présence Cuisine],0) =  3h 45min 34s.
[2021-05-04 07:12:44][SCENARIO] Log : lastChangeStateDuration ( [Appartement][Home Capteurs][Présence Cuisine],1) =  1s.
[2021-05-04 07:12:44][SCENARIO] Log : duration ( [Appartement][Home Capteurs][Présence Cuisine],1,5 min) = 5
[2021-05-04 07:12:44][SCENARIO] Log : duration ( [Appartement][Home Capteurs][Présence Cuisine],1,300 second) = 5
[2021-05-04 07:12:44][SCENARIO] Log : duration ( [Appartement][Home Capteurs][Présence Cuisine],1,5 minutes) = 5
[2021-05-04 07:12:45][SCENARIO] Log : durationbetween ( [Appartement][Home Capteurs][Présence Cuisine],1,5 minutes ago,Now) = 0
[2021-05-04 07:12:45][SCENARIO] Log : stateChanges ( [Appartement][Home Capteurs][Présence Cuisine],1,5 min) = 1
[2021-05-04 07:12:45][SCENARIO] Exécution d'un bloc élément : 4035
[2021-05-04 07:12:45][SCENARIO] Fin correcte du scénario

On voit que la fonction duration() donne 5 dés le premier déclenchement, ce qui n’est pas normal, car il n’y a pas eu de déclenchement depuis plusieurs heures.
En revanche, la fonction durationbetween() sur la même période donne bien 0.

On voit aussi qu’une fois le premier déclanchement passé, les valeurs sont les mêmes pour les 2 fonctions.

------------------------------------
[2021-05-04 07:17:39][SCENARIO] Start : Scenario execute automatiquement sur evenement venant de : [Appartement][Home Capteurs][Présence Cuisine].
[2021-05-04 07:17:39][SCENARIO] Exécution du sous-élément de type [action] : action
[2021-05-04 07:17:39][SCENARIO] Log : ********************************* Trigger = [Appartement][Home Capteurs][Présence Cuisine]  1 *********************************
[2021-05-04 07:17:39][SCENARIO] Log : [Appartement][Home Capteurs][Présence Cuisine] = 1
[2021-05-04 07:17:40][SCENARIO] Log : lastChangeStateDuration ( [Appartement][Home Capteurs][Présence Cuisine],0) =  1min 49s.
[2021-05-04 07:17:40][SCENARIO] Log : lastChangeStateDuration ( [Appartement][Home Capteurs][Présence Cuisine],1) =  1s.
[2021-05-04 07:17:40][SCENARIO] Log : duration ( [Appartement][Home Capteurs][Présence Cuisine],1,5 min) = 3
[2021-05-04 07:17:40][SCENARIO] Log : duration ( [Appartement][Home Capteurs][Présence Cuisine],1,300 second) = 3
[2021-05-04 07:17:40][SCENARIO] Log : duration ( [Appartement][Home Capteurs][Présence Cuisine],1,5 minutes) = 3
[2021-05-04 07:17:41][SCENARIO] Log : durationbetween ( [Appartement][Home Capteurs][Présence Cuisine],1,5 minutes ago,Now) = 3
[2021-05-04 07:17:41][SCENARIO] Log : stateChanges ( [Appartement][Home Capteurs][Présence Cuisine],1,5 min) = 2
[2021-05-04 07:17:41][SCENARIO] Exécution d'un bloc élément : 4035
[2021-05-04 07:17:41][SCENARIO] Fin correcte du scénario
------------------------------------

Merci pour vos conseils.
Guillaume.

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.