Aller au contenu

pepite

Membres confirmés
  • Compteur de contenus

    9 579
  • Inscription

  • Dernière visite

  • Jours gagnés

    59

Tout ce qui a été posté par pepite

  1. Petit update, mais très bien pour le manque d'espace disque :-)
  2. Tu peux nous donner le modele de ton veux stp ? oui c'est plus sympa de pouvoir cacher la motorisation. 36 cm c'est pas mal tout de même
  3. oui on est touts dans le même cas ;-) et hop les admins systèmes vont bosser ce soir ;-)
  4. ah oui, c'est bien intégré, merciiii ;-) Marche pas pour moi, j'ai poignée en haut et en bas ;-) sur les velux.... c'est quand même bien ces fakro pour des veux non accessibles ou pour gérer l'hygrométrie
  5. ah oui, merci de nous montrer ;-)
  6. pepite

    Support Gea

    Bonjour toutes et tous ;-) Tremblez encore ;-) Après correction du master @Steven, encore besoin de testeur ;-) pour CONDITIONS et DECLENCHEMENT INSTANTANE (-1) {"CentralSceneEvent", "id_module", "keyID", "keyAttribute"} -- Exemples -- Mouvement "UP" du SWIPE {"CentralSceneEvent", 99, 1, "Pressed"} -- Double clic S1 FGS223 (à vérifier, je n'en ai pas..) {"CentralSceneEvent", 160, 2, "Pressed2"} Et encore merci @Steven
  7. pepite

    (Tuto) Fake Device + Zibase

    Bonjour @Guru, tu eux essayer avec cela : ["ui.Json.value"] = function(value) setValue(value) end,
  8. Bonjour @MAM78, je crois que le fichier que tu as mis est celui de l'IPX800V3 @SosAlaide, pour la valeur des compteurs, tu utilises le code partagé par MAM. Faut regarder le fichier de l'API de l'IPX Je n'en ai pas mais en gros : - tu recuperes les valeurs de tes compteurs - puis un local valeurcompteur = ... - puis : fibaro:setglobal("nomdevariable", valeurcompteur)
  9. Bonjour, Sympa ca ;-) J'aime bien http://blog.domadoo.fr/64712-clarity-enceinte-android-controle-vocal/ Pour l'achat groupé proposé par @jojo, n'oubliez pas de metrre un "J'AIME" sur son post ici :
  10. Bonjour à toutes et tous, Ca peut servir ;-) Tombé dessus ce matin http://blog.domadoo.fr/guides/maj-ota-peripheriques-aeon-labs/#more-64522
  11. Bonjour @Tony270570 Ca m'interesse de voir à quoi cela ressemble. Merci
  12. Debut de la declaration de la FONCTION qui s'appelle RUN Debut de la declaration de la fonction "setTimeout". Son but : faire des actions avant et après sans arrêter la scène contrairement à un SLEEP Tout ce qui se trouve à l'intérieur de la fonction setTimeout sera exécuté après le temps de "rafraichissement" que tu as déclaré soit 60 s si la source qui déclenche la scène est une PROPRIETE d'un module, c'est à dire ce qui se trouve dans l'entête, soit pour toi la propriété "value" du module 342
  13. A priori oui, si demande de chauffe est 0 c'est bien cela ;-) leur fonction ?
  14. pepite

    FGS-223 Double Switch 2

    Salut @971jmd, Ce n'est pas du SceneActivation, mais du CentralSceneEvent ;-) Regarde le post précédent de netsuo
  15. J'ai relu tranquillement ;-) En fait que tu enclenches le thermostat, il fait le "ELSE" de la fonction "Run", soit l'arret de la chaudiere : 329 Quelle est la valeur de "value" de ton module 342, soit ton thermostat lorsque tu l'enclenches donc ON ? Dans le code : - SI 342 > 0 alors : --> mise en route de la chaudiere (329) --> mise en route de la pompe (327) -- SINON : --> arret de la chaudiere
  16. Bonjour, Je ne comprends pas comment tu lances le script ? La scene se lance sur changement de valeur de ton module 342 J'ai du mal à suivre, qu'est-ce qui ne fonctionne pas...j'essaie de me remettre dedans
  17. J'ai lu aussi l'article sur M&D. Très très complet mais je tique sur : - le prix - le style d'affichage, heuu si je mets ca a la maison le WAF va me parler du pays. L'affichage ressemble au DOTTI, trop de carres pour moi
  18. pepite

    Support Gea

    han la la, je fais trembler du monde ;-) @Steven, @Lazer je note que vous vous liguez ;-) Master, pour éviter toute crise et mieux dormir..je ne saurais trop te conseiller de prendre l'apéro ;-)
  19. salut @Hysis, ben oui un peu tout de même. C'est marrant @jojo avai des osucis avec desfgbs au passage à la LD. Peut-etre la distance à la box ? Alors tu as pris Orvibo ? simple à intégrer ? e tout cas, content de te revoir ;-)
  20. @Thilo, regarde j'ai commence ca vite fait. Jette un oeil ou il a le commentaire "test pepite" On ne devrait pas etre loin de ton besoin ;-) if (fibaro:countScenes() > 1) then fibaro:debug("Scene already active! Aborting this new instance !!"); fibaro:abort(); end --------------------- USER SETTINGS -------------------------------- local id = { LAMPE_SDB = 16, LAMPE_CH_AMIS = 24, LAMPE_SALON = 45, LAMPE_BUREAU = 49, LAMPE_HALL = 52, LAMPE_CELLIER = 56, LAMPE_CH_EMILIEN = 58, LAMPE_COULOIR = 1316, PHONE_SEB = 1347, ADMIN = 2, PHONE_GG = 1327 } local Stop_hour = "01"; -- Hour when you want Simulation to stop local Stop_minute = "30"; -- Minute of the hour you want Simulation to stop -- note 1: the script will not exit while waiting the random time of the last light turned on. So end time can be longer than specified end time. (even more with var Random_max_TurnOff_duration) -- note 2: if the global variable changes during the same wait time as above, it will exit immediately (when back home while Simulation runs) local Sunset_offset = -15 -- number of minutes before or after sunset to activate Simulation local Random_max_duration = 30; -- random time of light change in minutes --> here each device is on maximum 30min local Random_max_TurnOff_duration = 25; -- random time to add at the stop hour+stop minute so the Simulation can be more variable (0 to deactivate) local Lights_always_on = {id["LAMPE_BUREAU"],id["LAMPE_COULOIR"]} -- IDs of lights who will always stay on during Simulation - leave empty array if none -> {} local Random_lights = {id["LAMPE_SDB"],id["LAMPE_HALL"],id["LAMPE_CELLIER"],id["LAMPE_CH_AMIS"]} -- IDs of lights to use in Simulation -- test pepite -- local Random_Lights_Hue = {} --IDs of lights "HUE" to use in Simulation -- fin test pepite -- --local Random_lights = {id["LAMPE_HALL"],id["LAMPE_CELLIER"],id["LAMPE_CH_AMIS"]} -- Reduced set for test purposes local Lights_On_at_end_Simulation = 0; -- If next line is commented, no light will turn on after Simulation ends local Lights_On_at_end_Simulation = id["LAMPE_COULOIR"]; -- ID of a light (Only One) to turn on after Simulation ends (at specified Stop_hour & Stop_minute). Comment this line to turn off this feature local Lights_On_if_Simulation_deactivated = 0; -- If next line is commented, no light will turn on after Simulation is stopped (by putting Simu_presence to 0) local Lights_On_if_Simulation_deactivated = id["LAMPE_HALL"]; -- ID of a light (Only One) to turn on after Simulation is stopped (Simulation_). Comment this line to turn off this feature YAPS_Engine = {}; YAPS_Engine.notifications = true; -- send notifications YAPS_Engine.notificationTypes = {"push", "email"}; --notification types {"push", "email", "sms"} but they are overriden in the code YAPS_Engine.Activate_FreeSms = false; -- activate push with Activate_FreeSms (Activate_Push must be true also) YAPS_Engine.smartphoneID = {id["PHONE_SEB"]}; -- Smartphone Id to send push to. {id1, id2, id3} YAPS_Engine.userID = {id["ADMIN"]}; -- User Id to send email to. {id1, id2, id3} YAPS_Engine.sms = { ["VD_ID"] = 0, -- Virtual Device ID ["VD_Button"] = "1", -- Virtual Device Button ["VG_Name"] = "SMS"}; -- Global Variable Name --------------------- USER SETTINGS END ---------------------------- ----------------------ADVANCED SETTINGS----------------------------- local Show_standard_debug = true; -- Debug displayed in white local Show_extra_debug = false; -- Debug displayed in orange -------------------------------------------------------------------- -------------------- DO NOT CHANGE CODE BELOW ---------------------- -------------------------------------------------------------------- -- test pepite -- local Number_of_lights_hue = #Random_Lights_Hue -- number of lights hue -- fin test pepite -- local Number_of_lights = #Random_lights; -- numbers of light devices listed above local Simulation = fibaro:getGlobal("Simu_presence"); --value of the global value: Simulation is on or off local Manual_overide = fibaro:getGlobal("overideSimuSunset"); -- if = 1 then the Simulation is forced local Start_simulation_time = fibaro:getValue(1, "sunsetHour"); --Start Simulation when sunset local End_simulation_time,Sunrise_unix_hour,Sunset_unix_hour,Converted_var,Midnight,End_simulation_time_with_random_max_TurnOff,Sleep_between_TurnOff; local Is_first_launch = true; local NotifLoop = 0; function Debug(color, message) fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, os.date("%a %d/%m", os.time()).." "..message, "span")); end function ExtraDebug(debugMessage) if ( Show_extra_debug ) then Debug( "orange", debugMessage); end end function StandardDebug(debugMessage) if ( Show_standard_debug ) then Debug( "white", debugMessage); end end function round(num, idp) local mult = 10^(idp or 0) return math.floor(num * mult + 0.5) / mult end function YAPS_Engine:notification(message, subject, param) local message = os.date("%H:%M", os.time()).." "..message or "<vide>"; if YAPS_Engine.debug_messages then ExtraDebug("yellow", "Notification : "..message); end if Activate_FreeSms then fibaro:setGlobal("Activate_FreeSms", message) ExtraDebug("Message ("..message..") sent to Activate_FreeSms"); end if param then for _, notif in ipairs(param) do if YAPS_Engine.debug_messages then ExtraDebug("grey", notif); end -- Envoi Push if notif == "push" and YAPS_Engine.smartphoneID then for _, id in ipairs(YAPS_Engine.smartphoneID) do if YAPS_Engine.debug_messages then ExtraDebug("grey", "Send Push smartphone ID : "..id); end fibaro:call(id, "sendPush", message); end -- Envoi Email elseif notif == "email" and YAPS_Engine.userID then for _, id in ipairs(YAPS_Engine.userID) do if YAPS_Engine.debug_messages then ExtraDebug("grey", "Send Email user ID : "..id); end fibaro:call(id, "sendEmail", subject, message); end -- Envoi SMS elseif notif == "sms" and YAPS_Engine.sms then if YAPS_Engine.debug_messages then ExtraDebug("grey", "Send SMS : VD_ID="..(YAPS_Engine.sms["VD_ID"] or 0).." VD_Button="..(YAPS_Engine.sms["VD_Button"] or "0").." VG_Name="..(YAPS_Engine.sms["VG_Name"] or "")); end fibaro:setGlobal(YAPS_Engine.sms["VG_Name"], message); if YAPS_Engine.sms["VD_ID"] and tonumber(YAPS_Engine.sms["VD_ID"])>0 and YAPS_Engine.sms["VD_Button"] and tonumber(YAPS_Engine.sms["VD_Button"])>0 then fibaro:call(YAPS_Engine.sms["VD_ID"], "pressButton", YAPS_Engine.sms["VD_Button"]); end end end else Debug("orange", "Warning : no notification options given"); end end function YAPS_Engine:UnixTimeCalc(Converted_var, hour, min) local time = os.time(); local date = os.date("*t", time); local year = date.year; local month = date.month; local day = date.day; unix_hour = os.time{year=year, month=month, day=day, hour=hour, min=min, sec=sec}; ExtraDebug("converted "..Converted_var..": "..hour..":"..min.." to Unix Time: "..unix_hour..")") return unix_hour end function YAPS_Engine:ReverseUnixTimeCalc(Converted_var,hour) reverse_unix = os.date("%H:%M", hour) ExtraDebug("Reverse converted Unix Time of "..Converted_var.." : "..hour.." To: "..reverse_unix) return reverse_unix end function YAPS_Engine:EndTimeCalc() local hour,min ExtraDebug ("Current Unix Time: "..os.time()) End_simulation_time = YAPS_Engine:UnixTimeCalc("Original planed End_simulation_time", Stop_hour, Stop_minute); -- generate End_simulation_time (changes at midnight) will not change during Simulation, only when ended Midnight = YAPS_Engine:UnixTimeCalc("Midnight", 00, 00); Sunset_unix_hour = fibaro:getValue(1,'sunsetHour'); hour = string.sub(Sunset_unix_hour, 1 , 2); min = string.sub(Sunset_unix_hour,4); Sunset_unix_hour = (YAPS_Engine:UnixTimeCalc("Sunset", hour, min))+Sunset_offset*60; -- if stop hour is between 00 and 12h then add 24 hours to End_simulation_time if tonumber(Stop_hour) <= 12 and (os.time() >= End_simulation_time) then End_simulation_time = End_simulation_time + 24*60*60 ExtraDebug ("stop hour <= 12, Added 24H to End_simulation_time (End_simulation_time is ending after midnignt)"); ExtraDebug ("New End_simulation_time: "..End_simulation_time); end if Random_max_TurnOff_duration ~= 0 and Number_of_lights > 1 then -- if Simulation = 1 then slow turn off, else turn off all immediately Sleep_between_TurnOff = round((math.random(Random_max_TurnOff_duration)/(Number_of_lights-1)),1); Sleep_between_TurnOff = math.random(Random_max_TurnOff_duration)/(Number_of_lights-1); ExtraDebug("Calculated sleeping between each turn off: "..Sleep_between_TurnOff.." min"); else Sleep_between_TurnOff = 0; ExtraDebug("No sleeping between turn off"); end End_simulation_time_with_random_max_TurnOff = End_simulation_time + ((Sleep_between_TurnOff*(Number_of_lights-1))*60) ExtraDebug("End_simulation_time_with_random_max_TurnOff: "..End_simulation_time_with_random_max_TurnOff); if ((os.time() < End_simulation_time) and (Sunset_unix_hour - End_simulation_time > 0) and (Is_first_launch == true)) then -- if calculation is done between midnight and End_simulation_time and sunset is wrongly calculated after endtime (at first start only) Sunset_unix_hour = Sunset_unix_hour - (24*60*60) + 70; -- remove 24h58m50s of sunsettime ExtraDebug ("launch after Midnight and before End_simulation_time, removed 24H to Sunset_unix_hour (Only at the first start)"); ExtraDebug ("New SunsetTime: "..Sunset_unix_hour); end Is_first_launch = false end -- Presence Simulation actions Main loop function YAPS_Engine:Launch() YAPS_Engine:notification("Presence Simulation started. Will stop at: "..YAPS_Engine:ReverseUnixTimeCalc("End_simulation_time", End_simulation_time).." + rand("..Random_max_TurnOff_duration.."min) : "..YAPS_Engine:ReverseUnixTimeCalc("End_simulation_time_with_random_max_TurnOff", End_simulation_time_with_random_max_TurnOff), "Presence Simulator", {"push"}); -- push only StandardDebug("Presence Simulation started. Will stop at: "..YAPS_Engine:ReverseUnixTimeCalc("End_simulation_time", End_simulation_time).." + rand("..Random_max_TurnOff_duration.."min) : "..YAPS_Engine:ReverseUnixTimeCalc("End_simulation_time_with_random_max_TurnOff", End_simulation_time_with_random_max_TurnOff)); if Lights_always_on[1] ~= nil then YAPS_Engine:TurnOn(Lights_always_on); end while ((os.time() <= End_simulation_time) and (Simulation == "1")) or ((Manual_overide == "1")) do local random_light = tonumber(Random_lights[math.random(Number_of_lights)]) --choose a random light in the list -- test pepite -- local random_light_hue = tonumber(Random_Lights_Hue[math.random(Number_of_lights_hue)]) --choose a random light hue in the list local lightstatushue = fibaro:getValue(random_light_hue, 'value') --get the value of the random light HUE in the list -- fin test pepite -- 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 --- test pepite -- if tonumber(lightstatushue) == 0 then fibaro:call(random_light_hue, "changeBrightness", 255) fibaro:call(random_light_hue, "changeHue", 7680) fibaro:call(random_light_hue, "changeSaturation", 210) fibaro:call(random_light_hue, 'turnOn') else fibaro:call(random_light_hue, 'turnOff') end -- fin test pepite -- 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 -- test pepite -- lightstatushue = fibaro:getValue(random_light_hue, 'value') --get the value of the random light HUE after his update StandardDebug('light HUE ID:'.. fibaro:getName(random_light_hue) ..' status:'..lightstatushue); -- fin test StandardDebug('light ID:'.. fibaro:getName(random_light) ..' status:'..lightstatus); local sleeptime = math.random(Random_max_duration*60000) --random sleep StandardDebug("Entering loop of " .. round(sleeptime/60000,2) .. " minutes"); -- Allows to exit the scene if the Simu_presence global var changes to 0 during the random sleep local counterexitSimulation = 200 while (counterexitSimulation > 0) and ((os.time() <= End_simulation_time) or Manual_overide == "1") do counterexitSimulation = counterexitSimulation - 1; test_presence_state = fibaro:getGlobal("Simu_presence"); Simulation = tonumber(test_presence_state); --verify the global value, if the virtual device is deactivated, the loop stops. --fibaro:debug("Simulation var state : " .. Simulation.." override var state : " .. Manual_overide); if Simulation == 0 then Manual_overide = fibaro:getGlobalValue("overideSimuSunset"); if Simulation == 0 or Manual_overide == "0" then counterexitSimulation = 0 end end fibaro:sleep(sleeptime/200); end ExtraDebug("Exiting loop of "..round(sleeptime/60000,2).." minutes"); local sleeptimemin = math.abs(sleeptime/60000) Simulation = fibaro:getGlobal("Simu_presence"); --verify the global value, if the virtual device is deactivated, the scene stops. Manual_overide = fibaro:getGlobalValue("overideSimuSunset"); end end function YAPS_Engine:EndSimulation() if Lights_always_on[1] ~= nil then YAPS_Engine:TurnOff(Random_lights,Lights_always_on); end -- test pepite for i= 1, Number_of_lights_hue do if tonumber(lightstatushue) > 0 then fibaro:call(Random_Lights_Hue[i], "turnOff") end end -- fin test pepite -- Debug("red","Presence Simulation deactivated"); if (Simulation == "1") then Debug("yellow","Presence Simulation will restart tomorrow."); Debug("yellow","Sunset is around "..fibaro:getValue(1, "sunsetHour").." + Sunset Shift of "..Sunset_offset.."min = Start Time around "..YAPS_Engine:ReverseUnixTimeCalc("Sunset unix time", Sunset_unix_hour)); YAPS_Engine:notification("Presence Simulation will restart tomorrow. Sunset is around "..fibaro:getValue(1, "sunsetHour").." + Sunset Shift of "..Sunset_offset.."min = Start Time around "..YAPS_Engine:ReverseUnixTimeCalc("Sunset unix time", Sunset_unix_hour), "Presence Simulator", {"push"}); -- push only end NotifLoop = 0; -- will force main loop notifications at end of Simulation end function YAPS_Engine:ExitSimulation() --YAPS_Engine:notification("Presence Simulation is terminated", "Presence Simulator", {"push"}); -- push only Debug("red","Simu_presence = 0, Aborting Simulation scene"); fibaro:abort(); end function YAPS_Engine:TurnOff(group,group2) Debug("red","TurnOff All Simulation lights!"); local name, id2; local ID_devices_group = group; if ID_devices_group ~= 0 then for i=1, #ID_devices_group do Simulation = fibaro:getGlobal("Simu_presence"); --verify the global value, if Simulation presence is deactivated if Simulation == "0" then Sleep_between_TurnOff = 0; end; -- if Simulation ended before End_simulation_time, then no turn off delay if i > 1 then -- wait Number of lights -1 (do not need to wait for the first TurnOff) StandardDebug("Sleeping "..Sleep_between_TurnOff.." minute(s) before next TurnOff"); fibaro:sleep(Sleep_between_TurnOff*60000); end id2 = tonumber(ID_devices_group[i]); fibaro:call(id2, "turnOff"); name = fibaro:getName(id2); if (name == nil or name == string.char(0)) then name = "Unknown" end StandardDebug("Device: "..name.." Off "); end end Debug("red","TurnOff All Always_On lights!"); local ID_devices_group = group2; if ID_devices_group ~= 0 then for i=1, #ID_devices_group do id2 = tonumber(ID_devices_group[i]); fibaro:call(id2, "turnOff"); name = fibaro:getName(id2); if (name == nil or name == string.char(0)) then name = "Unknown" end StandardDebug("Device: "..name.." Off "); end end if Lights_On_at_end_Simulation ~= 0 and Simulation == "1" then fibaro:call(Lights_On_at_end_Simulation, "turnOn"); name = fibaro:getName(Lights_On_at_end_Simulation); if (name == nil or name == string.char(0)) then name = "Unknown" end Debug("red","Turned On light Lights_On_at_end_Simulation:"); Debug("white", name); end if Lights_On_if_Simulation_deactivated ~= 0 and Simulation == "0" then fibaro:call(Lights_On_if_Simulation_deactivated, "turnOn"); name = fibaro:getName(Lights_On_if_Simulation_deactivated); if (name == nil or name == string.char(0)) then name = "Unknown" end Debug("red","Turned On light Lights_On_if_Simulation_deactivated:"); Debug("white", name); end end function YAPS_Engine:TurnOn(group) Debug("red","Turning On Always_On lights:"); local name, id2; local ID_devices_group = group; for i=1, #ID_devices_group do id2 = tonumber(ID_devices_group[i]); fibaro:call(id2, "turnOn"); name = fibaro:getName(id2); if (name == nil or name == string.char(0)) then name = "Unknown" end StandardDebug("Device: "..name.." Turned On "); end Debug("red","Now randomizing other lights..."); end Debug("green", "Presence Simulation | v" .. version .. " Starting up"); Debug("green", "--------------------------------------------------------------------------"); ------------------------ Main Loop ---------------------------------- -- first start notifications YAPS_Engine:EndTimeCalc(); YAPS_Engine:notification("Scheduled presence Simulation at "..YAPS_Engine:ReverseUnixTimeCalc("Sunset unix time", Sunset_unix_hour).." (Sunset: "..fibaro:getValue(1, "sunsetHour")..")", "Presence Simulator", {"email"}); -- mail only Debug("green","Sunset is at "..fibaro:getValue(1, "sunsetHour").." + Sunset Shift of "..Sunset_offset.."min = Start Time at "..YAPS_Engine:ReverseUnixTimeCalc("Sunset unix time", Sunset_unix_hour)); Debug("green","End of Simulation: "..YAPS_Engine:ReverseUnixTimeCalc("End Simulation", End_simulation_time).." + random of "..Random_max_TurnOff_duration.."min"); Debug("green", "Checking for actions every minute."); Is_first_launch = true while true do -- Infinite loop of actions checking, hours calculations, notifications YAPS_Engine:EndTimeCalc(); -- local Sunset_unix_hour = Midnight -- un-comment this line when testing to force a start hour (or use Sunset_offset) if os.time() >= Sunset_unix_hour then -- define if nighttime (sunset = 1) sunset = 1 else sunset = 0 end if (Simulation == "1") then if sunset == 1 and (os.time() <= End_simulation_time) then Debug("yellow", "It's sunset time -> Simulation ON"); YAPS_Engine:Launch(); YAPS_Engine:EndSimulation(); end if Manual_overide == "1" then Debug("yellow", "Manual Override Activated -> Simulation ON"); YAPS_Engine:Launch(); YAPS_Engine:EndSimulation(); end if Manual_overide == "0" and sunset == 0 and NotifLoop == 0 then Debug("yellow", "Sunset is at "..fibaro:getValue(1, "sunsetHour").." + Sunset Shift of "..Sunset_offset.."min = Start Time at "..YAPS_Engine:ReverseUnixTimeCalc("Sunset unix time", Sunset_unix_hour)); Debug("yellow", "End of Simulation: "..YAPS_Engine:ReverseUnixTimeCalc("End Simulation", End_simulation_time).." + random of "..Random_max_TurnOff_duration.."min = "..YAPS_Engine:ReverseUnixTimeCalc("End Simulation", End_simulation_time_with_random_max_TurnOff)); end end if (Simulation == "0") then -- Condition to end Simulation YAPS_Engine:ExitSimulation(); end if NotifLoop <= 120 then --a waiting xx times the fibaro sleep below (2 hours) before resetting counter (and notifying) if NotifLoop == 120 then NotifLoop = 0 end if NotifLoop == 0 then ExtraDebug("Now, checking for actions every minute. Next notify: in 2 hours"); end end fibaro:sleep(1*60*1000); -- wait 1 minutes before testing again the global vars below Simulation = fibaro:getGlobal("Simu_presence"); Manual_overide = fibaro:getGlobal("overideSimuSunset"); NotifLoop = NotifLoop + 1; end
  21. pepite

    Aide récupération distance json

    Super de rien. Oui si tu regardes bien le precedent json, il ne contenant pas de tableau [], mais bien que des objets {}
  22. Ah oui, je plussoie inondation/incendie. Si on arrivait à faire une scene ou VD type ;-)
  23. bien vu ;-)
  24. Bonjour, @speedoxx007 Essaie cela j'ai juste commente. En effet, on a l 'impression que ce n'est pas le bon id, donc il ne recupere pas le nom. enfin je crois. dans une scene : local name = fibaro:getName(202) print("Name : " ..name) Sinon la scene commentee -------------------- USER SETTINGS -------------------------------- local id = { LAMPE_SALON_SPOT = 81, LAMPE_TERR_GAUCHE = 191, LAMPE_TABLE = 197, LAMPE_CUISINE = 198, LAMPE_HALL = 202, LAMPE_LED_SALON = 203, LAMPE_TERR_DROITE = 206, LAMPE_ESCALIER = 213, PHONE_PAPA = 227, ADMIN = 2, } local Stop_hour = "01"; -- Hour when you want Simulation to stop local Stop_minute = "30"; -- Minute of the hour you want Simulation to stop -- note 1: the script will not exit while waiting the random time of the last light turned on. So end time can be longer than specified end time. (even more with var Random_max_TurnOff_duration) -- note 2: if the global variable changes during the same wait time as above, it will exit immediately (when back home while Simulation runs) local Sunset_offset = -15 -- number of minutes before or after sunset to activate Simulation local Random_max_duration = 18; -- random time of light change in minutes --> here each device is on maximum 30min local Random_max_TurnOff_duration = 22; -- random time to add at the stop hour+stop minute so the Simulation can be more variable (0 to deactivate) local Lights_always_on = {id["LAMPE_LED_SALON"]} -- IDs of lights who will always stay on during Simulation - leave empty array if none -> {} local Random_lights = {id["LAMPE_SALON_SPOT"],id["LAMPE_HALL"],id["LAMPE_TAPLE"],id["LAMPE_CUISINE"]} -- IDs of lights to use in Simulation --local Random_lights = {id["LAMPE_HALL"],id["LAMPE_CELLIER"],id["LAMPE_CH_AMIS"]} -- Reduced set for test purposes local Lights_On_at_end_Simulation = 0; -- If next line is commented, no light will turn on after Simulation ends -- local Lights_On_at_end_Simulation = id["LAMPE_COULOIR"]; -- ID of a light (Only One) to turn on after Simulation ends (at specified Stop_hour & Stop_minute). Comment this line to turn off this feature local Lights_On_if_Simulation_deactivated = 0; -- If next line is commented, no light will turn on after Simulation is stopped (by putting Simu_presence to 0) local Lights_On_if_Simulation_deactivated = id["LAMPE_HALL"]; -- ID of a light (Only One) to turn on after Simulation is stopped (Simulation_). Comment this line to turn off this feature YAPS_Engine = {}; YAPS_Engine.notifications = true; -- send notifications YAPS_Engine.notificationTypes = {"push", "email"}; --notification types {"push", "email", "sms"} but they are overriden in the code YAPS_Engine.Activate_FreeSms = false; -- activate push with Activate_FreeSms (Activate_Push must be true also) YAPS_Engine.smartphoneID = {id["PHONE_PAPA"]}; -- Smartphone Id to send push to. {id1, id2, id3} YAPS_Engine.userID = {id["ADMIN"]}; -- User Id to send email to. {id1, id2, id3} YAPS_Engine.sms = { ["VD_ID"] = 0, -- Virtual Device ID ["VD_Button"] = "1", -- Virtual Device Button ["VG_Name"] = "SMS"}; -- Global Variable Name --------------------- USER SETTINGS END ---------------------------- ----------------------ADVANCED SETTINGS----------------------------- local Show_standard_debug = true; -- Debug displayed in white local Show_extra_debug = true; -- Debug displayed in orange -------------------------------------------------------------------- -------------------- DO NOT CHANGE CODE BELOW ---------------------- -------------------------------------------------------------------- local Number_of_lights = #Random_lights; -- numbers of light devices listed above local Simulation = fibaro:getGlobal("Simu_presence"); --value of the global value: Simulation is on or off local Manual_overide = fibaro:getGlobal("overideSimuSunset"); -- if = 1 then the Simulation is forced local Start_simulation_time = fibaro:getValue(1, "sunsetHour"); --Start Simulation when sunset local End_simulation_time,Sunrise_unix_hour,Sunset_unix_hour,Converted_var,Midnight,End_simulation_time_with_random_max_TurnOff,Sleep_between_TurnOff; local Is_first_launch = true; local NotifLoop = 0; function Debug(color, message) fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, os.date("%a %d/%m", os.time()).." "..message, "span")); end function ExtraDebug(debugMessage) if ( Show_extra_debug ) then Debug( "orange", debugMessage); end end function StandardDebug(debugMessage) if ( Show_standard_debug ) then Debug( "white", debugMessage); end end function round(num, idp) local mult = 10^(idp or 0) return math.floor(num * mult + 0.5) / mult end function YAPS_Engine:notification(message, subject, param) local message = os.date("%H:%M", os.time()).." "..message or "<vide>"; if YAPS_Engine.debug_messages then ExtraDebug("yellow", "Notification : "..message); end if Activate_FreeSms then fibaro:setGlobal("Activate_FreeSms", message) ExtraDebug("Message ("..message..") sent to Activate_FreeSms"); end if param then for _, notif in ipairs(param) do if YAPS_Engine.debug_messages then ExtraDebug("grey", notif); end -- Envoi Push if notif == "push" and YAPS_Engine.smartphoneID then for _, id in ipairs(YAPS_Engine.smartphoneID) do if YAPS_Engine.debug_messages then ExtraDebug("grey", "Send Push smartphone ID : "..id); end fibaro:call(id, "sendPush", message); end -- Envoi Email elseif notif == "email" and YAPS_Engine.userID then for _, id in ipairs(YAPS_Engine.userID) do if YAPS_Engine.debug_messages then ExtraDebug("grey", "Send Email user ID : "..id); end fibaro:call(id, "sendEmail", subject, message); end -- Envoi SMS elseif notif == "sms" and YAPS_Engine.sms then if YAPS_Engine.debug_messages then ExtraDebug("grey", "Send SMS : VD_ID="..(YAPS_Engine.sms["VD_ID"] or 0).." VD_Button="..(YAPS_Engine.sms["VD_Button"] or "0").." VG_Name="..(YAPS_Engine.sms["VG_Name"] or "")); end fibaro:setGlobal(YAPS_Engine.sms["VG_Name"], message); if YAPS_Engine.sms["VD_ID"] and tonumber(YAPS_Engine.sms["VD_ID"])>0 and YAPS_Engine.sms["VD_Button"] and tonumber(YAPS_Engine.sms["VD_Button"])>0 then fibaro:call(YAPS_Engine.sms["VD_ID"], "pressButton", YAPS_Engine.sms["VD_Button"]); end end end else Debug("orange", "Warning : no notification options given"); end end function YAPS_Engine:UnixTimeCalc(Converted_var, hour, min) local time = os.time(); local date = os.date("*t", time); local year = date.year; local month = date.month; local day = date.day; unix_hour = os.time{year=year, month=month, day=day, hour=hour, min=min, sec=sec}; ExtraDebug("converted "..Converted_var..": "..hour..":"..min.." to Unix Time: "..unix_hour..")") return unix_hour end function YAPS_Engine:ReverseUnixTimeCalc(Converted_var,hour) reverse_unix = os.date("%H:%M", hour) ExtraDebug("Reverse converted Unix Time of "..Converted_var.." : "..hour.." To: "..reverse_unix) return reverse_unix end function YAPS_Engine:EndTimeCalc() local hour,min ExtraDebug ("Current Unix Time: "..os.time()) End_simulation_time = YAPS_Engine:UnixTimeCalc("Original planed End_simulation_time", Stop_hour, Stop_minute); -- generate End_simulation_time (changes at midnight) will not change during Simulation, only when ended Midnight = YAPS_Engine:UnixTimeCalc("Midnight", 00, 00); Sunset_unix_hour = fibaro:getValue(1,'sunsetHour'); hour = string.sub(Sunset_unix_hour, 1 , 2); min = string.sub(Sunset_unix_hour,4); Sunset_unix_hour = (YAPS_Engine:UnixTimeCalc("Sunset", hour, min))+Sunset_offset*60; -- if stop hour is between 00 and 12h then add 24 hours to End_simulation_time if tonumber(Stop_hour) <= 12 and (os.time() >= End_simulation_time) then End_simulation_time = End_simulation_time + 24*60*60 ExtraDebug ("stop hour <= 12, Added 24H to End_simulation_time (End_simulation_time is ending after midnignt)"); ExtraDebug ("New End_simulation_time: "..End_simulation_time); end if Random_max_TurnOff_duration ~= 0 and Number_of_lights > 1 then -- if Simulation = 1 then slow turn off, else turn off all immediately Sleep_between_TurnOff = round((math.random(Random_max_TurnOff_duration)/(Number_of_lights-1)),1); Sleep_between_TurnOff = math.random(Random_max_TurnOff_duration)/(Number_of_lights-1); ExtraDebug("Calculated sleeping between each turn off: "..Sleep_between_TurnOff.." min"); else Sleep_between_TurnOff = 0; ExtraDebug("No sleeping between turn off"); end End_simulation_time_with_random_max_TurnOff = End_simulation_time + ((Sleep_between_TurnOff*(Number_of_lights-1))*60) ExtraDebug("End_simulation_time_with_random_max_TurnOff: "..End_simulation_time_with_random_max_TurnOff); if ((os.time() < End_simulation_time) and (Sunset_unix_hour - End_simulation_time > 0) and (Is_first_launch == true)) then -- if calculation is done between midnight and End_simulation_time and sunset is wrongly calculated after endtime (at first start only) Sunset_unix_hour = Sunset_unix_hour - (24*60*60) + 70; -- remove 24h58m50s of sunsettime ExtraDebug ("launch after Midnight and before End_simulation_time, removed 24H to Sunset_unix_hour (Only at the first start)"); ExtraDebug ("New SunsetTime: "..Sunset_unix_hour); end Is_first_launch = false end -- Presence Simulation actions Main loop function YAPS_Engine:Launch() YAPS_Engine:notification("Presence Simulation started. Will stop at: "..YAPS_Engine:ReverseUnixTimeCalc("End_simulation_time", End_simulation_time).." + rand("..Random_max_TurnOff_duration.."min) : "..YAPS_Engine:ReverseUnixTimeCalc("End_simulation_time_with_random_max_TurnOff", End_simulation_time_with_random_max_TurnOff), "Presence Simulator", {"push"}); -- push only StandardDebug("Presence Simulation started. Will stop at: "..YAPS_Engine:ReverseUnixTimeCalc("End_simulation_time", End_simulation_time).." + rand("..Random_max_TurnOff_duration.."min) : "..YAPS_Engine:ReverseUnixTimeCalc("End_simulation_time_with_random_max_TurnOff", End_simulation_time_with_random_max_TurnOff)); if Lights_always_on[1] ~= nil then YAPS_Engine:TurnOn(Lights_always_on); end while ((os.time() <= End_simulation_time) and (Simulation == "1")) or ((Manual_overide == "1")) do local random_light = tonumber(Random_lights[math.random(Number_of_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 StandardDebug('light ID:'.. fibaro:getName(random_light) ..' status:'..lightstatus); local sleeptime = math.random(Random_max_duration*60000) --random sleep StandardDebug("Entering loop of " .. round(sleeptime/60000,2) .. " minutes"); -- Allows to exit the scene if the Simu_presence global var changes to 0 during the random sleep local counterexitSimulation = 200 while (counterexitSimulation > 0) and ((os.time() <= End_simulation_time) or Manual_overide == "1") do counterexitSimulation = counterexitSimulation - 1; test_presence_state = fibaro:getGlobal("Simu_presence"); Simulation = tonumber(test_presence_state); --verify the global value, if the virtual device is deactivated, the loop stops. --fibaro:debug("Simulation var state : " .. Simulation.." override var state : " .. Manual_overide); if Simulation == 0 then Manual_overide = fibaro:getGlobalValue("overideSimuSunset"); if Simulation == 0 or Manual_overide == "0" then counterexitSimulation = 0 end end fibaro:sleep(sleeptime/200); end ExtraDebug("Exiting loop of "..round(sleeptime/60000,2).." minutes"); local sleeptimemin = math.abs(sleeptime/60000) Simulation = fibaro:getGlobal("Simu_presence"); --verify the global value, if the virtual device is deactivated, the scene stops. Manual_overide = fibaro:getGlobalValue("overideSimuSunset"); end end function YAPS_Engine:EndSimulation() if Lights_always_on[1] ~= nil then YAPS_Engine:TurnOff(Random_lights,Lights_always_on); end Debug("red","Presence Simulation deactivated"); if (Simulation == "1") then Debug("yellow","Presence Simulation will restart tomorrow."); Debug("yellow","Sunset is around "..fibaro:getValue(1, "sunsetHour").." + Sunset Shift of "..Sunset_offset.."min = Start Time around "..YAPS_Engine:ReverseUnixTimeCalc("Sunset unix time", Sunset_unix_hour)); YAPS_Engine:notification("Presence Simulation will restart tomorrow. Sunset is around "..fibaro:getValue(1, "sunsetHour").." + Sunset Shift of "..Sunset_offset.."min = Start Time around "..YAPS_Engine:ReverseUnixTimeCalc("Sunset unix time", Sunset_unix_hour), "Presence Simulator", {"push"}); -- push only end NotifLoop = 0; -- will force main loop notifications at end of Simulation end function YAPS_Engine:ExitSimulation() --YAPS_Engine:notification("Presence Simulation is terminated", "Presence Simulator", {"push"}); -- push only Debug("red","Simu_presence = 0, Aborting Simulation scene"); fibaro:abort(); end function YAPS_Engine:TurnOff(group,group2) Debug("red","TurnOff All Simulation lights!"); local name, id2; local ID_devices_group = group; if ID_devices_group ~= 0 then for i=1, #ID_devices_group do Simulation = fibaro:getGlobal("Simu_presence"); --verify the global value, if Simulation presence is deactivated if Simulation == "0" then Sleep_between_TurnOff = 0; end; -- if Simulation ended before End_simulation_time, then no turn off delay if i > 1 then -- wait Number of lights -1 (do not need to wait for the first TurnOff) StandardDebug("Sleeping "..Sleep_between_TurnOff.." minute(s) before next TurnOff"); fibaro:sleep(Sleep_between_TurnOff*60000); end id2 = tonumber(ID_devices_group); fibaro:call(id2, "turnOff"); name = fibaro:getName(id2); if (name == nil or name == string.char(0)) then name = "Unknown" end StandardDebug("Device: "..name.." Off "); end end Debug("red","TurnOff All Always_On lights!"); local ID_devices_group = group2; if ID_devices_group ~= 0 then for i=1, #ID_devices_group do id2 = tonumber(ID_devices_group); fibaro:call(id2, "turnOff"); name = fibaro:getName(id2); if (name == nil or name == string.char(0)) then name = "Unknown" end StandardDebug("Device: "..name.." Off "); end end if Lights_On_at_end_Simulation ~= 0 and Simulation == "1" then fibaro:call(Lights_On_at_end_Simulation, "turnOn"); name = fibaro:getName(Lights_On_at_end_Simulation); --[[if (name == nil or name == string.char(0)) then name = "Unknown" end--]] Debug("red","Turned On light Lights_On_at_end_Simulation:"); --Debug("white", name); end if Lights_On_if_Simulation_deactivated ~= 0 and Simulation == "0" then fibaro:call(Lights_On_if_Simulation_deactivated, "turnOn"); name = fibaro:getName(Lights_On_if_Simulation_deactivated); if (name == nil or name == string.char(0)) then name = "Unknown" end Debug("red","Turned On light Lights_On_if_Simulation_deactivated:"); Debug("white", name); end end function YAPS_Engine:TurnOn(group) Debug("red","Turning On Always_On lights:"); local name, id2; local ID_devices_group = group; for i=1, #ID_devices_group do id2 = tonumber(ID_devices_group); fibaro:call(id2, "turnOn"); name = fibaro:getName(id2); if (name == nil or name == string.char(0)) then name = "Unknown" end StandardDebug("Device: "..name.." Turned On "); end Debug("red","Now randomizing other lights..."); end Debug("green", "Presence Simulation | v" .. version .. " Starting up"); Debug("green", "--------------------------------------------------------------------------"); ------------------------ Main Loop ---------------------------------- -- first start notifications YAPS_Engine:EndTimeCalc(); YAPS_Engine:notification("Scheduled presence Simulation at "..YAPS_Engine:ReverseUnixTimeCalc("Sunset unix time", Sunset_unix_hour).." (Sunset: "..fibaro:getValue(1, "sunsetHour")..")", "Presence Simulator", {"email"}); -- mail only Debug("green","Sunset is at "..fibaro:getValue(1, "sunsetHour").." + Sunset Shift of "..Sunset_offset.."min = Start Time at "..YAPS_Engine:ReverseUnixTimeCalc("Sunset unix time", Sunset_unix_hour)); Debug("green","End of Simulation: "..YAPS_Engine:ReverseUnixTimeCalc("End Simulation", End_simulation_time).." + random of "..Random_max_TurnOff_duration.."min"); Debug("green", "Checking for actions every minute."); Is_first_launch = true while true do -- Infinite loop of actions checking, hours calculations, notifications YAPS_Engine:EndTimeCalc(); -- local Sunset_unix_hour = Midnight -- un-comment this line when testing to force a start hour (or use Sunset_offset) if os.time() >= Sunset_unix_hour then -- define if nighttime (sunset = 1) sunset = 1 else sunset = 0 end if (Simulation == "1") then if sunset == 1 and (os.time() <= End_simulation_time) then Debug("yellow", "It's sunset time -> Simulation ON"); YAPS_Engine:Launch(); YAPS_Engine:EndSimulation(); end if Manual_overide == "1" then Debug("yellow", "Manual Override Activated -> Simulation ON"); YAPS_Engine:Launch(); YAPS_Engine:EndSimulation(); end if Manual_overide == "0" and sunset == 0 and NotifLoop == 0 then Debug("yellow", "Sunset is at "..fibaro:getValue(1, "sunsetHour").." + Sunset Shift of "..Sunset_offset.."min = Start Time at "..YAPS_Engine:ReverseUnixTimeCalc("Sunset unix time", Sunset_unix_hour)); Debug("yellow", "End of Simulation: "..YAPS_Engine:ReverseUnixTimeCalc("End Simulation", End_simulation_time).." + random of "..Random_max_TurnOff_duration.."min = "..YAPS_Engine:ReverseUnixTimeCalc("End Simulation", End_simulation_time_with_random_max_TurnOff)); end end if (Simulation == "0") then -- Condition to end Simulation YAPS_Engine:ExitSimulation(); end if NotifLoop <= 120 then --a waiting xx times the fibaro sleep below (2 hours) before resetting counter (and notifying) if NotifLoop == 120 then NotifLoop = 0 end if NotifLoop == 0 then ExtraDebug("Now, checking for actions every minute. Next notify: in 2 hours"); end end fibaro:sleep(1*60*1000); -- wait 1 minutes before testing again the global vars below Simulation = fibaro:getGlobal("Simu_presence"); Manual_overide = fibaro:getGlobal("overideSimuSunset"); NotifLoop = NotifLoop + 1; end @Thilo C'est faisable, mais faut modifier un peu la scene. Partage ta scene complete stp.
  25. pepite

    Support Gea

    Et on corrige les fautes ;-)
×
×
  • Créer...