deder2 Posté(e) le 16 juin 2016 Signaler Posté(e) le 16 juin 2016 bonsoir a tous Je debute dans le langage LUA est j'aurai besoin d'un gros coup de main pour mon scriptVoila je cherche a faire un script qui me permet d'enclencher mon alarme avec une télécommande Kfob v2. J'ai réussi a activer un capteur avec le bouton 1 de ma télécommande Ce qu'il me reste a faire ces de rajoute les autres capteur et mes deux autres télécommande Kfob dans le script. Merci de votre aide a bientot --[[ %% properties 79 sceneActivation %% globals --]] local NumScene = tonumber(fibaro:getValue(79, "sceneActivation")) -- On récupère la scène activée, on convertit le texte en nombre (via la commande tonumber) et on la stocke dans la variable "NumScene" pour l'utiliser dans la suite du script if (NumScene == 11) -- Si la touche appuyée génère le numéro de scène 11 (touche 1 appui court) then fibaro:debug("Bouton 1 appuyé (court):") -- Nous allons activer un capteur de porte dont l'ID est 41 if ((tonumber(fibaro:getValue(41, 'value'))) == 0) -- On récupère l'état du capteur 41 et s'il est éteint ... then -- alors fibaro:call(41, "setArmed", "1"); -- on allume fibaro:debug("Armement du capteur de porte") else -- sinon fibaro:call(41,'turnOff') -- on éteint fibaro:debug("Désarmement du capteur de porte") end elseif (NumScene == 12) -- Si la touche appuyée génère le numéro de scène 12 (touche 1 double appui) then -- alors fibaro:debug("Bouton 1 appuyé (double-clic): exécution de la scène HC2 numéro 10") fibaro:startScene(10) -- Ici on appelle une autre scène (qui peut avoir été crée en mode bloc) depuis cette scène end
pepite Posté(e) le 24 juin 2016 Signaler Posté(e) le 24 juin 2016 Bonjour, Bon on a du passer à côté de ta demande, désolé ;-) Voila un code plus lisible plus simple à comprendre. Code "emprunt" à un maitre du forum ;-) J'ai gardé ce que tu avais mis dans ton code comme commentaire A tester evidemment --[[ %% properties 79 sceneActivation %% globals --]] local capteurs = {41} -- ensemble des capteurs à armer local actions = { [11] = function() -- Touche 1 appui court fibaro:debug("Bouton 1 appuyé (court):") for i = 1,#capteurs do if (fibaro:getValue(capteurs[i],"value") == "0") then --capteurs eteints fibaro:call(capteurs[i],"setArmed", "1") fibaro:debug("Armement des capteurs de porte") else fibaro:call(capteurs[i],"turnoff") fibaro:debug("Désarmement des capteurs de porte") end end end, [12] = function() -- Si la touche appuyée génère le numéro de scène 12 (touche 1 double appui) fibaro:debug("Bouton 1 appuyé (double-clic): exécution de la scène HC2 numéro 10") fibaro:startScene(10) -- Ici on appelle une autre scène (qui peut avoir été crée en mode bloc) depuis cette scène end, [xx] = function() end, [xx] = function() end, local NumScene = tonumber(fibaro:getValue(79, "sceneActivation")) actions[NumScene]()
deder2 Posté(e) le 24 juin 2016 Auteur Signaler Posté(e) le 24 juin 2016 salut et merci pour ton coup de main J'ai réussi a bidouiller un truc, surement qu'il y a mieux mais ca fonctionne plustot pas mal Il me reste juste a trouver comment paramétrer ce script pour 3 télecommande sans crée 3 scripts identique. --[[ %% properties 79 sceneActivation %% globals --]] local NumScene = tonumber(fibaro:getValue(79, "sceneActivation")) -- On récupère la scène activée, on convertit le texte en nombre (via la commande tonumber) et on la stocke dans la variable "NumScene" pour l'utiliser dans la suite du script if (NumScene == 11) -- Si la touche appuyée génère le numéro de scène 11 (touche 1 appui court) then fibaro:debug("Bouton 1 appuyé (court):") fibaro:call(112, "setArmed", "1"); fibaro:sleep(5000) -- attend 5 secondes fibaro:call(41, "setArmed", "1"); fibaro:sleep(5000) -- attend 5 secondes fibaro:call(57, "setArmed", "1"); fibaro:sleep(5000) -- attend 5 secondes fibaro:call(121,'turnOn') -- On allume l\'eclairage complémentaire fibaro:sleep(5000) -- attend 5 secondes fibaro:call(121,'turnOff') -- On éteint l\'eclairage complémentaire fibaro:sleep(5000) -- attend 5 secondes fibaro:call(95, "setArmed", "1"); fibaro:sleep(5000) -- attend 5 secondes fibaro:call(23, "setArmed", "1"); -- Nous allons activer un capteur de porte dont l'ID est 41 if ((tonumber(fibaro:getValue(28, 'value'))) == 0) -- On récupère l'état du capteur 41 et s'il est éteint ... then -- alors fibaro:call(28, "setArmed", "1"); -- on allume fibaro:debug("Armement du capteur de porte") else -- sinon fibaro:call(28,'turnOff') -- on éteint fibaro:debug("Désarmement du capteur de porte") end elseif (NumScene == 12) -- Si la touche appuyée génère le numéro de scène 12 (touche 1 double appui) then -- alors fibaro:debug("Bouton 1 appuyé (double-clic): exécution de la scène HC2 numéro 1600") fibaro:startScene(1600) -- Ici on appelle une autre scène (qui peut avoir été crée en mode bloc) depuis cette scène end
pepite Posté(e) le 24 juin 2016 Signaler Posté(e) le 24 juin 2016 Super, c'est juste une autre methode de codage,a toi de voir Pour les 3 telecommandes tu veux faire les memes actions c'est ca ? Si oui, tu n'as pas beosin de tripler le code, sous ton 79 sceneactivation, tu mets les ids des autres telecommandes, chaque telecommande aura un id différent une fois incluse. Exemple 79 sceneActivation 80 sceneActivation 81 sceneActivation
deder2 Posté(e) le 24 juin 2016 Auteur Signaler Posté(e) le 24 juin 2016 Salut oui je veux faire les même actions j’ai testé avec ton astuce, mais ça fonctionne mal, c'est aléatoire j'ai l'impression qu'il faut que régulièrement j'utilise la télécommande de marquer dans la ligne local (ID 79) Apres avoir utilisé la télécommande 79 je peux utiliser les autres et au bout d'un moment elle ne marche plus de nouveau. Une idée ? Merci pour l'aide --[[ %% properties 79 sceneActivation 87 sceneActivation 91 sceneActivation %% globals --]] local NumScene = tonumber(fibaro:getValue(79, "sceneActivation"))
pepite Posté(e) le 24 juin 2016 Signaler Posté(e) le 24 juin 2016 il faut que tu adaptes ta variable numscene local NumScene = tonumber(fibaro:getValue(79, "sceneActivation")) local NumScene1 = tonumber(fibaro:getValue(80, "sceneActivation")) local NumScene2 = tonumber(fibaro:getValue(81, "sceneActivation")) et dans ton code tu fais des "OU" if ((NumScene == 11) or (NumScene1 == 11) or (NumScnene2 == 11)) ... A tester bien sur, rien de sur
deder2 Posté(e) le 24 juin 2016 Auteur Signaler Posté(e) le 24 juin 2016 Super merci ca fonctionne par contre je rencontre encore un probleme j'ai le premier capteur qui s'arme (194) et qui se désarme directement apres les autres ca va, mais seulement avec 2 télécommande(87 & 91) . J'ai beau chercher je trouve pas pourquoi. --[[ %% properties 79 sceneActivation 87 sceneActivation 91 sceneActivation %% globals --]] local NumScene = tonumber(fibaro:getValue(79, "sceneActivation")) -- On récupère la scène activée, on convertit le texte en nombre (via la commande tonumber) et on la stocke dans la variable "NumScene" pour l'utiliser dans la suite du script local NumScene1 = tonumber(fibaro:getValue(87, "sceneActivation")) local NumScene2 = tonumber(fibaro:getValue(91, "sceneActivation")) if (NumScene == 11) or (NumScene1 == 11) or (NumScene2 == 11)-- Si la touche appuyée génère le numéro de scène 11 (touche 1 appui court) then fibaro:debug("Bouton 1 appuyé (court):") fibaro:call(149, "setArmed", "1"); fibaro:sleep(5000) -- attend 5 secondes fibaro:call(41, "setArmed", "1"); fibaro:sleep(5000) -- attend 5 secondes fibaro:call(57, "setArmed", "1"); fibaro:sleep(5000) -- attend 5 secondes fibaro:call(121,'turnOn') -- On allume l\'eclairage complémentaire fibaro:sleep(5000) -- attend 5 secondes fibaro:call(121,'turnOff') -- On éteint l\'eclairage complémentaire fibaro:sleep(5000) -- attend 5 secondes fibaro:call(95, "setArmed", "1"); fibaro:sleep(5000) -- attend 5 secondes fibaro:call(23, "setArmed", "1"); -- Nous allons activer un capteur de porte dont l'ID est 28 if ((tonumber(fibaro:getValue(28, 'value'))) == 0) -- On récupère l'état du capteur 28 et s'il est éteint ... then -- alors fibaro:call(28, "setArmed", "1"); -- on allume fibaro:debug("Armement du capteur de porte") else -- sinon fibaro:call(28,'turnOff') -- on éteint fibaro:debug("Désarmement du capteur de porte") end elseif (NumScene == 12) -- Si la touche appuyée génère le numéro de scène 12 (touche 1 double appui) then -- alors fibaro:debug("Bouton 1 appuyé (double-clic): exécution de la scène HC2 numéro 1600") fibaro:startScene(1600) -- Ici on appelle une autre scène (qui peut avoir été crée en mode bloc) depuis cette scène end
pepite Posté(e) le 25 juin 2016 Signaler Posté(e) le 25 juin 2016 bonjour, je pense qu il te manque des "end" et tu devrais tester l 'etat des capteurs avant de les armer, ce serait plus su. bizarre ce 149
deder2 Posté(e) le 28 juin 2016 Auteur Signaler Posté(e) le 28 juin 2016 salut a tous je deviens fou !!!!! je galere toujours avec les scripts pour allumer ou éteindre mon alarmequand j'appuie sur les bouton 1 et 2 de mes télécommandes cela fonctionne aléatoirement, je pense que je doit avoir des erreurs de code J'ai tous viré est laisser q'un seul capteur pour simplifier mais même comme ça, même punition ça déconne.si une ame charitable pouvais m'aider cela serait super sympa car la je cherche je cherche mais j'ai plus l'impression de plus reculer que d'avancer. Mes Id :- Capteur de porte - 41 57 95 149 - Capteur de mouvement - 23 28 - Sirene - 110 63- Télécommande - 79 91 87 --[[ %% properties 79 sceneActivation 87 sceneActivation 91 sceneActivation %% globals --]] local NumScene = tonumber(fibaro:getValue(79, "sceneActivation")) -- On récupère la scène activée, on convertit le texte en nombre (via la commande tonumber) et on la stocke dans la variable "NumScene" pour l'utiliser dans la suite du script local NumScene1 = tonumber(fibaro:getValue(87, "sceneActivation")) local NumScene2 = tonumber(fibaro:getValue(91, "sceneActivation")) if (NumScene == 11) or (NumScene1 == 11) or (NumScene2 == 11)-- Si la touche appuyée génère le numéro de scène 11 (touche 1 appui court) then -- Nous allons activer un capteur de porte dont l'ID est 57 if ((tonumber(fibaro:getValue(57, 'value'))) == 0) -- On récupère l'état du capteur 57 et s'il est éteint ... then -- alors fibaro:call(57, "setArmed", "1"); -- on arme fibaro:debug("Armement du capteur de la porte") else -- sinon fibaro:call(57,'turnOff') -- on éteint fibaro:debug("Désarmement du capteur de la porte") end end script pour éteindre l'alarme --[[ %% properties 79 sceneActivation 87 sceneActivation 91 sceneActivation %% globals --]] local NumScene = tonumber(fibaro:getValue(79, "sceneActivation")) -- On récupère la scène activée, on convertit le texte en nombre (via la commande tonumber) et on la stocke dans la variable "NumScene" pour l'utiliser dans la suite du script local NumScene1 = tonumber(fibaro:getValue(87, "sceneActivation")) local NumScene2 = tonumber(fibaro:getValue(91, "sceneActivation")) if (NumScene == 21) or (NumScene1 == 21) or (NumScene2 == 21)-- Si la touche appuyée génère le numéro de scène 21 (touche 2 appui court) then -- Nous allons désactiver un capteur de porte dont l'ID est 57 if ((tonumber(fibaro:getValue(57, 'value'))) == 0) -- On récupère l'état du capteur 57 et s'il est éteint ... then -- alors fibaro:call(57, "setArmed", "0"); -- on allume fibaro:debug("Armement du capteur de la porte") else -- sinon fibaro:call(57,'turnOff') -- on éteint fibaro:debug("Désarmement du capteur de la porte") end end
pepite Posté(e) le 28 juin 2016 Signaler Posté(e) le 28 juin 2016 Bonjour, Ca ne viendrait pas de cela l'aleatoire ? Dans le script "extinction" Je pense que cela devrait etre 1 plutot if ((tonumber(fibaro:getValue(57, 'value'))) == 0) Et je pense qu'il ne faut pas faire 2 scenes, mais qu1 car dans la 1ere tu mets : IF eteint ("==0") THEN tu allumes ELSE tu eteins Tu demandes donc d 'allumer si eteint ou d'eteindre si allulme, pas besoin de 2 eme script, d'où l'aléatoire if ((tonumber(fibaro:getValue(57, 'value'))) == 0) -- On récupère l'état du capteur 57 et s'il est éteint ... then -- alors fibaro:call(57, "setArmed", "1"); -- on arme fibaro:debug("Armement du capteur de la porte") else -- sinon fibaro:call(57,'turnOff') -- on éteint fibaro:debug("Désarmement du capteur de la porte")
deder2 Posté(e) le 28 juin 2016 Auteur Signaler Posté(e) le 28 juin 2016 ok mais comment gérer l'appuie de deux boutons dans un seul script ?. ca dépasse mes compentences merci
pepite Posté(e) le 28 juin 2016 Signaler Posté(e) le 28 juin 2016 Je ne comprends pas ta question ? 2 boutons simultanés ?
deder2 Posté(e) le 28 juin 2016 Auteur Signaler Posté(e) le 28 juin 2016 j'utilise le bouton 1 de ma télécommande pour activer l'alarme et le bouton 2 pour la désactiver d'ou les deux scripts. Apres je peux aussi utiliser qu"un seul bouton pour allumer et eteindre mais je trouve que deux boutons ces mieux, non ? merci pour ton aide
pepite Posté(e) le 28 juin 2016 Signaler Posté(e) le 28 juin 2016 Dans ce cas ton code ne correspond pas à ton besoin. Le code du bouton 1 est 11 : pour activer, 21 pour desactiver c'est cela ? Avec un fonctionnement identique pour les 3 telecommandes Je te fais un petit script d'exemple pour que tu t'en inspires A tester avec les 3 telecommandes, j'ai repris tes lignes et tes commentaires pour que tu comprennes Avec 1 télécommande, c'est sur que cela fonctionnera, jamais testé pour 3 --[[ %% autostart %% properties 79 sceneActivation 87 sceneActivation 91 sceneActivation %% globals --]] ------ local actions = { [11] = function() -- Activation de l'alarme if ((tonumber(fibaro:getValue(57, 'value'))) == 0) -- On récupère l'état du capteur 57 et s'il est éteint ... then -- alors fibaro:call(57, "setArmed", "1") -- on arme fibaro:debug("Armement du capteur 57 de la porte") end end, [21] = function() -- Desactivation de l'alarme if ((tonumber(fibaro:getValue(57, 'value'))) == 1) -- On récupère l'état du capteur 57 et s'il est ARME then -- alors fibaro:call(57, "setArmed", "0") -- on desarme fibaro:debug("Désarmement du capteur 57 de la porte") end end, } local NumScene = tonumber(fibaro:getValue(79, "sceneActivation")) local NumScene1 = tonumber(fibaro:getValue(87, "sceneActivation")) local NumScene2 = tonumber(fibaro:getValue(91, "sceneActivation")) actions[NumScene]() actions[NumScene1]() actions[NumScene2]()
deder2 Posté(e) le 28 juin 2016 Auteur Signaler Posté(e) le 28 juin 2016 merci pour le script j'ai une erreur line 40 [DEBUG] 16:12:44: line 40: attempt to call field '?' (a nil value) est je n'arrive qu'a armer avec la télécommande 79 une idée ?
pepite Posté(e) le 28 juin 2016 Signaler Posté(e) le 28 juin 2016 on essaie simple sans les 3 telecommandes --[[ %% autostart %% properties 79 sceneActivation %% globals --]] ------ local actions = { [11] = function() -- Activation de l'alarme if ((tonumber(fibaro:getValue(57, 'value'))) == 0) -- On récupère l'état du capteur 57 et s'il est éteint ... then -- alors fibaro:call(57, "setArmed", "1") -- on arme fibaro:debug("Armement du capteur 57 de la porte") end end, [21] = function() -- Desactivation de l'alarme if ((tonumber(fibaro:getValue(57, 'value'))) == 1) -- On récupère l'état du capteur 57 et s'il est ARME then -- alors fibaro:call(57, "setArmed", "0") -- on desarme fibaro:debug("Désarmement du capteur 57 de la porte") end end, } local action = tonumber(fibaro:getValue(79, "sceneActivation")) actions[action]()
deder2 Posté(e) le 28 juin 2016 Auteur Signaler Posté(e) le 28 juin 2016 alors l'armement fonctionne mais pas le bouton 2 pour desarmer et plus de message d'erreur j'ai le debug ([DEBUG] 16:32:28: Armement du capteur 57 de la porte) est rien d'autre desoler de te prendre tous ton temps.
pepite Posté(e) le 28 juin 2016 Signaler Posté(e) le 28 juin 2016 pas de souci c'est avec plaisir. en fait cela vient de la condition pour le bouton 2 veux tu verifier l'etat du capteur arme ou non ? ou ouvert/ferme du capteur de porte ? if ((tonumber(fibaro:getValue(57, 'value'))) == 0) ceci verifie si le capteru est ferme ceci si le capteur est arme : if ((tonumber(fibaro:getValue(57, 'armed'))) > 0) essaie comme ceci, avec capteeur armé ou non, si armé on desarme, si desarme, on arme --[[ %% autostart %% properties 79 sceneActivation %% globals --]] ------ local actions = { [11] = function() -- Activation de l'alarme if (tonumber(fibaro:getValue(57, "armed")) == 0) -- On récupère l'état du capteur 57 et s'il est desarmé then -- alors fibaro:call(57, "setArmed", "1") -- on arme fibaro:debug("Armement du capteur 57 de la porte") end end, [21] = function() -- Desactivation de l'alarme if (tonumber(fibaro:getValue(57, "armed")) > 0) -- On récupère l'état du capteur 57 et s'il est ARME then -- alors fibaro:call(57, "setArmed", "0") -- on desarme fibaro:debug("Désarmement du capteur 57 de la porte") end end, } local action = tonumber(fibaro:getValue(79, "sceneActivation")) actions[action]()
deder2 Posté(e) le 28 juin 2016 Auteur Signaler Posté(e) le 28 juin 2016 honnetement, peux importe pour moi du moment que cela fonctionne c'est quoi le plus simple ?
pepite Posté(e) le 28 juin 2016 Signaler Posté(e) le 28 juin 2016 t'as teste le code du post précédent ?
deder2 Posté(e) le 28 juin 2016 Auteur Signaler Posté(e) le 28 juin 2016 oui cela fonctionne impeccable
pepite Posté(e) le 28 juin 2016 Signaler Posté(e) le 28 juin 2016 tu veux armer tous les modules que tu as ostes ?
deder2 Posté(e) le 28 juin 2016 Auteur Signaler Posté(e) le 28 juin 2016 oui mais c'est surtout de faire fonctionner les 3 télécommande qui a l'air d'etre le plus dur ? non ?
pepite Posté(e) le 28 juin 2016 Signaler Posté(e) le 28 juin 2016 essaie cela pour les 3 telecommandes a tester --[[ %% autostart %% properties 79 sceneActivation 87 sceneActivation 91 sceneActivation %% globals --]] local telco = {79, 87, 91} -------- local action local source = fibaro:getSourceTrigger() for i = 1, #telco do if (source["deviceID"] == telco[i]) then action = tonumber(fibaro:getValue(telco[i], "sceneActivation") end end ------ local actions = { [11] = function() -- Activation de l'alarme if (tonumber(fibaro:getValue(57, "armed")) == 0) -- On récupère l'état du capteur 57 et s'il est desarmé then -- alors fibaro:call(57, "setArmed", "1") -- on arme fibaro:debug("Armement du capteur 57 de la porte") end end, [21] = function() -- Desactivation de l'alarme if (tonumber(fibaro:getValue(57, "armed")) > 0) -- On récupère l'état du capteur 57 et s'il est ARME then -- alors fibaro:call(57, "setArmed", "0") -- on desarme fibaro:debug("Désarmement du capteur 57 de la porte") end end, } actions[action]()
deder2 Posté(e) le 28 juin 2016 Auteur Signaler Posté(e) le 28 juin 2016 marche pas [DEBUG] 17:34:14: line 21: ')' expected (to close '(' at line 20) near 'end' aucune télé ne fonctionne, rien ne s'arme
Messages recommandés