Aller au contenu

Comment Déclencher Un Script Le Week-End?


lolomail

Recommended Posts

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

Lien vers le commentaire
Partager sur d’autres sites

-- 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");
Lien vers le commentaire
Partager sur d’autres sites

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 ;)

Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...