=> publication d'une version 2.0 plus efficace, plus simple et avec un meilleur debug + commentaires en français     Le principe de ce bout de code est le suivant : simuler une présence dans votre logement en s'appuyant sur votre mode de vie des mêmes journées les précédentes semaines. Le programme analyse le comportement des lumières des 2 dernières semaines (à  partir de l'historique de consommation) et simule par réplication une vraie vie (la vôtre !) dans votre logement.   3 prérequis : - il est nécessaire de vérifier que les modules de type lampe sont bien déclarés comme lampe. Pour cela il faut aller dans la configuration avancée des modules concernées et sélectionner dans appareil commandé : Eclairage ou Lampe de chevet ou Lampe de jardin,.... - ajouter pour les modules qui le permettent le suivi de la consommation électrique (attention, il faudra attendre au moins 2-3 semaines que cela soit efficace) - créer une variable globale "Simu_presence" avec comme possibilité ON ou OFF   Le code ci-dessous peut être placé dans la boucle principale dans un module virtuel. En pièce jointe le module à  importer. ----------------------- -- fonction d'arrondi -- ------------------------ function math.round(num, idp)     return tonumber(string.format("%."..idp.."f", num )); end -------------------- -- Debug function -- -------------------- function Debug(message, color)     if (color == nil) then color = "white";end;     fibaro:debug(string.format("<font color=" .. color .. ">" .. message .. "</font>"));     return; end ------------------------------------------------------------------------------------------------------------------ -- Fonction de récupération de l'historique de l'allumage d'une lampe -- ------------------------------------------------------------------------------------------------------------------ local function CollecteStatus(DureeHistorique, Device)     local TimeStart = DureeHistorique + 300;        -- à  la date de l'historique plus 5 min     local TimeEnd = DureeHistorique - 300;        -- à  la date de l'historique moins 5 min          -- init tableaux et variables     local TabMeasure = {};    -- tableau de mesures timestamp/activité     local HC2 = Net.FHttp("127.0.0.1",11111);     if (Device ~= nil) then         Response, status, errorCode = HC2:GET("/api/energy/now-" .. TimeStart .. "/now-" .. TimeEnd .. "/summary-graph/devices/power/" .. Device);     end;          if (tonumber(errorCode)==0 and tonumber(status)==200)     then         TabMeasure = json.decode(Response);    -- chargement des données dans une table         Debug("Nb mesures : " .. table.getn(TabMeasure) .. " (historique il y a " .. DureeHistorique/86400 .. " jours)","yellow");         local State = 0;         -- scan la période concernée les semaines précédente         for i = 1, table.getn(TabMeasure) do             local Heure = tonumber(TabMeasure[i][1])/1000;    -- collecte de l'heure et conversion des millisecondes en secondes                         if (tonumber(TabMeasure[i][2]) > 0)        -- il y a une activité             then                 State = 1;             end                         Debug("Mesure " .. i .. " : " .. os.date("%A %d/%m/%y %H:%M",Heure) .. " => " .. State);                     end                  return State; -- retour de la fonction     else         Debug("fail : ".. status .. " - error : ".. errorCode);     end end -- Scan de tous les devices si alarme active if (fibaro:getGlobalValue("Simu_presence") == "ON") then     Debug("START REPLICATOR....");       fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1062);       fibaro:log('Simulation active');     Debug("Alarme active => Scan....");     for device=1, 1000, 1 do         if (fibaro:getValue(device, "isLight") == '1')        -- si type lampe         then             -- lancement de la fonction de collecte des informations d'allumage ou d'extinction             Debug("***** Collecte de la consommation électrique pour la lampe " .. device .. " " .. " *****", "yellow");             local StateSem1 = CollecteStatus(7 * 86400, device);    -- appel de la fonction => 1 semaine avant             local StateSem2 = CollecteStatus(14 * 86400, device);    -- appel de la fonction => 2 semaines avant                          -- si lampe active les dernières semaines et lampe actuellement éteinte => allumage             if (StateSem1 == 1 or StateSem2 == 1)             then                 if (tonumber(fibaro:getValue(device, "value")) == 0)    -- la lampe est éteinte                 then                     fibaro:call(device, "turnOn");            -- allumage                     fibaro:call(device, "setValue", "50");                                   Debug("Allumage Lampe : " .. device, "green");                 else                     Debug("Pas d'action, lampe : " .. device .. " déjà  allumée", "green");                 end             end                          -- si lampe inactive les dernières semaines et lampe actuellement allumée => extinction             if (StateSem1 == 0 and StateSem2 == 0)             then                 if (tonumber(fibaro:getValue(device, "value")) > 0)    -- si le device est allumé                 then                     fibaro:call(device, "turnOff");            -- extinction                     Debug("Extinction Lampe : " .. device, "red");                 else                     Debug("Pas d'action, lampe : " .. device .. " déjà  éteinte","red");                 end             end         end     end else     fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1061);       fibaro:log('Simulation inactive');     Debug('Simulation inactive'); end fibaro:sleep(120000); -- temporise 2 minutes Presence_Replicator v1.vfib Presence_Replicator v2.vfib