flamalex Posté(e) le 30 avril 2023 Signaler Posté(e) le 30 avril 2023 (modifié) Bonjour, je cherche à cumuler le temps d'utilisation d'un device j'ai commencé un QA on/off pour simuler le device j'arrive à obtenir le temps de la derniere utilisation, mais je n'arrive pas à l'additionner avec la précedente utilisation et dans un 2eme temps cumuler les durées depuis minuit (ce jour) puis dans un 3eme temps, reporting sur la durée utilisation à j-1 puis j-2 ..... un petit (gros) coup de pouce serait bienvenu function QuickApp:onInit() self:debug("Initialisation du QA Présence...") end function QuickApp:turnOn() self:debug("binary switch turned on") self:updateProperty("value", true) self.time = tonumber(os.time()) --il a boot time end function QuickApp:turnOff() self:debug("binary switch turned off") self:updateProperty("value", false) local elapsed = os.difftime(os.time(), tonumber(self.time)) -- tps écoulé entre le ON et OFF local LasteTime = self:SecondsToClock(elapsed); self:updateProperty("log", "Tps cycle: "..LasteTime.." \r") -- mise à jour du Log (ecriture sur la Tuile en bas) self:debug("DUREE DU DERNIER CYCLE: " ..LasteTime.."") end function QuickApp:SecondsToClock(sSeconds) local nSeconds = tonumber(sSeconds) if nSeconds == 0 then return "00:00:00"; else nHours = string.format("%02.f", math.floor(nSeconds/3600)); nMins = string.format("%02.f", math.floor(nSeconds/60 - (nHours*60))); nSecs = string.format("%02.f", math.floor(nSeconds - nHours*3600 - nMins *60)); return nHours..":"..nMins..":"..nSecs end end Modifié le 6 mai 2023 par flamalex
flamalex Posté(e) le 6 mai 2023 Auteur Signaler Posté(e) le 6 mai 2023 voici ma solution function QuickApp:onInit() self:debug("Initialisation du QA Présence...") self:setVariable("DUREE_LASTE_CYL",0) --remise à zero de la variable, ici je souhaite une remise à zero chaque jour à minuit ou une heure du mat end function QuickApp:turnOn() self:debug("binary switch turned on") self:updateProperty("value", true) self.time = tonumber(os.time()) --il a boot time end function QuickApp:turnOff() self:debug("binary switch turned off") self:updateProperty("value", false) local elapsed = os.difftime(os.time(), tonumber(self.time)) local DUREE_LASTE_CYL = self:getVariable("DUREE_LASTE_CYL") -- on lit la variable du dernier cycle self:debug("DUREE DU DERNIER CYCLE : " ..DUREE_LASTE_CYL.."") local CYCLE_ACTU = elapsed self:setVariable("CYCLE_ACTU",CYCLE_ACTU) --on ecrit la variable self:debug("CYCLE ACTUEL: " ..CYCLE_ACTU.."") local NEW_DUREE = (DUREE_LASTE_CYL + CYCLE_ACTU) self:debug("NEW DUREE "..NEW_DUREE.."") self:setVariable("DUREE_LASTE_CYL",NEW_DUREE) --on ecrit la variable local ADD_TIME = self:SecondsToClock(NEW_DUREE); -- on transforme le "compteur" en h min sec 00:00:00 self:updateProperty("log", "Tps Total: "..ADD_TIME.." \r") -- mise à jour du Log (ecriture sur la Tuile en bas) end function QuickApp:SecondsToClock(sSeconds) -- on transforme le "compteur" en h min sec 00:00:00 local nSeconds = tonumber(sSeconds) if nSeconds == 0 then return "00:00:00"; else nHours = string.format("%02.f", math.floor(nSeconds/3600)); nMins = string.format("%02.f", math.floor(nSeconds/60 - (nHours*60))); nSecs = string.format("%02.f", math.floor(nSeconds - nHours*3600 - nMins *60)); return nHours..":"..nMins..":"..nSecs end end maintenant, je souhaite une remise à zero du compteur temps à minuit ou 1h du mat (j'imagine un refresh loop....) (je pourrais le faire dans GEA, passer la variable à 0 tous les jours à minuit, mais n'y a t il pas une solution, dans le QA, sans faire une usine à gaz) enfin, je souhaite, visualiser la durée totale sur une journée, mais aussi à j-1 et j-2 (surement un stockage de la durée dans une variable avant le RESET de minuit) par avance merci pour votre aide
Lazer Posté(e) le 6 mai 2023 Signaler Posté(e) le 6 mai 2023 Regarde dans le code de DomoCharts, j'ai un truc qui fait ça : Initialisation : function QuickApp:onInit() -- fait plein de trucs... self.loopDay = os.date('%d') -- fait encore d'autres trucs... end Dans la boucle : loop = function(self) -- fait des machins... -- Actions to perform every new day (at 00:02) local newday = os.date('%d') if newday ~= self.loopDay and tonumber(os.date('%M')) >= 2 then if self.isdebug then self:debug('New day') end fibaro.setTimeout(10*1000, function() self:buttonGetDevices_onReleased({}) end) fibaro.setTimeout(20*1000, function() self:generateTrends() end) fibaro.setTimeout(40*1000, function() self:generateEnergy() end) self.loopDay = newday end -- fait maintenant des bidules... end
flamalex Posté(e) le 6 mai 2023 Auteur Signaler Posté(e) le 6 mai 2023 (modifié) merci @Lazer je vais tenter ça, mais ça ne fonctionnera pas car je l'ai integré lorsqu'il y aura le turnOff, alors qu'il faut une function indépendante uniquement pour la remise du compteur à zero à 00h02 function QuickApp:onInit() self:debug("Initialisation du QA Présence...") --self:setVariable("DUREE_LASTE_CYL",0) --on ecrit la variable self.loopDay = os.date('%d') end function QuickApp:turnOn() self:debug("binary switch turned on") self:updateProperty("value", true) self.time = tonumber(os.time()) --il a boot time end function QuickApp:turnOff() self:debug("binary switch turned off") self:updateProperty("value", false) self:Time_CUMUL () end function QuickApp:Time_CUMUL() local elapsed = os.difftime(os.time(), tonumber(self.time)) -- il s'est arrete et il s'est ecoulé x tps local DUREE_LASTE_CYL = self:getVariable("DUREE_LASTE_CYL") -- on lit la variable du dernier cycle self:debug("DUREE DU DERNIER CYCLE : " ..DUREE_LASTE_CYL.."") local CYCLE_ACTU = elapsed self:setVariable("CYCLE_ACTU",CYCLE_ACTU) --on ecrit la variable self:debug("CYCLE ACTUEL: " ..CYCLE_ACTU.."") local NEW_DUREE = (DUREE_LASTE_CYL + CYCLE_ACTU) self:debug("NEW DUREE "..NEW_DUREE.."") self:setVariable("DUREE_LASTE_CYL",NEW_DUREE) --on ecrit la variable local ADD_TIME = self:SecondsToClock(NEW_DUREE); -- on transforme le "compteur" en h min sec 00:00:00 self:updateProperty("log", "Tps Total: "..ADD_TIME.." \r") -- mise à jour du Log (ecriture sur la Tuile en bas) loop = function(self) -- fait des machins... -- Actions to perform every new day (at 00:02) local newday = os.date('%d') if newday ~= self.loopDay and tonumber(os.date('%M')) >= 2 then self:setVariable("DUREE_LASTE_CYL",0) end self:debug('New day') self.loopDay = newday end end function QuickApp:SecondsToClock(sSeconds) -- on transforme le "compteur" en h min sec 00:00:00 local nSeconds = tonumber(sSeconds) if nSeconds == 0 then return "00:00:00"; else nHours = string.format("%02.f", math.floor(nSeconds/3600)); nMins = string.format("%02.f", math.floor(nSeconds/60 - (nHours*60))); nSecs = string.format("%02.f", math.floor(nSeconds - nHours*3600 - nMins *60)); return nHours..":"..nMins..":"..nSecs end end --============================================================================== EDIT function QuickApp:onInit() self:debug("Initialisation du QA Présence...") end function QuickApp:RESET_TIME() loop = function(self) -- Actions to perform every new day (at 00:02) local newday = os.date('%d') if newday ~= self.loopDay and tonumber(os.date('%M')) >= 2 then self:setVariable("DUREE_LASTE_CYL",0) end self:debug('New day') self.loopDay = newday end end function QuickApp:turnOn() self:debug("binary switch turned on") self:updateProperty("value", true) self.time = tonumber(os.time()) self:RESET_TIME() end function QuickApp:turnOff() self:debug("binary switch turned off") self:updateProperty("value", false) self.loopDay = os.date('%d') self:debug(self.loopDay) self:Time_CUMUL () end function QuickApp:Time_CUMUL() local elapsed = os.difftime(os.time(), tonumber(self.time)) -- il s'est arrete et il s'est ecoulé x tps local DUREE_LASTE_CYL = self:getVariable("DUREE_LASTE_CYL") -- on lit la variable du dernier cycle self:debug("DUREE DU DERNIER CYCLE : " ..DUREE_LASTE_CYL.."") local CYCLE_ACTU = elapsed self:setVariable("CYCLE_ACTU",CYCLE_ACTU) --on ecrit la variable self:debug("CYCLE ACTUEL: " ..CYCLE_ACTU.."") local NEW_DUREE = (DUREE_LASTE_CYL + CYCLE_ACTU) self:debug("NEW DUREE "..NEW_DUREE.."") self:setVariable("DUREE_LASTE_CYL",NEW_DUREE) --on ecrit la variable local ADD_TIME = self:SecondsToClock(NEW_DUREE); -- on transforme le "compteur" en h min sec 00:00:00 self:updateProperty("log", "Tps Total: "..ADD_TIME.." \r") -- mise à jour du Log (ecriture sur la Tuile en bas) end function QuickApp:SecondsToClock(sSeconds) -- on transforme le "compteur" en h min sec 00:00:00 local nSeconds = tonumber(sSeconds) if nSeconds == 0 then return "00:00:00"; else nHours = string.format("%02.f", math.floor(nSeconds/3600)); nMins = string.format("%02.f", math.floor(nSeconds/60 - (nHours*60))); nSecs = string.format("%02.f", math.floor(nSeconds - nHours*3600 - nMins *60)); return nHours..":"..nMins..":"..nSecs end end Je m'embrouille la !!! ? le RESET_TIME dans le turnOn et le loopDay dans le turnOff c'est un compteur pour device, l'equiepemnt tournera en journée (voir crépuscule), donc le turnOff sera la derniere action (d'ou le loopDay dans turnOff) de la journée le turnOn aura lieu à l'aube (d'ou le reset_time, remise du compteur à 0 puisque Nouveau jour) comparaison avec le loopDay de la veille. c'est bien cela? Modifié le 7 mai 2023 par flamalex
flamalex Posté(e) le 20 mai 2023 Auteur Signaler Posté(e) le 20 mai 2023 ça fonctionne avec code ci dessous, mais je dois passer par GEA pour j-1 et j-2 ça fait un peu usine à gaz pour un simple compteur de temps function QuickApp:refresh() local ADD_TIME_HMS = self:getVariable("ADD_TIME_HMS") ---on lit variable self:updateView("Lbl1", "text", "cumul tps jour: " ..ADD_TIME_HMS.."") local jmoins1 = self:getVariable("j-1") ---on lit variable self:updateView("Lbl2", "text", "cumul tps J-1: " ..jmoins1.."") local jmoins2 = self:getVariable("j-2") ---on lit variable self:updateView("Lbl3", "text", "cumul tps J-2: " ..jmoins2.."") self:updateView("last_update", "text", "Dernière MAJ : " .. os.date("%H:%M")) end function QuickApp:RESET_TIME() -- Actions to perform every new day (at 00:02) local loopDay = self:getVariable("LOOP_DAY") -- on lit la variable du dernier cycle local newday = os.date('%d') if newday ~= loopDay then self:setVariable("DUREE_LASTE_CYL",0) end self.loopDay = newday end function QuickApp:jmoins1() -- 1 fois par jour à 23h50 , je mémorise la durée de la veille et on l'affiche dans label 2 the_day_before -- donc à 23h50 le addtime devient j-1 local jmoins1 = self:getVariable("ADD_TIME_HMS") ---on lit variable self:setVariable("j-1", jmoins1) self:updateView("Lbl2", "text", "cumul tps J-1: " ..jmoins1.."") end function QuickApp:jmoins2() -- 1 fois par jour à 23h45 , je mémorise la durée de la veille et on l'affiche dans label 3 -- donc à 23h45 le j-1 devient j-2 local jmoins2 = self:getVariable("j-1") ---on lit variable self:setVariable("j-2", jmoins2) self:updateView("Lbl3", "text", "cumul tps J-2: " ..jmoins2.."") end function QuickApp:turnOn() self.time = tonumber(os.time()) --il a boot time self:RESET_TIME() end function QuickApp:turnOff() self.loopDay = os.date('%d') self:setVariable("LOOP_DAY",self.loopDay) --on ecrit la variable self:Time_CUMUL () local jour = self:getVariable("LOOP_DAY") -- on lit la variable du dernier cycle self:updateProperty("value", tonumber(jour)) --on l'affiche ds tuile self:updateView("last_update", "text", "Dernière MAJ : " .. os.date("%H:%M")) end function QuickApp:Time_CUMUL() local elapsed = os.difftime(os.time(), tonumber(self.time)) -- il s'est arrete et il s'est ecoulé x tps local DUREE_LASTE_CYL = self:getVariable("DUREE_LASTE_CYL") -- on lit la variable du dernier cycle self:debug("DUREE DU DERNIER CYCLE : " ..DUREE_LASTE_CYL.."") local CYCLE_ACTU = elapsed self:setVariable("CYCLE_ACTU",CYCLE_ACTU) --on ecrit la variable self:debug("CYCLE ACTUEL: " ..CYCLE_ACTU.."") local NEW_DUREE = (DUREE_LASTE_CYL + CYCLE_ACTU) self:debug("NEW DUREE "..NEW_DUREE.."") self:setVariable("DUREE_LASTE_CYL",NEW_DUREE) --on ecrit la variable local ADD_TIME = self:SecondsToClock(NEW_DUREE); -- on transforme le "compteur" en h min sec 00:00:00 self:updateProperty("log", "Tps Total: "..ADD_TIME.." \r") -- mise à jour du Log (ecriture sur la Tuile en bas) self:setVariable("ADD_TIME_HMS",ADD_TIME) --on ecrit la variable self:updateProperty("value", ADD_TIME_HMS) -- on l'affiche sur tuile (marche pas) local ADD_TIME_HMS = self:getVariable("ADD_TIME_HMS") -- on lit la variable du dernier cycle self:updateView("Lbl1", "text", "cumul tps jour: " ..ADD_TIME_HMS.."") end function QuickApp:SecondsToClock(sSeconds) -- on transforme le "compteur" en h min sec 00:00:00 local nSeconds = tonumber(sSeconds) if nSeconds == 0 then return "00:00:00"; else nHours = string.format("%02.f", math.floor(nSeconds/3600)); nMins = string.format("%02.f", math.floor(nSeconds/60 - (nHours*60))); nSecs = string.format("%02.f", math.floor(nSeconds - nHours*3600 - nMins *60)); return nHours..":"..nMins..":"..nSecs end end
flamalex Posté(e) le 31 juillet 2023 Auteur Signaler Posté(e) le 31 juillet 2023 depuis ce soir, j'ai cette erreur bad argument #2 to 'difftime' (number expected, got nil) sur la ligne suivante, je ne trouve rien sur google, rien sur le difftime, une idée? local elapsed = os.difftime(os.time(), tonumber(self.time)) -- tps écoulé entre le ON et OFF
Lazer Posté(e) le 1 août 2023 Signaler Posté(e) le 1 août 2023 Très probablement ta variable self.time qui n'est pas initialisée, donc le tonumber() retourne nil, d'où l'erreur. Une rapide recherche sur ton code montre qu'elle n'est initialisée que dans turnOn(), donc si tu appelles le turnOff() avant, alors il est logique que ça plante.
flamalex Posté(e) le 1 août 2023 Auteur Signaler Posté(e) le 1 août 2023 (modifié) Ah ok ça explique le plantage après un reboot de la box mais comment tu l’initialises ? avant j'avais pensé à un start_time puis un endTime mais je ne m'en sors pas Modifié le 1 août 2023 par flamalex
flamalex Posté(e) le 2 août 2023 Auteur Signaler Posté(e) le 2 août 2023 oui en effet, ben ce n'est pas encore clair pour moi le tonumber(os.time) dans l'init pour moi, le ON provoqué le start du tonumber(os.time) et le OFF le "end" du os.time puis je déduisais le temps entre les 2 (diff) ..... function QuickApp:onInit() self:debug("Initialisation du QA compteur piscine...") self:updateProperty("deviceIcon", 1120) self.time = tonumber(os.time()) self:refresh() self:Time_CUMUL()
flamalex Posté(e) le 2 août 2023 Auteur Signaler Posté(e) le 2 août 2023 (modifié) voici le code complet, avec le stockage des valeurs à j-1/-2/-3 entre 23h45 et minuit, réalisé par le Qa et non plus avec GEA function QuickApp:onInit() self:debug("Initialisation du QA compteur tps pompe piscine...") self:updateProperty("deviceIcon", 1120) self.time = tonumber(os.time()) self:refresh() self:Time_CUMUL() self:stocktime() end function QuickApp:refresh() local ADD_TIME_HMS = self:getVariable("ADD_TIME_HMS") ---on lit variable self:updateView("Lbl1", "text", "cumul tps jour: " ..ADD_TIME_HMS.."") local jmoins1 = self:getVariable("j-1") ---on lit variable self:updateView("Lbl2", "text", "cumul tps J-1: " ..jmoins1.."") local jmoins2 = self:getVariable("j-2") ---on lit variable self:updateView("Lbl3", "text", "cumul tps J-2: " ..jmoins2.."") local jmoins3 = self:getVariable("j-3") ---on lit variable self:updateView("Lbl4", "text", "cumul tps J-3: " ..jmoins3.."") self:updateView("last_update", "text", "Dernière MAJ : " .. os.date("%H:%M")) end function QuickApp:RESET_TIME() --à minuit 2minutes on reset time -- Actions to perform every new day (at 00:02) local loopDay = self:getVariable("LOOP_DAY") -- on lit la variable du dernier cycle local newday = os.date('%d') if newday ~= loopDay then self:setVariable("DUREE_LASTE_CYL","00:00:00") end local cycle_day = self:getVariable("DUREE_LASTE_CYL") if newday ~= loopDay then self:updateView("Lbl1", "text", "cumul tps jour: " ..cycle_day.."") end self.loopDay = newday self:updateProperty("value", tonumber(newday)) --on l'affiche ds tuile self:updateView("last_update", "text", "Dernière MAJ : " .. os.date("%H:%M")) end function QuickApp:jmoins1() -- 1 fois par jour à 23h50 , je mémorise la durée de la veille et on l'affiche dans label 1 the_day_before -- donc à 23h45 le addtime devient j-1 local jmoins1 = self:getVariable("ADD_TIME_HMS") ---on lit variable self:setVariable("j-1", jmoins1) self:updateView("Lbl2", "text", "cumul tps J-1: " ..jmoins1.."") end function QuickApp:jmoins2() -- 1 fois par jour à 23h45 , je mémorise la durée de la veille et on l'affiche dans label 2 the_day_before -- donc à 23h50 le addtime devient j-2 local jmoins2 = self:getVariable("j-1") ---on lit variable self:setVariable("j-2", jmoins2) self:updateView("Lbl3", "text", "cumul tps J-2: " ..jmoins2.."") end function QuickApp:jmoins3() -- 1 fois par jour à 23h40 , je mémorise la durée de la veille et on l'affiche dans label 3 the_day_before -- donc à 23h40 le addtime devient j-3 local jmoins3 = self:getVariable("j-2") ---on lit variable self:setVariable("j-3", jmoins3) self:updateView("Lbl4", "text", "cumul tps J-3: " ..jmoins3.."") end function QuickApp:turnOn() self.time = tonumber(os.time()) --il a boot time end function QuickApp:turnOff() self.loopDay = os.date('%d') self:setVariable("LOOP_DAY",self.loopDay) --on ecrit la variable self:Time_CUMUL() self:updateView("last_update", "text", "Dernière MAJ : " .. os.date("%H:%M")) end function QuickApp:Time_CUMUL() local elapsed = os.difftime(os.time(), tonumber(self.time)) -- il s'est arrete et il s'est ecoulé x tps --self:debug("elapsed") local DUREE_LASTE_CYL = self:getVariable("DUREE_LASTE_CYL") -- on lit la variable du dernier cycle --self:debug("DUREE DU DERNIER CYCLE : " ..DUREE_LASTE_CYL.."") local CYCLE_ACTU = elapsed self:setVariable("CYCLE_ACTU",CYCLE_ACTU) --on ecrit la variable --self:debug("CYCLE ACTUEL: " ..CYCLE_ACTU.."") local NEW_DUREE = (DUREE_LASTE_CYL + CYCLE_ACTU) --self:debug("NEW DUREE "..NEW_DUREE.."") self:setVariable("DUREE_LASTE_CYL",NEW_DUREE) --on ecrit la variable local ADD_TIME = self:SecondsToClock(NEW_DUREE); -- on transforme le "compteur" en h min sec 00:00:00 self:updateProperty("log", "Tps Total: "..ADD_TIME.." \r") -- mise à jour du Log (ecriture sur la Tuile en bas) self:setVariable("ADD_TIME_HMS",ADD_TIME) --on ecrit la variable self:updateProperty("value", ADD_TIME_HMS) -- on l'affiche sur tuile (marche pas) local ADD_TIME_HMS = self:getVariable("ADD_TIME_HMS") -- on lit la variable du dernier cycle self:updateView("Lbl1", "text", "cumul tps jour: " ..ADD_TIME_HMS.."") end function QuickApp:SecondsToClock(sSeconds) -- on transforme le "compteur" en h min sec 00:00:00 local nSeconds = tonumber(sSeconds) if nSeconds == 0 then return "00:00:00"; else nHours = string.format("%02.f", math.floor(nSeconds/3600)); nMins = string.format("%02.f", math.floor(nSeconds/60 - (nHours*60))); nSecs = string.format("%02.f", math.floor(nSeconds - nHours*3600 - nMins *60)); return nHours..":"..nMins..":"..nSecs end end function QuickApp:stocktime() local Heure = tonumber(os.date("%H", os.time())) self:debug(Heure) local Minute = tonumber(os.date("%M", os.time())) self:debug(Minute) ----------------------------------------------------------------- ---------- MISE A JOUR DES VARIABLES POUR L'HISTORIQUE ---------- ----------------------------------------------------------------- -- 3eme if (Heure == tonumber("23") and Minute > tonumber("55")) and (Heure == tonumber("23") and Minute < tonumber("59")) then self:jmoins1() --if (Heure == tonumber("8") and Minute > tonumber("38")) and (Heure == tonumber("8") and Minute < tonumber("40")) then self:jmoins1() end -- 2eme if (Heure == tonumber("23") and Minute > tonumber("50")) and (Heure == tonumber("23") and Minute < tonumber("54")) then self:jmoins2() --if (Heure == tonumber("8") and Minute > tonumber("35")) and (Heure == tonumber("8") and Minute < tonumber("37")) then self:jmoins2() end -- 1er if (Heure == tonumber("23") and Minute > tonumber("45")) and (Heure == tonumber("23") and Minute < tonumber("49")) then self:jmoins3() --if (Heure == tonumber("8") and Minute > tonumber("32")) and (Heure == tonumber("8") and Minute < tonumber("34")) then self:jmoins3() end -- 4eme if (Heure == tonumber("00") and Minute > tonumber("01")) and (Heure == tonumber("00") and Minute < tonumber("05")) then self:RESET_TIME() --if (Heure == tonumber("8") and Minute > tonumber("41")) and (Heure == tonumber("8") and Minute < tonumber("44")) then self:RESET_TIME() end self:debug("Boucle TIME") fibaro.setTimeout(1000 * 60 * 1, function() self:stocktime() end) end Modifié le 3 août 2023 par flamalex
flamalex Posté(e) le 3 août 2023 Auteur Signaler Posté(e) le 3 août 2023 Le problème avec le code ci dessus la pompe est en marche depuis 2h, la hc3 reboot (tte seule) et lorsqu’il y a un turnoff de la pompe, le temps écoulé est celui entre le reboot et le turnoff et ne prend pas les 2h de marche avant le reboot une idée ? Je sais que le code n’est pas très propre et fait usine à gaz, en l’état il est presque opérationnel à l’exception de ce désagrément
Lazer Posté(e) le 3 août 2023 Signaler Posté(e) le 3 août 2023 Hum.... là comme ça non désolé pas d'idée précise.... car je n'ai pas eu le courage de lire tout le code pour en comprendre la logique. Mais à lire ton commentaire, peut être mémoriser l'heure dans une variable du QA, qui est persistante, et qu'on peut donc relire au démarrage du QA dans le onInit()
flamalex Posté(e) le 3 août 2023 Auteur Signaler Posté(e) le 3 août 2023 (modifié) Oui c’est pas mal ça, mais pcq’il y a toujours un mais « en admettant que » la pompe est arrêtée pendant que ma box reboot ? bon, je vais essayer c’est vraiment l’usine à gaz avec toutes les conversions Modifié le 4 août 2023 par flamalex
Lazer Posté(e) le 3 août 2023 Signaler Posté(e) le 3 août 2023 Oui en programmation on passe notre temps à traiter des erreurs et cas particuliers... Effectivement si le statut de la pompe change pendant que la box est arrêtée, c'est problématique... donc dans le onInit, vérifier si le statut est le même que celui connu précédemment, ou pas. On pourrait aussi imaginer détecter un temps anormalement long, qui pourrait indiquer que la box est restée indisponible pendant plusieurs heures, jours ? 1
flamalex Posté(e) le 4 août 2023 Auteur Signaler Posté(e) le 4 août 2023 (modifié) Là tu m as perdu « donc dans le onInit, vérifier si le statut est le même que celui connu précédemment, ou pas. » et ça aussi c’est intéressant, ça peut me servir aussi pour d’autres applications, c’est Top » On pourrait aussi imaginer détecter un temps anormalement long, qui pourrait indiquer que la box est restée indisponible pendant plusieurs heures, jours ? » Modifié le 4 août 2023 par flamalex
Lazer Posté(e) le 4 août 2023 Signaler Posté(e) le 4 août 2023 Et bien tu dis " la pompe est arrêtée pendant que ma box reboot " Donc je suggère de mémoriser l'état de la pompe (pareil que le timer, dans une variable persistante du QA), et lors du redémarrage du QA (dans le onInit) tu vérifies si l'état courant de la pompe correspond au dernier état connu (dans la variable du QA) Avec cette technique tu ne pourras pas détecter un arrêt/redémarrage de la pompe, ou un démarrage/arrêt, mais tu pourras juste détecter le changement d'état. 1
flamalex Posté(e) le 4 août 2023 Auteur Signaler Posté(e) le 4 août 2023 Ok ça roule, je vais refaire tt ça, c’est la pagaille dans le code ca manque de structure la conversion en Time 00:00:00 puis l’affichage des labels et le contrôle du jour suivant, j’suis certain qu’il y a plus simple puis je m’occupe de cette variable QA et comparaison
flamalex Posté(e) le 5 septembre 2023 Auteur Signaler Posté(e) le 5 septembre 2023 voici le code qui va bien et il est autonome, plus de pseudo initialisation via GEA merci pour les pistes function QuickApp:onInit() self:debug("Initialisation du QA compteur tps pompe piscine...") self:updateProperty("deviceIcon", 1120) -- self.time = tonumber(os.time()) self:refresh() -- self:Time_CUMUL() self:stocktime() end function QuickApp:refresh() local TOTAL_JOUR = self:getVariable("TOTAL_JOUR") ---on lit variable self:updateView("Lbl1", "text", "cumul tps jour: " ..TOTAL_JOUR.."") local jmoins1 = self:getVariable("j-1") ---on lit variable self:updateView("Lbl2", "text", "cumul tps J-1: " ..jmoins1.."") local jmoins2 = self:getVariable("j-2") ---on lit variable self:updateView("Lbl3", "text", "cumul tps J-2: " ..jmoins2.."") local jmoins3 = self:getVariable("j-3") ---on lit variable self:updateView("Lbl4", "text", "cumul tps J-3: " ..jmoins3.."") self:updateView("last_update", "text", "Dernière MAJ : " .. os.date("%H:%M")) end function QuickApp:RESET_TIME() --à minuit 2minutes on reset time local vide = self:getVariable("Last_Cycle") ---on lit variable if vide == nil then self:setVariable("Last_Cycle","0") end -- Actions to perform every new day (at 00:02) local loopDay = self:getVariable("LOOP_DAY") -- on lit la variable du dernier cycle local newday = os.date('%d') if newday ~= loopDay then self:setVariable("TOTAL_JOUR","00:00:00") end local newday = os.date('%d') if newday ~= loopDay then self:setVariable("Add_Cycles","0") end local newday = os.date('%d') if newday ~= loopDay then self:setVariable("Last_Cycle","0") end local cycle_day = self:getVariable("TOTAL_JOUR") if newday ~= loopDay then self:updateView("Lbl1", "text", "cumul tps jour: " ..cycle_day.."") end self.loopDay = newday self:updateProperty("value", tonumber(newday)) --on l'affiche ds tuile self:updateView("last_update", "text", "Dernière MAJ : " .. os.date("%H:%M")) end function QuickApp:jmoins1() -- 1 fois par jour à 23h50 , je mémorise la durée de la veille et on l'affiche dans label 1 the_day_before -- donc à 23h45 le addtime devient j-1 local jmoins1 = self:getVariable("TOTAL_JOUR") ---on lit variable self:setVariable("j-1", jmoins1) self:updateView("Lbl2", "text", "cumul tps J-1: " ..jmoins1.."") end function QuickApp:jmoins2() -- 1 fois par jour à 23h45 , je mémorise la durée de la veille et on l'affiche dans label 2 the_day_before -- donc à 23h50 le addtime devient j-2 local jmoins2 = self:getVariable("j-1") ---on lit variable self:setVariable("j-2", jmoins2) self:updateView("Lbl3", "text", "cumul tps J-2: " ..jmoins2.."") end function QuickApp:jmoins3() -- 1 fois par jour à 23h40 , je mémorise la durée de la veille et on l'affiche dans label 3 the_day_before -- donc à 23h40 le addtime devient j-3 local jmoins3 = self:getVariable("j-2") ---on lit variable self:setVariable("j-3", jmoins3) self:updateView("Lbl4", "text", "cumul tps J-3: " ..jmoins3.."") end function QuickApp:turnOn() self.time = tonumber(os.time()) --il a boot time self:setVariable("Time_Debut_Num",self.time) --on ecrit la variable end ------------------------------------------------------------ function QuickApp:ON_TEST() self.time = tonumber(os.time()) --il a boot time self:setVariable("Time_Debut_Num",self.time) --on ecrit la variable end function QuickApp:OFF_TEST() self.time = tonumber(os.time()) --il a boot time self:setVariable("Time_Fin_Num",self.time) --on ecrit la variable self:Actu_Cycle() end function QuickApp:Actu_Cycle() local HD = self:getVariable("Time_Debut_Num") --on lit heure debut de cycle local HF = self:getVariable("Time_Fin_Num") --on lit la variable heure de fin de cycle local TE = (HF-HD) --temps ecoulé en numeric self:setVariable("Actu_Cycle",TE) --on ecrit la variable en numeric self:Add_Cycles() end function QuickApp:Add_Cycles() local Actu_Cycle = self:getVariable("Actu_Cycle") --on lit la variable local Last_Cycle = self:getVariable("Last_Cycle") --on lit local Add_Cycles = (Last_Cycle + Actu_Cycle) self:setVariable("Add_Cycles",Add_Cycles) --on ecrit la variable self:setVariable("Last_Cycle",Add_Cycles) --on ecrit la variable local New_Last_Cycles = self:getVariable("Last_Cycle") -- on lit variable local TOTAL_JOUR = self:SecondsToClock(New_Last_Cycles); -- conversion du temps ecoulé en heure min sec self:setVariable("TOTAL_JOUR",TOTAL_JOUR) --on ecrit la variable self:debug(TOTAL_JOUR) local TOTAL_JOUR = self:getVariable("TOTAL_JOUR") -- on lit la variable du dernier cycle self:updateView("Lbl1", "text", "cumul tps jour: " ..TOTAL_JOUR.."") self:updateProperty("log", "Tps Total: "..TOTAL_JOUR.." \r") -- mise à jour du Log (ecriture sur la Tuile en bas) end ------------------------------------------------- function QuickApp:turnOff() self.time = tonumber(os.time()) --il a boot time self:setVariable("Time_Fin_Num",self.time) --on ecrit la variable self:Actu_Cycle() end function QuickApp:SecondsToClock(sSeconds) -- on transforme le "compteur" en h min sec 00:00:00 local nSeconds = tonumber(sSeconds) if nSeconds == 0 then return "00:00:00"; else nHours = string.format("%02.f", math.floor(nSeconds/3600)); nMins = string.format("%02.f", math.floor(nSeconds/60 - (nHours*60))); nSecs = string.format("%02.f", math.floor(nSeconds - nHours*3600 - nMins *60)); return nHours..":"..nMins..":"..nSecs end end function QuickApp:stocktime() local Heure = tonumber(os.date("%H", os.time())) --self:debug(Heure) local Minute = tonumber(os.date("%M", os.time())) --self:debug(Minute) ----------------------------------------------------------------- ---------- MISE A JOUR DES VARIABLES POUR L'HISTORIQUE ---------- ----------------------------------------------------------------- -- 3eme if (Heure == tonumber("23") and Minute > tonumber("55")) and (Heure == tonumber("23") and Minute < tonumber("59")) then self:jmoins1() --if (Heure == tonumber("8") and Minute > tonumber("38")) and (Heure == tonumber("8") and Minute < tonumber("40")) then self:jmoins1() end -- 2eme if (Heure == tonumber("23") and Minute > tonumber("50")) and (Heure == tonumber("23") and Minute < tonumber("54")) then self:jmoins2() --if (Heure == tonumber("8") and Minute > tonumber("35")) and (Heure == tonumber("8") and Minute < tonumber("37")) then self:jmoins2() end -- 1er if (Heure == tonumber("23") and Minute > tonumber("45")) and (Heure == tonumber("23") and Minute < tonumber("49")) then self:jmoins3() --if (Heure == tonumber("8") and Minute > tonumber("32")) and (Heure == tonumber("8") and Minute < tonumber("34")) then self:jmoins3() end -- 4eme if (Heure == tonumber("00") and Minute > tonumber("01")) and (Heure == tonumber("00") and Minute < tonumber("05")) then self:RESET_TIME() --if (Heure == tonumber("8") and Minute > tonumber("41")) and (Heure == tonumber("8") and Minute < tonumber("44")) then self:RESET_TIME() end self:debug("Boucle TIME") fibaro.setTimeout(1000 * 60 * 1, function() ---toutes les minutes self:stocktime() end) end 1
Messages recommandés