DeuxG Posté(e) le 1 juillet 2014 Signaler Posté(e) le 1 juillet 2014 Bonjour, après un mois à vous lire et a comprendre plus ou moins ce que vous arrivez à faire avec vos HC2, je me lance enfin dans mes premières vrai ligne de code. Et là , j'ai direct un problème. Je ne me lance pourtant pas dans des chose compliqué. Je voudrais faire allumer une lampe quand mon détecteur capte une présence, et si il fait presque nuit, ou nuit. j'ai écris ça, mais ça ne fonctionne pas. --[[ %% properties 40 value %% globals --]] local a = fibaro:getValue(40, "value") local dt = os.date("%H:%M") fibaro:debug("début du script à : "..dt) fibaro:debug("état du capteur : "..a) if ( fibaro:getValue(40, "value") == "1" and tonumber(fibaro:getValue(43, "value")) < 9) then fibaro:call(34, "turnOn") fibaro:debug("J\'allume la lumière à : "..dt) fibaro:sleep(2*60*1000) -- attendre 2 minutes fibaro:call(34, "turnOff") dt = os.date("%H:%M") fibaro:debug("Lumière éteinte à : "..dt) else end 40, ID du capteur de mouvement 43, ID du capteur de luminosité
Moicphil Posté(e) le 1 juillet 2014 Signaler Posté(e) le 1 juillet 2014 Tu as une erreur dans la fenêtre "debug" ? Pourquoi ne pas avoir mis aussi l'id 43 dans les triggers Properties ?
DeuxG Posté(e) le 2 juillet 2014 Auteur Signaler Posté(e) le 2 juillet 2014 non, je n'ai pas d'erreur dans le module de debug, c'est ma condition : tonumber(fibaro:getValue(43, "value")) < 9 qui n'est pas remplie. quand je l'enlève, ma lampe s'allume dès que mon détecteur de mouvement capte qqc. Pour se qui est de l'ID 43 dans les triggers Properties, je pensais qu'il fallait mettre là les conditions de déclenchement de la scène.
Moicphil Posté(e) le 2 juillet 2014 Signaler Posté(e) le 2 juillet 2014 Justement, id 43 fait partie des conditions. Tu as essayé en le rajoutant ? Envoyé de mon C6603 en utilisant Tapatalk
DeuxG Posté(e) le 2 juillet 2014 Auteur Signaler Posté(e) le 2 juillet 2014 Je viens de tester. Et bien, ça fonctionne, mais j'avoue qu'il faut que je revois quelques principe de codage de notre box préféré, car pour moi, les triggers servent à déclencher la scène. Je n'arrive pas à saisir pourquoi il faut que je rajoute l'ID 43 (détecteur de luminosité) dans les triggers Properties
Moicphil Posté(e) le 2 juillet 2014 Signaler Posté(e) le 2 juillet 2014 Tant mieux si tout fonctionne. C'est logique, car dans ta scène tu demande 2 conditions avant l'action. Comme tu as 2 détecteurs, il faut les mettre en "trigger". Si tu avais choisi eu 1 détecteur et 1 variable en déclencheur, il aurait fallu mettre l'id du détecteur dans "properties" et le nom de la variable dans "globals"
DeuxG Posté(e) le 2 juillet 2014 Auteur Signaler Posté(e) le 2 juillet 2014 OK, mais mon déclencheur, ce n'est que capteur de mouvement (ID 40) Donc si je veux faire une scène où j'ai l'état de 2 ou 3 capteurs à tester pour déclencher une action, je devrai mettre les ID de tout mes capteurs dans les triggers ?
Moicphil Posté(e) le 2 juillet 2014 Signaler Posté(e) le 2 juillet 2014 Faux, tes déclencheurs sont id40 ET id43 dans ton cas. Si tu ne mets que id40, y'a que le capteur de mouvement. Si tu ne mets que id43, y'a que le capteur de luminosité. Et, oui, si tu as plusieurs capteurs en condition, ca sera X id à saisir dans "properties" Pour info, voici le début d'une de mes scènes, en conditions, j'ai mis mes détecteurs souhaités ( et précisé qu'il soient armés ); --[[ %% properties 133 value 25 value 232 value 103 value 229 value 132 value 28 value 31 value 133 armed 25 armed 26 armed 103 armed 229 armed 28 armed 31 armed 131 armed %% globals VAR --]] if (fibaro:countScenes() > 1) then fibaro:abort() end; ...
Steven Posté(e) le 3 juillet 2014 Signaler Posté(e) le 3 juillet 2014 Je vais me permettre de contre-dire.Dans l'entête du script il faut mettre "les déclencheurs du script". Dans le cas de DeuxG, uniquement l'ID 40 car c'est lorsque son détecteur va changer de valeur que le script doit s’exécuter. En ajoutant l'ID 43, le script va s'exécuter chaque fois que la luminosité va changer ce qui n'a aucun sens. Il devait juste y avoir un petit bug dans ton code. Je l'ai repris et voici un script qui fonctionne parfaitement. Je l'ai testé dans la même configuration mais avec mes IDs. --[[ %% properties 40 value %% globals --]] local detection = fibaro:getValue(40, "value") local lux = fibaro:getValue(43, "value") local dt = os.date("%H:%M") fibaro:debug("début du script à : ".. os.date("%H:%M")) fibaro:debug("état du capteur : ".. detection) fibaro:debug("luminosité : ".. lux) if ( tonumber(detection) == 1 and tonumber(lux) < 9 ) then fibaro:call(34, "turnOn") fibaro:debug("J\'allume la lumière à : "..os.date("%H:%M")) fibaro:sleep(30*1000) -- attendre 2 minutes fibaro:call(34, "turnOff") fibaro:debug("Lumière éteinte à : "..os.date("%H:%M")) end 1
Steven Posté(e) le 3 juillet 2014 Signaler Posté(e) le 3 juillet 2014 @moicphil Dans ton exemple de scénario, id value id armed ce n'est pas une condition, c'est que le scénario va s'exécuter quand ton ID va changer de valeur (porte ouverte ou fermée) mais aussi quand l'ID va être armé ou désarmé.
DeuxG Posté(e) le 3 juillet 2014 Auteur Signaler Posté(e) le 3 juillet 2014 Tu me rassures Steven. Je sais bien qu'il y a très longtemps que je n'avais pas couché une ligne de code (en C à l'époque), mais bon.... Après un mois passé à vous lire, je pensais bien avoir saisi les quelques bases des scripts LUA sur HC2 ; bien sur le chemin et encore long avant que je réalise tout ce que j'ai en tête. Merci pour le script, je vais le tester aujourd'hui.
Moicphil Posté(e) le 3 juillet 2014 Signaler Posté(e) le 3 juillet 2014 Bonjour. Je sens venir un débat passionnant ! Steven, tu ne me contredit pas quand tu dis "il faut mettre les déclencheurs du script", c'est ce que j'ai dis. Et pour moi, les déclencheurs du scripts sont bien id40 et id43. Et le script ne va pas s’exécuter que seulement quand id43 sera valide, il faudra aussi que id40 soit valide. Tu as surement raison, je ne suis pas codeur, mais j'ai toujours réalisé mes scènes comme ceci et ça a toujours fonctionné. Peut tu me dire ou était sa "coquille" dans le code du départ ? Dans ton exemple de scénario, id value id armed ce n'est pas une condition, c'est que le scénario va s'exécuter quand ton ID va changer de valeur (porte ouverte ou fermée) mais aussi quand l'ID va être armé ou désarmé. On est d'accord oui et non, car oui " le scénario va s'exécuter quand ton ID va changer de valeur (porte ouverte ou fermée) mais aussi quand l'ID va être armé ou désarmé" Mais non quand tu dis "ce n'est pas une condition"
Steven Posté(e) le 3 juillet 2014 Signaler Posté(e) le 3 juillet 2014 Tu es donc entrain de dire que pour que GEA fonctionne, tu as du rajouter tout tes ID dans l'entête ? Et ceci chez tout le monde Ce n'est pas parce que tu vérifies l'état d'un module que ce dernier doit être dans l'entête, cela n'a rien à voir. Les ID déclaré dans l'entête sont les ID qui vont déclenché le scénario. Dans le cas de DeuxG il ne veux pas que le scénario ce lance quand la luminosité change, l'ID 43 est donc inutile. Il veux que le scénario se lance quand le déclencheur change. Un "if" mal fait avec trop de déclencheurs dans l'entête provoque facilement des soucis. Donc pour éviter ce genre de problème, les gens ajoute un code bizarre et inutile dans 99% des cas : if (fibaro:countScenes() > 1) then fibaro:abort() end; Qui signifie ... si je me suis planté dans mes déclencheurs, fait en sorte que la scène ne se lance pas 2 fois en même temps Fait des tests et tu verras 1
Moicphil Posté(e) le 3 juillet 2014 Signaler Posté(e) le 3 juillet 2014 Promis, oui je vais faire des tests... Je suis sur que si je fais la scène de DeuxG en mode bloc, tu verras que les 2 détecteurs seront cochés en trigger dans l'interface. Non? Et pis tu dis qu'il ne veut pas que la scène se lance en fonction de la luminosité... Moi je comprends que oui justement: si capteur luminosité < 9... Envoyé de mon C6603 en utilisant Tapatalk
DeuxG Posté(e) le 3 juillet 2014 Auteur Signaler Posté(e) le 3 juillet 2014 Pour info, quand j'ai fait le test en mettant l'ID 43 en déclencheur, ma scène s'est lancé deux fois en même temps, j'ai reçu deux notifications. Je fais le test Ce soir avec le code de Steven
Moicphil Posté(e) le 3 juillet 2014 Signaler Posté(e) le 3 juillet 2014 Alors... j'ai créer à peu prés la même scène que DeuxG en mode bloc avec un détecteur de présence et un capteur de luminosité : C'est bien ce que je disais, on voit bien nos 2 détecteurs en "trigger" : Alumage de la scène en Lua... Pareil, on retrouve bien nos 2 id dans "properties" : Verdict mon colonel ?
Steven Posté(e) le 3 juillet 2014 Signaler Posté(e) le 3 juillet 2014 Je confirme, le mode bloc est un générateur ... pourri Voici de la lecture d'un précédent post, tu verras que le mode bloc "coche" tout et n'importe quoi et que cela pose de vrai problème. http://www.domotique-fibaro.fr/index.php/topic/899-capteur-de-position-zg8101-et-module-fgs-221/?p=10231 Exemple stupide de ce qu'il ne faut pas faire : --[[ %% properties 91 value %% globals --]] local porte = 91 local lumiere = 65 if (tonumber(fibaro:getValue(porte, "value")) > 0) and (tonumber(fibaro:getValue(lumiere, "value")) > -1) then if (tonumber(fibaro:getValue(lumiere, "value")) > 0) then fibaro:call(lumiere, "turnOff"); else fibaro:call(lumiere, "turnOn"); end end Ce code n'est pas méchant, si tu ouvre la porte (91) la lumière (65) s'allume. Par contre, si tu rajoutes l'ID 65 dans l'entête, c'est discothèque assurée tant que la porte est ouverte 1
Moicphil Posté(e) le 3 juillet 2014 Signaler Posté(e) le 3 juillet 2014 En effet...j'en prend bonne note ! Même si je n'utilise plus les blocs, au départ, comme beaucoup je pense, je créais des scènes en bloc, puis je la passais en Lua , ça me permettais de comprendre plus facilement la structure du code. C'est quand même navrant mais aussi étonnant, car bon nombres de mes scènes tournent actuellement avec plusieurs id en trigger... En tout cas, merci pour les détails. Steven 1 / Fibaro 0
Steven Posté(e) le 3 juillet 2014 Signaler Posté(e) le 3 juillet 2014 Tes scènes fonctionnent bien car les "IF" sont bien fait et complet ainsi, même si tu passes 2 fois dans ta scène, le "IF" va stopper le deuxième passage. En règle général, le mode bloc se débrouille très bien par contre en LUA l'erreur est vite arrivée et peut être vicieuse à comprendre.
DeuxG Posté(e) le 4 juillet 2014 Auteur Signaler Posté(e) le 4 juillet 2014 Moi bizarrement, je n'y comprend rien au mode bloc. Le LUA me parle, même si j'ai encore d'énorme lacune àcombler.
Messages recommandés