lastChangeStateDuration

Bonjour,

J’ai créé un virtuel avec la formule suivante, mais je ne comprends pas pourquoi ça ne fonctionne pas :
lastChangeStateDuration(#[Maison][Linky Virtuel][TotalHPHC]#,((#[Maison][Linky Virtuel][TotalHPHC]#)-10))

J’ai aussi essayé avec un value pour le 2ème argument
lastChangeStateDuration(#[Maison][Linky Virtuel][TotalHPHC]#,(value(#[Maison][Linky Virtuel][TotalHPHC]#)-10))

Mais sans plus de succès. Une idée ?
Le but étant d’avoir précisément le temps qui s’est écoulé entre maintenant et la valeur de mon index « il y a 10 watts » dans le but d’avoir une conso instantanée

1 « J'aime »

Ta commande est-elle historisee ?

oui, commande historisée. A noter que c’est une commande du même virtuel, mais je ne vois pas ce que ça changerait

Dans le testeur d’expression elle renvoie quoi ?
Il faut que la commande soit historiée pour que le last state duration fonctionne.

Alors,

Quand je test : lastChangeStateDuration(#[Maison][Linky Virtuel][TotalHPHC]#,value(#[Maison][Linky Virtuel][TotalHPHC]#)-10)
J’ai :

En fait il utilise non pas le nom de l’équipement mais la valeur retournée (!). J’ai vu qu’on pouvait mettre directement l’id de l’équipement à la place de son nom, j’ai donc essayé :

lastChangeStateDuration(720,value(720)-10)
ce qui me donne :

Alors que : lastChangeStateDuration(720,27839342) --Avec une valeur en dur
fonctionne :

Salut,

Alors c’est vraiment assez spécial comme tentative d’utilisation. Franchement je crois pas que tu puisses arriver à utiliser cette fonction pour faire ce que tu veux.

Et même si on trouve un moyen (ce que je ne pense pas) … Imaginons que la valeur actuelle de ta commande est 1500. Peut-être que la valeur précédente aura été 1480 du coup l’historisation de Jeedom n’aura jamais la valeur 1500-10=1490 donc lastChangeStateDuration retournera -1 et ça ne fonctionnera pas.

Fait donc un scénario que tu déclenches lors du changement de valeur de #[Maison][Linky Virtuel][TotalHPHC]# et enregistre/calcul les informations que tu souhaites ça sera plus fiable.

Sans décortiquer il faut utiliser :
#timestamp# pour enregistrer le moment ou le scénario se déclenche
event pour enregistrer :

  • la valeur précédente de #[Maison][Linky Virtuel][TotalHPHC]# dans une commande d’un virtuel (ou bien utiliser variable)
  • la valeur précédente du timestamp dans une commande d’un virtuel (ou bien utiliser variable)

Reste un calcul à faire entre cette ancienne valeur, la nouvelle et la différence de timestamp.

Tu as raison, je pensais avoir toutes les valeurs de 1 en 1 sur les index, mais non, ça peut sauter des valeurs, du coup ça ne fonctionne pas.
Ceci dit, ça m’a permit de constater qu’il ne fallait pas utiliser le nom de la commande pour cette fonction mais son id pour la faire fonctionner.

Merci

Bon, je pense être arrivé à ce que je veux avec :
3600*(value(720)-lastBetween(720, -5 min, -1 min))/lastChangeStateDuration(720,lastBetween(720, -5 min, -1 min))

Par contre directement dans une info virtuel, ça ne se met pas à jour, du coup j’ai créé un scénario avec comme déclenchement ma commande #[Maison][Linky Virtuel][TotalHPHC]# et qui vient mettre à jour l’info du virtuel

Si ça peut servir à d’autres :slight_smile:

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