gestion des dates en lua

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
gawel3164
Messages : 325
Inscription : 07 janv. 2016, 19:51

gestion des dates en lua

Message 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&param=udevice&idx=150&nvalue=0&svalue=0;'..conso;????????}
Domoticz 2022.1/RFlink V1.1_R48/ prises: DIO, SCS/caméras IP/station météo Auriol/sondes Oregon/PIR/ZK1PA/Relevé compteur Gaz/téléinfo EDF/Mysensors:RGB-3D,Temp.,IR/Arrosage autonome/Google home/ ESP: IR,Temp.,relai,distance,OLED/Withings Ws30
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: gestion des dates en lua

Message par denis_brasseur »

Sous quel format veux tu passer la date ?
aaaa-mm-jj, jj/mm/aaaa ?
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: gestion des dates en lua

Message 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
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: gestion des dates en lua

Message 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
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
gawel3164
Messages : 325
Inscription : 07 janv. 2016, 19:51

Re: gestion des dates en lua

Message 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&param=udevice&idx=150&nvalue=0&svalue=0;20;DateJourmoins2'}
       end
 
return commandArray
Domoticz 2022.1/RFlink V1.1_R48/ prises: DIO, SCS/caméras IP/station météo Auriol/sondes Oregon/PIR/ZK1PA/Relevé compteur Gaz/téléinfo EDF/Mysensors:RGB-3D,Temp.,IR/Arrosage autonome/Google home/ ESP: IR,Temp.,relai,distance,OLED/Withings Ws30
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: gestion des dates en lua

Message 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&param=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
Capture d’écran 2022-10-28 195225.png (11.04 Kio) Consulté 1203 fois
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
gawel3164
Messages : 325
Inscription : 07 janv. 2016, 19:51

Re: gestion des dates en lua

Message 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&param=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&param=udevice&idx=150&nvalue=0&svalue=0;'..consom3dujour;..DateJourmoins2}
Quelle est la syntaxe pour deux variables svp?
Domoticz 2022.1/RFlink V1.1_R48/ prises: DIO, SCS/caméras IP/station météo Auriol/sondes Oregon/PIR/ZK1PA/Relevé compteur Gaz/téléinfo EDF/Mysensors:RGB-3D,Temp.,IR/Arrosage autonome/Google home/ ESP: IR,Temp.,relai,distance,OLED/Withings Ws30
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: gestion des dates en lua

Message par Keros »

Je vois une erreur avec les : après consom3dujour qui devrait être entre ' '

commandArray[1]={['OpenURL']=ip..'/json.htm?type=command&param=udevice&idx=150&nvalue=0&svalue=0;'..consom3dujour..';'..DateJourmoins2}
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
gawel3164
Messages : 325
Inscription : 07 janv. 2016, 19:51

Re: gestion des dates en lua

Message par gawel3164 »

en mettant les guillemets, j'ai l'erreur: attempt to call a string value (global 'consom3dujour')
Domoticz 2022.1/RFlink V1.1_R48/ prises: DIO, SCS/caméras IP/station météo Auriol/sondes Oregon/PIR/ZK1PA/Relevé compteur Gaz/téléinfo EDF/Mysensors:RGB-3D,Temp.,IR/Arrosage autonome/Google home/ ESP: IR,Temp.,relai,distance,OLED/Withings Ws30
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: gestion des dates en lua

Message 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

Code : Tout sélectionner

2022-10-29 16:35:01.052 Status: LUA: string
ou

Code : Tout sélectionner

2022-10-29 16:36:01.053 Status: LUA: number
dans les logs
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Répondre