Message populaire bencol Posté(e) le 10 mars 2016 Message populaire Signaler Posté(e) le 10 mars 2016 (modifié) => 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 Modifié le 25 mars 2016 par bencol 10
Invité chris6783 Posté(e) le 10 mars 2016 Signaler Posté(e) le 10 mars 2016 L'idée est très sympa et on ne se casse pas la tête àsimuler un truc qui tient la route.
pepite Posté(e) le 11 mars 2016 Signaler Posté(e) le 11 mars 2016 Yes, Superbe idee, merci beaucoup !!
Moicphil Posté(e) le 11 mars 2016 Signaler Posté(e) le 11 mars 2016 Bravo pour l'idée, félicitation pour le code et merci pour le partage.
ced600f Posté(e) le 11 mars 2016 Signaler Posté(e) le 11 mars 2016 Excellent ! Je vais tester ça pour mes prochaines vacances
Nvince76 Posté(e) le 11 mars 2016 Signaler Posté(e) le 11 mars 2016 Rien àdire àpart que c'est une excellente idée je teste cela ce soir
Shyrka973 Posté(e) le 11 mars 2016 Signaler Posté(e) le 11 mars 2016 Chapeau bas pour cette excellente idée. Je vais tester ce script et l'adapter pour remplacer le script simulation de présence basé sur de l'aléatoire. Plus besoin de s'occuper de sunset et sunrise. Je cherchais quoi améliorer de la HC2. C'est tout trouvé.
971jmd Posté(e) le 11 mars 2016 Signaler Posté(e) le 11 mars 2016 Bravo pour l'idée, félicitation juste un question le bouton On Off c'est pour quoi exactement
jojo Posté(e) le 11 mars 2016 Signaler Posté(e) le 11 mars 2016 génial ! on peut donc même simuler des lumières le matin ! Désolé sebcbien, mais je crais que ton excellent script va prendre une retraîte bien méritée. @971jmd : le bouton on / off, c'est pour lancer ou pas la simulation
971jmd Posté(e) le 11 mars 2016 Signaler Posté(e) le 11 mars 2016 Ok merci Si je comprend bien, le script surveille nos habitude dés ca premier installation Envoyé de mon iPhone en utilisant Tapatalk
Yannick Posté(e) le 11 mars 2016 Signaler Posté(e) le 11 mars 2016 Salut @Bencol Ton VD à l'air top par contre, quand je lance le Debug chez moi il me dit ça : [DEBUG] 15:55:47: Simulateur actif.... [ERROR] 15:55:47: line 83: attempt to compare number with nil Une idée ???
kioneoranga Posté(e) le 11 mars 2016 Signaler Posté(e) le 11 mars 2016 Je vais tester cela ce week end Cool Merci
bencol Posté(e) le 12 mars 2016 Auteur Signaler Posté(e) le 12 mars 2016 @971jmd : peux tu me préciser àquoi correspond la ligne 83 chez toi. Si elle correspond àla condition State==1, cela signifie que State est null. Je n'ai pas réussi àreproduire ce cas de mon coté. Remonte le code en mettant un debug sur les variables State1, State2 et State3 pour voir.
bencol Posté(e) le 12 mars 2016 Auteur Signaler Posté(e) le 12 mars 2016 N'hésitez pas àme faire des retours pour savoir si cela marche correctement chez vous.
HANSOLO Posté(e) le 12 mars 2016 Signaler Posté(e) le 12 mars 2016 Installé, je teste quand je rentre ce soir
bencol Posté(e) le 12 mars 2016 Auteur Signaler Posté(e) le 12 mars 2016 Version publiée avec un mode debug plus poussé si besoin.
kioneoranga Posté(e) le 12 mars 2016 Signaler Posté(e) le 12 mars 2016 Version publiée avec un mode debug plus poussé si besoin. As tu modifié le code publié dans la première publication? Cela m'éviterait de re-importer le VD.
Allan2b Posté(e) le 12 mars 2016 Signaler Posté(e) le 12 mars 2016 Super mais si le module ne remonte pas la consommation électrique il ne seras pas prit en compte ?
HANSOLO Posté(e) le 12 mars 2016 Signaler Posté(e) le 12 mars 2016 En paramétrant une conso fixe dans le module ça devrait le faire.
bencol Posté(e) le 12 mars 2016 Auteur Signaler Posté(e) le 12 mars 2016 @kionoranga : pas de modif du code àpart des debugs @Allan2b : si le module ne sait pas remonter de conso, il ne sera pas pris en compte. Mais Fibaro propose de saisir une conso fixe et il la prend en compte dans ce cas.
cybersquat Posté(e) le 12 mars 2016 Signaler Posté(e) le 12 mars 2016 carrément énorme .... bravo bencol
sebcbien Posté(e) le 12 mars 2016 Signaler Posté(e) le 12 mars 2016 Super bonne idée, bravo ! Personnellement, ce qui m'embêterait, c'est que comme je n'ai ni volets, ni rideaux, je sélectionne les lampes que je veux voir s'allumer... Car si quelqu'un observe et voit la lumière la sam s'allumer alors que personne ne passe... Sent from my Note4
HANSOLO Posté(e) le 13 mars 2016 Signaler Posté(e) le 13 mars 2016 Peut être penser àmettre en place le versionning pour s'y retrouver.
Messages recommandés