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 :
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 :
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
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 :
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é…
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)
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.
Merci pour ta réponse, il me semblait bien que j’avais vu également cela sur un autre topic, ca confirme
Du coup je met en place la proposition de @Henri avec la fonction duration -12 hours
[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…
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.