Aller au contenu
p78ch201

Programmation Lua Basique

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

Partager ce message


Lien à poster
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);

Partager ce message


Lien à poster
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" :(

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu dois avoir un autre code quelque part, car làc'est impossible d'avoir nuit.

Partager ce message


Lien à poster
Partager sur d’autres sites

Ou alors ses paramètres de géolocalisation sont faux :)

Partager ce message


Lien à poster
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...

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
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 ...

Partager ce message


Lien à poster
Partager sur d’autres sites

Et t'es sur du coup du fibaro:getGlobal('Jour') ? Moi j'aurai utilisé les sunset/sunrise.

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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.

Partager ce message


Lien à poster
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).

Partager ce message


Lien à poster
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);

Partager ce message


Lien à poster
Partager sur d’autres sites

Ha ! ok c'était simplement le remplacement elseif par esle.  Merci encore.

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

attention au nom de ton label au ligne 8 et 10.

ça depend de ce que tu as mis au dessus

voila le module au complet

 

mini_398750journuit.png

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok merci. :)

 

Au passage , où est-ce que je trouve l'ID de mon téléphone ?  :huh:

Partager ce message


Lien à poster
Partager sur d’autres sites

alors pour ça, tu vas avoir besoin du toolkit de Krikroff

puis tu fais récupérer les données des appareils et tu vas trouver ton téléphone

Partager ce message


Lien à poster
Partager sur d’autres sites

Mince je suis sous MAC ... Pas d'autre moyen ?

Partager ce message


Lien à poster
Partager sur d’autres sites

×