Aller au contenu

flamalex

Membres confirmés
  • Compteur de contenus

    819
  • Inscription

  • Dernière visite

  • Jours gagnés

    4

Tout ce qui a été posté par flamalex

  1. Bonjour, @ntaravel tu as des éléments de réponse en page 2 de ce sujet aujourd'hui, j'ai cette erreur "Error : status=429" je verrai demain si je l'ai encore
  2. Bonjour, ma modeste contribution, qui m'a pris bcp de tps, a decortiquer et essayer de comprendre l'articulation des choses merci au forum, et à google partage d'une experience, je n'ai rien inventé, juste adapté à mes besoins n'arrivant pas, au debut, a reboot la livebox via la HC3 puis ensuite ne pouvant reboot la livebox si HC3 plantée j'ai cherché l'equipement du reseau qui ne plantait jamais, le NAS SYNOLOGY j'ai donc installé un script, ci dessous sur le NAS SYNO avec un module SHELLY wifi (le wifi est sur un routeur wifi asus qui ne plante jamais) le planificateur du syno lance le script pour controler la connexion de la LB, si celle ci n'est pas OK alors il reboot niveau materiel la livebox #!/bin/bash site1=${1:-192.168.0.1} site2=${1:-orange.fr} site3=${1:-google.com} ping -c 1 $site1; ping1=$? ping -c 1 $site2; ping2=$? ping -c 1 $site3; ping3=$? if [ $ping1 -eq 0 ] && [ $ping2 -eq 0 ] && [ $ping3 -eq 0 ] then echo "Connexion OK" else echo "No connexion" curl http://192.168.1.50/relay/0?turn=off sleep 5 curl http://192.168.1.50/relay/0?turn=on fi puis ensuite, j'ai fait la meme chose avec la HC3 avec un 2eme shelly, si niveau software ça veut pas alors on reboot le hardware avec script ci dessous #!/bin/bash HC3_ADDRESS="192.168.x.xx" HC3_AUTHENTICATION="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # Check Fibaro services restart OUTPUT=$( curl --write-out "HTTPSTATUS:%{http_code}" --silent --header "Authorization: Basic ${HC3_AUTHENTICATION}" "http://${HC3_ADDRESS}/api/service/servicesStatus" ) echo "${OUTPUT}" if [ $? -ne 0 ] then Error "Erreur : impossible de se connecter au Home Center pour vérifier son statut" Quit 14 fi JSON=$(echo "${OUTPUT}" | sed -e 's/HTTPSTATUS\:.*//g') CODE=$(echo "${OUTPUT}" | tr -d '\n' | sed -e 's/.*HTTPSTATUS://') echo "${CODE}" if [ "${CODE}" == "200" ] then echo "la HC3 est bien connectée" else echo "la HC3 n'est pas connectée" OUTPUT2=$( curl --write-out "HTTPSTATUS:%{http_code}" --silent --request POST --header "Authorization: Basic ${HC3_AUTHENTICATION}" "http://${HC3_ADDRESS}/api/service/reboot" --data '{}') if [ $? -ne 0 ] then echo "Erreur : impossible de se connecter au Home Center pour forcer le reboot" fi JSON=$(echo "${OUTPUT2}" | sed -e 's/HTTPSTATUS\:.*//g') CODE=$(echo "${OUTPUT2}" | tr -d '\n' | sed -e 's/.*HTTPSTATUS://') if [ "${CODE}" == "200" ] then echo -e "Box Fibaro rebootée de force\n" else echo "Erreur : impossible de forcer le reboot de la box Fibaro : code de retour HTTP ${CODE}" "${JSON}" echo "# ici on actionne un relais qui coupe le courant" curl http://192.168.1.51/relay/0?turn=off sleep 5 curl http://192.168.1.51/relay/0?turn=on fi fi
      • 1
      • Like
  3. flamalex

    temps utilisation device

    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
  4. flamalex

    temps utilisation device

    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
  5. flamalex

    temps utilisation device

    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 ? »
  6. flamalex

    temps utilisation device

    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
  7. flamalex

    temps utilisation device

    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
  8. flamalex

    temps utilisation device

    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
  9. flamalex

    temps utilisation device

    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()
  10. flamalex

    temps utilisation device

    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
  11. flamalex

    temps utilisation device

    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
  12. c'est bon j'ai pu tester, ça fonctionne au top GEA.add({{"TurnOn",id["MOUV_EXT_BURO"]},{"Power+",id["VR_BURO_PORTEFENETRE"], 10}}, -1 , "" , {"Open",id["VR_BURO_PORTEFENETRE"]})
  13. Merci Lazer »Power » en condition, est ce en remplacement de value? (Power+ Power - power ! …..) je n’avais encore jamais vu aurais tu un exemple? Un sujet sur le forum? je n’ai rien trouvé merci exemple --ici il y a detection de mouvement en trigger et si le volet est en mouvement (10 pour 10w) alors il s'ouvre dans cet exemple on ne sait pas si le volet etait en mouvement d'ouverture ou fermeture GEA.add({{"TurnOn",id["MOUV_EXT_BURO"]},{"Power+",id["VR_BURO_PORTEFENETRE"], 10}}, -1 , "" , {"Open",id["VR_BURO_PORTEFENETRE"]})
  14. Bonjour, je cherche à détecter si le volet est en mouvement en utilisant sa conso en temps réel, exemple dans une scene dans GEA ou en Lua, si détection de mouvement exterieur sur une terrasse au moment ou le volet est en mouvement (fermeture) alors stop volet puis retour à la postion initiale comment récupérer cette consommation sur un shutter fibaro?
  15. C’est clair, sans Gea je ne ferai rien ou pas grand chose avec fibaro c’est top
  16. flamalex

    temps utilisation device

    ç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
  17. c’est tjrs aléatoire, ce qui est consternant c’est que 2 cam sur un même Pir, le turnOff, des 2 cam sur la mm ligne GEA, en stop une mais pas l’autre j’ai check SS, tt est ok Bon, à voir EDIT j'ai testé 3 ecritures, ça fonctionne bien pour les 3, mais de tps en tps il y a un loupé, si je reboot le GEA, alors la il detecte bien que que les conditions sont bien réunies et stop la camera le probleme est que si il y a un loupé à la premiere echeance, alors le REC cam ne s'arrete pas et rec non stop -- ici je stop camera si celle ci REC, si le PIR est OFF et les 2 conditions mode auto et sirene de l'alarme à l'arret GEA.add({{"turnOn",id["CAM_TERRASSE_PISCINE"]},{"turnOff",id["IN4_PIR_PISCINE"]},{"Global","MODE_CAMERA","AUTO"},{"turnOff",id["ETAT_SIRENE"]}},60, "",{{"turnOff",id["CAM_TERRASSE_PISCINE"]}}) GEA.add({{"Value",id["CAM_TERRASSE_PISCINE"],true},{"Value",id["IN4_PIR_PISCINE"],false},{"Global","MODE_CAMERA","AUTO"},{"Value",id["ETAT_SIRENE"],false}},30*2, "",{{"turnOff",id["CAM_TERRASSE_PISCINE"]}}) GEA.add({{"Value",id["IN4_PIR_PISCINE"],false},{"Value",id["CAM_TERRASSE_PISCINE"],true},{"Global","MODE_CAMERA","AUTO"},{"Value",id["ETAT_SIRENE"],false}},30*2, "",{{"turnOff",id["CAM_TERRASSE_PISCINE"]}}) EDIT 2: comment palier à cela afin d'eviter que ça tourne pour rien?
  18. @Lazer j’ai respecté ton tuto (extrêmement clair) « Il est conseillé de paramétrer la caméra en détection de mouvement permanente« je comprends bien la notion de « forcer » est ce le tampon avant/après ? mais la conséquence, de tps en tps ça continue à REC (de tps en tps) pour la syntaxe, pareil je n’y arrive pas, alors que sur hc2, c’était value….. « 1 » (ou true) alors turnOn si value…… « 0 » (ou false) alors turnOff concernant ce que je veux faire sur Gea, j’ai un Pir (sur Ipx800 en In1) si pir=1 et cam turnOff alors turnOn cam1 si la cam1 record et Pir=0 depuis 1 min alors stop rec cam1 pour cette dernière ligne j’ai essayé une autre variante, même résultat, si Pir=0 et la cam1 record depuis 1 min alors stop rec cam1
  19. @Lazer j’ai vu la fin de ton tuto sur les actions si tu souhaites stopper l’enregistrement d’une cam après 60 sec tu utilises turnOff ou disable, dans Gea? GEA.add({"turnOn", "cam1"},60,"", {"turnOff", "cam1"}) La réaction est aléatoire, des fois ça stop bien l’enregistrement après 1min et des fois ça ne l’arrête jamais.
  20. flamalex

    temps utilisation device

    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?
  21. flamalex

    temps utilisation device

    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
  22. 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
  23. Bonjour, Si on souscrit aujourd’hui à JPME et que notre installation évolue dans le temps (exemple: on commence avec 6 panneaux sur un talus <1,8m et on en ajoute 2 tous les 6 mois) Comment ça fonctionne ? JPME te demande de rendre des comptes ?
  24. flamalex

    Support Gea

    c’est top comme explications, ça répond à mes interrogations, sur le 0 et -1 merci @Lazer Ta Remarque est juste, tu as raison pour la lourdeur du QA chauffage + un Gea, j’ai en effet une boucle ds mon QA chauffage qui refresh toutes les minutes, le Gea ici que je teste, c’est suite au sujet lancé par @jojo je voulais tester la variable cache et j’ai donc pris les 2 sondes et 2 QA à refresh que j’avais sous la main. franchement top les explications, c’est très clair
  25. flamalex

    Support Gea

    GEA teste la condition sur une cycle de 30sec, ce n'est pas instantané ? lil faut donc que j'appelle le TemperatureSdb(event) dans GEA et non TemperatureSdb ? ci apres le TemperatureSdb dans le QA RDC -- Température de la sdb RDC function QuickApp:TemperatureSdb(event) sonde_temp = self:getVariable("ID_TEMP_SDB") -- on vient lire l'ID du module temperature pour mettre dans sonde temp tempSdb_Rdc = fibaro.getValue(tonumber(sonde_temp), "value") -- Capteur température self:updateProperty("value", tonumber(tempSdb_Rdc)) self:updateProperty("unit", "°C") self:updateProperty("Temperature", tempSdb_Rdc) self:updateView("lblTemp", "text", " Température Salle de Bain Rdc ".. tostring(tempSdb_Rdc) .." C°") end
×
×
  • Créer...