Aide sur le temps ! scénario et horodatage de valeurs

bonjour,

après 3 ans de jeedom et en général ^^ je n’ai toujours pas complétement saisi le fonctionnement du temps ^^ et je me retrouve aujourd’hui avec un problème que je ne suis pas sur de pouvoir résoudre en grugeant comme d’habitude ^^

je cherche à calculer la somme des valeurs d’une info virtuelle du premier à la fin du mois à minuit .

J’ai donc dans ce virtuel une variable définie par un max(#command#,yesterday) via un scénario qui ce lance chaque jours à minuit et la somme des max est calculée par statistics(#commandl#,sum,last month) dans un autre scénario qui ce lance le 1 du mois à minuit et une minute .

je pense que vous voyez le problème (à moins que ma logique soit mauvaise) , en faisant cela la valeur du 30 ou du 31 est horodatée comme étant du 1 dans le virtuel et ne sera donc pas comptabilisée par statistics(#commandl#,sum,last month).

Je pourrais lancer à la place d’un max(#command#,yesterday) à minuit , un max(#command#,today) à 23h59 , mais si je ne me trompe pas je perdrais alors une minute de valeur (qui est un cumul de consommation électrique relevé toutes les minutes ) et donc 365 minutes à l’année ce qui fait quand même beaucoup .

Est-ce que je me trompe ? et sinon comment m’en sortir ? franchement je ne vois pas, j’avoue avoir du mal avec le temps :laughing: un scénario qui se lance à minuit est il lancé au début du jour ou à la fin ? si c’est à la fin je pourrait mettre un today et l’horodatage serait bon si c’est au début j’aurais 0 et je suis obligé d’en passer par un yesterday mais alors ma valeurs ne sera pas correctement horodatée …

bref à l’aide ^^

merci d’avance :wink:

Bonsoir @krom77

D’un autre coté, c’est une erreur de 1/1440, moins de 1 millième d’erreur éventuelle ! … Et sous reserve que la valeur entre 23h59 et 00h soit enregistrée avant 00h → sinon, elle sera comptée le mois suivant.

Une petite astuce en bloc code pour affecter une valeur historisée à une date bien définie :

$heureHistorisation = date("Y-m-d 23:59:00", strtotime('last day of last month')) ; 
cmd::byString('#ta commande historique#')->event('<ta valeur calculée>',$heureHistorisation);

ca te permet d’inscrire ta valeur calculée le 1er du mois au dernier jour du mois precedent à 23h59:59 dans la commande #ta commande historique#

Norbert

merci pour ta réponse ,

oui je n’avais pas vu ça comme ça et je viens de faire le calcul j’aurais peut être une erreur de 2kwh max à l’année , je crois que j’ai un peut péché par désir de précision .

Ceci dit c’était aussi l’occaz de demander de précisions sur le comportement de jeedom dans cette affaire car je n’arrive pas à concevoir que nous soyons tous condamné à perdre une minute en fin de journée :wink:

pour ton astuce merci encore !

Et si je veux si je veux inscrire une valeur calculée un jour X , dans un jour y la veille à 23:59:59 par exemple je donc donc faire :

$heureHistorisation = date("Y-m-d 23:59:59", strtotime('yesterday')) ; 
cmd::byString('#ta commande historique#')->event('<ta valeur calculée>',$heureHistorisation);

j’ai modifié

"Y-m-d 23:59:00" pour "Y-m-d 23:59:59"

et

strtotime('last day of last month') pour strtotime('yesterday')

corrige moi si je me trompe :wink:

Oui, c’est bien ça !
Tu peux tester ta commande date dans le testeur d’expression pour t’assurer que ça renvoie bien la bonne date/heure

grand merci :wink:

je ne clôture pas le sujet de suite au cas ou je recevrais des précisions sur le fonctionnement exact de l’horodatage d’un senario lancé à minuit ou de la balise today à 00:00 ou un moyen d’arriver au même résultat sans code :wink:

Mais tu va me permettre de dormir sereinement en sachant que je ne perdais qu’une seconde par jour :sweat_smile: