pepite Posté(e) le 28 juin 2016 Signaler Posté(e) le 28 juin 2016 oops, désolé, manquait une petite parenthese, donc normal que cela ne fonctionne pas Resteste, j'attends un peu --[[ %% 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 alors j'ai une erreur [DEBUG] 17:49:46: Désarmement du capteur 57 de la porte [DEBUG] 17:49:54: line 49: attempt to call field '?' (a nil value) [DEBUG] 17:49:54: line 49: attempt to call field '?' (a nil value) [DEBUG] 17:49:54: line 49: attempt to call field '?' (a nil value) [DEBUG] 17:49:55: Armement du capteur 57 de la porte [DEBUG] 17:49:59: Désarmement du capteur 57 de la porte Mais les trois télécommande fonctionne merci beaucoup
pepite Posté(e) le 28 juin 2016 Signaler Posté(e) le 28 juin 2016 oui le debug est àcause de la boucle c'est pas terrible, attends je modifie un peu.
pepite Posté(e) le 28 juin 2016 Signaler Posté(e) le 28 juin 2016 Essaie ca --[[ %% autostart %% properties 79 sceneActivation 87 sceneActivation 91 sceneActivation %% globals --]] -------- local action local source = fibaro:getSourceTrigger() if (source["deviceID"] == 79) then action = tonumber(fibaro:getValue(79, "sceneActivation")) end if (source["deviceID"] == 87) then action = tonumber(fibaro:getValue(87, "sceneActivation")) end if (source["deviceID"] == 91) then action = tonumber(fibaro:getValue(91, "sceneActivation")) 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 ca marche aussi mais un autre message d'erreur [DEBUG] 18:00:29: Désarmement du capteur 57 de la porte [DEBUG] 18:00:31: Armement du capteur 57 de la porte [DEBUG] 18:00:32: Désarmement du capteur 57 de la porte [DEBUG] 18:00:36: line 56: attempt to call field '?' (a nil value) [DEBUG] 18:00:38: line 56: attempt to call field '?' (a nil value) [DEBUG] 18:00:40: line 56: attempt to call field '?' (a nil value)
pepite Posté(e) le 28 juin 2016 Signaler Posté(e) le 28 juin 2016 Quelle est ta ligne 56 ? car le forum decale
deder2 Posté(e) le 28 juin 2016 Auteur Signaler Posté(e) le 28 juin 2016 actions[action]() la dernière ligne
pepite Posté(e) le 28 juin 2016 Signaler Posté(e) le 28 juin 2016 la je comprends pas bien. ca vient peut-etre du nombre de scenes en cours Essaie ca : --[[ %% autostart %% properties 79 sceneActivation 87 sceneActivation 91 sceneActivation %% globals --]] --------- Limitation à 1 seule instance --------- if (fibaro:countScenes() > 1) then fibaro:abort() end ---------------------------------------------- -------- local action local source = fibaro:getSourceTrigger() if (source["deviceID"] == 79) then action = tonumber(fibaro:getValue(79, "sceneActivation")) end if (source["deviceID"] == 87) then action = tonumber(fibaro:getValue(87, "sceneActivation")) end if (source["deviceID"] == 91) then action = tonumber(fibaro:getValue(91, "sceneActivation")) 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 alors ca marche toujours mais encore une erreur [DEBUG] 18:17:29: Armement du capteur 57 de la porte [DEBUG] 18:17:29: Désarmement du capteur 57 de la porte [DEBUG] 18:17:31: line 60: attempt to call field '?' (a nil value) [DEBUG] 18:17:35: line 60: attempt to call field '?' (a nil value) [DEBUG] 18:17:36: line 60: attempt to call field '?' (a nil value) ligne 60 la meme actions[action]()
pepite Posté(e) le 28 juin 2016 Signaler Posté(e) le 28 juin 2016 je comprends pas bien, j'ai demande de l'aide aux experts du forum Bien que cela fonctionne ce n'est pas tres "sexy" cette erreur, et j'aimerais comprendre Peut-etre comme ceci, tu peux tester stp ? --[[ %% autostart %% properties 79 sceneActivation 87 sceneActivation 91 sceneActivation %% globals --]] --------- Limitation à 1 seule instance --------- if (fibaro:countScenes() > 1) then fibaro:abort() end ---------------------------------------------- local action local source = fibaro:getSourceTrigger() if (source["deviceID"] == 79) then action = tonumber(fibaro:getValue(79, "sceneActivation")) elseif (source["deviceID"] == 87) then action = tonumber(fibaro:getValue(87, "sceneActivation")) else action = tonumber(fibaro:getValue(91, "sceneActivation")) 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 super merci ca fonctionne impeccable et plus de message d'erreur Merci beaucoup pour ton aide maintenant je devrai pouvoir finir seul. Encore merci pour ta patience et ta gentillesse a tres bientot
pepite Posté(e) le 28 juin 2016 Signaler Posté(e) le 28 juin 2016 Super, de rien Petit conseil, Au cas ou, au vu du nombre de capteurs que tu as à mettre, utilise une boucle et une table Cela te permettra de garder un code lisible et de pouvoir rajouter ou enlever des capteurs si ton installation evolue. Essaie et on peut faire ensemble si tu veux..Amuse toi bien ;-)
trainkill666 Posté(e) le 28 juin 2016 Signaler Posté(e) le 28 juin 2016 Non testé : --[[ %% properties 79 sceneActivation 87 sceneActivation 91 sceneActivation %% globals --]] -- Ne lance q'une seule fois la scène if (fibaro:countScenes() > 1) then fibaro:abort() end -- Lecture de l'ID du module déclencheur local moduleactif = fibaro:getSourceTrigger() -- Lecture du déclencheur (moduleactif) local IDmodule = tonumber(moduleactif['deviceID']) -- Lecture de l'ID du déclencheur (trigger) -- Liste des capteurs local listecapteurs = {57} -- Armement/Desarmement de chaque capteur local etatactivation = function(IDcapteur, choixarmement) local etatarmement = tonumber(fibaro:getValue(IDcapteur, "armed")) if choixarmement == "1" and etatarmement == 0 then fibaro:call(IDcapteur, "setArmed", "1") -- on arme fibaro:debug("Armement du capteur " .. IDcapteur .. " de la porte") elseif choixarmement == "0" and etatarmement > 0 then fibaro:call(IDcapteur, "setArmed", "0") -- on desarme fibaro:debug("Désarmement du capteur " .. IDcapteur .. " de la porte") end end -- Boucle de changement d'état des capteurs local changementetats = function(choixarmement) for index,valeur in pairs(listecapteurs) do etatactivation(valeur, choixarmement) end end -- Choix activation ou non des capteurs selon le bouton de la télécommande local actions = { ["11"] = function() -- Activation de l'alarme changementetats("1") end, ["21"] = function() -- Desactivation de l'alarme changementetats("0") end, } -- Demarrage du processus actions[fibaro:getValue(IDmodule, "sceneActivation")]() Il y a une liste des capteurs à compléter.
deder2 Posté(e) le 28 juin 2016 Auteur Signaler Posté(e) le 28 juin 2016 merci Trainkill666 pour ton script j'ai renseigner tous mes capteurs et cela fonctionne tres bien.J' ai quand meme un message d'erreur qui s'affiche [DEBUG] 00:25:24: line 52: attempt to call field '?' (a nil value) --[[ %% properties 79 sceneActivation 87 sceneActivation 91 sceneActivation %% globals --]] -- Ne lance q'une seule fois la scène if (fibaro:countScenes() > 1) then fibaro:abort() end -- Lecture de l'ID du module déclencheur local moduleactif = fibaro:getSourceTrigger() -- Lecture du déclencheur (moduleactif) local IDmodule = tonumber(moduleactif['deviceID']) -- Lecture de l'ID du déclencheur (trigger) -- Liste des capteurs local listecapteurs = {57,41,95,149,28,23} -- Armement/Desarmement de chaque capteur local etatactivation = function(IDcapteur, choixarmement) local etatarmement = tonumber(fibaro:getValue(IDcapteur, "armed")) if choixarmement == "1" and etatarmement == 0 then fibaro:call(IDcapteur, "setArmed", "1") -- on arme fibaro:debug("Armement du capteur " .. IDcapteur .. " de la porte") elseif choixarmement == "0" and etatarmement > 0 then fibaro:call(IDcapteur, "setArmed", "0") -- on desarme fibaro:debug("Désarmement du capteur " .. IDcapteur .. " de la porte") end end -- Boucle de changement d'état des capteurs local changementetats = function(choixarmement) for index,valeur in pairs(listecapteurs) do etatactivation(valeur, choixarmement) end end -- Choix activation ou non des capteurs selon le bouton de la télécommande local actions = { ["11"] = function() -- Activation de l'alarme changementetats("1") end, ["21"] = function() -- Desactivation de l'alarme changementetats("0") end, } -- Demarrage du processus actions[fibaro:getValue(IDmodule, "sceneActivation")]()
deder2 Posté(e) le 28 juin 2016 Auteur Signaler Posté(e) le 28 juin 2016 non pardon pas d'erreur j'ai du rater un truc , ca marche impeccable merci a vous tous pour l'aide a bientot
pepite Posté(e) le 29 juin 2016 Signaler Posté(e) le 29 juin 2016 excellent trainkill, j'ai eu la flemme de le faire comme ceci ;-), j'avais même pas eu l'idee ;-) du beau boulot ;-) TOP !!
deder2 Posté(e) le 29 juin 2016 Auteur Signaler Posté(e) le 29 juin 2016 Salut en fin de compte j'ai bien une erreur qui s'affiche mais uniquement quand je clique sur le bouton start sous le script [DEBUG] 12:00:00: line 91: attempt to concatenate local 'deviceId' (a nil value) sauf qu'il n'y a pas de ligne 91 je pense que c la derniere ligne actions[fibaro:getValue(IDmodule, "sceneActivation")]() mais malgré cela aucune erreur ne s 'affiche apres a l'utilisation et cela fonctionne impeccable. merci
trainkill666 Posté(e) le 29 juin 2016 Signaler Posté(e) le 29 juin 2016 @ deder2 Ce n'est pas une erreur, j'ai retiré l'autostart volontairement. Si tu lances la scène en manuel, il n'y a pas de déclencheur, donc ça ne peut pas fonctionner, car il n'y a ni ID, ni possibilité de lire le bouton appuyé. Si tu veux je peux te mettre 1 ligne qui bloque le lancement par appui sur start, ou avec la dernière 4.083 tu peux le paramétrer.
deder2 Posté(e) le 29 juin 2016 Auteur Signaler Posté(e) le 29 juin 2016 non t'embete pas , le principale ce que tous fonctionne merci encore a bientot
deder2 Posté(e) le 29 juin 2016 Auteur Signaler Posté(e) le 29 juin 2016 Bon j'ai encore besoin d'un petit coup de main je vous explique , j'ai donc 3 télécommande Kfob v2 pour gérer l'alarme.un 1ER Script pour gérer les boutons 1&2 ( On & Off de l'alarme)un 2EME pour gérer la lumière de la terrasse. (bouton 3)un 3EME pour gérer un bouton panic. (bouton 4)Script 1 --[[ %% properties 79 sceneActivation 87 sceneActivation 91 sceneActivation %% globals --]] -- Ne lance q'une seule fois la scène if (fibaro:countScenes() > 1) then fibaro:abort() end -- Lecture de l'ID du module déclencheur local moduleactif = fibaro:getSourceTrigger() -- Lecture du déclencheur (moduleactif) local IDmodule = tonumber(moduleactif['deviceID']) -- Lecture de l'ID du déclencheur (trigger) -- Liste des capteurs local listecapteurs = {57,41,95,149,28,23} -- Armement/Desarmement de chaque capteur local etatactivation = function(IDcapteur, choixarmement) local etatarmement = tonumber(fibaro:getValue(IDcapteur, "armed")) if choixarmement == "1" and etatarmement == 0 then fibaro:sleep(9000) -- On attends 9 secondes fibaro:call(IDcapteur, "setArmed", "1") -- on arme fibaro:debug("Armement du capteur " .. IDcapteur .. " de la porte") fibaro:call(121,'turnOn') -- On allume l\'eclairage complémentaire fibaro:sleep(3000) -- attend 3 secondes fibaro:call(121,'turnOff') -- On éteint l\'eclairage complémentaire elseif choixarmement == "0" and etatarmement > 0 then fibaro:sleep(500) -- On attends 0,5 secondes fibaro:call(110, "turnOff", "0"); -- on éteint la sirène intérieur fibaro:call(63, "turnOff", "0"); -- on éteint la sirène extérieur fibaro:call(IDcapteur, "setArmed", "0") -- on desarme fibaro:debug("Désarmement du capteur " .. IDcapteur .. " de la porte") fibaro:call(121,'turnOn') -- On allume l\'eclairage complémentaire fibaro:sleep(1000) -- attend 1 secondes fibaro:call(121,'turnOff') -- On éteint l\'eclairage complémentaire end end -- Boucle de changement d'état des capteurs local changementetats = function(choixarmement) for index,valeur in pairs(listecapteurs) do etatactivation(valeur, choixarmement) end end -- Choix activation ou non des capteurs selon le bouton de la télécommande local actions = { ["11"] = function() -- Activation de l'alarme changementetats("1") end, ["21"] = function() -- Desactivation de l'alarme changementetats("0") end, } -- Demarrage du processus actions[fibaro:getValue(IDmodule, "sceneActivation")]() Script 2 --[[ %% 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 == 31) or (NumScene1 == 31) or (NumScene2 == 31)-- Si la touche appuyée génère le numéro de scène 31 (touche 1 appui court) then fibaro:debug("Bouton 3 appuyé (court):") -- Nous allons activer un capteur de porte dont l'ID est 121 if ((tonumber(fibaro:getValue(121, 'value'))) == 0) -- On récupère l'état du capteur 121 et s'il est éteint ... then -- alors fibaro:call(121, 'turnOn'); -- on allume fibaro:debug("Allume la Terrasse") else -- sinon fibaro:call(121,'turnOff') -- on éteint fibaro:debug("Eteint la Terrasse") end end Script 3 --[[ %% 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 == 41) -- Si la touche appuyée génère le numéro de scène 41 (touche 4 appui court) then fibaro:debug("Bouton 4 appuyé (court):") -- Nous allons inverser l'état de la sirène extérieur dont l'ID est 63 if ((tonumber(fibaro:getValue(63, 'value'))) == 0) -- On récupère l'état de la sirène extérieur 63 et s'il est éteint ... then -- alors fibaro:call(63,'turnOn') -- on allume fibaro:debug("Allumage de la sirène extérieur") else -- sinon fibaro:call(63,'turnOff') -- on éteint fibaro:debug("Extinction de la sirène extérieur") end end Script 3 bis --[[ %% 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 == 41) or (NumScene1 == 41) or (NumScene2 == 41)-- Si la touche appuyée génère le numéro de scène 41 (touche 1 appui court) then fibaro:debug("Bouton 4 appuyé (court):") -- Nous allons inverser l'état de la sirène extérieur dont l'ID est 63 if ((tonumber(fibaro:getValue(63, 'value'))) == 0) -- On récupère l'état de la sirène extérieur 63 et s'il est éteint ... then -- alors fibaro:call(63,'turnOn') -- on allume fibaro:debug("Allumage de la sirène extérieur") else -- sinon fibaro:call(63,'turnOff') -- on éteint fibaro:debug("Extinction de la sirène extérieur") end end Voila le problème ces que le script trois fonctionne bien avec une seul télécommande mais des que je rajoute les deux autres télécommande ça détraque tous le reste des script.Par exemple quand j'arme l'alarme la sirène va se mettre a sonner pour aucune raison. une idée ? a bientot
pepite Posté(e) le 29 juin 2016 Signaler Posté(e) le 29 juin 2016 ce sont les memes telecommandes que le script que trainkill t'a fait à priori, tu peux donc tout gerer dans la meme scene, ps besoin de scenes differentes Tu peux rajouter dans le code de trainkill je te mets la; version rapide sans boucle car a priori qu'1 seul capteur de concerner à chaque fois A tester --[[ %% properties 79 sceneActivation 87 sceneActivation 91 sceneActivation %% globals --]] -- Ne lance q'une seule fois la scène if (fibaro:countScenes() > 1) then fibaro:abort() end -- Lecture de l'ID du module déclencheur local moduleactif = fibaro:getSourceTrigger() -- Lecture du déclencheur (moduleactif) local IDmodule = tonumber(moduleactif['deviceID']) -- Lecture de l'ID du déclencheur (trigger) -- Liste des capteurs local listecapteurs = {57,41,95,149,28,23} -- Armement/Desarmement de chaque capteur local etatactivation = function(IDcapteur, choixarmement) local etatarmement = tonumber(fibaro:getValue(IDcapteur, "armed")) if choixarmement == "1" and etatarmement == 0 then fibaro:sleep(9000) -- On attends 9 secondes fibaro:call(IDcapteur, "setArmed", "1") -- on arme fibaro:debug("Armement du capteur " .. IDcapteur .. " de la porte") fibaro:call(121,'turnOn') -- On allume l\'eclairage complémentaire fibaro:sleep(3000) -- attend 3 secondes fibaro:call(121,'turnOff') -- On éteint l\'eclairage complémentaire elseif choixarmement == "0" and etatarmement > 0 then fibaro:sleep(500) -- On attends 0,5 secondes fibaro:call(110, "turnOff", "0"); -- on éteint la sirène intérieur fibaro:call(63, "turnOff", "0"); -- on éteint la sirène extérieur fibaro:call(IDcapteur, "setArmed", "0") -- on desarme fibaro:debug("Désarmement du capteur " .. IDcapteur .. " de la porte") fibaro:call(121,'turnOn') -- On allume l\'eclairage complémentaire fibaro:sleep(1000) -- attend 1 secondes fibaro:call(121,'turnOff') -- On éteint l\'eclairage complémentaire end end -- Boucle de changement d'état des capteurs local changementetats = function(choixarmement) for index,valeur in pairs(listecapteurs) do etatactivation(valeur, choixarmement) end end -- Choix activation ou non des capteurs selon le bouton de la télécommande local actions = { ["11"] = function() -- Activation de l'alarme changementetats("1") end, ["21"] = function() -- Desactivation de l'alarme changementetats("0") end, ["31"] = function() -- Allumage terrasse if (tonumber(fibaro:getValue(121, 'value')) == 0) then fibaro:call(121, 'turnOn'); -- on allume fibaro:debug("Allume la Terrasse") -- Extinction terrasse else fibaro:call(121,'turnOff') -- on éteint fibaro:debug("Eteint la Terrasse") end end, ["41"] = function() -- Allumage Sirene exterieure if (tonumber(fibaro:getValue(63, 'value')) == 0) then fibaro:call(63,'turnOn') -- on allume fibaro:debug("Allumage de la sirène extérieur") else fibaro:call(63,'turnOff') -- on éteint fibaro:debug("Extinction de la sirène extérieur") end end, } -- Demarrage du processus actions[fibaro:getValue(IDmodule, "sceneActivation")]()
deder2 Posté(e) le 29 juin 2016 Auteur Signaler Posté(e) le 29 juin 2016 ca marche a la perfection merci pour le coup de main Je rajouterai ma sirene intérieur quand je l 'aurai récupéré du sav a bientot 1
Messages recommandés