Krikroff Posté(e) le 30 décembre 2013 Signaler Posté(e) le 30 décembre 2013 Je ressors un vieux bout de lua basé sur les équations de robert penner et posté à l'origine ici http://forum.fibaro.com/viewtopic.php?t=1656 Tout est dans le titre. Vous pouvez utiliser cette scène de manière autonome ou bien dans le cadre d'une programmation horaire . Amusez vous bien Pour la mise en place, il faut créer donc une nouvelle scène en mode LUA puis copier le code ci-dessous. ensuite, renseigner tous les identifiants des périphériques de type "dimmer" dans la variable devices, c'est eux qui varieront d'intensité lumineuse. local devices = {23, 45, 55}; Renseigner dans la variable local curve = "inExpo" la courbe choisie pour la variation lumineuse ou bien conserver celle par défaut. cf. tableau des courbes. local duration = 20; La variable duration correspond à la durée totale en seconde de la scène pour faire une transition de la valeur basse à la valeur haute. --[[ %% properties %% globals --]] fibaro:debug("HC2 start script at " .. os.date()); -- LUA - Dawn simulator V1.0.1 -- -- Wake up "naturally", illuminated by a soft light and progressive. -- Based on open source Robert Penner's original easing equations (Copyright © 2001 Robert Penner) -- Copyright © 2013 Jean-christophe Vermandé -- USER SETTINGS : -- Type of equation used to generate the curve (dimming). -- Possible values are: linear, inQuad, inExpo, outExpo, inOutQuad, inOutExpo, outInExpo local curve = "inExpo"; -- Type of equation used to generate the curve (dimming). local debug = false; -- To log in HC2 debug area local devices = {36}; -- IDs of devices to be varied (only dimmable device), eg. {1, 16, 10} local startValue = 0; -- Begin value local endValue = 100; -- End value local duration = 100; -- Execution time in seconds of the scene -- DO NOT EDIT THE CODE BELOW (except to suit your needs) -- dawnSimulatorEngine = { version = "1.0.1" }; function dawnSimulatorEngine:init(startValue, endValue, duration, devices, curve, debug) self._lastValue = 0 self._startValue = startValue or 0; self._endValue = endValue or 100; self._duration = duration or 1; self._devices = devices or {}; self._curve = equations.map[curve or 'linear']; -- require 'equations' to operate self._debug = debug or true; end function dawnSimulatorEngine:_update(value) self._lastValue = value; -- keep in memory the last value to compare later -- loop in deveices local name, id; for i=1, #self._devices do id = tonumber(self._devices[i]); fibaro:call(id, "setValue", value); if (self._debug) then name = fibaro:getName(id); if (name == nil or name == string.char(0)) then name = "Unknown" end fibaro:debug("Device:" .. name .. " setValue: " .. value); end end end function dawnSimulatorEngine:_compute(time) return math.ceil(tonumber(self._curve(time, self._startValue, self._endValue, self._duration))); end function dawnSimulatorEngine:start() local computedValue; local doWhile = true; local time = 0; -- timeline while (doWhile == true) do computedValue = self:_compute(time); -- prevent multiple call with same value if (computedValue ~= self._lastValue) then -- update device value self:_update(computedValue); end time = time + 1; if (time > self._duration) then doWhile = false; if (self._lastValue < self._endValue) then -- force target value self:_update(computedValue); end else fibaro:sleep(1000); end -- do while end end -- Easing function (Penner's Easing Equations) equations = equations or { version = "1.0.1", -- Linear linear = function(t, b, c, d) return c * t / d + b; end, -- InQuad inQuad = function(t, b, c, d) t = t / d; return c * math.pow(t, 2) + b; end, -- InOutQuad inOutQuad = function(t, b, c, d) t = t / d * 2; if t < 1 then return c / 2 * math.pow(t, 2) + b; else return -c / 2 * ((t - 1) * (t - 3) - 1) + b; end end, -- InOutExpo inOutExpo = function(t, b, c, d) if t == 0 then return b end if t == d then return b + c end t = t / d * 2; if t < 1 then return c / 2 * math.pow(2, 10 * (t - 1)) + b - c * 0.0005; else t = t - 1; return c / 2 * 1.0005 * (-math.pow(2, -10 * t) + 2) + b; end end, -- OutInExpo outInExpo = function(t, b, c, d) if t < d / 2 then return equations.outExpo(t * 2, b, c / 2, d); else return equations.inExpo((t * 2) - d, b + c / 2, c / 2, d); end end, -- InExpo inExpo = function(t, b, c, d) if t == 0 then return b; else return c * math.pow(2, 10 * (t / d - 1)) + b - c * 0.001; end end, -- OutExpo outExpo = function(t, b, c, d) if t == d then return b + c; else return c * 1.001 * (-math.pow(2, -10 * t / d) + 1) + b; end end }; -- Equations map equations.map = { ['linear'] = equations.linear, ['inQuad'] = equations.inQuad, ['inExpo'] = equations.inExpo, ['outExpo'] = equations.outExpo, ['inOutQuad'] = equations.inOutQuad, ['inOutExpo'] = equations.inOutExpo, ['outInExpo'] = equations.outInExpo } -- START SIMULATOR ENGINE if (debug) then fibaro:debug("Starting the process"); end --startEngine(equations.map[curve]); dawnSimulatorEngine:init(startValue, endValue, duration, devices, curve, debug); dawnSimulatorEngine:start(); if (debug) then fibaro:debug("End of the process"); end 7
lolomail Posté(e) le 30 décembre 2013 Signaler Posté(e) le 30 décembre 2013 Cela marche nickel, merci pour le partage
lolomail Posté(e) le 31 décembre 2013 Signaler Posté(e) le 31 décembre 2013 Depuis que j'ai testé ce script j'avais une idée dans le coin de la tête. La nuit permettant de reposer le cerveau, ce matin je me suis attelé à faire ce que j'avais en tête. Mon idée était de mettre tout cela dans un virtual device pour choisir la courbe, la pièce ou l'on veut exécuter le script, voici les modifs: 1- Créer deux variables: "Aube_courbe" avec les valeurs linear, inQuad, inExpo, outExpo, inOutQuad, inOutExpo, outInExpo "Aube_pièces" avec les valeurs du module correspondant de la pièce 2- Créer un virtual device avec: A- Autant de bouton que de pièce qu'on veut utiliser, mettre aussi une label pour avoir l'info de la pièce sélectionnée, mettre le code suivant dans chaque bouton --[[ %% properties %% globals --]] fibaro:setGlobal("Aube_module", "39"); fibaro:call(151, "setProperty", "ui.Label1.value", "Bureau"); "39" est le numéro de module dimmer de la pièce à reporter dans la variable "Aube_module" "151" est le numéro du virtual device "ui.Label1.value" est le numéro de label pour afficher l'info "bureau" Répéter cela en modifiant les données pour chaque pièce B- 7 boutons pour choisir la courbe de variation avec le code suivant dans chaque bouton: --[[ %% properties %% globals --]] fibaro:setGlobal("Aube_courbe", "linear"); fibaro:call(151, "setProperty", "ui.Label2.value", "linear"); "linear" est le type de courbe à reporter dans la variable "Aube_courbe" "151" est le numéro du virtual device "ui.Label2.value" est le numéro de label pour afficher l'info "linear" Répéter cela pour les 6 autres courbes C- 1 bouton "Début réveil" pour lancer le réveil en douceur suivant le variable "Aube_module" et "Aube_courbe" avec le code suivant: --[[ %% properties %% globals --]] fibaro:debug("HC2 start script at " .. os.date()); -- LUA - Dawn simulator V1.0.1 -- -- Wake up "naturally", illuminated by a soft light and progressive. -- Based on open source Robert Penner's original easing equations (Copyright © 2001 Robert Penner) -- Copyright © 2013 Jean-christophe Vermandé -- USER SETTINGS : -- Type of equation used to generate the curve (dimming). -- Possible values are: linear, inQuad, inExpo, outExpo, inOutQuad, inOutExpo, outInExpo local curve = fibaro:getGlobal("Aube_courbe") -- Type of equation used to generate the curve (dimming). local debug = false; -- To log in HC2 debug area local devices = {fibaro:getGlobal("Aube_module")}; -- IDs of devices to be varied (only dimmable device), eg. {1, 16, 10} local startValue = 0; -- Begin value local endValue = 100; -- End value local duration = 40; -- Execution time in seconds of the scene -- DO NOT EDIT THE CODE BELOW (except to suit your needs) -- dawnSimulatorEngine = { version = "1.0.1" }; function dawnSimulatorEngine:init(startValue, endValue, duration, devices, curve, debug) self._lastValue = 0 self._startValue = startValue or 0; self._endValue = endValue or 100; self._duration = duration or 1; self._devices = devices or {}; self._curve = equations.map[curve or 'linear']; -- require 'equations' to operate self._debug = debug or true; end function dawnSimulatorEngine:_update(value) self._lastValue = value; -- keep in memory the last value to compare later -- loop in deveices local name, id; for i=1, #self._devices do id = tonumber(self._devices[i]); fibaro:call(id, "setValue", value); if (self._debug) then name = fibaro:getName(id); if (name == nil or name == string.char(0)) then name = "Unknown" end fibaro:debug("Device:" .. name .. " setValue: " .. value); end end end function dawnSimulatorEngine:_compute(time) return math.ceil(tonumber(self._curve(time, self._startValue, self._endValue, self._duration))); end function dawnSimulatorEngine:start() local computedValue; local doWhile = true; local time = 0; -- timeline while (doWhile == true) do computedValue = self:_compute(time); -- prevent multiple call with same value if (computedValue ~= self._lastValue) then -- update device value self:_update(computedValue); end time = time + 1; if (time > self._duration) then doWhile = false; if (self._lastValue < self._endValue) then -- force target value self:_update(computedValue); end else fibaro:sleep(1000); end -- do while end end -- Easing function (Penner's Easing Equations) equations = equations or { version = "1.0.1", -- Linear linear = function(t, b, c, d) return c * t / d + b; end, -- InQuad inQuad = function(t, b, c, d) t = t / d; return c * math.pow(t, 2) + b; end, -- InOutQuad inOutQuad = function(t, b, c, d) t = t / d * 2; if t < 1 then return c / 2 * math.pow(t, 2) + b; else return -c / 2 * ((t - 1) * (t - 3) - 1) + b; end end, -- InOutExpo inOutExpo = function(t, b, c, d) if t == 0 then return b end if t == d then return b + c end t = t / d * 2; if t < 1 then return c / 2 * math.pow(2, 10 * (t - 1)) + b - c * 0.0005; else t = t - 1; return c / 2 * 1.0005 * (-math.pow(2, -10 * t) + 2) + b; end end, -- OutInExpo outInExpo = function(t, b, c, d) if t < d / 2 then return equations.outExpo(t * 2, b, c / 2, d); else return equations.inExpo((t * 2) - d, b + c / 2, c / 2, d); end end, -- InExpo inExpo = function(t, b, c, d) if t == 0 then return b; else return c * math.pow(2, 10 * (t / d - 1)) + b - c * 0.001; end end, -- OutExpo outExpo = function(t, b, c, d) if t == d then return b + c; else return c * 1.001 * (-math.pow(2, -10 * t / d) + 1) + b; end end }; -- Equations map equations.map = { ['linear'] = equations.linear, ['inQuad'] = equations.inQuad, ['inExpo'] = equations.inExpo, ['outExpo'] = equations.outExpo, ['inOutQuad'] = equations.inOutQuad, ['inOutExpo'] = equations.inOutExpo, ['outInExpo'] = equations.outInExpo } -- START SIMULATOR ENGINE if (debug) then fibaro:debug("Starting the process"); end --startEngine(equations.map[curve]); dawnSimulatorEngine:init(startValue, endValue, duration, devices, curve, debug); dawnSimulatorEngine:start(); if (debug) then fibaro:debug("End of the process"); end Voila ce que cela donne graphiquement dans l'image attachée. Y a plus qu'à faire mumuse. Maintenant y a un truc que je voudrais faire et que l'on voit sur le screenshot c'est utiliser le slider pour régler la durée, mais je n'y arrive pas car je n'ai jamais utilisé un slider. J'ai tenté dans le code LUA du slider: --[[ %% properties %% globals --]] fibaro:setGlobal("Aube_duree", fibaro:getValue(151, "ui.Slider1.value")); --[[ %% properties %% globals --]] fibaro:setGlobal("Aube_duree", _sliderValue_); Cela ne marche pas. et dans le code principal local duration = _sliderValue_; -- Execution time in seconds of the scene Mais là , la lumière s'allume trop vite comme si je l'allumais normalement. "Aube_duree" est une variable avec valeur numérique. Si quelqu'un peut m'aider 2
BenjyNet Posté(e) le 31 décembre 2013 Signaler Posté(e) le 31 décembre 2013 Bon et le wall plug dimmer il est pour quand ? Vous avez mis quoi comme prise et ampoule vous ? J'ai rien trouvé de bien satisfaisant moi...
lolomail Posté(e) le 31 décembre 2013 Signaler Posté(e) le 31 décembre 2013 Moi ce sont des dimmer qui commandent mes plafonniers. Les ampoules de sont des incandescences actuellement saut une pièce ou il y a un led dimmable avec un fibaro bypass.
lolomail Posté(e) le 1 janvier 2014 Signaler Posté(e) le 1 janvier 2014 Bonne année à tous J'ai remis le nez dans ce script après avoir regardé celui de Krikroff sur la gestion de la déshum, cela m'a donné une idée. J'ai testé plusieurs modifs et celle là marche, y surement de quoi optimiser: Dans le slider j'ai mis: --[[ %% properties %% globals --]] fibaro:setGlobal("Aube_duree", _sliderValue_); Puis dans le script j'ai remplacé: local duration = 40; -- Execution time in seconds of the scene Par: local duree = fibaro:getGlobal("Aube_duree") local duration = tonumber(duree) -- Execution time in seconds of the scene Au final cela marche, réglage possible entre 0 et 100 secondes
lolomail Posté(e) le 4 janvier 2014 Signaler Posté(e) le 4 janvier 2014 Petite évolution aujourd'hui car Mme trouvait que c'était trop violant comme réveil à cause de la luminosité à 100%. 1- Ajout d'une variable "Aube_lum" 2- Ajout d'un slider avec le code suivant: --[[ %% properties %% globals --]] fibaro:setGlobal("Aube_lum", _sliderValue_); 3- Modification du script de réveil comme suit: Remplacer local endValue = 100; -- End value Par local luminosite = fibaro:getGlobal("Aube_lum") local endValue = tonumber(luminosite) -- End value Enjoy
Franie Posté(e) le 31 janvier 2015 Signaler Posté(e) le 31 janvier 2015 Je viens d'installer. Merci ca fonctionne top
Nicoco4956 Posté(e) le 12 octobre 2015 Signaler Posté(e) le 12 octobre 2015 Bonjour, Merci pour le partage. Je redéterre le sujet. :-) Voici un autre tuto de simulateur d'aube : http://www.domotique-fibaro.fr/index.php/topic/4014-r%C3%A9veil-douceur-aurore-artificielle-sp%C3%A9cial-parents/ Partage par SebCbien (merci à lui aussi) Ce que je trouve pas mal c'est le fait de détecter les conditions individuellement des actionneurs : - Si une lampe est déjà allumée, elle est exclue de l'allumage (évite de passer de 100% à 5% lorsque le script démarre et que l'on est déjà levé) - Si on modifie une lampe elle est exclue (extinction ou allumage à 100% par exemple) - Si toutes les lampes ont été modifiées, fin du script Je voulais donc savoir si quelqu'un aurait par hasard intégré ce type de fonction au simulateur ? Et dans un sens global savoir où vous en êtes sur votre simulateur ? Merci PS : débutant sur HC2 mais commençant à voir l'intérêt du LUA
sebcbien Posté(e) le 19 octobre 2015 Signaler Posté(e) le 19 octobre 2015 Si je peux me permettre un retour... Personnellement àla longue on ne se réveille plus que quand la lumière est à100%... et encore ;-) Alors que ce soit une courbe X ou Y, dans un sens ou dans l'autre, l'impact est très faible. Ce n'est que mon expérience et ça inclus mes enfants et ma femme. J'imagine que certains doivent avoir un sommeil très léger et que une courbe logarithmique leur conviendra mieux.
HANSOLO Posté(e) le 19 octobre 2015 Signaler Posté(e) le 19 octobre 2015 Pour l'éclairage d'un aquarium...
sebcbien Posté(e) le 19 octobre 2015 Signaler Posté(e) le 19 octobre 2015 tes poissons font du yoga aussi ?
HANSOLO Posté(e) le 19 octobre 2015 Signaler Posté(e) le 19 octobre 2015 J'en ai plus, mais avant d'être équipé en domotique j'avais cherché comment faire une simulation d'aube et de coucher de soleil pour ne pas stresser ces pauves bètes.
Fred.domotique Posté(e) le 9 décembre 2015 Signaler Posté(e) le 9 décembre 2015 Salut A tous, Je revient sur ce sujet car j'ai mis en place le simulateur d'aube sur la base de la scène à Krikroff avec une mise en module virtuel idem à Lolomail, juste un slider en plus pour le paramétrage de la durée en minute. Maintenant ma question concerne la possibilité de mise en place d'un "snooze" ou "stop" pour stopper la scène de variation de lumière. Quelqu'un connait la méthode ? n'étant pas trop calé lua, il s'agit juste d'un bout de code permettant de stopper durant x minute le cycle de réveil et de le relancer, ou pas. Merci de votre aide.
ebtjjn Posté(e) le 23 août 2017 Signaler Posté(e) le 23 août 2017 Hello, je ne sais pas si j'ai loupé un truc mais comment faites-vous pour mettre à jour l'heure de lever sur votre HC2? EN modifiant la varaiable à chaque fois? Ou màj auto depuis l'alarme du téléphone vers la HC2 ?? Parce que je ne me réveille pas tous les jours à la même heure... et j'avoue que devoir aller changer la variable au moment de me coucher, c'est pas très WAF ni MMAF (Moi-même Acceptance Factor)!! ;-) J'ai bien vu le post de lionel57 sur l'appli mais ça me semble compliqué à mettre en place pour moi... J'avais aussi récupéré une façon de faire avec Tasker sur un autre site mais je crois que ça ne fonctionne plus depuis qqes temps... Merci de vos retours. Julien
Did Posté(e) le 23 août 2017 Signaler Posté(e) le 23 août 2017 La box connait l'heure de lever et de coucher du soleil selon les coordonnées GPS que tu lui as renseigné. Tu peux les récupérer par le mode bloc dans les conditions du timer, moi, c'est par le GEA de @Steven (sunset et sunrise).
ebtjjn Posté(e) le 24 août 2017 Signaler Posté(e) le 24 août 2017 Salut Did, Ok mais après ? Je ne me réveille pas obligatoirement voire jamais en même temps que le soleil !! Et je ne le veux pas !!? :-) Ce que je souhaite c'est que le simulateur se déclenche en fonction de l'heure que je mets sur mon alarme de téléphone, le soir en me couchant... Et cette heure change d'un jour sur l'autre selon mes RV, astreintes etc... Pour compléter, je n'ai pas GEA... j'ai peur que ce soit compliqué pour moi... Je bataille déjà avec LUA donc çà fait rajouter une couche d'apprentissage en plus.
Did Posté(e) le 24 août 2017 Signaler Posté(e) le 24 août 2017 Je ne suis pas spécialiste de Lua mais tu devrais pouvoir inclure l'ouverture des volets dans la scène pour que ce soit automatique (ou lancer une autre scène qui elle, les ouvrira).
ebtjjn Posté(e) le 24 août 2017 Signaler Posté(e) le 24 août 2017 Heu, je crois qu'on ne se comprend pas did...!! :-) En tout cas, je ne comprends pas ce que tu veux me dire...!! ^^ Ce que je souhaite, c'est : 1- le soir, programmer, sur mon téléphone android, l'heure de réveil du lendemain (et c'est mon téléphone qui sonnera pour me faire lever du lit) 2- faire en sorte que cette heure de réveil, paramétrée sur l'appli réveil de mon téléphone, soit intégrée dans la HC2 : comment ? c'est ça ma question 3- en fonction de l'heure de réveil que j'aurai paramétrée et intégrée comme une variable dans un VD ou une scène, permettre le déclenchement du simulateur d'aube. Pour être exact, je souhaite déclencher le simulateur 20 minutes avant mon heure de réveil et faire durer le simulateur pendant 20 minutes --> comme ça, quand la lumière est à 100%, le réveille sonne et je me lève...
Did Posté(e) le 24 août 2017 Signaler Posté(e) le 24 août 2017 Du téléphone à la HC2, je ne sais pas faire.
sebcbien Posté(e) le 24 août 2017 Signaler Posté(e) le 24 août 2017 Le plus simple, c'est GEA.Le vd alarme de Steven et une ligne dans GEA.Tu trouveras des exemples faciles dans le showroom GEA (voir la signature)Tu peux programmer une heure et les jours auxquels ça doit déclencher (par exemple pas les weekend)J'ai plusieurs VD alarm pour plusieurs heures (un pour la semaine, un pour l'heure du weekend, un pour la veilleuse des enfants)..Sent from my SM-N910F using Tapatalk
Fred.domotique Posté(e) le 24 août 2017 Signaler Posté(e) le 24 août 2017 Salut à Tous, Je suis pas mal pris en ce moment mais pour ma part j'utilise mon réveil android pour lancer mes scènes de réveil. Ci dessous le lien vers le tuto et le nécéssaire réalisé par Lionel57
ebtjjn Posté(e) le 7 septembre 2017 Signaler Posté(e) le 7 septembre 2017 Salut, @sebcbien : pas encore osé passez le pas pour GEA... j'ai peur que ce soit trop compliqué pour moi (faibles notions en lua) @Fred.domotique : j'avais bien vu le tuto de @Lionel57 mais quand j'installe l'apk sur mon tél, j'ai un message d'erreur qui dit" Un pbe est survenu lors de l'analyse du package". J'ai un SAMSUNG S7 EDGE avec ANdroid 7 (Nougat)...
Fred.domotique Posté(e) le 14 juin 2022 Signaler Posté(e) le 14 juin 2022 Est ce que quelqu'un à déjà fait une adaptation d'un simulateur d'aube sur HC3 ?
Messages recommandés