Calcul temps fonctionnement d'une prise avec durationbetween

Bonjour,

Le soir j’ai un scénario qui allume un petit radiateur d’appoint si la température remontée par ma sonde xiaomi est inférieur à un certain degré, et le coupe dès que cela atteins une certaine température. Celui fonctionne parfaitement cependant j’ai voulu créer une commande Info qui me remonte combien de temps à fonctionner le radiateur.
Pour cela je me base sur la valeur binaire Etat de ma prise Xiaomi sauf que je dois me tromper quelque part car les chiffres remontées ne sont pas bons…:

Le scénario se lance de 20h05 à 07h00 :

Ma commande info :
durationbetween(#[Chambre][Radiateur][Etat]#,1,yesterday noon,Today noon)

normalement j’ai résultat en minute d’après les informations que j’ai trouvé sur internet.

D’après ma vue ma prise a fonctionné de 22h01 à 6h11 :


Hors il m’indique :
Résultat de la commande : 838

Et j’ai une autre commande info pour formater cela de manière plus lisible :
gmdate(‹ G\hi\ms\s ›,#[Chambre][Radiateur][Radiateur Allumé Nuit Minutes]# * 60)
Résultat : image

Je devrais trouver ~ 8 h de fonctionnement…

Une idée ? merci

Bonjour,
je pense qu’il te renvoie la valeurs de hier minuit à aujourd’hui.
J0: de minuit à 6 h + 22 h à minuit = 8 h
J1: Minuit à 6 h = 6 h
----------- Total = 14 h !!!

Tu pourrais simplement soit:

  • lancer un scénario à 9 h du matin en injectant dans la commande
    duration(#[Chambre][Radiateur][Etat]#,1,-12 hour)
  • Si ton virtuel ne sert qu’a cela, tu mets ton info virtuel = duration(#[Chambre][Radiateur][Etat]#,1,-12 hour). Avec le virtuel qui se mets à jour pas avec le cron

    Mais avec : " 0 9 * * * "

Combien de temps il a fonctionné mais : La dernière fois qu’il a fonctionné ? Sur la journée ? Depuis 24h ? Autres ?

Bonjour,

J’ai modifié l’horaire pour coller vraiment au démarrage de ma prise connectée avec mon scénario soit de 20h à 7h20 et j’ai toujours des calculs qui ne correspondent pas au temps de fonctionnement :

durationbetween(#[Chambre][Radiateur][Etat2]#,1,yesterday 20:00:00,Today 07:25:00)

Bonjour,

Mon virtuel sert pour mon radiateur mais je vais tester la valeur -12 hour

Merci

Bonjour,
heuu… tu as lu ma proposition ?

Tu as essayé ?

(tu peux l’essayer maintenant dans le testeur d’expression:

)

Bonjour,

Oui merci ta commande fonctionne mais actuellement car cela fait -12 heures quand il sera par exemple 15h je n’aurai plus le même résultat… donc pour moi c’est pas la bonne solution ? Il faut vraiment que j’exécute cette commande dans le créneau horaire.
Avec l’histoire du scénario comme tu as dis ou créer un virtuel dédié…

Exact: Soit tu crées un scénario pour envoyer une commande curseur
Soit tu as un virtuel dédier
Mais c’est pas top compliqué, et ça fonctionne !
:slight_smile:

J’ai créé un scenario qui démarre à 8h en formattant en h:m:s et j’ai mis dans une variable cela :
gmdate(‹ G\hi\ms\s ›,(duration(#[Chambre][Radiateur][Etat2]#,1,-13 hour)) *60)

On verra bien.
Merci

Test cette formule: Heure Minutes == tag(Durée en minute) + (floor(tag(Durée en minute) / 60)) * 40
Comme ici:


Car je ne connaissait pas la tienne, j’ai test par curiosité et elle me sort rien ! (voir log)

Bonjour,
Pour info, la fonction durationbetween() ,a un bug , l’info a été remonté au staf.
dans ton 1er exemple quand tu exécute le code, celui-ci va calculer jusqu’à Today noon, donc
de 22:01:02 à 12:00:00 soit 13h58m58s → 838 mn.
Donc cherche pas plus loin, ta fonction gmdate est bonne, c’est la fonction durationbetween() qui est actuellement faussée.

1 « J'aime »

Bonjour,

Merci pour ta réponse, il me semblait bien que j’avais vu également cela sur un autre topic, ca confirme :wink:
Du coup je met en place la proposition de @Henri avec la fonction duration -12 hours

J’ai mis en place ton scénario je vérifierai demain, si cela est ok avec Duration et le formatage de l’horaire.
Merci

Mouai pas encore au point les calculs…
Mon radiateur a démarré à 23h41 et coupé à 7h13

et il m’indique qu’il a tourné 12h56… :frowning:
image

L’équipement n’est pas le même entre ton historique et ton scénario : c’est normal ?

Si la prise Xiaomi est un virtuel dupliqué pour mon radiateur pour mes widgets,
Bien vue quand même :joy:

Bonjour,
je viens de lancer un test, pour confirmer si la fonction à un bug.
J’allume et éteint une commande inutiliée ainsi:

Je lance une mesure toute les heure, que je vais mémorise dans un virtuel Info pour voir comment ce temps évolue.

Je reviens vers vous demain avec les résultats !!
Bonne journée.

Résultats:
Valeurs mémorisé INCORRECTE !

2 « J'aime »

Bonjour @fabrice
En tant que modérateur, pourrais-tu taguer la bonne personne, de la team Jeedom, sur le problème ci-apres ?
Bonne journée à tous.

Historique d’une commande:

à 1 pendant 7 heures soit 420 minutes.

Test:


Résultats :

[2021-10-20 10:06:18][SCENARIO] Start : Scenario lance manuellement.
[2021-10-20 10:06:18][SCENARIO] Exécution du sous-élément de type [action] : action
[2021-10-20 10:06:18][SCENARIO] Log : @
@ 1 heure avant =: 
@ 2 heure avant =:  
@ 3 heure avant =: 0 
@ 4 heure avant =: 0 
@ 5 heure avant =: 0 
@ 6 heure avant =: 0 
@ 7 heure avant =: 0 
@ 8 heure avant =: 0 
@ 9 heure avant =: 0 
@ 10 heure avant =: 353 
@ 11 heure avant =: 413 
@ 12 heure avant =: 473 
@
@ le 19 octobre à partir de 23 h =: 2125887707 
[2021-10-20 10:06:18][SCENARIO] Fin correcte du scénario

Du coup, il parait (pas vérifié) qu’il y a un problème avec la commande « durationbetween »
mais également avec la commande « duration »…

Pensez-vous pouvoir corriger ?
Car cela est indispensable pour les calculs de consommation d’énergie, par exemple, et… bien d’autres…

1 « J'aime »

Bonjour Henri,

En fait, la teams est bien au courant de cela. Pire, le comportement ne semble pas chez tout le monde pareil.
J’ai moi même, ouvert un sujet sur ce point (duration).

Une solution était ok en début d’année, ne fonctionne plus aujourd’hui.

Je n’arrive pas à avoir la durée d’un état 1, sur 1 mois, le résultat est faux.
convertDuration(duration(#[Chauffage][Module chaudière][Etat]#, 1, first day of this month 00:00)) donne 3h57 (c’est faux)
convertDuration(durationbetween(#[Chauffage][Module chaudière][Etat]#,1, first day of the month, last day of this month)) donne 10h35, c’est faux aussi.

Bref, la Teams est au courant et nous lis ici, pas de doute la dessus, le problème est connue mais semble vraiment complèxe à résoudre car le comportement n’est pas rationnel chez nous tous.

Merci @Fabrice pour cette réponse détaillée.
C’est vrai que c’est fou, car ça eu fonctionné sur ma box…

Bonne journée à tous.