Aller au contenu

Programmation Lua Basique


p78ch201

Recommended Posts

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

Lien vers le commentaire
Partager sur d’autres sites

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

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" :(

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

--[[
%% 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 ...

Lien vers le commentaire
Partager sur d’autres sites

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

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

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

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

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

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...