lionel Posté(e) le 4 janvier 2014 Signaler Posté(e) le 4 janvier 2014 Script de Clarkkent609 posté ici : http://forum.fibaro.com/viewtopic.php?t=3009 1ere étape: Créer une variable prédéfinie :"Simu_presence" avec les valeurs "On" and "Off" 2eme étape: créer un module virtuel 3eme étape: copier et coller ce code: --[[ %% properties %% globals --]] fibaro:setGlobal("Simu_presence", "On"); --fibaro:debug("Simulation de présence activée"); fibaro:log("Simulation de présence activée"); fibaro:call(30, "setProperty", "ui.status.value", "activée"); --fibaro:debug(fibaro:getValue(30, "ui.status.value")) 30 =ID du module virtuelcoller ce code dans le second bouton: --[[ %% properties %% globals --]] fibaro:setGlobal("Simu_presence", "Off"); --fibaro:debug("Simulation de présence désactivée"); fibaro:log("Simulation de présence désactivée"); fibaro:call(30, "setProperty", "ui.status.value", "désactivée"); --fibaro:debug(fibaro:getValue(30, "ui.status.value")) 30 =ID module virtuel. Attention : ID du Label doit contenir "status" : voir photo: 4eme étapecopier et coller ce code dans le MAIN LOOP et remplacer par vos valeurs utilisateur --[[ %% properties %% globals --]] -- LUA - Presence Simulator V1.0.0 -- -- simulate a presence when you're on vacation. -- A part of code is reused, it can found here. Thanx to Richo: http://forum.fibaro.com/viewtopic.php?t=1892&postdays=0&postorder=asc&highlight=presence&start=15 and here thx to Krikroff http://forum.fibaro.com/viewtopic.php?t=1656 -- USER SETTINGS : local start_hour = 19; --hour to start simulation local start_minute = 30; --minute to start simulation, example 19:30 local rndmaxtime = 20 --random time of light change in minutes --> here each device is on max 20min local runtime = 90 --how long to run simulation in minutes local ID_devices_lights = {17, 13} --IDs of lights to use in simulation local numbers_lights = #ID_devices_lights --numbers of light devices listed above local activated_push = true; --activate push when simulation starts and stops local ID_Smartphone = 7; --ID of your smartphone local simu = fibaro:getGlobal("Simu_presence"); --value of the global value: simulation is on or off local debug = true; --activate the debug mode -- DO NOT EDIT THE CODE BELOW (except to suit your needs) -- local minute = 60000 --in milliseconds local currentDate = os.date("*t"); SimulatorPresenceEngine = { version = "1.0.0" }; -- function to switch off devices in the list function SimulatorPresenceEngine:TurnOff(group) local name, id; local ID_devices_group = group; for i=1, #ID_devices_group do id = tonumber(ID_devices_group[i]); fibaro:call(id, "turnOff"); if (debug) then name = fibaro:getName(id); if (name == nil or name == string.char(0)) then name = "Unknown" end fibaro:debug("Device:" .. name .. " On "); end end end -- function to simulate a presence function SimulatorPresenceEngine:Launch() local start = os.time() local endtime = start + runtime*minute/1000 -- after how many minutes exit simulation if (activated_push) then fibaro:call(ID_Smartphone, 'sendPush', "Lights simulation started") ; --send push notification if (debug) then fibaro:debug("push start sent") end end while ((os.time() < endtime) and (simu == "On")) do local random_light = tonumber(ID_devices_lights[math.random(numbers_lights)]) --choose a random light in the list local lightstatus = fibaro:getValue(random_light, 'value') --get the value of the random light in the list -- turn on the light if off or turn off if on if tonumber(lightstatus) == 0 then fibaro:call(random_light, 'turnOn') else fibaro:call(random_light, 'turnOff') end fibaro:sleep(1000) ; --necessary to get back the new status, because HC2 is too fast :-) lightstatus = fibaro:getValue(random_light, 'value') --get the value of the random light after his update if (debug) then fibaro:debug('light ID:'..random_light..' status:'..lightstatus) end local sleeptime = math.random(rndmaxtime*minute) --random sleep fibaro:sleep(sleeptime) local sleeptimemin = math.abs(sleeptime/60000) if (debug) then fibaro:debug('sleeptime:'..sleeptimemin) end simu = fibaro:getGlobal("Simu_presence"); --verify the global value, if the virtual device is deactivated, the scene stops. end --turn Off all lights SimulatorPresenceEngine:TurnOff(ID_devices_lights); fibaro:call(ID_Smartphone, 'sendPush', "Lights simulation stopped") ; --send push notification if (debug) then fibaro:debug("push stop sent") end fibaro:sleep(60000); end -- Condition to start simulation if ((simu == "On")and (currentDate.hour == start_hour ) and (currentDate.min == start_minute))then SimulatorPresenceEngine:Launch(); --launch the simulation when virtual device is on, and the current time is triggered. end 4
clarkkent609 Posté(e) le 5 janvier 2014 Signaler Posté(e) le 5 janvier 2014 Bien vu ;-) je n'avais pas pris le temps de le reporter ici. On va finir par avoir une belle bibliothèque de VD! 1
lolomail Posté(e) le 5 janvier 2014 Signaler Posté(e) le 5 janvier 2014 Tu pourrais partager tes deux icônes pour le VD? 1
i-magin Posté(e) le 5 janvier 2014 Signaler Posté(e) le 5 janvier 2014 Attention :ecrire Simulation dans le label : voir photo: A mon sens, on peut écrire ce que l'on veut pour la valeur "Label" Mais par contre, il est impératif de saisir status pour l'ID afin d'être en phase avec toute la programmation
clarkkent609 Posté(e) le 5 janvier 2014 Signaler Posté(e) le 5 janvier 2014 effectivement, c'est plutôt l'ID du label qu'il faut vérifier! c'est une erreur :-) Pour les icônes, les voici:
Romain80 Posté(e) le 7 février 2014 Signaler Posté(e) le 7 février 2014 Salut a tous ! Tout d'abord merci pour ce script. Je viens vers vous car je rencontre quelques difficultés a identifier l' ID de mon smartphone. Ou puis je trouver cette info ? D'avance merci
Moicphil Posté(e) le 7 février 2014 Signaler Posté(e) le 7 février 2014 Bonsoir Le plus simple, et surtout cet addon te serviras pour plein d'autre choses... Installes le Toolkit de @Krikroff ici :http://www.domotique-fibaro.fr/index.php/topic/239-hc2-toolkit-application-v1007-beta/ Tu retrouvera ainsi facilement l'ensemble des Id.
Romain80 Posté(e) le 7 février 2014 Signaler Posté(e) le 7 février 2014 Ah ok lol ... Il est pas du genre a enfiler des perles Krikroff ! Encore merci. J' installe ça sur mon PC demain (je suis sur MAC la ) Bonne soirée
Yohan Posté(e) le 7 février 2014 Signaler Posté(e) le 7 février 2014 En parlant d'ID, est il possible de réinitialiser l'incrémentation des ID ? Car en faisant des essais je me retrouve avec un ID 34 alors que je suis loin de 34 devices sur la box.
Krikroff Posté(e) le 7 février 2014 Signaler Posté(e) le 7 février 2014 Non Yohan ce n'est pas possible et même si cela semble étrange c'est beaucoup mieux comme cela, c'est un identifiant unique par incrémentation (comme tu le precises) de 1, crée par la B.D du HC2. Il n'est pas possible d'utiliser les places "libres" sauf ré-indexation complète avec les risques de complétement mettre HS le HC2 . Ils ont déjà de quoi s'occuper les devs Fibaro Et puis si tu veux connaitre le nombre exacte de devices, nodes etc tu as le Toolkit onglet devices
Yohan Posté(e) le 7 février 2014 Signaler Posté(e) le 7 février 2014 Oui je l'utilise déjàle toolkit merci pour ses précisions Jc.
Romain80 Posté(e) le 12 février 2014 Signaler Posté(e) le 12 février 2014 Salut, Je rencontre un petit problème que je n' arrive pas a résoudre et c'est pas faute d'avoir essayer ... J'utilise le script de simulation de presence en sa version 1.0.1 (avec prise en compte de l'heure de couché de soleil) dont voici le code : --[[ %% autostart %% properties %% globals Simu_presence --]] -- LUA - Presence Simulator V1.0.1 -- -- Modified by Jonny Larsson (jompa68) - 2014-01-24 -- Changed from fixed START TIME to sunsetHour and to STOP Hour and Minute. -- -- -- Simulate a presence when you're on vacation. -- A part of code is reused, it can found here. Thanx to Richo: http://forum.fibaro.com/viewtopic.php?t=1892&postdays=0&postorder=asc&highlight=presence&start=15 -- and here thx to Krikroff http://forum.fibaro.com/viewtopic.php?t=1656 -- -- USER SETTINGS -- -- Timestamp when you want stop simulation -- local stop_hour = 23; -- Hour when you want simulation to stop local stop_minute = 00; -- Minute of the hour you want simulation to stop --------------------------------------------- local rndmaxtime = 20 --random time of light change in minutes --> here each device is on max 20min local ID_devices_lights = {29,33,34} --IDs of lights to use in simulation local numbers_lights = 3 --numbers of light devices listed above local activated_push = true; --activate push when simulation starts and stops local ID_Smartphone = 12; --ID of your smartphone local simu = fibaro:getGlobal("Simu_presence"); --value of the global value: simulation is on or off local debug = true; --activate the debug mode -- USER SETTINGS END -- -- DO NOT EDIT THE CODE BELOW (except to suit your needs) -- local simu = fibaro:getGlobal("Simu_presence"); --value of the global value: simulation is on or off local start_simu = fibaro:getValue(1, "sunsetHour"); --Start simulation when sunset local minute = 60000 --in milliseconds local start = os.date("%H:%M") local time = os.time() local date = os.date("*t", time) local year = date.year local month = date.month local day = date.day local endtime = os.time{year=year, month=month, day=day, hour=stop_hour, min=stop_minute, sec=sec} SimulatorPresenceEngine = { version = "1.0.1" }; -- function to switch off devices in the list function SimulatorPresenceEngine:TurnOff(group) local name, id; local ID_devices_group = group; for i=1, #ID_devices_group do id = tonumber(ID_devices_group[i]); fibaro:call(id, "turnOff"); if (debug) then name = fibaro:getName(id); if (name == nil or name == string.char(0)) then name = "Unknown" end fibaro:debug("Device:" .. name .. " Off "); end end end -- function to simulate a presence function SimulatorPresenceEngine:Launch() if (debug) then fibaro:debug("Simulation will stop: "..stop_hour..":"..stop_minute) end if (os.time() >= endtime) or (simu == "Off") then if (debug) then fibaro:debug("Simulation stopped") end end if (activated_push) then fibaro:call(ID_Smartphone, 'sendPush', "Lights simulation started") ; --send push notification if (debug) then fibaro:debug("push start sent") end end while ((os.time() <= endtime) and (simu == "On")) do fibaro:debug(os.time()) if time == endtime then fibaro:debug("same value") end local random_light = tonumber(ID_devices_lights[math.random(numbers_lights)]) --choose a random light in the list local lightstatus = fibaro:getValue(random_light, 'value') --get the value of the random light in the list -- turn on the light if off or turn off if on if tonumber(lightstatus) == 0 then fibaro:call(random_light, 'turnOn') else fibaro:call(random_light, 'turnOff') end fibaro:sleep(1000) ; --necessary to get back the new status, because HC2 is too fast :-) lightstatus = fibaro:getValue(random_light, 'value') --get the value of the random light after his update if (debug) then fibaro:debug('light ID:'..random_light..' status:'..lightstatus) end local sleeptime = math.random(rndmaxtime*minute) --random sleep fibaro:sleep(sleeptime) local sleeptimemin = math.abs(sleeptime/60000) if (debug) then fibaro:debug('sleeptime:'..sleeptimemin) end simu = fibaro:getGlobal("Simu_presence"); --verify the global value, if the virtual device is deactivated, the scene stops. end --turn Off all lights SimulatorPresenceEngine:TurnOff(ID_devices_lights); if (activated_push) then fibaro:call(ID_Smartphone, 'sendPush', "Lights simulation stopped"); --send push notification if (debug) then fibaro:debug("push stop sent") end end sunset = 0 fibaro:sleep(60000); end -- Condition to start simulation if fibaro:getValue(1, "sunsetHour") == true then sunset = 1 else sunset = 0 end if (debug) and (simu == "On") then fibaro:debug("Time is now: "..start) fibaro:debug("Todays sunset: "..fibaro:getValue(1, "sunsetHour")) end if ((simu == "On") and os.time() <= endtime and sunset == 1 ) then --fibaro:getValue(1, "sunsetHour") SimulatorPresenceEngine:Launch(); --launch the simulation when virtual device is on, and the current time is triggered. elseif sunset == 0 then fibaro:debug("Simu_presence will not be activated before sunset") elseif os.time() >= endtime then fibaro:debug("After simu_presences stop time") end if (simu == "Off") then fibaro:debug("Simulation is deactivated") end Seulement le script ne se déclenche pas ! Malgré le fait que l'heure de sunset soit dépassée, quand je suis en debug la console me renvoi ceci : [DEBUG] 20:47:44: Simu_presence will not be activated before sunset[DEBUG] 20:47:44: Simulation is deactivated Je ne comprend pas pourquoi car la condition semble correctement écrite mais rien n' y fait ! D'avance merci pour le coup de main
Krikroff Posté(e) le 12 février 2014 Signaler Posté(e) le 12 février 2014 Pourrais tu vérifier l'état de la variable sunsetHour dans le panneau Variables lorsque le script devrait fonctionner ? Il devrait aussi avoir dans le debug une ligne Todays sunset: ...
Romain80 Posté(e) le 12 février 2014 Signaler Posté(e) le 12 février 2014 Salut et merci pour la réponse. Alors ou puis je verifier la variable sunsetHour ? Sinon effectivement dans le debug j' ai d'un coup plus d' infos : DEBUG] 22:22:22: Time is now: 22:22[DEBUG] 22:22:22: Todays sunset: 18:03[DEBUG] 22:22:22: Simu_presence will not be activated before sunset Donc la ça confirme bien que ça déconne j' ai testé la valeur de sunset a la ligne 116 pour verifier qu'il était bien a 1 a ce moment la mais en fait il reste a 0. Je crois que la ligne 115 pose problème dans mon cas.
Shad Posté(e) le 12 février 2014 Signaler Posté(e) le 12 février 2014 Tu as besoin de deux variables globales Simu_presence et sunsetHour. Regarde au début de ton code, tu as les explications necessaires.
Romain80 Posté(e) le 12 février 2014 Signaler Posté(e) le 12 février 2014 Salut, Je ne vois pas ou j ai de l'info sur cette partie ... Ou alors je vois tres mal ! Mais concretement je cree un variable globale de type BOOL et ça devrait le faire si je comprend bien ?
Shad Posté(e) le 12 février 2014 Signaler Posté(e) le 12 février 2014 local simu = fibaro:getGlobal("Simu_presence"); --value of the global value: simulation is on or off local start_simu = fibaro:getValue(1, "sunsetHour"); --Start simulation when sunset
Romain80 Posté(e) le 12 février 2014 Signaler Posté(e) le 12 février 2014 Ok effectivement, je l' ai lu mais je n' y ai pas vraiment prêté attention en fait. Je ne suis pas encore très au point avec le LUA. Mais bon concrètement qu'est ce que je dois faire. Une variable globale sunsetHour qui peut prendre 0 ou 1 en valeur ? Car si c'est ça, j' ai deja essayé et ça fonctionne pas mieux. Nan j'avoue que je suis un peu perdu. Je ne comprend pas pourquoi on a besoin d un variable globale. Pour moi on fait un getValue sur le HC2 pour récupérer "l'état" de sunset, a savoir si le soleil est couché ou pas. Mais je crois que j' ai pas tout bien pigé ! D'un autre coté je suis un peu fatigué ça n' aide pas des masses !
Shad Posté(e) le 12 février 2014 Signaler Posté(e) le 12 février 2014 Commence déjà par creer une variable Simu_presence avec les valeur on et off
Romain80 Posté(e) le 12 février 2014 Signaler Posté(e) le 12 février 2014 ça c'est fait ! Pour le coup, je suis pas super performant en comprehension du LUA mais j' arrive encore a lire une procedure
Krikroff Posté(e) le 12 février 2014 Signaler Posté(e) le 12 février 2014 je trouve étrange la ligne 115, oui effectivement c'est pas une variable global mais une variable système avec une heure donc pourquoi une comparaison true/false ? Donc il doit manquer une variable qui est mise àjour avec un code comme celui-ci depuis un scène: --[[ %% autostart %% properties %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); if (sourceTrigger["type"] == "autostart") then while true do local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == fibaro:getValue(1, "sunsetHour")) ) ) then fibaro:setGlobal("sunsetHour", true); end ou juste une comparaison si heure > fibaro:getValue(1, "sunsetHour")... Mais je suis aussi fatigué donc ...
lolomail Posté(e) le 13 février 2014 Signaler Posté(e) le 13 février 2014 Krikroff oui je pense qu'il y a une scène pour faire changer la variable sunset, voir même peut être que c'est le scheduler de robmac
Romain80 Posté(e) le 13 février 2014 Signaler Posté(e) le 13 février 2014 Bonjour. Merci pour votre aide. Bon je suis rassuré a la lecture de vos commentaires car effectivement je ne comprenais pas comment, a la ligne 115, cela pouvait renvoyer autre chose que false en fait. Krikroff, j'ai essayé de tester si heure >= fibaro:getValue(1,sunsetHour) mais la j ai une erreur car je compare une datetime a un string. Je n'arrive pas a comprendre comment fonctionne sunsetHour. J'aimerais bien faire fonctionner ce script mais la ça depasse malheureusement mes capacités. Faudrais que je me mette au LUA plus serieusement
Messages recommandés