Rem's Posté(e) le 10 mai 2015 Signaler Posté(e) le 10 mai 2015 Re-Bonjour, --[[ %% properties 157 value %% globals --]] -- Ce scénario sera executé uniquement à l'ouverture / fermeture -- du décteur de porte ID 157 local door = 157 local light = 26 local startSource = fibaro:getSourceTrigger(); local heure = string.format(os.date("%H"), "%2d")..string.format(os.date("%M"), "%2d") local heureValable = heure >= "2000" or heure < "0530" local enAlerte = (tonumber(fibaro:getValue(door, "value")) > 0) if enAlerte and heureValable then -- porte en alerte soit ouverte fibaro:call(light, "startProgram", "2"); fibaro:sleep(3*1000) fibaro:call(26, "turnOff") fibaro:debug("Porte ouverte") else -- porte fermée fibaro:call(light, "turnOff"); fibaro:debug("Porte fermée") end Je me sers de ce bout de code à la détection de l'ouverture de la porte de la chambre de ma fille.La guirlande Led (ID 26 est dans le salon.Je voudrai que cette scène tienne compte de l'état, avant son déclenchement, de la huirlande led :Je suppose que c'est grace à la fonction "tonumber", mais je ne vois pas comment l'écrire.Merci d'avance du coup de main.
jojo Posté(e) le 10 mai 2015 Signaler Posté(e) le 10 mai 2015 pourquoi n'essayes-tu pas GEA. Tu ferais ce que tu veux en 2 coup de cuillère àpeau
Rem's Posté(e) le 10 mai 2015 Auteur Signaler Posté(e) le 10 mai 2015 Je suis newbie ... je tente de me familiariser avec Lua , dans un premier temps !! 1
pepite Posté(e) le 13 mai 2015 Signaler Posté(e) le 13 mai 2015 Salut, en fait tu ne veux pas que la scene ne se declenche si la guirlande led est deja allumee c'est ca ? if enAlerte and heureValable and GuirlandeEteinte then Je n'ai pas de guirlande LED mais regarde dans le json quelle est le value lorsqu'elle est allumée et j'essaierais quelque chose comme ca local GuirlandeEteinte = (tonumber(fibaro:getValue(light, "value")) = "0")
mprinfo Posté(e) le 13 mai 2015 Signaler Posté(e) le 13 mai 2015 @rem's je suis entièrement d'accord avec toi GEA c'est la solution simple pour ceux qui ne veulent pas apprendre le lua qui est un langage super intéressant j'ai commencé fin janvier et je m'amuse comme un fou avec ce langage. il faut que tu fasses un get pour récuperer la valeur de ta lampe
Rem's Posté(e) le 13 mai 2015 Auteur Signaler Posté(e) le 13 mai 2015 Pepite, en fait je stocker l'état de la guirlande led avant déclenchement de l'ouverture de porte (qui aura pour conséquence de s'allumer on rose clignotant 3 sec). après que la guirlande se remette soit allumé comme elle était (ou pas) avant cette gâchette. Mpinfo, je trouve aussi lua super puissant, de quelques lignes bien monté, en découle une logique qui pourrait presque faire croire que le système est intelligent, intuitif ... !! Tiens d'ailleurs, comment peut faire la différence d'utilisation entre elself, else, et l'usage du if que l'on peut répéter dans les scènes ? Il y a t-il un tutos ou un lien la dessus. Merci de votre aide
mprinfo Posté(e) le 13 mai 2015 Signaler Posté(e) le 13 mai 2015 if a == 1 then fibaro:debug("a est égale a 1") elseif a == 2 then fibaro:debug("a est égale a 2") elseif a == 3 then fibaro:debug("a est égale a 3") else fibaro:debug("a n'est pas égale à1, 2, 3) end http://lua.gts-stolberg.de/fr/Variablen.php http://www.luteus.biz/Download/LoriotPro_Doc/LUA/LUA_Training_FR/Introduction_Programmation.html http://wxlua.free.fr/ 1
Rem's Posté(e) le 13 mai 2015 Auteur Signaler Posté(e) le 13 mai 2015 Merci Mpinfo, j'y vois plus clair !! Une autre question, je n'arrive pas à faire une scène en lua avec comme déclenchement jour et heure, sans les doublons (venant du mode block), et avec le débug fonctionnel. Tu pourrais m'aider ...? --[[ %% autostart %% properties %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); if (sourceTrigger["type"] == "autostart") then while true do local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "19:45") ) ) then fibaro:debug("Début de script") fibaro:call(101, "pressButton", "26") -- Annonce Petula fibaro:call(71, "turnOn") fibaro:call(309, "turnOn") fibaro:sleep(15*60*1000); -- 20h00 fibaro:call(318, "pressButton", "5") -- Volet chambre descente fibaro:call(26, "startProgram", "2"); fibaro:call(315, "turnOn") fibaro:call(316, "turnOn") fibaro:call(70, "turnOn") fibaro:sleep(30*60*1000); -- 20h30 fibaro:call(13, "turnOn") fibaro:call(90, "turnOn") fibaro:sleep(50*60*1000); -- 21h20 fibaro:call(319, "pressButton", "9") -- Volet salon descente fibaro:call(13, "turnOff") fibaro:debug("Test scène semaine") end end end Par exemple, cette scène fonctionne, mais je n'ai pas de débug. (t'as capté mon dilemme) ...
mprinfo Posté(e) le 13 mai 2015 Signaler Posté(e) le 13 mai 2015 --[[ %% autostart --]] ---------------------------------------------------------------------- -- Contrôle si 1 Scène et déjàen cours -- ---------------------------------------------------------------------- local NbreScene = fibaro:countScenes() if NbreScene ~= 1 then; fibaro:debug("Il y a déjàune instance en cours... ") fibaro:abort(); end while true do if (os.date("%H:%M", os.time())) == "19:45" then fibaro:debug("Début de script") fibaro:call(101, "pressButton", "26") -- Annonce Petula fibaro:call(71, "turnOn") fibaro:call(309, "turnOn") elseif (os.date("%H:%M", os.time())) == "20:00" then --exemple en utilisant une table avec les id local id = {315, 316, 70} -- création de la table id for i=1,#id do -- #id = nombres d'id dans la table fibaro:call(id, "turnOn") end fibaro:call(318, "pressButton", "5") -- Volet chambre descente fibaro:call(26, "startProgram", "2"); elseif (os.date("%H:%M", os.time())) == "20:30" then fibaro:call(13, "turnOn") fibaro:call(90, "turnOn") fibaro:sleep(50*60*1000); -- 21h20 fibaro:call(319, "pressButton", "9") -- Volet salon descente fibaro:call(13, "turnOff") fibaro:debug("Test scène semaine") end fibaro:sleep(60*1000) end 1
jojo Posté(e) le 13 mai 2015 Signaler Posté(e) le 13 mai 2015 Rem's, Pour rendre ton code plus lisible / compréhensible pour toi et les autres, je te propose d'aligner : --[[ %% autostart %% properties %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); if (sourceTrigger["type"] == "autostart") then while true do local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "19:45") then fibaro:debug("Début de script") fibaro:call(101, "pressButton", "26") -- Annonce Petula fibaro:call(71, "turnOn") fibaro:call(309, "turnOn") fibaro:sleep(15*60*1000) -- 20h00 fibaro:call(318, "pressButton", "5") -- Volet chambre descente fibaro:call(26, "startProgram", "2") fibaro:call(315, "turnOn") fibaro:call(316, "turnOn") fibaro:call(70, "turnOn") fibaro:sleep(30*60*1000) -- 20h30 fibaro:call(13, "turnOn") fibaro:call(90, "turnOn") fibaro:sleep(50*60*1000) -- 21h20 fibaro:call(319, "pressButton", "9") -- Volet salon descente fibaro:call(13, "turnOff") fibaro:debug("Test scène semaine") end end end les ; ne sont à mon avis pas obligatoires (héritage du Pascal ?) il y avait également 2 ( et 2 ) inutiles sur la condition sur les jours. des petits "conseils" en passant ...
mprinfo Posté(e) le 13 mai 2015 Signaler Posté(e) le 13 mai 2015 @jojo très bonne remarque moi j'utilise notepad++ pour écrire mes scripts avec le plugin lua fibaro mais lorsque je fais un copier coller sur le forum j'ai souvant des decalage
Rem's Posté(e) le 13 mai 2015 Auteur Signaler Posté(e) le 13 mai 2015 Exact, les ";" ne sont pas obligatoire. Mais j'ai tj rien en Débug ....
mprinfo Posté(e) le 13 mai 2015 Signaler Posté(e) le 13 mai 2015 Les ; ne sont obligatoires que si on mets plusieurs blocs sur la même ligne
Rem's Posté(e) le 17 mai 2015 Auteur Signaler Posté(e) le 17 mai 2015 Merci Mpinfo, Merci Jojo, Je suis entrain de mettre en application vos conseils .... ca va, je m'en sors. Je bien compris le coup des "elseif" J'ai un p'tit soucis : La led est bleu. la porte s'ouvre, elle devient rose (3 sec), et je voudrai qu'elle reprenne l'état avant (bleu, ou autre). Comment ca s'écrit (j'ai l'impression de parler à une copine, hi hi hi). Merci pour votre aide.
Messages recommandés