Aller au contenu

Programmation Lua Basique


Messages recommandés

Posté(e)

Bonjour,

 

Je m'essaie à  la programmation LUA pour des choses assez basique pour le moment.

J'ai créé ce petit module pour visualiser la valeur de ma variable "JOUR"

Si JOUR = 1 alors il fait jour

Si JOUR = 0 alors il fait nuit

 

Cette variable est mise à  jour dans deux scènes bloc qui marchent très bien. (au lever du soleil, la première scène passe la variable à  1, et dans la deuxième scène, au coucher du soleil, la scène passe la variable à  0).

 

L'idée était ensuite de supprimer ces deux scènes pour n'avoir que cette unique module qui fait varier la variable.

 

simple non ?

 

Le module :

 

mini_866035modulejour.png

 

le code du module :

--[[
%% properties
%% globals
--]]
local jour_nuit = fibaro:getGlobal('JOUR')
local debug = true; --activater le debug mode
fibaro:debug(jour_nuit);

if ( jour_nuit == 1 ) then
  fibaro:call(81, "setProperty", "ui.label_0_0.value", "JOUR");
  fibaro:debug("sleep_jour");  
else
  fibaro:call(81, "setProperty", "ui.label_0_0.value", "NUIT");

  fibaro:debug("sleep_nuit"); 
end

-- temporisation de 5 minutes
fibaro:sleep(300000);

le fichier DEBUG (uniquement la partie qui nous intéresse) :

[DEBUG] 06:33:33: 0
[DEBUG] 06:33:33: sleep_nuit
[DEBUG] 06:38:36: 0
[DEBUG] 06:38:36: sleep_nuit
[DEBUG] 06:43:39: 1
[DEBUG] 06:43:39: sleep_nuit
[DEBUG] 06:48:42: 1
[DEBUG] 06:48:42: sleep_nuit

donc on voit bien que la variable est bien passé de 0 à  1 au lever du soleil, jusque la tout va bien, mais le module m'affiche toujours "NUIT"

 

Donc la question est ou est-ce que je me suis trompé ?

 

 

merci pour votre aide

Posté(e)
--[[
%% properties
%% globals
--]]
local jour_nuit = fibaro:getGlobal('JOUR')
local debug = true; --activater le debug mode
fibaro:debug(jour_nuit);
 
if ( jour_nuit == 1 ) then
fibaro:call(81, "setProperty", "ui.label_0_0.value", "JOUR");
fibaro:debug("sleep_jour");
elseif ( jour_nuit == 0 ) then
fibaro:call(81, "setProperty", "ui.label_0_0.value", "NUIT");
fibaro:debug("sleep_nuit");
end
 
-- temporisation de 5 minutes
fibaro:sleep(300000);
Posté(e)
local jour_nuit = fibaro:getGlobal('JOUR')
local debug = true; --activater le debug mode
fibaro:debug(jour_nuit);

if ( jour_nuit == 1 ) then
fibaro:call(81, "setProperty", "ui.label_0_0.value", "JOUR");
fibaro:debug("jour");  
elseif ( jour_nuit == 0 ) then
fibaro:call(81, "setProperty", "ui.label_0_0.value", "NUIT");
fibaro:debug("nuit"); 
end

-- temporisation de 5 minutes
--fibaro:sleep(300000);

ça me donne ça :

[DEBUG] 08:45:57: 1
[DEBUG] 08:46:00: 1
[DEBUG] 08:46:03: 1
[DEBUG] 08:46:06: 1

et donc, toujours affiché "NUIT" :(

Posté(e)

euh... pas un probleme de localisation, puisque ma variable passe bien de 0 à  1....

 

par contre, j'ai essayé de changé le nom du label.

je l'ai appelé label10 (label_0_0 était deja utilisé).

 

du coup j'ai plus rien qui s'affiche....

j'ai vérifié l'ID de mon module virtuel, c'est bien 81...

Posté(e)

T'es sur de ta ligne local debug = true ? Je ne sais pas si on peut déclarer une variable debug alors que c'est utilisé par le systeme.

Posté(e)
--[[
%% properties
%% globals
--]]
local jour_nuit = fibaro:getGlobal('JOUR')
--local debug = true; --activater le debug mode
fibaro:debug(jour_nuit);

if ( jour_nuit == 1 ) then
fibaro:debug("jour1");
fibaro:call(81, "setProperty", "ui.label10.value", "JOUR");
fibaro:debug("jour2");
elseif ( jour_nuit == 0 ) then
fibaro:debug("nuit1");
fibaro:call(81, "setProperty", "ui.label10.value", "NUIT");
fibaro:debug("nuit2");
end
 
--temporisation de 5 minutes
--fibaro:sleep(300000);

marche pas mieux :

[DEBUG] 09:59:33: 1
[DEBUG] 09:59:36: 1
[DEBUG] 09:59:39: 1
[DEBUG] 09:59:42: 1
[DEBUG] 09:59:45: 1

je vais lui faire un petit reboot, ça va peut-être l'aider un peu ...

Posté(e)

a priori oui, ça me sert pour l'allumage auto des lumières du balcon la nuit, et ça fonctionne.

ce matin, le jour s'est levé entre 6:38 et 6:43

[DEBUG] 06:38:36: 0
[DEBUG] 06:38:36: sleep_nuit
[DEBUG] 06:43:39: 1
[DEBUG] 06:43:39: sleep_nuit
Posté(e)

Reprend ton code original qui était bien mieux que les versions dégradées et ajoute tonumber()

if (tonumber(jour_nuit) == 1) then
...
else 
...
end
  • Upvote 1
Posté(e)

@steven je n'avais pas vu ton MP, mais c'était effectivement bien ça :60:

--[[
%% properties
%% globals
--]]
local jour_nuit = fibaro:getGlobal('JOUR')
--local debug = true; --activater le debug mode
fibaro:debug(jour_nuit);

if ( tonumber(jour_nuit) == 1 ) then
fibaro:debug("jour1");
fibaro:call(81, "setProperty", "ui.label10.value", "JOUR");
fibaro:debug("jour2");
elseif ( tonumber(jour_nuit) == 0 ) then
fibaro:debug("nuit1");
fibaro:call(81, "setProperty", "ui.label10.value", "NUIT");
fibaro:debug("nuit2");
end
 
--temporisation de 5 minutes
--fibaro:sleep(300000);
[DEBUG] 10:10:48: 1
[DEBUG] 10:10:48: jour1
[DEBUG] 10:10:48: jour2
[DEBUG] 10:10:51: 1
[DEBUG] 10:10:51: jour1
[DEBUG] 10:10:51: jour2
Posté(e)

Parfait ... maintenant reprend ton code original car le elseif est moins performant que le else ... c'est normal car le système doit faire 2 comparaisons au lieu d'une seule.

Posté(e)

Tu peux poster la version définitive pour les bleus comme moi ;) Pfff dure d'apprendre un nouvel environnement.

 

Où as tu trouver l'ID du module virtuel (si 81 est bien ton module virtuel).

Posté(e)

Sinon son code (vu qu'il est parti refaire du LUA  ;) ) devrait être (sans les fioritures) :

 

--[[
%% properties
%% globals
--]]
local jour_nuit = fibaro:getGlobal('JOUR')
 
if ( tonumber(jour_nuit) == 1 ) then
  fibaro:call(81, "setProperty", "ui.label_0_0.value", "JOUR");
else
  fibaro:call(81, "setProperty", "ui.label_0_0.value", "NUIT");
end
-- temporisation de 5 minutes
fibaro:sleep(300000);
Posté(e)

lol, exact !

 

il faut juste créer une variable "JOUR"

et 2 petites scenes pour faire changer cette variable de 0 à  1.

effectivmeent avec sunrisehour et sunsethour, je pense que ma variable jour sert pas à  grand chose (redondance avec les varaibles systemes), ça m'aide juste à  clarifier.

 

mini_548446Jourbloc.png

 

idem pour nuit

au couher du solei alors jour = 0 et sunsethour = 1

 

d'ailleurs est-ce bien utile d'avoir sunsethour ? n'est-ce pas une variable systeme ?

 

l'idée étant maintenant de completer le code pour que le passage de la varaible JOUR de 0 à  1 se fasse directement dans le module, sans passer par les deux scenes

×
×
  • Créer...