Page 1 sur 2

Script timedifference

Publié : 08 janv. 2021, 12:25
par dokho
Bonjour,

Après y avoir passé plusieurs heures sans succès (je dois vraiment être mauvais :lol: ) je viens chercher de l'aide ici.

Je voudrais faire un suivi du temps de chauffage (ma chaudière gaz est pilotée par domoticz via un contact sec) et afficher les infos dans des dummy texte: durée dernier cycle, cumul journalier.

Histoire de pas tout casser je fais mes tests dans un script à part et une fois fonctionnel j'intégrerais au script de chauffage.

Je pensais que ça serait simple mais ... ce n'est pas le cas, dès le départ j'ai un problème pour récupérer le delta entre l'état ON et l'état OFF du device.
Je suis quasiment sûr qu'il s'agit d'un truc tout bête mais je n'arrive pas à mettre le doigt dessus.

Le script (tout du moins son début):

Code : Tout sélectionner

 function timedifference(d)
   s = otherdevices_lastupdate[d]
   year = string.sub(s, 1, 4)
   month = string.sub(s, 6, 7)
   day = string.sub(s, 9, 10)
   hour = string.sub(s, 12, 13)
   minutes = string.sub(s, 15, 16)
   seconds = string.sub(s, 18, 19)
   t1 = os.time()
   t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
   difference = os.difftime (t1, t2)
   return difference
end

commandArray = {}

if (devicechanged['TEST1'] == 'Off')
then

-- AFFICHAGE DUREE DERNIER CYCLE --

--on calcule la durée écoulée entre le off et le précédent état (on) et on l'affiche dans le log
delta = os.date("!%X",timedifference('TEST1'))
print('calcul temps cycle delta : ' .. delta)

--on met à jour le compteur "durée dernier cycle"
commandArray[1]={['UpdateDevice'] = 196 .. '|0|' .. delta}

end
return commandArray
Le changement d'état du device est bien détecté, le script se lance mais la durée ne s'affiche pas ...
Dans le log j'ai ça:

Code : Tout sélectionner

2021-01-08 12:16:41.122  (Dummy) Light/Switch (TEST1)
2021-01-08 12:16:58.916  (Dummy) Light/Switch (TEST1)
2021-01-08 12:16:58.963  Status: LUA: calcul temps cycle delta : 00:00:00
On voit bien le passage à ON à 12:16:41.122, le passage à OFF à 12:16:58.916 donc je devrais avoir un delta de 00:00:17 ce qui n'est pas le cas dans l'affichage ...

Quelqu'un peut il me dire où j'ai fait une bourde ? :lol:

Merci

Re: Script timedifference

Publié : 08 janv. 2021, 12:58
par Keros
Je pense que lorsque tu actives ton Test1 la deuxième fois, le lastupdate se mets à jour et ne contient plus l'info de la première action.

Tu pourrais faire différemment avec un script time qui vérifierai toutes les minutes si ton chauffage est allumé ou pas. Tu envois ensuite une info 0 ou 1 dans un device virtuel de mesure. Tu peux ainsi avoir le suivi des périodes de chauffe.

Re: Script timedifference

Publié : 08 janv. 2021, 15:59
par dokho
Bonjour.

Merci pour ta réponse.

Sinon, est-ce que tu penses que c'est jouable de noter, dans une variable, l'heure de déclenchement (le ON) via un "if (devicechanged['TEST1'] == 'On)" et de faire ensuite le calcul ?

Re: Script timedifference

Publié : 08 janv. 2021, 17:26
par Keros
Ah oui tu peux tout à fait faire ça aussi. Il ne faut pas oublier de mettre à jour la variable. Ce qui oblige de passer forcément par un script : pas d'action manuelle directe. C'est à mon avis une solution avec un risque d'erreur.

Re: Script timedifference

Publié : 08 janv. 2021, 17:36
par dokho
Pourquoi un risque d'erreur ?

Re: Script timedifference

Publié : 08 janv. 2021, 17:46
par Keros
Si la variable n'est pas mise à jour lors d'une modification du chauffage, ça peut boguer (possiblement planter le script) ou donner des infos non conforme au réel.

Re: Script timedifference

Publié : 08 janv. 2021, 17:48
par dokho
Si la variable est mise à jour avec un devicechanged il n'y a pas de raison si ?

Re: Script timedifference

Publié : 08 janv. 2021, 17:54
par Keros
Dans ce cas là non.

Re: Script timedifference

Publié : 08 janv. 2021, 18:03
par dokho
Tu n'aurais pas par hasard un exemple de script ?

Tu penses que je peux tout mettre dans la même variable (heure, minutes, secondes) ?
Ou il faut une variable pour l'heure, une pour les minutes,...?

Re: Script timedifference

Publié : 08 janv. 2021, 18:13
par Keros
Je te propose une autre solution plus simple et tu me demandes un exemple de script :mrgreen:

Non je n'ai pas ça sous la main, désolé. Par contre, tu peux directement stocker l'info os.time(). Tu la stockes au début et tu la récupères à la fin. Pense à l'effacer juste après pour éviter un mauvais calcul. Attention également au cas de figure où une deuxième commande On serait envoyée ... C'est le risque d'erreur dont je parlais.

Tu as des infos sur les fonctions Time là : https://www.lua.org/pil/22.1.html