Aller au contenu

Réveil Douceur / Aurore Artificielle -- Spécial Parents


sebcbien

Messages recommandés

Petit script permettant de se réveiller en douceur.

J'avais fait ce script il y a déjà  pas mal de temps, il me permettait de déclencher l'allumage en douceur dans ma chambre et dans celle des enfant dès que le réveil sonnait.

Avec le script ALARM de Steven et son GEA, j'en ai profité pour l'améliorer.

Maintenant le script se lance soit via mon révei, soit via le Virtual Device ALARM de Steven et GEA

 

Ce script permet de:

- choisir la durée de l'allumage des lampes (en minutes)

- détecte ces conditions individuellement pour chaque chambre:

   - 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

- allumer mon routeur Wifi de l'étage (qui est coupé s'il n'y a pas de mouvement détecté pendant 30 minutes)

 

Depuis ce script, je gagne 15 minutes au lit le matin, plus besoin de réveil qui gueule et les enfants sont réveillés en douceur et de bonne humeur (et moi aussi ;) )

 

Le voici:

Pour ajouter ou supprimer des lampes, je pense que le script parle de lui mème, il suffit de supprimer/modifier/ajouter les lignes

 

post-826-0-25650600-1425757572_thumb.png

 

Question copyright, je pense l'avoir fait complètement seul (il y a longtemps que je l'ai, et franchement je ne me souvient plus de sa genèse)

--[[
%% properties
1277 value
%% globals
--]]

--------------------------------------------------
-- Sweet Wakeup
-- Gradually dim up lights, excluding already on lights or modified during the wakeup
-- Sebastien Jauquet
-- Mars 2015
--------------------------------------------------

local id = {
         LAMPE_CH_THOMAS        = 41,
  	 LAMPE_DRESSING         = 42,
    	 LAMPE_CH_PARENTS       = 47,
  	 LAMPE_CH_EMILIEN       = 58,
  	 REVEIL_1_SEB		= 1277,
         PRISE_ROUTEUR_1ER      = 22
  }

local cycle = 30 --duration (in minutes) of the complete cycle of wakeup
local dim = 5 -- dimming starting value (5=5%)
local startSource = fibaro:getSourceTrigger();
-- launch script if started trough device in the header or "manually"/trough an other script
if (( tonumber(fibaro:getValue(id["REVEIL_1_SEB"], "value")) > 0 ) or startSource["type"] == "other") then
-- Always execute actions on this/those device(s):
  	 fibaro:call(id["PRISE_ROUTEUR_1ER"], "turnOn");
-- If one light is not turned off, disable it from the wakeup loop
	if(tonumber(fibaro:getValue(id["LAMPE_CH_THOMAS"], "value")) ~= 0 ) then id["LAMPE_CH_THOMAS"] = 0; fibaro:debug("LAMPE_CH_THOMAS Desactivated"); end
	if(tonumber(fibaro:getValue(id["LAMPE_DRESSING"], "value")) ~= 0 ) then id["LAMPE_DRESSING"] = 0; fibaro:debug("LAMPE_DRESSING Desactivated"); end
	if(tonumber(fibaro:getValue(id["LAMPE_CH_PARENTS"], "value")) ~= 0 ) then id["LAMPE_CH_PARENTS"] = 0; fibaro:debug("LAMPE_CH_PARENTS Desactivated"); end
	if(tonumber(fibaro:getValue(id["LAMPE_CH_EMILIEN"], "value")) ~= 0 ) then id["LAMPE_CH_EMILIEN"] = 0; fibaro:debug("LAMPE_CH_EMILIEN Desactivated"); end
-- Main wakeup loop
  while dim < 91 do 
	-- set dim value to all dimmers (excluding disabled: Id["xxx"] not equal to 0)
	if (id["LAMPE_CH_THOMAS"] ~= 0) then fibaro:call(id["LAMPE_CH_THOMAS"], "setValue", dim) end
	if (id["LAMPE_DRESSING"] ~= 0) then fibaro:call(id["LAMPE_DRESSING"], "setValue", dim) end
	if (id["LAMPE_CH_PARENTS"] ~= 0) then fibaro:call(id["LAMPE_CH_PARENTS"], "setValue", dim) end
	if (id["LAMPE_CH_EMILIEN"] ~= 0) then fibaro:call(id["LAMPE_CH_EMILIEN"], "setValue", dim) end
    fibaro:debug("Set Dimmers Value at: " .. dim)
    fibaro:sleep(cycle*3000);
    -- Check if dimmer value modified, then disable it from the wakeup loop
	if ((id["LAMPE_CH_THOMAS"]) ~= 0) then if((tonumber(fibaro:getValue(id["LAMPE_CH_THOMAS"], "value")) - dim) ~= 0 ) then	id["LAMPE_CH_THOMAS"] = 0; fibaro:debug("LAMPE_CH_THOMAS Desactivated"); end; end;
	if ((id["LAMPE_DRESSING"]) ~= 0) then if((tonumber(fibaro:getValue(id["LAMPE_DRESSING"], "value")) - dim) ~= 0 ) then id["LAMPE_DRESSING"] = 0; fibaro:debug("LAMPE_DRESSING Desactivated"); end; end;
	if ((id["LAMPE_CH_PARENTS"]) ~= 0) then if((tonumber(fibaro:getValue(id["LAMPE_CH_PARENTS"], "value")) - dim) ~= 0 ) then id["LAMPE_CH_PARENTS"] = 0; fibaro:debug("LAMPE_CH_PARENTS Desactivated");  end; end;
	if ((id["LAMPE_CH_EMILIEN"]) ~= 0) then if((tonumber(fibaro:getValue(id["LAMPE_CH_EMILIEN"], "value")) - dim) ~= 0 ) then id["LAMPE_CH_EMILIEN"] = 0; fibaro:debug("LAMPE_CH_EMILIEN Desactivated");  end; end;
	
	if	id["LAMPE_CH_THOMAS"] == 0 and
		id["LAMPE_DRESSING"] == 0 and 
		id["LAMPE_CH_PARENTS"] == 0 and
		id["LAMPE_CH_EMILIEN"] == 0 then
		  fibaro:debug("All Dimmer Values Modified, stopping script");
		  fibaro:abort();
    end
    dim = dim +5	
  end
-- end of wakeup, set dimmers to max value
	 fibaro:call(id["LAMPE_CH_THOMAS"], "setValue", 99);
     fibaro:call(id["LAMPE_DRESSING"], "setValue", 99); 
     fibaro:call(id["LAMPE_CH_PARENTS"], "setValue", 99);
     fibaro:call(id["LAMPE_CH_EMILIEN"], "setValue", 99);
end

  • Upvote 5
Lien vers le commentaire
Partager sur d’autres sites

Les FGS221 ... c'est pour madame (WAF) ... voulant être sûre que les lumières soient éteintes ...

Les Hue sont àcouleur et intensité variables ... donc si soft ...

Moins soft ... retravailler ton code ... mais il a le mérite de donner des idées et de faciliter l'architecture du code ... ;)

Lien vers le commentaire
Partager sur d’autres sites

Ahhh le WAF, très important.

Je fais toujours tout valider avant par la chef et je pense que ça transparaît dans mes codes ;)

Si tu veux marier le meilleur des mondes, pour être sur que tes lampes soient éteintes, il suffit de configurer les fgs avec une valeur minimum de 30% par exemple. Ainsi plus de doute.

Lien vers le commentaire
Partager sur d’autres sites

Deux solutions:

- J'ai un module universel monté dans mon réveil (id 1277) qui est mis dans l'entête et qui lance le script.

- Et j'utilise aussi le module alarm de Steven, pour ça, voir le fil du support gea.

Lien vers le commentaire
Partager sur d’autres sites

Super,

 

Bon j'ai pas d'ampules dimmables dans la chambre, mois soft le reveil hihih

 

Sinon je l'utiliserais avec GEA Alarm, c'est plutot WAF, par contre des que le reveil des 2 n'est pas à  la mee heure...heuuu je pense queje vais l'entendre le WAF mode hihih

Lien vers le commentaire
Partager sur d’autres sites

Pour ça moi j'ai mis un wallplug "lapin". Chez moi ils ont tendance àse réveiller à6h le week-end... Donc "tant que le rond làil n'est pas vert, tu ne vient pas réveiller papa ou Maman :-p et j'ai deux programmation pour les deux enfants :)

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Voici une proposition de modification de ton programme :

Je ne peux pas le tester car je n'ai pas de dimmer, il doit donc y avoir quelques coquilles. :P 

--[[
%% properties
1277 value
%% globals
--]]

----------------------------------------------------------------------------
--DECLARATION DES VARIABLES ET FONCTIONS

 local variateurs = {
"LAMPE_CH_THOMAS",
"LAMPE_DRESSING",
"LAMPE_CH_PARENTS",
"LAMPE_CH_EMILIEN",
}
local sauvariateurs = {}

 local idappareils = {
LAMPE_CH_THOMAS = 41,
LAMPE_DRESSING = 42,
LAMPE_CH_PARENTS = 47,
LAMPE_CH_EMILIEN = 58,
REVEIL_1_SEB = 1277,
PRISE_ROUTEUR_1ER = 22
}

local cycle = 30 --duration (in minutes) of the complete cycle of wakeup
local dim = 5 -- dimming starting value (5=5%)

--getValue
local recupvaleur = function (nom, valeur)
		return tonumber(fibaro:getValue(idappareils[nom], valeur))
end
--action sur 1 appareil sans variateur
local actionmodule = function (nom, etat)
		fibaro:call(idappareils[nom], etat)
end
--action sur tous les appareils avec variateur
local actionmodules = function(liste, etat)
		for index,valeur in ipairs(liste) do
		fibaro:call(idappareils[valeur], "setValue", etat)
		end	
end
--suppression du variateur actif
local suppressionmodule = function(chiffrecompare)
		for index,valeur in ipairs(variateurs) do
				if recupvaleur(valeur, "value") - chiffrecompare  ~= 0 then fibaro:debug(valeur .. " Desactivated") table.insert(sauvariateurs, valeur) table.remove(variateurs, index) end
		end	
end
----------------------------------------------------------------------------

-- launch script if started trough device in the header or "manually"/trough an other script
	if recupvaleur("REVEIL_1_SEB", "value") > 0 or startSource["type"] == "other") then
		-- Always execute actions on this/those device(s):
			actionmodule("PRISE_ROUTEUR_1ER", "turnOn")
		-- If one light is not turned off, disable it from the wakeup loop
			suppressionmodule(0)
		-- Main wakeup loop
			while dim < 91 do
				-- set dim value to all dimmers
					actionmodules(variateurs, dim)
					fibaro:debug("Set Dimmers Value at: " .. dim)
					fibaro:sleep(cycle*3000);
				-- Check if dimmer value modified, then disable it from the wakeup loop
					suppressionmodule(dim)
					if variateurs[1] == nil then fibaro:debug("All Dimmer Values Modified, stopping script") fibaro:abort() end
				dim = dim +5	
			end
		-- end of wakeup, set dimmers to max value
			actionmodules(sauvariateurs, 99)
	end

Il suffit simplement de modifier les tables variateurs et idappareils pour ajouter et supprimer ou renommer des dimmers.

Soyez indulgents, je suis débutant en Lua. ;)

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Joli ! Je n'avais pas eu "le courage" de faire ça avec des array.

Ceci dit je n'ai pas trop analysé le code, avec tapatalk ça ne le fait pas trop ;)

Et je ne pourrai pas tester tout de suite car je suis en voyage pour le moment et si je me plante àdistance ma femme me crucifiera àmon retour ;)

Je testerai ça ce week-end.

Lien vers le commentaire
Partager sur d’autres sites

 @sebcbien,

Marrant tes rabbitplug,une initiation au code de la route. :2:

Mais les enfants peuvent quand même vous réveiller s'ils ne sont pas bien (malade) ou c'est aussi géré par la domotique?

Lien vers le commentaire
Partager sur d’autres sites

Ah oui je me souviens être tombé dessus à  l'époque !

 

Ceci dit, je dois dire que je n'en ressent pas le besoin, je trouve que une réponse linéaire sur une longue durée (30 minutes) me convient bien.

Je suis du genre à  me réveiller avec la tête dans le c*l ;) et les yeux très sensibles à  la luminosité.

Je me réveille en général quand la lampe atteint 30-40%, je sors de mon lit et j'apprécie cette "faible" luminosité. il reste encore 15-20 minutes pour arriver au max, et là  je serai bien réveillé.

 

Si je trouve du temps, je pourrais probablement ajouter ces courbes, si il y a de la demande.

 

Il faut d'abord que je teste la proposition de trainkill666 (un peu morbide le pseudo ;) )

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Sebcbien,

 

Je viens de tomber sur ton post et j'ai été attiré par cette phrase ...

 

- allumer mon routeur Wifi de l'étage (qui est coupé s'il n'y a pas de mouvement détecté pendant 30 minutes)

 

Peux-tu m'en dire plus à  ce propos ?

 

Pour ma part je souhaiterais créer un module virtuel de type ON/OFF qui me permettrait d'activer ou non mon réseau wifi INVITÉ.

à‡a ne sert à  rien de le laisser tourner lorsqu'on n'a pas d'invités à  la maison ... on prend assez d'ondes comme ça mon bon Monsieur ^_^

 

Mon routeur est un ASUS RT-AC68U et je voudrais bien le piloter via requêtes HTTP mais je n'ai rien trouvé en ce sens.

 

Des pistes  ???

 

Merci d'avance et bonne journée.

Jean-Paul

Lien vers le commentaire
Partager sur d’autres sites

En fait j'ai acheté un petit point d'accès wifi en POE. (TP-Link TL-WA801ND - 32€)

Les injecteurs POE se trouvent dans mon patch panel réseau dans ma remise.

J'ai des injecteurs POE pour mes caméras intérieures, accesspoint wifi etc.

Les alimentations de ces injecteurs sont sur une multiprise greenwave

Si je veux allumer mon point d'accès wifi de l'étage, il me suffit de commander la prise 3 de la greenwave.

 

Et ça marche très bien et discrétos  :P

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

En modifiant le code en mettant :

dim = dim -5    

On peut crée un simulateur de "coucher de soleil"?

 

Pour dormir avec la lumières qui s'éteint progressivement.

 

ps: dommage qu'on ne trouve plus la multiprise greenwave, j'en aurais pris quelques une...

Lien vers le commentaire
Partager sur d’autres sites

  • 5 ans après...
×
×
  • Créer...