Aller au contenu

flamalex

Membres confirmés
  • Compteur de contenus

    819
  • Inscription

  • Dernière visite

  • Jours gagnés

    4

Messages posté(e)s par flamalex

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

     

    • Like 1
  2. 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

     

    • Like 1
  3. 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 

  4. 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 ? »

     

     

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

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

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

     

  8. 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()

     

  9. 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
  10. 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"]})

     

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

     

  12.  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?

  13. @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

     

     

  14. 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?

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

     

  16. 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 :2:

    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

     

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

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