-
Compteur de contenus
4 189 -
Inscription
-
Dernière visite
-
Jours gagnés
85
Tout ce qui a été posté par sebcbien
-
Ton NAS est peut-être moins chargé et réponds moins lentement ... Sent from my SM-N910F using Tapatalk
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
En tout cas ta femme était en petite tenue pendant ta sieste... Des sous vêtements noirs lui iraient mieux que les rouges avec des froufrous ! :) edit: parentérale c'est ton correcteur ??? ;-) https://fr.wikipedia.org/wiki/Voie_parent%C3%A9rale
-
ok, merci, je vais déjà essayer de faire fonctionneer ça avec une seule variable et une seule scène pour une seule lampe :-) après on verra.
-
J'ai fait une mise àjour avec un mode été/hiver et la fonction "no frost" si ça intéressé qqun je posterai. Sent from my SM-N910F using Tapatalk
-
Topic unique Impérihome Et Hc2
sebcbien a répondu à un(e) sujet de Moicphil dans Multimédia (audio, vidéo ...)
RTFM !!!! Sent from my SM-N910F using Tapatalk -
Alors @jojo ? encore occupé àfaire la sieste ? :-p
-
Bonjour, Comme certains le savent, pour une question de WAF et de confort, je n'aime pas couper la lumière de manière brusque. Il arrive parfois que l'on soit immobile et qu'on se retrouve dans le noir, particulièrement dans les WC ;-) Bref, comme le savent bien @pepite @jojo @steven et autres, j'avais résolu ce problème avec GEA, après 5 minutes, si pas de mouvement, les lumière se dimmaient à 50% puis si toujours pas de mouvement pendant 3 minutes -> off Il y a quelques inconvénients à cette méthode: il faut ppas mal de lignes, tout ça pour deux niveaux... -- si PeriodeSunSet ou PeriodeSunRise, allumer lampe automatiquement si moins de 64% GEA.add({id2["SAM_MVT"],{"Value-", id2["SALLE_A_MANGER"],94}, estNotHouse_Manuel}, -1, "",{PeriodeSunSetSAM,PeriodeSunRiseSAM,{"Value", id2["SALLE_A_MANGER"], 95}}) -- Hors Periodes sunset & sunrise, allumage manuel -- Si déjà Allumé, Re-Allumage à 65% dès que détection mouvement sauf si module déjà a + de 64% (économie zwave) GEA.add({id2["SAM_MVT"],{"Value+", id2["SALLE_A_MANGER"], 1},{"Value-", id2["SALLE_A_MANGER"],94}}, -1, "",{{"Value", id2["SALLE_A_MANGER"], 95}}) -- Après 10min on dimme la lampe à 34% si pas de mouvement local malampesam = GEA.add({"Value+", id2["SALLE_A_MANGER"],59}, 10*60, "",{{"Value", id2["SALLE_A_MANGER"], 24},{"Repeat"}}) -- Après 3 min on met la lampe à 65% (prète pour prochain allumage) puis on éteint, uniquement si la lampe est entre 1 et 35 local malampesamdim = GEA.add({{"Value-", id2["SALLE_A_MANGER"],25},{"Value+", id2["SALLE_A_MANGER"], 1}}, 3*60,"",{{"Value", id2["SALLE_A_MANGER"], 95},{"Function", function() fibaro:sleep(300) end},{"turnOff"}},{"Repeat"}) -- Relance des tâches en cas de détection si la lampe est allumée (économise GEA) GEA.add({id2["SAM_MVT"],{"Value+", id2["SALLE_A_MANGER"], 1}}, -1, "", {{"RestartTask", malampesam},{"RestartTask", malampesamdim}}) J'aimerais externaliser cette gestion à une scène qui pourrais gérer toutes les lampes de la maison sur le principe du simulateur d'aube de @Krikroff http://www.domotique-fibaro.fr/index.php/topic/99-simulateur-daube-param%C3%A9trable/ Avantages: plus que deux lignes dans gea --si détection de mouvement et lampe non éteinte (<98) alors demander allumage à 99% avec courbe OUTEXPO en 15 secondes) GEA.add({id2["SAM_MVT"],{"Value-", id2["SALLE_A_MANGER"],98}, estNotHouse_Manuel}, -1, "",{PeriodeSunSetSAM,PeriodeSunRiseSAM,{"Global", "LAMPE_SAM", "15,OUTEXPO,99"}}) -- si lampe allumée plus de 5 minutes (a 99%) alors demander son extinction en 120 secondes via la courbe INEXPO GEA.add({id2["SAM_MVT"],{"Value", id2["SALLE_A_MANGER"],99}, estNotHouse_Manuel},5*60, "",{PeriodeSunSetSAM,PeriodeSunRiseSAM,{"Global", "LAMPE_SAM", "120,INEXPO,0"}}) -- si un mouvement intervient alors que la lampe est en extinction, la ligne 1 s'active et ramène la lampe à 99% propre non ? ce principe peut s'appliquer facilement à toutes lampes de la maison. Avec la ligne Alarm de GEA, on pourra déclencher un réveil lumineux en douceur. allumage de la lampe des parents, en 15 minutes avec la courbe INQUAD et un target de 80% ce serait un bon ajout à mon réveil famille: http://www.domotique-fibaro.fr/index.php/topic/4014-r%C3%A9veil-douceur-aurore-artificielle-sp%C3%A9cial-parents/#entry58667 -- allumage de la lampe des parents, en 15 minutes avec la courbe INQUAD et un target de 80% GEA.add({{"Alarm", id2["REVEIL_AURORE_PARENTS"]}, est_House_Sleeping}, 0, "", {{"Global", "LAMPE_CH_PARENTS", "15*60,OUTEXPO,80"}}) Voilà le but. La ou je sens que je vais caler est une partie du script. En effet, L'exemple ci-dessus fonctionnerais avec une VG et une scène par lampe Et j'aimerais pouvoir gérer toutes les lampes de la maison avec une seule scène et une seule variable globale... plus facile pour partager le script par la suite... Voici un arbre logique, je suis capable de l'écrire sans problème mais j'aurais besoin de quelqu'un qui pourrait m'aider à écrire la partie passage des paramètres via la VG l'idée serait une VG globale structurée comme ceci: {(LAMPE_CH_PARENTS, Durée, courbe,target),(LAMPE_CUISINE, Durée, courbe,target),(LAMPE_WC, Durée, courbe,target), ....} a encoder en json peut être ? ça c'est un problème. L'autre est de gérer les scènes "concurentes" j'magine qu'il faudrait écrire un "demon" qui se couperais quand il n'y a aucune demande, mais dès qu'il y en a une, à ce moment il devra être capable de gérer toutes les demandes de toutes les lampes en un seul script... Faisable ? des idées, suggestions, bouts de code ?
-
Ici ça fonctionne sur firefox sous windows. Essaie avec une version précédente de firefox Sent from my SM-N910F using Tapatalk
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
Ça me semble plutôt être un problème de compatibilité browser ça... Sent from my SM-N910F using Tapatalk
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
Je plussoie shyzrka... Sent from my SM-N910F using Tapatalk
-
je venais sur ce fil, simplement pour dire que ton script est d'une robustesse impressionnante, ça tourne chez moi depuis maintenant 1 an parfaitement ! Merci !
- 1 285 réponses
-
- 2
-
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
Fabricant: Qubino Référence : zmhnda2 (Dimmer) Version : ? sujet: http://www.domotique-fibaro.fr/index.php/topic/4183-qubino-dimmer-zmhnda2/#entry61896 Fabricant: Z-Wave.me Référence : KeyFob Version : ancienne version Fabricant: AEOTEC by AEON Labs Référence matériel: Zw100 "multisensor6" Version: ??? Fabricant: MCO Home Référence matériel: Actionneur tactile 4 boutonsTPS-314 Version: 1.0 Fabricant: Everspring Référence matériel: carillon UTSE03A Version: 1.1 Sujet: http://www.domotique-fibaro.fr/index.php/topic/2663-sonnette-everspring-inclusion-et-support-hc2/
-
Aujourd'hui j'ai branché la module ACU-270 (contrôleur ABAX) sur le bus (mais déporté de 10m de la centrale integra 32) J'ai suivi les instruction de la notice, relativement clair, rien de particulier à signaler, si ce n'est d'utiliser la dernière version de DloadX (10.13.012) sinon ça plante lors de l'écriture dans la mémoire du contrôleur En configurant le module dans l'intégra, j'ai eu des soucis lors de l'ajout de l'ACU 270 et de l'INT-IORS, en effet, il faut vérifier dans la fonction "odre des modules (exp. module order) que les entrées sorties ne chevauchent pas des sorties virtuelles créées auparavant. Ensuite j'ai ajouté les keyfob bi-directionnels manuellement en entrant leur no de série. Ensuite il faut créer des zones qui seront actionnées par les boutons du keyfob. On pourra récupérer ces zones dans la HC2 et générer des actions. Pour le retour d'état, même système, il suffit d'associer aux leds des sorties du système. par exemple la sortie full armed et not full armed. Un appui sur n'importe qulle touche non associée à une action renverra le status sur les leds du keyfob Prochaine étapes, brancher les détecteurs et sorties supplémentaires à l'INT-IORS Ensuite installer le lecteur de cartes de proximité...
-
Bon, pour moi c'est stable :-)
-
Status de l'installation: Il y a deux mois, j'ai placé les nouveaux boîtiers, détecteurs etc. il y a deux semaines, j'ai trouvé du temps pour tirer les nouveaux câbles dans le grenier (... saloperie de laine de roche :-/ ) Hier j'ai câblé la nouvelle alimentation et la nouvelle batterie, et interconnecté les deux systèmes. ça fonctionne effectivement comme décrit par @chris6783 au post 2 ensuite j'ai connecté le INT-IORS au bus, fais quelques manipulations sur le clavier pour intégrer le nouveau "expander". Fait un refresh config de satel dans la HC2 Là j'ai eu quelques sueurs froides, ça ne marchait pas. Dans la doc de l'int-iors, il est dit que les sorties peuvent être activées par des users, des zones et des sorties logiques... mais pas de commande directe. Je commençais à désespérer quand j'ai associé une partition à une sortie, et là je peux la commander enfin depuis la HC2. Comme je vais commander ma porte de garage (impulsionnel), j'ai mis une sortie en monostable, delais d'une seconde et ça fonctionne a merveille. La suite: intégrer les nouvelles zones, détecteurs, clavier a code et l'abax...
-
t'inkiètt ;-) la 3.3 l'est mais n'est pas propre et ne se lance pas entre minuit et endtime. là je vais laisser la 3.5.1 tourner 2 jours, refaire les test de override, de lancement, d'arrêt... ça prends du temps mais normalement le nettoyage et la dernière fonctionnalité ne devraient pas avoir impacté la stabilité de la 3.3 A toi de voir Je suis toujours en 3.6 ;-) Oh qu'elle est stable et rapide ma box ;-)
-
bonne nouvelle, la 3.3 a fonctionné chez moi très bien. Je suis occupé à tester la 3.5.1, dernière version, pour moi car je ne trouve plus de bugs et j'ai réussi à résoudre le dernier petit problème (lancement entre minuit et endtim ne fonctionnait pas) J'ai fait dans la 3.5.1 un très grand nettoyage, renommage des variables, fonctions etc. c'est beaucoup plus propre et lisible maintenant. Comme d'habitude, elle est ici: https://github.com/sjauquet/YAPS/blob/master/YAPS.scene.lua Comme il y a beaucoup de chose qui ont changé depuis la première version, j'hésite à modifier le premier post de ce fil... si je trouve le temps. A+
-
Alors, la 3.1 a fonctionné 3 jours parfaitement en continu la 3.2 a fonctionné 1,5 jours (2 cycles) parfaitement en continu Je viens de terminer la 3.3 (fixé un dernier bug -> le override ne fonctionnait pas bien) et elle tourne bien également. Si demain soir elle se relance, je pense que tout fonctionnera. Toutes les versions sont sur github: https://github.com/sjauquet/YAPS/commits/master/YAPS.scene.lua --[[ %% autostart %% properties %% globals Simu_presence --]] --------------------------------------- local version = "3.3.0"; -- YAPS Presence Simulator by SebcBien -- August 2015 --------------------------------------- --V3.3.0 -- Fixed Override bug (no sleep time between lights) --V3.2.3 -- added sunset shifting possibility (add or remove minutes to startime -- added time stamp to push messages -- formated messages -- optimisation -- cleanup --V3.1.0 -- "complete" rewriting with unix times -- modified end time notification impacted by random and smooth TurnOff (endtime impact) -- exit is now exactly at endtime -- added smooth cut off of lights at ending time (function not triggered with deactivation) --V2.6.6 -- clean up debug messages -- added free sms notifications -- second fix to looping days bug --V2.6.0 to V2.6.5 -- Fixed bug when rndmaxendtime = 0 -- Probably fixed endtime bug calculation when looping for days du to days are shorter now than the previous day -- Fixed bug not turning on ID_On_After_Simu when exiting simulation -- added random end time + small stability changes and cleaning -- Added array of lights to turn on after simu, ONLY if Simu_presence = 1 (normal ending, not ended by setting Simu_presence to 0) -- Added the possibility to not have an always on lamp -- Added naming of devices in the debug during simulation -- Added the possibility to select always on light during simulation --V2.2.0 to 2.5.0 -- fixed simulation starting if restarted between endtime & midnight -- fixed big bug simulator restarting after end time -- small notification and debug changes -- Rewriting the engine -- now relaunch automatically the next day, even if Simu_presence has not changed -- Added Manual Stop variable -- added list of mobiles 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, PHONE_GG = 1327 } local stop_hour = "00"; -- Hour when you want simulation to stop local stop_minute = "15"; -- 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 rndmaxendtime) -- 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_shift = -20 -- number of minutes before or after sunset to activate simulation local rndmaxtime = 20; -- random time of light change in minutes --> here each device is on maximum 30min local rndmaxendtime = 15; -- random time to add at the stop hour+stop minute so the simulation can be more variable (0 to deactivate) local ID_devices_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 ID_devices_lights = {id["LAMPE_SDB"],id["LAMPE_HALL"],id["LAMPE_CELLIER"],id["LAMPE_CH_AMIS"]} -- IDs of lights to use in simulation local ID_devices_lights = {id["LAMPE_HALL"],id["LAMPE_CELLIER"],id["LAMPE_CH_AMIS"]} -- Reduced set for test purposes local activatePush = true; -- activate push when simulation starts and stops local FreeSms = false; -- activate push with FreeSms (activatePush must be true also) --local ID_Smartphones = {id["PHONE_SEB"],id["PHONE_GG"]}; local ID_Smartphones = {id["PHONE_SEB"]}; -- list of device receiving Push local ID_On_After_Simu = 0; -- If next line is commented, no light will turn on after simulation ends local ID_On_After_Simu = 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 ID_On_When_Simu_Deactivated = 0; -- If next line is commented, no light will turn on after simulation is stopped (by putting Simu_presence to 0) local ID_On_When_Simu_Deactivated = id["LAMPE_HALL"]; -- ID of a light (Only One) to turn on after simulation is stopped (Simu_). Comment this line to turn off this feature --------------------- USER SETTINGS END ---------------------------- ----------------------ADVANCED SETTINGS----------------------------- local showStandardDebugInfo = true; -- Debug displayed in white local showExtraDebugInfo = false; -- Debug displayed in orange -------------------------------------------------------------------- -------------------- DO NOT CHANGE CODE BELOW ---------------------- -------------------------------------------------------------------- local numbers_lights = #ID_devices_lights; -- numbers of light devices listed above local simu = fibaro:getGlobal("Simu_presence"); --value of the global value: simulation is on or off local manualOveride = fibaro:getGlobal("overideSimuSunset"); -- if = 1 then the simulation is forced local start_simu = fibaro:getValue(1, "sunsetHour"); --Start simulation when sunset local endtime,Sunrise_unix_hour,Sunset_unix_hour,converted_var,Midnight,endtime_with_rndmaxendtime,sleep_between_TurnOff; local first_launch = true; local NotifLoop = 0; SimulatorPresenceEngine = {}; 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 ( showExtraDebugInfo ) then Debug( "orange", debugMessage); end end function StandardDebug(debugMessage) if ( showStandardDebugInfo ) 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 pushMessage(sendPush) if (activatePush) then sendPush = os.date("%H:%M", os.time()).." "..sendPush -- add timestamp to push message for i=1, #ID_Smartphones do fibaro:call(tonumber(ID_Smartphones[i]), 'sendPush', sendPush); ExtraDebug("Push message ("..sendPush..") sent to mobile: "..tonumber(ID_Smartphones[i])); end if (FreeSms) then fibaro:setGlobal("FreeSms", sendPush) ExtraDebug("Message ("..sendPush..") sent to FreeSms"); end end end function SimulatorPresenceEngine:UniversalTimeCalc(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 SimulatorPresenceEngine:ReverseUniversalTimeCalc(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 SimulatorPresenceEngine:EndTimeCalc() local hour,min ExtraDebug ("Current Unix Time: "..os.time()) endtime = SimulatorPresenceEngine:UniversalTimeCalc("Original planed Endtime", stop_hour, stop_minute); -- generate endtime (changes at midnight) will not change during simulation, only when ended Midnight = SimulatorPresenceEngine:UniversalTimeCalc("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 = (SimulatorPresenceEngine:UniversalTimeCalc("Sunset", hour, min))+sunset_shift*60; -- if stop hour is between 00 and 12h then add 24 hours to endtime if tonumber(stop_hour) <= 12 and (os.time() >= endtime) then endtime = endtime + 24*60*60 ExtraDebug ("stop hour <= 12, Added 24H to Endtime (endtime is ending after midnignt)"); ExtraDebug ("New EndTime: "..endtime); end if rndmaxendtime ~= 0 and numbers_lights > 1 then -- if simu = 1 then slow turn off, else turn off all immediately sleep_between_TurnOff = round((math.random(rndmaxendtime)/(numbers_lights-1)),1); sleep_between_TurnOff = math.random(rndmaxendtime)/(numbers_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 endtime_with_rndmaxendtime = endtime + ((sleep_between_TurnOff*(numbers_lights-1))*60) ExtraDebug("endtime_with_rndmaxendtime: "..endtime_with_rndmaxendtime); -- To do: check if simu is launched between midnight and stop hour -> will be 24h later (simu will run trough the day) --[[ essai prise en charge lancement entre minuit et stop hour if (os.time() < endtime) and (os.time() > Midnight) and first_launch == true then -- si calcul effectué entre minuit et endtime lors du premier lancement, alors reculer sunset de 24h Sunset_unix_hour = Sunset_unix_hour - 24*60*60; ExtraDebug ("stop hour <= 12, removed 24H to Sunset_unix_hour (endtime is ending after midnignt)"); ExtraDebug ("New SunsetTime: "..Sunset_unix_hour); end first_launch = false Sunrise_unix_hour = fibaro:getValue(1,'sunriseHour') hour = string.sub(Sunrise_unix_hour, 1 , 2) min = string.sub(Sunrise_unix_hour,4) Sunrise_unix_hour = SimulatorPresenceEngine:UniversalTimeCalc("Sunrise", hour, min) --]] ----------------------------------------------------------------------------------------------------- -- At first launch only, add 24h to endtime if endtime is after midnight and in the past --if ((wait_for_tomorrow == 0) and (endtime < os.time())) then -- if endtime + rndmaxendtime (+5 min to avoid sunset shifting) is gone and it's the first launch of simulator --endtime = endtime + 24*60*60 -- add 24h at endtime after the night is gone --start_simu = fibaro:getValue(1, "sunsetHour"); -- recalculate for next day (changes at midnight) --ExtraDebug ("wait_for_tomorrow = 0 Added 24H to Endtime (first start ending after midnignt)"); --ExtraDebug ("Recalculated Simulation StartHour (Sunset): " .. start_simu); --wait_for_tomorrow = 1 --end -- adds 24h to endtime after the end of simulation (between sunrise and sunset) --if (wait_for_tomorrow == 1 and (endtime < os.time()) and ((now >= sunrise) and (now <= sunset))) then -- if it looping days and endtime is gone and we are daytime, then add --endtime = endtime + 24*60*60 -- add 24h at endtime after the night is gone --start_simu = fibaro:getValue(1, "sunsetHour"); -- recalculate for next day --ExtraDebug ("wait_for_tomorrow = 1 Added One Day to Endtime: " .. endtime); --ExtraDebug ("Recalculated Simulation StartHour (Sunset): " .. start_simu); --end --ExtraDebug ("debug info: Recalculated planed EndTime " ..endtime) end -- Presence Simulation actions Main loop function SimulatorPresenceEngine:Launch() pushMessage("Presence simulation started. Will stop at: "..SimulatorPresenceEngine:ReverseUniversalTimeCalc("endtime", endtime).." + rand("..rndmaxendtime.."min) : "..SimulatorPresenceEngine:ReverseUniversalTimeCalc("endtime_with_rndmaxendtime", endtime_with_rndmaxendtime)); StandardDebug("Presence simulation started. Will stop at: "..SimulatorPresenceEngine:ReverseUniversalTimeCalc("endtime", endtime).." + rand("..rndmaxendtime.."min) : "..SimulatorPresenceEngine:ReverseUniversalTimeCalc("endtime_with_rndmaxendtime", endtime_with_rndmaxendtime)); if ID_devices_lights_always_on[1] ~= nil then SimulatorPresenceEngine:TurnOn(ID_devices_lights_always_on); end while ((os.time() <= endtime) and (simu == "1")) or ((manualOveride == "1")) 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 StandardDebug('light ID:'.. fibaro:getName(random_light) ..' status:'..lightstatus); local sleeptime = math.random(rndmaxtime*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 counterexitsimu = 200 while (counterexitsimu > 0) and ((os.time() <= endtime) or manualOveride == "1") do counterexitsimu = counterexitsimu - 1; test_presence_state = fibaro:getGlobal("Simu_presence"); simu = tonumber(test_presence_state); --verify the global value, if the virtual device is deactivated, the loop stops. --fibaro:debug("simu var state : " .. simu.." override var state : " .. manualOveride); if simu == 0 then manualOveride = fibaro:getGlobalValue("overideSimuSunset"); if simu == 0 or manualOveride == "0" then counterexitsimu = 0 end end fibaro:sleep(sleeptime/200); end ExtraDebug("Exiting loop of "..round(sleeptime/60000,2).." minutes"); local sleeptimemin = math.abs(sleeptime/60000) simu = fibaro:getGlobal("Simu_presence"); --verify the global value, if the virtual device is deactivated, the scene stops. manualOveride = fibaro:getGlobalValue("overideSimuSunset"); end end function SimulatorPresenceEngine:EndSimulation() if ID_devices_lights_always_on[1] ~= nil then SimulatorPresenceEngine:TurnOff(ID_devices_lights,ID_devices_lights_always_on); end Debug("red","Presence simulation deactivated"); if (simu == "1") then Debug("yellow","Presence simulator will restart tomorrow."); Debug("yellow","Sunset is around "..fibaro:getValue(1, "sunsetHour").." + Sunset Shift of "..sunset_shift.."min = Start Time around "..SimulatorPresenceEngine:ReverseUniversalTimeCalc("Sunset unix time", Sunset_unix_hour)); pushMessage("Presence simulator will restart tomorrow. Sunset is around "..fibaro:getValue(1, "sunsetHour").." + Sunset Shift of "..sunset_shift.."min = Start Time around "..SimulatorPresenceEngine:ReverseUniversalTimeCalc("Sunset unix time", Sunset_unix_hour)); end NotifLoop = 0; -- will force main loop notifications at end of simulation end function SimulatorPresenceEngine:ExitSimulation() pushMessage("Presence simulator is terminated"); Debug("red","Simu_presence = 0, Aborting simulation scene"); fibaro:abort(); end function SimulatorPresenceEngine:TurnOff(group,group2) Debug("red","TurnOff All Simulation lights!"); local name, id2; local ID_devices_group = group; for i=1, #ID_devices_group do simu = fibaro:getGlobal("Simu_presence"); --verify the global value, if simu presence is deactivated if simu == "0" then sleep_between_TurnOff = 0; end; -- if simulation ended before endtime, 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 Debug("red","TurnOff All Always_On lights!"); local ID_devices_group = group2; 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 if ID_On_After_Simu ~= 0 and simu == "1" then fibaro:call(ID_On_After_Simu, "turnOn"); name = fibaro:getName(ID_On_After_Simu); if (name == nil or name == string.char(0)) then name = "Unknown" end Debug("red","Turned On light ID_On_After_Simu:"); Debug("white", name); end if ID_On_When_Simu_Deactivated ~= 0 and simu == "0" then fibaro:call(ID_On_When_Simu_Deactivated, "turnOn"); name = fibaro:getName(ID_On_When_Simu_Deactivated); if (name == nil or name == string.char(0)) then name = "Unknown" end Debug("red","Turned On light ID_On_When_Simu_Deactivated:"); Debug("white", name); end end function SimulatorPresenceEngine: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 Simulator | v" .. version .. " Starting up"); Debug( "green", "--------------------------------------------------------------------------"); ------------------------ Main Loop ---------------------------------- -- first start notifications SimulatorPresenceEngine:EndTimeCalc(); pushMessage("Scheduled presence simulation at "..SimulatorPresenceEngine:ReverseUniversalTimeCalc("Sunset unix time", Sunset_unix_hour).." (Sunset: "..fibaro:getValue(1, "sunsetHour")..")"); Debug("green","Sunset is at "..fibaro:getValue(1, "sunsetHour").." + Sunset Shift of "..sunset_shift.."min = Start Time at "..SimulatorPresenceEngine:ReverseUniversalTimeCalc("Sunset unix time", Sunset_unix_hour)); Debug("green","End of Simulation: "..SimulatorPresenceEngine:ReverseUniversalTimeCalc("End Simulation", endtime).." + random of "..rndmaxendtime.."min"); Debug("green", "Checking for actions every minute."); while true do -- Infinite loop of actions checking, hours calculations, notifications SimulatorPresenceEngine:EndTimeCalc(); -- local Sunset_unix_hour = Midnight -- un-comment this line when testing to force a start hour (or use sunset_shift) if os.time() >= Sunset_unix_hour then -- define if nighttime (sunset = 1) sunset = 1 else sunset = 0 end if (simu == "1") then if sunset == 1 and (os.time() <= endtime) then Debug("yellow", "It's sunset time -> Simulation ON"); SimulatorPresenceEngine:Launch(); SimulatorPresenceEngine:EndSimulation(); end if manualOveride == "1" then Debug("yellow", "Manual Override Activated -> Simulation ON"); SimulatorPresenceEngine:Launch(); SimulatorPresenceEngine:EndSimulation(); end if manualOveride == "0" and sunset == 0 and NotifLoop == 0 then Debug("yellow", "Sunset is at "..fibaro:getValue(1, "sunsetHour").." + Sunset Shift of "..sunset_shift.."min = Start Time at "..SimulatorPresenceEngine:ReverseUniversalTimeCalc("Sunset unix time", Sunset_unix_hour)); Debug("yellow", "End of Simulation: "..SimulatorPresenceEngine:ReverseUniversalTimeCalc("End Simulation", endtime).." + random of "..rndmaxendtime.."min = "..SimulatorPresenceEngine:ReverseUniversalTimeCalc("End Simulation", endtime_with_rndmaxendtime)); end end if (simu == "0") then -- Condition to end simulation SimulatorPresenceEngine: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 simu = fibaro:getGlobal("Simu_presence"); manualOveride = fibaro:getGlobal("overideSimuSunset"); NotifLoop = NotifLoop + 1; end
-
Je croise les doigts, il y a tellement de changements... ;-) dès que tu as du feedback hésite pas Sent from my SM-N910F using Tapatalk
-
Je ne sais pas laquelle tu as mais la dernière postée ici est buggee :-/ Sent from my SM-N910F using Tapatalk
-
La 3.2 fonctionne depuis hier soir, je continue les tests Sent from my SM-N910F using Tapatalk
-
deux jours de test et la V3.1.0 sur github a bien fonctionné jusqu'ici, premier lancement et boucle de 1 jour. j'ai tout passé en UNIX time (merci jojo je savais plus comment ça s'appelais) Je le laisse tourner encore un jour le lancement entre minuit et endtime, je laisse tomber, je n'y arrive pas. conséquence, un start simu ne commencera que le lendemain si lancé dans ce laps de temps.. ce qui devrait être assez rare je fais en parallèle la V3.2.0 qui aura en plus la possibilité de faire varier l'heure du sunset, donc du démarage (+XX minutes, ou -XX minutes)
-
Oui c ça, ça avance Mais le lancement entre minuit et endtime c un beau casse tête Sent from my SM-N910F using Tapatalk
-
en fait je devrais tout mettre en heure universelle je pense et convertir une fois pour toutes end time et sunset et sunrise en heure universelle...
-
pour le moment je ré-écris la partie endtime calc, ça simplifiera beaucoup. Je laisse tomber la gestion du cas si on active la simulation entre minuit et l'heure de fin qui complique beaucoup (plus de wait for tomorrow) function SimulatorPresenceEngine:EndTimeCalc() 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 endtime = os.time{year=year, month=month, day=day, hour=stop_hour, min=stop_minute, sec=sec} -- generate endtime (changes at midnight) ExtraDebug ("debug info: Original planed EndTime: " ..endtime) if tonumber(stop_hour) <= 12 then endtime = endtime + 24*60*60 ExtraDebug ("stop hour <= 12, Added 24H to Endtime (ending after midnignt)"); end -- if stop hour is between 00 and 12h then add 24 hours to endtime -- if simu is launched between midnight and stop hour, may cause problem local currentHour = os.date("*t") local sunrise = tonumber(string.sub (fibaro:getValue(1,'sunriseHour'), 1 , 2) ) * 60 + tonumber(string.sub(fibaro:getValue(1,'sunriseHour'), 4) ) local sunset = tonumber(string.sub (fibaro:getValue(1,'sunsetHour'), 1 , 2) ) * 60 + tonumber(string.sub(fibaro:getValue(1,'sunsetHour'), 4) ) local now = currentHour.hour * 60 + currentHour.min; ExtraDebug ("debug info: Sunrise: " .. sunrise .. " Sunset: "..sunset .. " Now: " ..now); ExtraDebug ("debug info: Current OS Time: " ..os.time()) ExtraDebug ("debug info: New planed EndTime: " ..endtime) ExtraDebug ("debug info: os.date: "..os.date("%H:%M").. " sunrisehour: "..fibaro:getValue(1, "sunriseHour")) Concernant fonction stop simu on atteint toutes les lampes (avec le délais random que tu veux rajouter) Si (Simu_presence = 0 AND (now() >= SunSet OR now() <= SunRise)) THEN on alume la lampe qu'on veut allumer à la fin de la sim END ici now est au format h:m alors que endtime est au format complet (mois jour heure min secondes)