Aller au contenu

Comment Déclencher Un Script Le Week-End?


Messages recommandés

Posté(e)

Je cherche a faire un script pour le réveil le week-end, j'ai mis le code suivant en début de mon script mais quand j'appuie sur le BP de mon réveil, nada rien ne se passe. La variable Jour_Nuit était bien àJour

-- Déclenchement scène par appuie bouton poussoir
local startSource = fibaro:getSourceTrigger();
if ( tonumber(fibaro:getValue(170, "value")) > 0 )
then

-- En week-end faire les actions suivantes
-- Si jour
if (
 ( fibaro:getGlobalValue("Jour_Nuit") == "Jour" )
and
 ( (currentDate.wday == 1 or currentDate.wday == 7) )
)
then
  fibaro:debug("Séquence week-end jour");
  

Si je mets:

-- Déclenchement scène par appuie bouton poussoir
local startSource = fibaro:getSourceTrigger();
if ( tonumber(fibaro:getValue(170, "value")) > 0 )
then

-- En week-end faire les actions suivantes
-- Si jour
if ( fibaro:getGlobalValue("Jour_Nuit") == "Jour" )
then
  fibaro:debug("Séquence week-end jour");

Cela fonctionne ou est la coquille?

Merci

Posté(e)
-- Déclenchement scène par appuie bouton poussoir
local startSource = fibaro:getSourceTrigger();
if ( tonumber(fibaro:getValue(170, "value")) > 0 )
then

-- En week-end faire les actions suivantes
-- Si jour
if (
( fibaro:getGlobalValue("Jour_Nuit") == "Jour" )
and
( (currentDate.wday == 1) or (currentDate.wday == 7) )
)
then
fibaro:debug("Séquence week-end jour");
Posté(e)

Shad, en regardant d'autres scènes je me suis aperçu que je n'avais pas mis dans mon code:

local currentDate = os.date("*t");

Je suppose qu'il faut le mettre correct?

Cela donne:

--[[
%% properties
170 value
%% globals
--]]

-- Déclenchement scène par appuie bouton poussoir
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if ( tonumber(fibaro:getValue(170, "value")) > 0 )
then

-- En week-end faire les actions suivantes
-- Si jour
		if (
		( fibaro:getGlobalValue("Jour_Nuit") == "Jour" )
		and
		( (currentDate.wday == 1) or (currentDate.wday == 7) )
		)
		then
  				fibaro:debug("Séquence week-end jour");

J'ai bon?

 

Je finis mes tests puis je posterais le code ;)

Posté(e)

Euh, j'ai un trou de mémoire car je ne fais plus comme sa moi.

Toute mes scènes sont démarrer par le scheduler.

Posté(e)

Lol c'est aussi une solution, je verrais plus tard le scheduler ;).

 

Mais oui il faut bien sinon cela ne marche pas:

local currentDate = os.date("*t");

Voici le script que j'ai mis en place, j'ai viré les textes, N° ID et diverses structures pour donner des idées:

--[[
%% properties
ID-actionneur value
%% globals
--]]

-- Déclenchement scène par appuie bouton poussoir
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if ( tonumber(fibaro:getValue(ID-actionneur, "value")) > 0 )
then

-- En semaine faire les actions suivantes
-- Si jour
		if (
		( fibaro:getGlobalValue("Jour_Nuit") == "Jour" )
		and
		( (currentDate.wday == 2) or (currentDate.wday == 3) or (currentDate.wday == 4) or (currentDate.wday == 5) or (currentDate.wday == 6) )
		)
		then
				fibaro:debug("Séquence semaine jour");
  
-- Ouverture volets
				if ( tonumber(fibaro:getValue(ID_Volet1, "value")) == 0 )
				then
						fibaro:call(ID_Volet1, "setValue", "100");
						fibaro:debug("Message texte");
				end

				if ( tonumber(fibaro:getValue(ID_Volet2, "value")) == 0 )
				then
						fibaro:call(ID_Volet2, "setValue", "40");
						fibaro:debug("Message texte");
				end

-- Controle volet et allumage lumières
				if ( tonumber(fibaro:getValue(ID_Volet1, "value")) > 0 )
				then
						fibaro:call(ID_Lumière, "setValue", "60");
						fibaro:debug("Message texte");
				end

-- Allumage télévision	
				fibaro:call(ID_VDFreebox, "pressButton", "1");
				fibaro:debug("Message texte")
				fibaro:sleep(20*1000);
				fibaro:call(ID_VDFreebox, "pressButton", "22");
				fibaro:debug("Message texte")
				fibaro:sleep(20*1000);
				fibaro:call(ID_VDFreebox, "pressButton", "3");
				fibaro:debug("Message texte")
		end


-- Si nuit
		if (
		( fibaro:getGlobalValue("Jour_Nuit") == "Nuit" )
		and
		( (currentDate.wday == 2) or (currentDate.wday == 3) or (currentDate.wday == 4) or (currentDate.wday == 5) or (currentDate.wday == 6) )
		)
		then
				fibaro:debug("Séquence semaine nuit");
 
-- Controle volet et allumage lumières
				if ( tonumber(fibaro:getValue(ID_Volet1, "value")) == 0 )
				then
						fibaro:call(ID_Lumière, "setValue", "60");
						fibaro:debug("Message texte");
						fibaro:call(ID_Lumière, "setValue", "100");
						fibaro:debug("Message texte");
				end

-- Allumage télévision	
				fibaro:call(ID_VDFreebox, "pressButton", "1");
				fibaro:debug("Message texte")
				fibaro:sleep(20*1000);
				fibaro:call(ID_VDFreebox, "pressButton", "22");
				fibaro:debug("Message texte")
				fibaro:sleep(20*1000);
				fibaro:call(ID_VDFreebox, "pressButton", "3");
				fibaro:debug("Message texte")
		end



-- En week-end faire les actions suivantes
-- Si jour
		if (
		( fibaro:getGlobalValue("Jour_Nuit") == "Jour" )
		and
		( (currentDate.wday == 1) or (currentDate.wday == 7) )
		)
		then
  				fibaro:debug("Séquence week-end jour");
  
-- Ouverture volets
				if ( tonumber(fibaro:getValue(ID_Volet1, "value")) == 0 )
				then
						fibaro:call(ID_Volet1, "setValue", "40");
						fibaro:debug("Message texte");
						fibaro:sleep(40*1000);
						fibaro:call(ID_Volet1, "setValue", "60");
						fibaro:debug("Message texte");
						fibaro:sleep(30*1000);
						fibaro:call(ID_Volet1, "setValue", "100");
						fibaro:debug("Message texte");
						fibaro:sleep(30*1000);
				end

				if ( tonumber(fibaro:getValue(ID_Volet2, "value")) == 0 )
				then
						fibaro:call(ID_Volet2, "setValue", "100");
						fibaro:debug("Message texte");
				end

-- Controle volet et allumage lumières
				if ( tonumber(fibaro:getValue(ID_Volet1, "value")) > 0 )
				then
						fibaro:call(ID_Lumière, "setValue", "60");
						fibaro:debug("Message texte");
				end

-- Allumage télévision	
				fibaro:call(ID_VDFreebox, "pressButton", "1");
				fibaro:debug("Message texte")
				fibaro:sleep(20*1000);
				fibaro:call(ID_VDFreebox, "pressButton", "22");
				fibaro:debug("Message texte")
				fibaro:sleep(20*1000);
				fibaro:call(ID_VDFreebox, "pressButton", "3");
				fibaro:debug("Message texte")
		end


-- Si nuit
		if (
		( fibaro:getGlobalValue("Jour_Nuit") == "Nuit" )
		and
			( (currentDate.wday == 1) or (currentDate.wday == 7) )
		)
		then
				fibaro:debug("Séquence week-end nuit");
  
-- Controle volet et allumage lumières
				if ( tonumber(fibaro:getValue(ID_Volet1, "value")) == 0 )
				then
						fibaro:call(ID_Lumière, "setValue", "60");
						fibaro:debug("Message texte");
						fibaro:call(ID_Lumière, "setValue", "100");
						fibaro:debug("Message texte");
				end

-- Allumage télévision	
				fibaro:call(ID_VDFreebox, "pressButton", "1");
				fibaro:debug("Message texte")
				fibaro:sleep(20*1000);
				fibaro:call(ID_VDFreebox, "pressButton", "22");
				fibaro:debug("Message texte")
				fibaro:sleep(20*1000);
				fibaro:call(ID_VDFreebox, "pressButton", "3");
				fibaro:debug("Message texte")
		end

end

Bon en gros, le script:

- Est déclenché par le bouton poussoir de mon radio réveil,

- Regarde si c'est le week-end ou la semaine

- Regarde s'il fait jour ou nuit

 

En fonction de cela il lance:

- Pour la nuit, l'allumage des lumières après avoir vérifier que le volet n'est pas ouvert et l'allumage de la télé / freebox

- Pour le jour, lance l'ouverture des volets, (progressive pour un, puis quelque temps après les autres), l'allumage d'une lumière à  60% et l'allumage de la télé / freebox

 

Grosso modo avec la structure telle qu'elle on peut lancer d'autres actions, à  vos idées, tout cela avec juste un appuie sur un bouton poussoir (voir avec l'alarme du réveil) :)

 

On doit surement pouvoir simplifier optimiser, améliorer le truc, n'hésitez pas à  commenter ;).

 

Question, pour l'allumage de la freebox j'arrive juste à  l'allumer mais les commandes OK + N° de chaine ne fonctionne pas même si dans le débug j'ai bien les messages. J'ai essayé avec et sans sleep cela ne change rien :(. Une idée du problème?

  • Upvote 2
Posté(e)

Bonjour,

 

Lol c'est aussi une solution, je verrais plus tard le scheduler ;).

 

Mais oui il faut bien sinon cela ne marche pas:

local currentDate = os.date("*t");

 

Comme tu utilises la variable currentDate à  la ligne 19 il faut absolument initialiser cette variable, c'est pour ça que ça ne marche pas sinon.

×
×
  • Créer...