lastChangeStateDuration et lastStateDuration

Bonjour,
Bon d’accord, on ne peut pas utiliser lastChangeStateDuration ou lastStateDuration en temps qu’élément déclencheur dans un scénario ou avec Si dans des bloc « si…alors ».

Mais comment expliquer que quand on utilise le testeur d’expression sur une formule du genre : lastChangeStateDuration(#[Maison][PriseCamExt][Etat]#,1)>10 ça répond true même si on remplace le 1 par le 0 ?
L’état de la prise historisée est soit 0 depuis un certain temps, soit 1 depuis un certain temps, mais pas les 2 en même temps.
Donc si on a true pour l’état 0 on devrait avoir false pour l’état 1 et inversement.

Bonsoir @JeePasFor

Tu n’as pas dû lire la Doc comme il faut :

  • lastChangeStateDuration(commande,valeur) : Donne la durée en secondes depuis le dernier changement d’état à la valeur passée en paramètre. Retourne -1 si aucun historique n’existe ou si la valeur n’existe pas dans l’historique. Retourne -2 si la commande n’est pas historisée

Cette commande renvoit le dernier changement d’état pour la valeur passée en paramètre (0 ou 1 dans ton cas), mais ça n’est pas forcément le dernier état en cours.
Ta prise passe de 0 a 1 en permanence, donc si ton état actuel est 1 depuis plus 10s, ton dernier état 0 sera. Aussi forcément supérieur à 10s… CQFD
Tes 2 commandes sont donc vrais

Si tu veux faire un test sur une commande avec l’Aa valeur 1 depuis 10s, moi, je ferai commande == 1 ET stateduration(commande) > 10

Norbert

1 « J'aime »

Bonjour à tous:
1°: heu… OUI, on peut l’utiliser dans un déclencheur. Mais pas seul !
Tu peux par exemple avoir Détecteur == 1 ET lastChangeStateDuration()>60

Ou alors en passant par un virtuel (attention en fonction du délais de mise a jour du virtuel, ça peut être plus ou moins exacte… Jamais essayé avec un virtuel forcé sur une mise a jour toute les 10 sec / conso processeur…?)
Virtuel:
Capture d’écran 2021-09-06 à 11.53.59

2°: Si T’as prise est à 1 depuis 1 h et quelle était éteinte depuis 1h.
Le dernier passage à 1 = 3600
Le dernier passage à 0 = 3600 + 3600
Dans les 2 cas > 0

Voici le déclencheur:

Log (Le premier lancement est en manuel / le second on voit que le déclencheur est le virtuel) :

Scénario de test:

Enfin UN conseil JEEDOM:
Quand tu veux faire de nouvelle fonction : TEST sur des exemples simple puis seulement apres intègre les dans un scénario !

Hello,

Je me permets de relancer ce sujet car il est pile poil dans ma réflexion. Je suis assez surprise de ce que je lis car je pensais que le lastChangeStateDuration portait sur le DERNIER changement d’état de la valeur de la commande, puisque c’est « last ».
En effet, en utilisant le testeur d’expression, que la commande soit zéro ou 1, il me dit true dans les deux cas. Bon, c’est embêtant.

Je voulais faire quelque chose de tout simple:

  • quand la baie vitrée est ouverte depuis plus de x secondes, alors effectuer une action (booster la ventilation de la chaudière)
  • sinon effectuer une autre action (désactiver le boost de la chaudière)

Dans mon scenario, en déclencheur j’avais indiqué ma commande « état de la baie vitrée ».
Sauf que bah en effet, le lastChangeStateDuration ne remplit pas la fonction que j’espérais puisque même si la baie vitrée est en état 0 depuis moins de 30 secondes, le scenario se lance quand même.

Bref, grosso modo, si quelqu’un peut me dire si c’est possible d’avoir un scenario comme celui que je cherche, cela m’intéresse.

J’ai tenté de mettre SI commande ==0 ET StateDuration(commande)>10, sauf que cela ne fonctionne pas non plus, le log indique à l’ouverture de la baie que le SI est faux donc s’arrête là.

Merci d’avance