Question sur fonction stateChangesBetween

Bonsoir
J’ai une petite question sur l’utilisation de la fonction stateChangesBetween.
Je m’en sers dans le contexte suivant : en cas de détection d’une fuite, lorsque le sol redevient sec, il s’écoule une période plus ou moins longue où le sol passe alternativement de sec à humide, parfois dans de courts laps de temps et où par conséquent le capteur d’humidité va envoyer alternativement des 1 et des 0 à répétition. Les infos de ce capteur déclenchant un scénario, je souhaite éviter que le scénario déclenche également alternativement dans des courts laps de temps des actions contraires.
Je sais que la bonne solution n’est pas dans l’informatique, mais tout simplement dans le fait de régler définitivement le problème de fuite et de sécher correctement le sol, mais je ne serai pas forcément sur place lorsque la fuite se déclenche et ce problème de fuite est par ailleurs récurrent (je ne vais pas vous ennuyer avec mes problèmes de cuisine !)

Je pense qu’il y a moultes façons de traiter ce besoin ; pour ma part j’ai retenu l’utilisation de la fonction stateChangesBetween appliquée au capteur. Je fais donc un test sur le nombre de changements d’état au cours des 10 dernières minutes ; si ce nombre est supérieur à 4, par exemple, rien ne se passe.
Mais je me suis aperçu que les expressions suivantes 1 et 2 renvoyaient un résultat correct :

  1. stateChangesBetween(#[Cuisine][Détecteur de fuite lave vaisselle (Sonoff)][water_leak]#, 1, 10 min ago, now)
  2. stateChangesBetween(#[Cuisine][Détecteur de fuite lave vaisselle (Sonoff)][water_leak]#, 0, 10 min ago, now)
    Par contre, l’expression suivante me renvoie toujours 0 :
  3. stateChangesBetween(#[Cuisine][Détecteur de fuite lave vaisselle (Sonoff)][water_leak]#, 10 min ago, now)

En fait, ce n’est pas très grave, je peux très bien me contenter des expressions 1 et 2 (ou même faire leur somme éventuellement).
Donc ma question est plutôt générale : quelle erreur est-ce que je commets dans l’expression 3 ?

Merci de votre aide


Informations Jeedom

Core : 4.4.19 (master)
DNS Jeedom : oui

Bonjour,

La réponse est dans la doc

Pour cette fonction il faut 4 arguments et tu n’en mets que 3 dans la 3.

Bonjour
C’est ce que je pense également, mais quand je mets l’expression :
stateChangesBetween(#[Cuisine][Détecteur de fuite lave vaisselle (Sonoff)][water_leak]#, , 10 min ago, now), j’obtiens dans le testeur d’expression la réponse suivante :

Donc, il doit y avoir encore une erreur dans ma syntaxe ; j’ai essayé avec ou sans espace entre les 2 virgules, j’ai droit au même message d’erreur.

Tu as mis l’argument de la valeur mais qui est totalement vide, comment penses-tu que Jeedom va réussir à chercher quelque chose ?

Il lui faut à cet endroit la valeur qu’il doit rechercher dans l’historique pour savoir combien de fois il y a eu ce changement de valeur.

oui mais la description laisse penser que le 2eme (la valeur) est optionnel, donc n’en mettre que 3 semble possible.
Je n’ai pas (encore) vérifié le code pour savoir où se trouve le problème: doc ou code

Hello,

Hum, en effet

La value est considérée comme null dans ce cas (en 4.4.19)

		if ($args == 3) {
			$_startDate = func_get_arg(1);
			$_endDate = func_get_arg(2);
			$_value = null;
		}

Faudra creuser alors en effet, mais de ce que j’ai regardé rapidement je vois pas bien comment la requête SQL pourrait donner un résultat un null dans la value

Mon besoin est donc de savoir s’il est possible directement d’avoir le nombre de fois où le capteur a changé d’état et si oui, quelle est la bonne syntaxe. J’ai été influencé par l’exemple donné dans la doc pour la fonction voisine stateChanges :
stateChanges(prise,période) Renvoie 3 : la prise a changé 3 fois d’état pendant la période

Il n’y a pas vraiment besoin du Between dans ton cas donc juste :
stateChanges(#[Cuisine][Détecteur de fuite lave vaisselle (Sonoff)][water_leak]#, 1, 10 min ago)

Si tu veux également voir le passage par 0 alors il faudra ajouter stateChanges(#[Cuisine][Détecteur de fuite lave vaisselle (Sonoff)][water_leak]#, 0, 10 min ago)