Page 1 sur 2
gestion des dates en lua
Publié : 20 oct. 2022, 12:56
par gawel3164
Salut,
Je suis en train d'écrire un script lua mais j'ai un problème de gestion de date. Je veux utiliser la commande Json suivante qui doit mettre a jour un compteur, mais la valeur mise a jour est la valeur de l'avant veille (J-2). A la place des ???? de la commande Json, il faut donc que je mette la date de l'avant veille. Comment faut-il l'écrire?
merci
Code : Tout sélectionner
commandArray[1]={['OpenURL']=ip..'/json.htm?type=command¶m=udevice&idx=150&nvalue=0&svalue=0;'..conso;????????}
Re: gestion des dates en lua
Publié : 21 oct. 2022, 18:44
par denis_brasseur
Sous quel format veux tu passer la date ?
aaaa-mm-jj, jj/mm/aaaa ?
Re: gestion des dates en lua
Publié : 21 oct. 2022, 19:27
par boum
https://www.domoticz.com/wiki/Domoticz_ ... ed_counter
DATE = date with %Y-%m-%d format to put data in last week/month/year history log, or "%Y-%m-%d %H:%M:%S" format to put data in last days history log
Re: gestion des dates en lua
Publié : 22 oct. 2022, 06:55
par denis_brasseur
Tu dois pouvoir utiliser ceci pour retrancher 2 jours à la date courante
Code : Tout sélectionner
local date_day = os.date('%Y-%m-%d %H:%M:%S') -- (This is in GMT date)
local y, m, d, Hr, Min, Sec = date_day:match '(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+)'
local exp_sec = os.time { year = y, month = m, day = d, hour = Hr, min = Min, sec = Sec } - 2*24*60*60
print(os.date('%Y-%m-%d %H:%M:%S', exp_sec))
Le
nombre de jour est à ajuster ici, le
symbole - peux etre transformer en + pour ajouter des jours
- 2*24*60*60
Tu peux le transformer en fonction si tu l'utilises de manière récurrente.
--edit--
Apres réflexion, si tu utilises l'heure courante, tu peux l'écrire beaucoup plus simplement :
Code : Tout sélectionner
before_yesterday = tostring(os.date('%Y-%m-%d %H:%M:%S',os.time() - 2*24*60*60))
Le format de la date peux être ajusté :
Code : Tout sélectionner
[code]before_yesterday = tostring(os.date('%Y-%m-%d',os.time() - 2*24*60*60))
La première proposition peut être utilisée si tu veux retrancher ou ajouter un nombre de jour à une date autre que la date courante
Re: gestion des dates en lua
Publié : 28 oct. 2022, 12:25
par gawel3164
Bonjour,
Merci Boum et denis pour votre aide et désolé pour la réponse tardive. Entre temps j'avais avancé sur mon script que je vous mets ci-dessous. J'arrive avec ce script à visualiser grace aux "print" la conso a mettre dans le compteur ainsi que la date qui est (il me semble...) au bon format. Seulement, quand j'injecte ça dans la commande Json, j'ai des erreurs (soit "nil value", soit "UpdateCalendarMeter(): incorrect date format received, YYYY-MM-DD expected!").
Code : Tout sélectionner
--Ce script permet de calculer et d'afficher sur un compteur, le volume quotidien de gaz consommé par la chaudière
-- on obtient la valeur de l'énergie consommée par jour (en KWh) a partir du plugin Gazpar et ça s'affiche dans le compteur nommé Compteur_GAZPAR_KWh
--Pour utiliser ce script, il faut:
-- un compteur de type compteur (tout court) qu'on règlera sur Gaz (ici nommé: Compteur Gazpar_m3). NB: mettez en concordance l'ID de votre compteur
-- créer trois variables utilisateur de type décimal nommées consom3delavantveille & consom3delaveille & consom3dujour
-- Output devices: volume.
volume_sensor_id = 149 --ID du compteur en m3. A adapter avec l'idx de votre compteur en m3
local ip = '192.168.0.53:8080'
-----------------------------------------------------------------------------------
commandArray = {}
time = os.date("*t")
if ((time.hour == 20) and (time.min == 07))then
consom3dujour=tostring(uservariables['consom3delaveille'])
commandArray['Variable:consom3dujour']=(consom3dujour)
end
if ((time.hour == 21) and (time.min == 08))then
consom3delaveille=tostring(uservariables['consom3delavantveille'])
commandArray['Variable:consom3delaveille']=(consom3delaveille)
end
if ((time.hour == 21) and (time.min == 09))then
consom3delavantveille=tostring((otherdevices_svalues['Compteur_GAZPAR_KWh'])/11.25) --le coefficient de conversion n'est pas fixe mais j'ai pris une moyenne de 11.25. Remplacer Compteur_Gazpar_KWh par le nom de votre compteur en Kwh
commandArray['Variable:consom3delavantveille']=(consom3delavantveille) --on stocke la valeur du jour dans la variable qui correspond a l'avant veille
end
--Mise a jour du compteur en m3
if ((time.hour == 12) and (time.min == 22))then
local DateJourmoins2 = tostring(os.date("%Y-%m-%d", (os.time()- 60*60*48)))
print(DateJourmoins2)
consom3dujour=tostring(uservariables['consom3dujour'])
print(consom3dujour)
-- Mise a jour du compteur
commandArray[1]={['OpenURL']=ip..'/json.htm?type=command¶m=udevice&idx=150&nvalue=0&svalue=0;20;DateJourmoins2'}
end
return commandArray
Re: gestion des dates en lua
Publié : 28 oct. 2022, 19:55
par denis_brasseur
gawel3164 a écrit : 28 oct. 2022, 12:25
"UpdateCalendarMeter(): incorrect date format received, YYYY-MM-DD expected!").
Attention à l'écriture des variables !
DateJourmoins2 est une variable, comme ip. Dans ton code, iIl est reconnu comme la valeur DateJourmoins2, et non pas comme le contenu de la variable DateJourmoins2
Code : Tout sélectionner
-- Mise a jour du compteur
commandArray['OpenURL']=ip..'/json.htm?type=command¶m=udevice&idx=150&nvalue=0&svalue=0;20;'..DateJourmoins2
Si tu utilise un éditeur comme notepad++, le colorieur syntaxique te met bien en valeur les variables

- Capture d’écran 2022-10-28 195225.png (11.04 Kio) Consulté 1202 fois
Re: gestion des dates en lua
Publié : 29 oct. 2022, 09:27
par gawel3164
Merci Denis! Effectivement, a force d'essayer plein de choses, je m'étais planté sur la variable. Donc en écrivant ça, j'ai bien la valeur 20 qui se met a jour pour la date J-2:
Code : Tout sélectionner
commandArray[1]={['OpenURL']=ip..'/json.htm?type=command¶m=udevice&idx=150&nvalue=0&svalue=0;20;'..DateJourmoins2}
Je veux maintenant remplacer la valeur 20 (mise pour test) par la valeur contenue dans la variable consom3dujour. Sur le même principe, j'ai écrit la ligne ci-dessous, mais j'ai le message d'erreur: unexpected symbol near '..'
Code : Tout sélectionner
commandArray[1]={['OpenURL']=ip..'/json.htm?type=command¶m=udevice&idx=150&nvalue=0&svalue=0;'..consom3dujour;..DateJourmoins2}
Quelle est la syntaxe pour deux variables svp?
Re: gestion des dates en lua
Publié : 29 oct. 2022, 12:05
par Keros
Je vois une erreur avec les : après consom3dujour qui devrait être entre ' '
commandArray[1]={['OpenURL']=ip..'/json.htm?type=command¶m=udevice&idx=150&nvalue=0&svalue=0;'..consom3dujour..';'..DateJourmoins2}
Re: gestion des dates en lua
Publié : 29 oct. 2022, 13:57
par gawel3164
en mettant les guillemets, j'ai l'erreur: attempt to call a string value (global 'consom3dujour')
Re: gestion des dates en lua
Publié : 29 oct. 2022, 16:20
par denis_brasseur
Le passage avec des guillemets te permet d'insérer ta variable dans ta commande et n'est pas la source de ton erreur
L'erreur semble provenir que ta valeur consom3dujour est une chaine (string) et non pas un entier.
A cause de tostring qui renvoi la valeur comme une chaine.
Si tu supprimes ce tostring, et que ta valeur est un entier, ca devrait passer, sinon passes par tonumber.
Tu peux vérifier le type en tapant
Code : Tout sélectionner
print(consom3dujour)
-- Mise a jour du compteur
print(type(consom3dujour))
qui te retournera le type
ou
dans les logs