Page 2 sur 2
Re: Script timedifference
Publié : 08 janv. 2021, 18:48
par dokho
Ta solution ne me permet pas de connaître ma durée de chauffage. Si j'envoie un 0 ou un 1 je vais avoir une valeur en minutes, donc obligé de faire une conversion pour avoir un historique en hh:mm. En plus, tu peux avoir les courbes par mois et année.
De plus ta solution me donnera une valeur à la minute prêt, pas de précision à la seconde. Pour du chauffage c'est amplement suffisant tu vas me dire

Re: Script timedifference
Publié : 08 janv. 2021, 19:00
par Keros
Oui je te l'accorde, c'était à la minute prêt. Mais dans l'idée que je te proposais, c'était de suivre l'utilisation comme la consommation électrique. Si tu avais 5.2 par jour pour une valeur de 1, c'est qu'il aurait chauffer pendant 5,2 heures.
Tu as pu modifier ton code en stockant os.time() dans une variable ?
Re: Script timedifference
Publié : 09 janv. 2021, 01:44
par dokho
Je ne sais pas si c'est très propre mais j'ai réussi.
Code : Tout sélectionner
commandArray = {}
if (devicechanged['TEST1'] == 'On') then
commandArray[1]={['Variable:compteurchauffage1'] = tostring(os.time())}
else if (devicechanged['TEST1'] == 'Off')
then
-- DERNIER CYCLE CHAUFFE --
-- on calcule la durée du dernier cycle
derniercyclechauffe = os.date("!%X",os.time() - tostring(uservariables["compteurchauffage1"]))
print('Durée du dernier cycle de chauffe : ' .. derniercyclechauffe)
--on met à jour le compteur "durée dernier cycle"
commandArray[1]={['UpdateDevice'] = 196 .. '|0|' .. derniercyclechauffe}
-- TOTAL CHAUFFE JOURNEE --
-- on calcule la durée totale journaliere
totalcyclechauffe = os.date("!%X",tostring(uservariables["compteurchauffage2"]) + (os.time() - tostring(uservariables["compteurchauffage1"])))
print('Durée total des cycles de chauffe : ' .. totalcyclechauffe)
-- on incrémente la variable de durée journalière
commandArray[2]={['Variable:compteurchauffage2'] = tostring(tonumber(uservariables["compteurchauffage2"]) + (os.time()) - (uservariables["compteurchauffage1"]))}
-- on met à jour le compteur "durée journalière"
commandArray[3]={['UpdateDevice'] = 197 .. '|0|' .. totalcyclechauffe}
end
end
return commandArray
Il ne me manque plus qu'à faire un script time pour remettre la variable et le compteur journalier à zéro à minuit et c'est bon.
Merci pour l'aiguillage

Re: Script timedifference
Publié : 09 janv. 2021, 07:54
par denis_brasseur
Pas sur que ceci soit correcte, 196 n'est pas une variable :
Code : Tout sélectionner
commandArray[1]={['UpdateDevice'] = 196 .. '|0|' .. derniercyclechauffe}
Si cela fonctionne, parfait, mais cela devrait plutot ressembler à ceci
Code : Tout sélectionner
commandArray['UpdateDevice']='idx|nValue|sValue' -- for updating Dummy devices e.g. '96|0|Hello World'
commandArray[#commandArray+1]={['UpdateDevice'] = '196|0|' .. derniercyclechauffe}
Re: Script timedifference
Publié : 09 janv. 2021, 09:03
par Keros
Je pense que tu te mélanges un peu avec les formats :
Tu stockes os.time() en format caractère sous la variable
compteurchauffage1 :
Code : Tout sélectionner
commandArray[1]={['Variable:compteurchauffage1'] = tostring(os.time())}
Tu reformates
compteurchauffage1 en caractères pour le comparer avec os.time() qui lui n'a pas de formatage :
Code : Tout sélectionner
derniercyclechauffe = os.date("!%X",os.time() - tostring(uservariables["compteurchauffage1"]))
A la fin, pour stocker la variable
compteurchauffage2 tu utilises
compteurchauffage1 sans le formater alors que tu formates
compteurchauffage2.
Code : Tout sélectionner
commandArray[2]={['Variable:compteurchauffage2'] = tostring(tonumber(uservariables["compteurchauffage2"]) + (os.time()) - (uservariables["compteurchauffage1"]))}
Je pense que tu dois pouvoir stocker toutes les variables au format nombre (Entier). Tu aurais juste besoin de faire des tostring() lorsque tu pousses les valeurs dans les devices.
Re: Script timedifference
Publié : 09 janv. 2021, 21:24
par Mitch58
Bonjour, j'utilise ce script là pour comptabiliser le temps de fonctionnement de ma chaudière. J'avais trouvé celui-ci sur le forum et je l'ai adapté à mon installation et cela fonctionne parfaitement. La durée de fonctionnement est indiquée en minutes.
Code : Tout sélectionner
-- Ce script Time permet de remonter la durée de fonctionnement de la chaudière dans un capteur virtuel de type "Counter"
-- « Counter Incremental » pour les anciennes versions de Domoticz
-- A enregistrer en script_time.lua
-- Créer une uservariable. Réglage /plus d'option / Variable utilisateur. Nommé "Total_compteur"
-- Créer un compteur « Brûleur » et relever son idx
--------------------------------
------ Variables à éditer ------
--------------------------------
local switch = 'Chauffage' -- Nom de l'interrupteur virtuel Chauffage dans Domoticz
local counter = 922 -- Numéro idx du Counter « Brûleur » dans Domoticz
local current_date = (os.date("29/12/2020")) -- Date courante
local current_heure = (os.date("19:30")) -- Heure courante
--------------------------------
-- Fin des variables à éditer --
--------------------------------
-------------------
-- Fonction time --
-------------------
time = os.date("*t")
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
------------------- --------------------
-- Fonction arrondir à deux décimales --
------------------- --------------------
-- Le chiffre"x" (dec or x) correspond au nombre de décimales à prendre en compte dans le resultat
function arrondir(num, dec)
if num == 0 then
return 0
else
local mult = 10^(dec or 2)
return math.floor(num * mult + 0.5) / mult
end
end
commandArray = {}
-----------------------------------------------------------------------------------------------------
--------------------Calcul du temps de fonctionnement de la chaudière -------------------------------
-----------------------------------------------------------------------------------------------------
-- Si chauffage ON incrémentation de la variable Domoticz "Total_compteur" --
if (otherdevices[switch]=='On') then
commandArray['Variable:Bruleur']= tostring(uservariables["Bruleur"] +1)
end
-- Envoi de la varaible valeur Total_compteur dans le Custom Counter Valeur_Compteur --
Valeur_Compteur = tostring(uservariables["Bruleur"])
-- Envoi de la valeur dans le compteur "counter" --
commandArray['UpdateDevice'] = counter .. '|0|' .. tostring(Valeur_Compteur)
-- Envoi des informations dans le LOG si chauffage ON --
if (otherdevices[switch]=='On') then
print("Cumul du temps de fonctionnement du brûleur "..Valeur_Compteur.." Minutes")
end
return commandArray
J'utilise ce script pour voir ma consommation de fioul.
Code : Tout sélectionner
-- Ce script permet de remonter une estimation de la consommation en fioul de la chaudière dans un capteur virtuel de type "Counter"
-- « Counter Incremental » pour les anciennes versions de Domoticz
-- A enregistrer en script_time.lua
-- Créer une uservariable. Réglage /plus d'option / Variable utilisateur. Nommé "Total_mazout"
-- Créer un compteur « Consommation mazout » et relever son idx
--------------------------------
------ Variables à éditer ------
--------------------------------
local switch = 'Chauffage' -- Nom de l'interrupteur virtuel Chauffage dans Domoticz
local counter = 923 -- Numéro idx du Counter « Consommation mazout » dans Domoticz
local current_date = (os.date("29/12/2020")) -- Date courante
local current_heure = (os.date("17:19")) -- Heure courante
--------------------------------
-- Fin des variables à éditer --
--------------------------------
--------------------------------
---Paramètres--
----------------------------------
Debit_gicleur = 0.85 --Gallon/heure
Conv_Gallon = 3.78541178 --Litres
Debit_gicleur_l_min = Debit_gicleur * Conv_Gallon / 60 -- En litres/min
Var_ajustement = 1 --Ajustement chaudière ON 3.2176 l/h
-------------------
-- Fonction time --
-------------------
time = os.date("*t")
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
------------------- --------------------
-- Fonction arrondir à deux décimales --
------------------- --------------------
-- Le chiffre"x" (dec or x) correspond au nombre de décimales à prendre en compte dans le resultat
function arrondir(num, dec)
if num == 0 then
return 0
else
local mult = 10^(dec or 2)
return math.floor(num * mult + 0.5) / mult
end
end
commandArray = {}
-----------------------------------------------------------------------------------------------------
--------------------Calcul du temps de fonctionnement de la chaudière -------------------------------
-----------------------------------------------------------------------------------------------------
-- Si chauffage ON incrémentation de la variable Domoticz "Total_mazout" --
if (otherdevices[switch]=='On') then
commandArray['Variable:Total_mazout']= tostring(uservariables["Total_mazout"] +1)
end
-- Envoi de la variable valeur Total_compteur dans le Custom Counter Valeur_Compteur en min--
Valeur_Compteur = tostring(uservariables["Total_mazout"])
-- Transforme Valeur_compteur en litre pour gicleur 0.6 gallon/heure
Litre_Compteur = (Valeur_Compteur )* (Debit_gicleur_l_min)*(Var_ajustement)
-- Envoi de la valeur dans le compteur "counter" --
commandArray['UpdateDevice'] = counter .. '|0|' .. tostring(Litre_Compteur)
-- Envoi des informations dans le LOG si chauffage ON --
if (otherdevices[switch]=='On') then
print("")
print("Cumul Litres fioul "..Litre_Compteur.." Litres")
print("")
end
return commandArray
Re: Script timedifference
Publié : 09 janv. 2021, 22:25
par dokho
@keros: si je tente de stocker "os.time()" dans une variable sans le formater j'ai un message d'erreur
Code : Tout sélectionner
Error: EventSystem: commandArray in script /home/domoticz/domoticz/scripts/lua/script_device_temps_chauffage.lua should only return ['string']='actionstring' or [integer]={['string']='actionstring'}
Pour les autres formatage, j'ai fait un peu de ménage
@denis_brasseur: cela fonctionnait tel quel mais j'ai modifié en suivant tes conseils, c'est sûrement plus propre.
Merci pour vos remarques et conseils.
Code : Tout sélectionner
commandArray = {}
if (devicechanged['TEST1'] == 'On') then
commandArray[1]={['Variable:compteurchauffage1'] = tostring(os.time())}
else if (devicechanged['TEST1'] == 'Off')
then
-- DERNIER CYCLE CHAUFFE --
-- on calcule la durée du dernier cycle
derniercyclechauffe = os.date("!%X",os.time() - uservariables["compteurchauffage1"])
print('Durée du dernier cycle de chauffe : ' .. derniercyclechauffe)
--on met à jour le compteur "durée dernier cycle"
commandArray[1]={['UpdateDevice'] = '196|0|'.. derniercyclechauffe}
-- TOTAL CHAUFFE JOURNEE --
-- on calcule la durée totale journaliere
totalcyclechauffe = os.date("!%X",uservariables["compteurchauffage2"] + (os.time() - uservariables["compteurchauffage1"]))
print('Durée total des cycles de chauffe : ' .. totalcyclechauffe)
-- on incrémente la variable de durée journalière
--commandArray[2]={['Variable:compteurchauffage2'] = tostring(tonumber(uservariables["compteurchauffage2"]) + (os.time()) - (uservariables["compteurchauffage1"]))}
commandArray[2]={['Variable:compteurchauffage2'] = tostring(uservariables["compteurchauffage2"] + (os.time() - uservariables["compteurchauffage1"]))}
-- on met à jour le compteur "durée journalière"
commandArray[3]={['UpdateDevice'] = '197|0|'.. totalcyclechauffe}
end
end
return commandArray
Re: Script timedifference
Publié : 09 janv. 2021, 22:49
par Keros
Autant pour moi, je viens d'essayer en changeant le type de variable et ça ne le prend pas non plus
Pour info, tu peux aussi utiliser
commandArray['Variable:MyVar']='Some value' pour mettre à jour une variable.
Voici une
liste des commandes en LUA.
Re: Script timedifference
Publié : 10 janv. 2021, 01:29
par dokho
Pas de soucis
L'important c'est, qu'avec vos remarques et conseils, je sois arrivé à faire quelque chose de propre qui fonctionne
Merci encore.
Re: Script timedifference
Publié : 10 janv. 2021, 09:37
par Keros
dokho a écrit : 10 janv. 2021, 01:29
je sois arrivé à faire quelque chose
C'est toi qui l'a fait : c'est ça le plus important
