Aller au contenu
Ez3kiel

Smart Lights - Gestion Auto De Votre Eclairage

Recommended Posts

Bonjour,

Je vois pas mal de personne qui s’intéresse à  la gestion auto de leur éclairage en fonction de la détection de mouvement et de la mesure de luminosité.
J'utilise depuis plusieurs mois un script de Stevenvd du forum officiel.
Etant étonné de ne pas voir ces infos présente sur notre forum, je vous en fait une petite présentation.

Ce script a pour but de gérer de manière autonome la ou les lumières de votre pièce en fonction de la lumière ambiante, de la présence dans la pièce, de vos variables Dodo/Debout, Présence/Abscence, Jour/nuit.
Le principe est le suivant :
La journée est divisée en plusieurs périodes(Matin, jour, soir, nuit)
Si on détecte un mouvement et que la lumière est trop basse pour la période de la journée alors on allume la/les lumière(s) pour X temps.
Mais là  ou le script est bien pensé, c'est qu'il intègre la possibilité d'allumer une ou plusieurs lampe en fonction de la journée et de la lumière ambiante  mais aussi de gérer des exceptions ( Lecture d'un film sur kodi, absence de la maison, ou ce que vous voulez)

Le post sur le forum officiel se trouve ICI et le script complet est dispo sur le site de l'auteur .

Pré-requis :
Vous devez avoir des variables globales pour les états suivants:
sleepState = "Dodo"
timeOfDay = " Periode de la journée"
presentState = "Présence"
Ces variables changent de valeur via un autre script ( GEA ou scheduler ou toute autre scene de votre cru !)

Ci-dessous les 1eres ligne du script où l'on a besoin d'intervenir.
(j'ai traduit les commentaires en français pour les anglophobes ou les Lorrains  :D  )
 

--[[
%% properties
477 value
480 value
491 value
%% globals
TimeOfDay
PresentState
--]]

--[[ Changez - XXX value - au dessus. Une par détecteur de mouvement, une par détecteur de lux.
     La variable globale TimeOfDay et les lux s'assurent que la scene
     soit déclenchée quand vous etes déja dans la pièce et que quelquechose change.

     faites vos régalges en dessous, lumières et  ajouter des " extra functions" 
     Feel free to suggest changes or contact when having problems.
	 It is not allowed to sell or distribute this software and earlier versions without the approval of Control Living
     © 2014 - 2015 Smart lights by Control Living
     Version 1.6.7
--]]

--------------------------------------------------------------------
-----------------------YOUR LIGHT SETTINGS--------------------------

motionSensorID    = {477};  -- changez les id du ou des détecteurs de mouvement {477} ou {477,478,479} si vous en avez plusieurs.
LuxSensorID       = {480};  -- changez les id du ou des détecteurs de luminosité {480} ou {480,481,482} si vous en avez plusieurs.

--Pour eviter de devoir modifier tout le script, on définit ici les equivalences entre vos variables et celles du script
--Entrez le nom de vos Variables Globales qui correspondent aux variables ci dessous.Il faut les créer au préalable. SANS CELA , LA SCENE NE FONCTIONNERA PAS. Attention aux majuscules !
sleepState   = "SleepState"; --Sleep globalstate variable.
timeOfDay    = "TimeOfDay"; --Time of Day Global variable.
presentState = "PresentState"; --Present state Global variable.

--Enter the values of your global variables stated above. If not using, copy the name in front of the "YourValueName"
--Entrez les valeurs de vos Variables Globales qui correspondent aux variables ci dessous
sleepStateMapping   = {Sleeping="Sleeping", Awake="Awake"};
timeOfDayMapping    = {Morning="Morning", Day="Day", Evening="Evening", Night="Night"};
presentStateMapping = {Home="Home", Away="Away", Holiday="Holiday"};

-- Réglez la valeur en lux à  laquelle la lumière doit s'allumer.
-- Si vous ne voulez pas utiliser de minLux alors mettez : 65535
minLuxMorning  = 100;
minLuxDay      = 60;
minLuxEvening  = 40;
minLuxNight    = 30;

--Si la luminosité est supérieur à  maxlux, la lumière s'éteint après le délai onTime (voir plus bas).
maxLuxMorning = 300;
maxLuxDay = 300;

--[[
 Maintenant la partie la plus importante:
   Ici vous pouvez définir quelle lumière doit s'allumer,à  quelle valeur et pour combien de temps.
   Laissez les acollades vides pour pas de lumière.
   Pour régler la valeur d'une lampe sans timer on utilise 2 parametres: {id=ID_LAMPE, setValue="VALEUR"}
   Pour régler la valeur d'une lampe avec un timer on utilise 3 parametres: {id=ID_LAMPE, setValue="VALEUR", onTime=TEMPS_EN_SECONDES }
   Pour régler la valeur d'un RGBW, on défini les 4 canaux dans le SetValue : setValue={R="255",G="255",B="255",W="255"}
   --                                           RGBW set: {id=ID_LAMPE, setValue={R="255",G="255",B="255",W="255"}, onTime=TEMPS_EN_SECONDES }
   --]]
   
lightsSleeping = {}; --lights that are triggered when Sleepstate is sleeping. 
lightsMorning  = {{id=471, setValue="99", onTime=300},{id=491, setValue="99", onTime=300},{id=902, setValue="turnOn", onTime=360}};
lightsDay      = {{id=471, setValue="80", onTime=90},{id=491, setValue="80", onTime=90}};
lightsEvening  = {{id=471, setValue="60", onTime=300},{id=491, setValue="60", onTime=300},{id=902, setValue="turnOn", onTime=300}};
lightsNight    = {{id=471, setValue="45", onTime=60}, {id=491, setValue="45", onTime=60}};

--Manual Override, the time that lights will not be turned ON again after manually turning them off.
--OverrideFor, le temps en secondes pendant lequel la lumière ne se rallume pas apres une extinction manuelle
--dimmDownTime, temps en seconde pour le dimmer à  l'extintion
OverrideFor  = 90;
dimmDownTime = 10;

--------------------------------------------------------------------
-------------------------EXTRA FEATURES-----------------------------
--Ici le script integre des fonctions supplementaires. C'est ici que l'on peut ajouter des conditions supplémentaires pour eviter l'allumage des lumières pendans la lecture d'un film par exemple

extraMorningFunc = function()
  -- Add your extra code here. If you want some checks or maybe run a virtual device button.
  --This code is always triggered if there is motion.
  -- movieLights =  {{180, "10"},{181, "10"} };
  --if (xbmc == "playing" ) then CallLightArray(movieLights);
  ExtraDebug("Extra morning function called");
end

extraDayFunc = function()
  -- Add your extra code here. If you want some checks or maybe run a virtual device button. 
  --This code is always triggered if there is motion.
  ExtraDebug("Extra day function called");
end

extraEveningFunc = function()
  -- Add your extra code here. If you want some checks or maybe run a virtual device button.
  --This code is always triggered if there is motion.
  ExtraDebug("Extra evening function called");
end

extraNightFunc = function()
  -- Add your extra code here. If you want some checks or maybe run a virtual device button.
  --This code is always triggered if there is motion.
  ExtraDebug("Extra night function called");
end

extraLightTriggerChecks = function()
--add extra checks here. and return the total true or false value.
--if returning false the lights will not be triggered.
-- for instance:  return ( (pcTurnedOff == true ) and (xbmc ~= "Empty") );
  -- return true to enable lights to turn on
  return true;
end

extraOffChecks = function()
  --return true to keep lights on.
  return false;
end

--------------------------------------------------------------------
----------------------ADVANCES SETTINGS-----------------------------
local showStandardDebugInfo = true; -- Debug shown in white
local showExtraDebugInfo    = false; -- Debug shown in orange

  • Upvote 4

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour le partage, un bon p'tit script bien utile!! :)

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Content que ça vous plaise.

Si j'ai pas été clair sur certains trucs, n'hésitez pas 

Partager ce message


Lien à poster
Partager sur d’autres sites

salut 

 

Super !

Justement je recherche a faire varier la puissance de la lumière en fonction des horaires.

J'utilise pour ça un Dimmer 2 fibaro mais je n'arrive pas à  modifier le % d'intensité en code LUA.

T'as une astuce ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut,

 

Pour modifier l'intensité de tes dimmers c'est ici que ça se passe :

lightsSleeping = {}; --lights that are triggered when Sleepstate is sleeping. 
lightsMorning  = {{id=471, setValue="99", onTime=300},{id=491, setValue="99", onTime=300},{id=902, setValue="turnOn", onTime=360}};
lightsDay      = {{id=471, setValue="80", onTime=90},{id=491, setValue="80", onTime=90}};
lightsEvening  = {{id=471, setValue="60", onTime=300},{id=491, setValue="60", onTime=300},{id=902, setValue="turnOn", onTime=300}};
lightsNight    = {{id=471, setValue="45", onTime=60}, {id=491, setValue="45", onTime=60}};

Tu peux changer la valeur du setValue pour chaque lampe et pour chacune des périodes de la journée (99 pour un allumage à  pleine puissance )

Partager ce message


Lien à poster
Partager sur d’autres sites

Super merci

j'ai essayé de piocher dans le code pour le comprendre mais "onTime" ne fonctionne pas. je ne trouve pas cette fonction dans le code LUA.

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut, Une petite question,,

 

J'ai un Mode "Auto""Manuel en module virtuel avec une variable, si je comprends bien, j'intègre ma variable a la place de "SleepState" par "Detection_Jardin" avec Auto,Manuel   ?

 

Le Mode "PresentState" on peut le supprimer ?

 

Et dernière, si je veux rajouter un mode Allumer par une ouverture de porte par exemple ?

 

Est ce que quelqu'un utilise un oeil dans une cuisine et si oui, ou le placer sachant que cuisine et salon son ouvert ; ( au sol , plafond pour ne pas detecter le salon).

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut, je te conseille plutôt d utiliser la fonction extraLightTriggersCheck en mettant directement ta variable auto/manuel comme dit dans le 1er post

Partager ce message


Lien à poster
Partager sur d’autres sites

vu : extraLightTriggerChecks = function(Detection_Jardin)   ou extraLightTriggerChecks = function() Detection_Jardin()

if "Detection_Jardin"="OFF"(false)(Auto)

 

if "Detection_Jardin"="ON" (True)(Manuel)

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut q.philippe, 

extraLightTriggerChecks = function()
--add extra checks here. and return the total true or false value.
--if returning false the lights will not be triggered.
-- for instance:  return ( (pcTurnedOff == true ) and (xbmc ~= "Empty") );
  -- return true to enable lights to turn on
  return true;
end

Ici, le contenu de la fonction doit retourner "faux" pour que les lampes ne s'allument pas malgré la detection de mouvement.

 

Par exemple chez moi , je ne veux pas que les lampes s'allument si je regarde un film( même si je bouge).

la variable Xbmc_salon passe automatique à  movies quand je regarde un film

J'ai donc mis ceci : 

local xbmc= fibaro:getGlobalValue("Xbmc_salon");
  return (xbmc == "Empty");

xbmc == "Empty" est fausse pendant la lecture, le script n'allume pas les lumières.

 

Tu peux aussi faire ça : 

Là , la personne sur le forum officiel voulait que les lumières ne s'allument pas si le périphérique 520 consommait plus de 50 W

extraOffChecks = function()
  --return true to keep lights on.
  if ( tonumber(fibaro:getValue(520, "power")) > 50 ) then
   return false;
   else return true;
  end
end

J'espère que c'est plus clair pour toi.

Partager ce message


Lien à poster
Partager sur d’autres sites

Super merci

j'ai essayé de piocher dans le code pour le comprendre mais "onTime" ne fonctionne pas. je ne trouve pas cette fonction dans le code LUA.

Salut Elmer , le "OnTime" ne fonctionne que dans ce script car c'est une fonction interne à  ce script.

 

Toi , tu essayes de te faire ton script ou tu utilises celui là  ? 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

Tout d'abord très bon script Merci

Dans mon salon je ne souhaite pas mettre de timer car lorsque je suis vautré dans mon canapé le capteur de mouvement ne me détecte plus. Je souhaiterai par contre que la lumière du salon s'éteigne toute seule lorsque j'ouvre les volets (le détecteur de luminosité supérieur au luxmax) malgré l'abscence de timer.

Pouvez vous m'aider?

 

D'autre part je viens juste de découvrir GEA et je souhaiterai déclencher les variable d'état à  partir de ce script. Pour que ca fonctionne que faut il raconter à  gea?

 

Merci de votre aide

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut ntaravel, 

 si tu ne veux pas de timer, tu peux ne pas en mettre comme marqué en début de post : 

Pour régler la valeur d'une lampe sans timer on utilise 2 paramètres: {id=ID_LAMPE, setValue="VALEUR"}

 

Pour la luminosité, tu définies le maxLux et à  la fin du compte a rebours , la lumière s'éteint.

Concernant GEA, je ne l'utilise pas mais je suis sur que sur le post dédié à  GEA les gars seront ravis de te dire comment changer une variable via GEA, posent leur directement la question

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut 

 

Est ce normal que la variable presentState commute automatiquement sur "Away" au bout d'un certain temps sans detection alors que je suis encore à  la maison.

 

J'aurai préféré modifier cette variable à  l'aide d'un bouton virtuel pour l'instant en attendant le joli champignon "fibaro button" plutôt que d'avoir une gestion automatique de cette variable.

 

J'entre chez moi j'appui ==Home  Je sors de chez moi j'appui long ==Away

 

Merci d'avance

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut ntaravel, 

 

Le script n'est pas censé modifier l'état des variables. Es-tu sur que tu n'as pas une autre scene ou un VD qui bascule ta variable sur Away ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Vraiment un excellent script !!

Je galère depuis 2 semaines pour intégrer quelque chose qui est la même intelligence, mais plutot à  la manière d'un poulpe me concernant :)

Et encore le poulpe est douté d'une intelligence que je n'ai pas :D

 

 

Je vais mixer ce script avec GEA.

 

Merci beaucoup à  tous !!

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello,

 

J'ai installé le script, simplement il ne fonctionne pas :(

J'ai bien déclaré les variables, dans GEA mes lignes de commande passe les variables du script dans les bons modes en fonction de ce que je veux faire.

 

En ce moment pour test, nous sommes le matin et la maison à  présent : PresentState est "Present" , SleepState est "PasDodo" et TimeOfDay est "Jour"

J'ai 4LUX dans la pièce.

 

Ici j'ai mis : minLuxDay  = 3;

et

lightsDay = {{id=204, setValue="80", onTime=90}};

 

Dans l'entete j'ai bien l'id 204

 

Mais pas de réaction, une idée ?

 

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Mais lol quoi, le script posté n'était pas entier en début de page mdrrrr

Je n'avais pas lu qu'il fallait aller chercher le script entier sur le site de l'auteur, je suis xptdr :P:D:lol: :lol:

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut, Oui j'ai juste traduit une partie du script !

Sinon, En en-tête,Il te faut les id du motion sensors ( mouvement et lumière) pas les id des lampes.

Il faut aussi que le minluxday soit supérieur aux lux mesurés pour que le script se déclenche.

Partager ce message


Lien à poster
Partager sur d’autres sites

@ Ez3kiel

 

Je ne pige pas vraiment ces commandes.

En fait on va lire la valeur de la variable Xbmc_Salon (Ok)
 

Mais le rapport avec Empty ? Parce que du coup si la valeur de ma variable est à  "movie" (comme tu le dis dans ton exemple)

Qu'est ce que va faire smart light ?? avec le Empty ? Pige vraiment pas...

local xbmc= fibaro:getGlobalValue("Xbmc_salon");
return (xbmc == "Empty");

Mis à  part ça tout fonctionne, c'est véritablement un bonheur ce script !

Mais quand TvSalon est à  "On" et que je veux pas que la lumière 204 s'allume, j'ai essayé des trucs mais ça fonctionne pas...

Partager ce message


Lien à poster
Partager sur d’autres sites

Concernant les lampes dans l'entete je ne savais pas, du coup je les avaient mise...

Et concernant les lux je m'étais rendu compte....avec tests...

 

Salut, Oui j'ai juste traduit une partie du script !

Sinon, En en-tête,Il te faut les id du motion sensors ( mouvement et lumière) pas les id des lampes.

Il faut aussi que le minluxday soit supérieur aux lux mesurés pour que le script se déclenche.

Partager ce message


Lien à poster
Partager sur d’autres sites

Finalement ça fonctionne...

  local Multimedia= fibaro:getGlobalValue("TvSalon");
  fibaro:debug(Multimedia);
  return (Multimedia == "On");

Edit : Je ne savais pas que ça parlait d'une variable spécifique à  xbmc ou il y a plusieurs valeurs (movies, Empty etc...)

C'est de la tuerie ce script couplé a GEA. Enfin mon oeil fonctionne au doigt et à  l'oeil :D

Partager ce message


Lien à poster
Partager sur d’autres sites

Domodial, 

pour être honnête, j'ai mis en exemple ce que j'utilise chez moi ( qui marche apres plusieurs essais). Mais avec le recul , je ne ferai plus comme ça aujourd'hui. à‡a marche mais c'est tordu...

 

Dans mon exemple, je travaille dans la section : 

extraLightTriggerChecks = function()
--add extra checks here. and return the total true or false value.
--if returning false the lights will not be triggered.
-- for instance:  return ( (pcTurnedOff == true ) and (xbmc ~= "Empty") );
  -- return true to enable lights to turn on
  return true;
end

L'auteur du script nous dis qu'il faut retourner "true" pour que le lumières s'allument.( chose que je ne veux pas )

Alors je lui mets un expression fausse, comme ça la lumière s'allume pas.

 

Un truc plus logique serait de faire un test sur la variable comme ceci : 

local xbmc= fibaro:getGlobalValue("Xbmc_salon");
if (xbmc == "Movie")
--film en cours de lecture
then return false;
--false pour eviter aux lumière de s'allumer
else return true
end
je n'ai pas testé ce code mais j’espère que tu me suis 

Partager ce message


Lien à poster
Partager sur d’autres sites

×