calcul durée de script

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 <\>.
pierrotori
Messages : 821
Inscription : 29 févr. 2016, 12:11

calcul durée de script

Message par pierrotori »

Bonjour

questions toute bête que je n'arrive pas à faire ou comprendre

Code : Tout sélectionner

local Time = require('Time')
begin = Time()
	..... programme
local Time = require('Time')
local millis = Time() -- current time	
dz.log(begin.milliseconds, dz.LOG_DEBUG)
dz.log(millis.milliseconds, dz.LOG_DEBUG)
dz.log('Durée:'..begin.compare(millis).milliseconds,  dz.LOG_DEBUG)
et j'ai toujours 0 d'écart
2023-05-20 15:42:29.723 Status: dzVents: Debug: TEST v1.0: 557
2023-05-20 15:42:29.724 Status: dzVents: Debug: TEST v1.0: 557
2023-05-20 15:42:29.724 Status: dzVents: Debug: TEST v1.0: Durée:0

Comment fait t'on pour réactualiser la date heure ?
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: calcul durée de script

Message par Keros »

Je viens de déplacer ton sujet dans la section script.

Tu ne peux pas le faire de cette manière, car tout le code est exécuté en un bloc et non ligne par lignes : tu n'as donc qu'une seule info de temps.

Regarde les customsEvents, tu devrais pouvoir faire ton script en deux temps ;)
Pour être sûr de voir quelque chose, il faudrait presque le faire en 3 temps : tu enregistres le temps, tu lances ton script et tu analyses la durée.
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
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: calcul durée de script

Message par boum »

L'objet Time de dzVents a l'air de n'être mis à jour qu'à chaque invocation du script.
os.clock() * 1000 devrait marcher.
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
pierrotori
Messages : 821
Inscription : 29 févr. 2016, 12:11

Re: calcul durée de script

Message par pierrotori »

merci ca refresh mieux
2023-05-20 21:37:13.882 Status: dzVents: Info: TEST v1.0: ============== TEST ==================
2023-05-20 21:37:13.882 Status: dzVents: Debug: TEST v1.0: Déclenchement CustomEvents
2023-05-20 21:37:13.882 Status: dzVents: Debug: TEST v1.0: -1696834.66
2023-05-20 21:37:13.882 Status: dzVents: Debug: TEST v1.0: -1696834.325
2023-05-20 21:37:13.883 Status: dzVents: Debug: TEST v1.0: 0.33499999996275
2023-05-20 21:37:13.884 Status: dzVents: Info: TEST v1.0: ------ Finished t_test.lua
Mais si je fais 884-882 =2 et la j'obtiens 0,33, je reste encore perplexe devant ce résultat !
Dernière modification par Keros le 20 mai 2023, 21:48, modifié 1 fois.
Raison : Modif balise
pierrotori
Messages : 821
Inscription : 29 févr. 2016, 12:11

Re: calcul durée de script

Message par pierrotori »

@keros en effet le fait que ça fonctionne en bloque, je laisse tomber, c'était en mode debug je voulais connaître la durée d'execution, merci pour ton explication
En effet je pourrais contourner le pb en customevent
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: calcul durée de script

Message par boum »

Oups, j'avais mal regardé la doc.
The os.clock function returns the number of seconds of CPU time for the program.
C'est donc normal que l'intervalle de temps reporté soit inférieur au temps réel. La fonction retourne le temps CPU depuis le début du programme. En gros pendant les 2ms de temps réel, le processus du script a tourné 0,33ms sur le CPU. Pas très utile pour faire des mesures.
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
pierrotori
Messages : 821
Inscription : 29 févr. 2016, 12:11

calcul durée de script

Message par pierrotori »

donc la solution serait d'appeler la date système. voir le post https://www.domoticz.com/forum/viewtopi ... 47#p303247

Code : Tout sélectionner

execute = function(dz, item) 
	function osCommand(cmd)
		-- dz.log('Executing Command: ' .. cmd,dz.LOG_DEBUG)
		local fileHandle = assert(io.popen(cmd))
		local commandOutput = assert(fileHandle:read('*a'))
		local returnTable = {fileHandle:close()}
		-- dz.log('ReturnCode: ' .. returnTable[3], dz.LOG_DEBUG)
		-- dz.log('commandOutput:' .. commandOutput, dz.LOG_DEBUG)
		return commandOutput
	end
	local begin = osCommand('date +%s%3N|tr -d "\n"')	
	dz.log('============== TEST ==================', dz.LOG_INFO)
	....
	local millis = osCommand('date +%s%3N|tr -d "\n"')
	dz.log(millis-begin, dz.LOG_DEBUG)	
    dz.log('============== TEST ==================', dz.LOG_INFO)
ce qui donne

Code : Tout sélectionner

2023-05-21 09:44:43.113 Status: dzVents: Info: TEST v1.0: ------ Start external script: t_test.lua: Custom event: "t_test"
2023-05-21 09:44:43.123 Status: dzVents: Info: TEST v1.0: ============== TEST ==================
2023-05-21 09:44:43.124 Status: dzVents: Debug: TEST v1.0: Déclenchement CustomEvents
2023-05-21 09:44:43.134 Status: dzVents: Debug: TEST v1.0: 10.0
2023-05-21 09:44:43.135 Status: dzVents: Info: TEST v1.0: ------ Finished t_test.lua
peut être l'améliorer en utilisant la fonction io.tmpfile () ?
Comment fait on pour détecter que l'on a activé le mode LOG_DEBUG ?
Répondre