Aller au contenu

Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'Simulateur'.



Plus d’options de recherche

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Type du contenu


Forums

  • Bienvenue
    • Annonces et suggestions
    • Nouveau ? Présentez-vous
    • Le bistrot
    • Mon installation domotique
    • Autres Solutions Domotiques
  • La HC2 et ses périphériques
    • La Home Center pour les nuls
    • Home Center 2 & Lite
    • Modules Fibaro
    • Modules Z-wave
    • Périphériques et matériels autres
    • Plugins
    • Alarme & Vidéo-surveillance
    • Multimédia
    • Chauffage et Energie
    • Actionneurs & Ouvrants (Portail, volets...)
    • Eclairage
    • Applications Smartphones et Tablettes
    • English Section
  • Les objets connectés
    • Les Assistants Vocaux
  • Fibaro's Awards
    • Membre du mois
    • Jeux concours & Cadeaux
  • Les bonnes affaires
    • Sites internet
    • Petites annonces

Rechercher les résultats dans…

Rechercher les résultats qui…


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filtrer par nombre de…

Inscription

  • Début

    Fin


Groupe


Jabber


Skype


Ville :


Intéret :


Version

2 résultats trouvés

  1. 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
  2. bencol

    Réplicateur De Présence

    => publication d'une version 2.0 plus efficace, plus simple et avec un meilleur debug + commentaires en français Le principe de ce bout de code est le suivant : simuler une présence dans votre logement en s'appuyant sur votre mode de vie des mêmes journées les précédentes semaines. Le programme analyse le comportement des lumières des 2 dernières semaines (à partir de l'historique de consommation) et simule par réplication une vraie vie (la vôtre !) dans votre logement. 3 prérequis : - il est nécessaire de vérifier que les modules de type lampe sont bien déclarés comme lampe. Pour cela il faut aller dans la configuration avancée des modules concernées et sélectionner dans appareil commandé : Eclairage ou Lampe de chevet ou Lampe de jardin,.... - ajouter pour les modules qui le permettent le suivi de la consommation électrique (attention, il faudra attendre au moins 2-3 semaines que cela soit efficace) - créer une variable globale "Simu_presence" avec comme possibilité ON ou OFF Le code ci-dessous peut être placé dans la boucle principale dans un module virtuel. En pièce jointe le module à importer. ----------------------- -- fonction d'arrondi -- ------------------------ function math.round(num, idp) return tonumber(string.format("%."..idp.."f", num )); end -------------------- -- Debug function -- -------------------- function Debug(message, color) if (color == nil) then color = "white";end; fibaro:debug(string.format("<font color=" .. color .. ">" .. message .. "</font>")); return; end ------------------------------------------------------------------------------------------------------------------ -- Fonction de récupération de l'historique de l'allumage d'une lampe -- ------------------------------------------------------------------------------------------------------------------ local function CollecteStatus(DureeHistorique, Device) local TimeStart = DureeHistorique + 300; -- à la date de l'historique plus 5 min local TimeEnd = DureeHistorique - 300; -- à la date de l'historique moins 5 min -- init tableaux et variables local TabMeasure = {}; -- tableau de mesures timestamp/activité local HC2 = Net.FHttp("127.0.0.1",11111); if (Device ~= nil) then Response, status, errorCode = HC2:GET("/api/energy/now-" .. TimeStart .. "/now-" .. TimeEnd .. "/summary-graph/devices/power/" .. Device); end; if (tonumber(errorCode)==0 and tonumber(status)==200) then TabMeasure = json.decode(Response); -- chargement des données dans une table Debug("Nb mesures : " .. table.getn(TabMeasure) .. " (historique il y a " .. DureeHistorique/86400 .. " jours)","yellow"); local State = 0; -- scan la période concernée les semaines précédente for i = 1, table.getn(TabMeasure) do local Heure = tonumber(TabMeasure[i][1])/1000; -- collecte de l'heure et conversion des millisecondes en secondes if (tonumber(TabMeasure[i][2]) > 0) -- il y a une activité then State = 1; end Debug("Mesure " .. i .. " : " .. os.date("%A %d/%m/%y %H:%M",Heure) .. " => " .. State); end return State; -- retour de la fonction else Debug("fail : ".. status .. " - error : ".. errorCode); end end -- Scan de tous les devices si alarme active if (fibaro:getGlobalValue("Simu_presence") == "ON") then Debug("START REPLICATOR...."); fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1062); fibaro:log('Simulation active'); Debug("Alarme active => Scan...."); for device=1, 1000, 1 do if (fibaro:getValue(device, "isLight") == '1') -- si type lampe then -- lancement de la fonction de collecte des informations d'allumage ou d'extinction Debug("***** Collecte de la consommation électrique pour la lampe " .. device .. " " .. " *****", "yellow"); local StateSem1 = CollecteStatus(7 * 86400, device); -- appel de la fonction => 1 semaine avant local StateSem2 = CollecteStatus(14 * 86400, device); -- appel de la fonction => 2 semaines avant -- si lampe active les dernières semaines et lampe actuellement éteinte => allumage if (StateSem1 == 1 or StateSem2 == 1) then if (tonumber(fibaro:getValue(device, "value")) == 0) -- la lampe est éteinte then fibaro:call(device, "turnOn"); -- allumage fibaro:call(device, "setValue", "50"); Debug("Allumage Lampe : " .. device, "green"); else Debug("Pas d'action, lampe : " .. device .. " déjà allumée", "green"); end end -- si lampe inactive les dernières semaines et lampe actuellement allumée => extinction if (StateSem1 == 0 and StateSem2 == 0) then if (tonumber(fibaro:getValue(device, "value")) > 0) -- si le device est allumé then fibaro:call(device, "turnOff"); -- extinction Debug("Extinction Lampe : " .. device, "red"); else Debug("Pas d'action, lampe : " .. device .. " déjà éteinte","red"); end end end end else fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1061); fibaro:log('Simulation inactive'); Debug('Simulation inactive'); end fibaro:sleep(120000); -- temporise 2 minutes Presence_Replicator v1.vfib Presence_Replicator v2.vfib
×