p78ch201 Posté(e) le 25 mars 2014 Signaler Posté(e) le 25 mars 2014 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 : 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
Shad Posté(e) le 25 mars 2014 Signaler Posté(e) le 25 mars 2014 --[[ %% 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);
p78ch201 Posté(e) le 25 mars 2014 Auteur Signaler Posté(e) le 25 mars 2014 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"
Shad Posté(e) le 25 mars 2014 Signaler Posté(e) le 25 mars 2014 Tu dois avoir un autre code quelque part, car làc'est impossible d'avoir nuit.
BenjyNet Posté(e) le 25 mars 2014 Signaler Posté(e) le 25 mars 2014 Ou alors ses paramètres de géolocalisation sont faux
p78ch201 Posté(e) le 25 mars 2014 Auteur Signaler Posté(e) le 25 mars 2014 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...
BenjyNet Posté(e) le 25 mars 2014 Signaler Posté(e) le 25 mars 2014 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.
p78ch201 Posté(e) le 25 mars 2014 Auteur Signaler Posté(e) le 25 mars 2014 --[[ %% 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 ...
BenjyNet Posté(e) le 25 mars 2014 Signaler Posté(e) le 25 mars 2014 Et t'es sur du coup du fibaro:getGlobal('Jour') ? Moi j'aurai utilisé les sunset/sunrise.
p78ch201 Posté(e) le 25 mars 2014 Auteur Signaler Posté(e) le 25 mars 2014 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
Steven Posté(e) le 25 mars 2014 Signaler Posté(e) le 25 mars 2014 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 1
p78ch201 Posté(e) le 25 mars 2014 Auteur Signaler Posté(e) le 25 mars 2014 @steven je n'avais pas vu ton MP, mais c'était effectivement bien ça --[[ %% 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
Steven Posté(e) le 25 mars 2014 Signaler Posté(e) le 25 mars 2014 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.
p78ch201 Posté(e) le 25 mars 2014 Auteur Signaler Posté(e) le 25 mars 2014 c'est fait. merci à tous pour votre aide
JossAlf Posté(e) le 25 mars 2014 Signaler Posté(e) le 25 mars 2014 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).
Steven Posté(e) le 25 mars 2014 Signaler Posté(e) le 25 mars 2014 Pour l'ID d'un module virtuel ... bizarrement ce dernier n'est pas noté ... par contre, il est présent dans l'URL : https://home.fibaro.com/fibaro/fr/devices/virtual_edit.php?vid=68 quand tu le modifie
Steven Posté(e) le 25 mars 2014 Signaler Posté(e) le 25 mars 2014 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);
JossAlf Posté(e) le 25 mars 2014 Signaler Posté(e) le 25 mars 2014 Ha ! ok c'était simplement le remplacement elseif par esle. Merci encore.
p78ch201 Posté(e) le 25 mars 2014 Auteur Signaler Posté(e) le 25 mars 2014 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. 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
p78ch201 Posté(e) le 25 mars 2014 Auteur Signaler Posté(e) le 25 mars 2014 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
JossAlf Posté(e) le 25 mars 2014 Signaler Posté(e) le 25 mars 2014 Ok merci. Au passage , où est-ce que je trouve l'ID de mon téléphone ?
p78ch201 Posté(e) le 25 mars 2014 Auteur Signaler Posté(e) le 25 mars 2014 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
JossAlf Posté(e) le 25 mars 2014 Signaler Posté(e) le 25 mars 2014 Mince je suis sous MAC ... Pas d'autre moyen ?
JossAlf Posté(e) le 25 mars 2014 Signaler Posté(e) le 25 mars 2014 Je passe sur le tchat pour échanger
Messages recommandés