Aller au contenu

Messages recommandés

Posté(e)

Salut a tous,

 

Je pense que ça a du au moins vous arriver une fois dans votre vie d'allumer par mégarde une lampe extérieure sans vous en rendre compte et la laisser allumée. 

 

J' ai donc fait un petit script rapide qui permet de detecter quand une lampe extérieure est allumée en journée et l'éteindre automatiquement après 20 secondes.

 

voici donc le script : 

--[[
%% properties
29 value
34 value
33 value
%% globals
sunsetHour
--]]

local startSource = fibaro:getSourceTrigger();

if (fibaro:getGlobal("sunsetHour") == "0") 
  then


	if 	(fibaro:getValue(29, "value") > "0") or
 	 	(fibaro:getValue(33, "value") > "0") or
 	 	(fibaro:getValue(34, "value") > "0") then
  
		fibaro:call(4, "sendPush", "Lumière Ext Allumée. Procedure d extinction.");
  		fibaro:sleep(20*1000)
 		fibaro:call(29, "turnOff")
 		fibaro:call(33, "turnOff")
 		fibaro:call(34, "turnOff")
	end

end  
  

Dans ce script les IDs 29, 33 et 34 sont les IDs de mes lampes extérieures. Il faudra donc les modifier par les votres. Egalement j' ai 3 lampes ext, si vous avez plus ou moins, il faudra adapter le code en enlevant ou ajoutant des lignes.

 

Et j'utilise comme element de verification une variable Globale "sunsetHour" pour savoir si nous sommes en journée ou de nuit.

 

Voila c'est tout bête, mais ça dépanne. 

  • Upvote 1
Posté(e)

c'est vrai qu'avec la variable "journuit", "sunsethour" pour toi, on peut faire beaucoup de choses.
j'ai fait la même choses que toi, mais en bloc.
 
si  "jour" et lumière extérieur allumé alors éteindre la lumière.  
 
et presque la même chose pour la nuit, car c'est plus souvent la nuit qu'on oublie les lumières allumés chez nous.
 
Pour l'avant de la maison, si "nuit" et lumières allumés alors envoie un message puis un toutes les 15 min.

Pour le coté terrasse, si "nuit" et lumières allumés et volets fermés alors envoie un message puis un toutes les 15 min. (car, si on reste dehors sur la terrasse après le couché du soleil, le volet et obligé d'être ouvert donc on peut laisser allumé sans recevoir 15 messages ;-) )

Posté(e)

Pour plus de d'efficacité en cas d'un grand nombre de modules, il vaudrait mieux mettre les Id dans une table et la parcourir dans ton code plutôt que de multiplier les termes de ta condition IF

 

Grégory

Posté(e)

Correct.

 

Personnellement je n'ai que 4 lampes Ext (1 n'est pas encore domotisée). 

 

Avoir 4 lignes dans un IF ne me semble pas totalement "fou" et je doute que quelqu'un ai plus d' une dizaine de lampe ext. mais évidement je peux me tromper

 

Donc je ne suis pas contre le fait que quelqu'un retouche a mon bout de code pour l' améliorer. :)

Posté(e)

Bonjour à  tous, désolé pour mon silence, j'ai un Pb avec mon iphone et je me connecte beaucoup moins souvent.

 

@Romain80 et @I-magin, c'est exactement ça.

@Shad : Je ne suis pas d'accord avec toi, autant prendre les bons réflexe de programmation dès le départ, surtout si tu veux partager tes scripts avec d'autres personnes. Ceci pour plusieures raisons:

  1. De cette manière tu participes activement à  la formation des gens qui vont lire tes scripts
  2. Tu simplifies l'adaptation de tes scripts par les autres (J'ai peut-être 27 modules à  gérer ;) ) 
  3. Tu facilites la maintenance de test scripts

 

Voila, c'est mon côté architecte qui reprend le dessus.

  • Upvote 2
Posté(e)

Bon le coup je suis assez d'accord avec toi.

Effectivement autant prendre de bonnes habitudes des le depart.

Mais malheureusement je ne gere pas encore parfaitement ce langage. Mais qui sait ... Peut etre qu un jour ... :)

Posté(e)

Oui mais non ^^

 

C'est difficile de partager des scripts avec une table. Le code peut dépendre du type device et de ce que la personne veut faire.

La c'est à  l'utilisateur d'optimiser la scène.

 

Même dans le cas de cette éclairage il peut vouloir éteindre une lumière, mettre une autre à  20%, faire clignoter une autre.

 

 

Et dans d'autre cas tu vas pas mettre dans une table un wall plug, volet et lumière ca la tu pourrais avoir le cas d'un turnOn, setValue 90% et open.

 

Donc aux utilisateur d'adapter.

C'est mon avis^^

Posté(e)

@Shad: Pas de problème avec ton avis, le forum est là  pour que chacun puisse exprimer le sien. 

 

@Romain80: Je ferai un truc comme ça pour modifier ton script (ATTENTION, je suis au bureau et je n'ai pas pu le tester)

--[[
%% properties
29 value
34 value
33 value
%% globals
sunsetHour
--]]

local startSource = fibaro:getSourceTrigger();
lights = {29, 33, 34}; -- id des lampes
local lightOn = 0;
 
if (fibaro:getGlobal("sunsetHour") == "0") then
	for i = 1, #lights do
		if (fibaro:getValue(i, "value") > "0")
			lightOn = 1;
		end
	end  

	if ( lightOn > "0") then
		fibaro:call(4, "sendPush", "Lumière Ext Allumée. Procedure d extinction.");
		fibaro:sleep(20*1000)

		for i = 1, #lights do
			fibaro:call(i, "turnOff")
		end 	
                lightOn = 0;
	end
end  
Posté(e)

Vous allez penser que j ai pas de personnalité mais pour le coup, la aussi je suis d'accord.

Il faudrait pour bien faire, maximiser la portabilité du code sans trop l'encapsuler pour qu'il puisse etre facilement réinterpreté par un autre.

Par contre je vois que Shad parle de clignotement ... Comment on arrive a faire ça. Il existe une fonction ou il faut "bidouiller" ?

Posté(e)

Bon le coup je suis assez d'accord avec toi.

Effectivement autant prendre de bonnes habitudes des le depart.

Mais malheureusement je ne gere pas encore parfaitement ce langage. Mais qui sait ... Peut etre qu un jour ... :)

 

tu as plein d'Ebooks gratuits sur le sujet (à  condition de lire l'anglais ...) http://it-ebooks-search.info/search?q=lua

Posté(e)

Merci,

Je vais y jeter un oeil :)

Par contre y a des trucs que je ne pige pas dans ton amelioration de mon code.

A quoi font ref les #wallplug ..m c'est pas plutot la table #lights qu'il faudrait appeler ??

Posté(e)

c'est ça, j'ai été un peu feignant sur le coup et les grands copier/coller faut les relire avant de poster ....

Posté(e)

Merci pour le partage....

 

J'ai repris le script et adapté ce dernier à  mon besoin. Par-contre, un point qui n'est pas clair pour moi : l'évaluation est réalisée tous les combien de temps ?

Ne faudrait-il pas ajouter une notion de fréquence ? (vérifier chaque heure)

Posté(e)

Salut Razowski,

En fait il n'y a pas de notion de frequence. Il y a un trigger sur le declenchement de la lumiere.

Donc des que celle ci est allumée, la scene s'active et procede a l'extinction.

Posté(e)

Les deux dernières réponses sont contradictoires : scheduler vs trigger.

Selon test en cours, si je start ma lampe maintenant, elle devrait s'éteindre, mais ce n'est pas le cas. 

 

Je pense que l'utilisation du scheduler est bien nécessaire, right ?

Posté(e)

Non,

Chez moi, et pour le coup c'est moi qui l'est mis en place donc je le connais un peu :) ... Si tu as recup mon script d'originé, il y a un trigger.

Des que tu allumes ta lumiere, et que les conditions de la scene sont reunis (etre en journee en gros), la procedure debute pour eteindre la lumiere

Posté(e)

Je n'avais pas fait attention que tu étais l'auteur du script ;-)

 

Donc oui je suis reparti du tiens mais j'ai adapté un peu (tableau pour parser les ID et tonumber pour évaluer sur du numérique et pas de la string). Je poste mon script afin d'obtenir un peu d'aide, car quand je start ma lampe, ben elle reste allumée sauf si je lance manuellement ma scène... Donc je fais un truc de faux, mais je ne sais pas où du coup...

--[[
%% properties
10 value -- lampe terrasse
14 value -- lampe jardin
28 value -- lampe parking
30 value -- lampe porte d'entrée
%% globals 
Jour_Nuit
--]]
 
local startSource = fibaro:getSourceTrigger();
lights = {10, 14, 28, 30}; -- id des lampes
local lightOn = 0;
 
if (fibaro:getGlobal("Jour_Nuit") == "Jour") then
	for i = 1, #lights do
		if (tonumber(fibaro:getValue(lights[i], "value")) > 0) then
			lightOn = 1;
			fibaro:debug("Au moins une lampe était allumée");
		end
	end  
 
	if ( lightOn > 0) then
		fibaro:sleep(2*1000)
 
		for i = 1, #lights do
					fibaro:debug(i);

      fibaro:call(lights[i], "turnOff");
      
		end 	
                lightOn = 0;
	end
end 
×
×
  • Créer...