Aller au contenu

Messages recommandés

Posté(e)

bonsoir a tous 

 

Je debute dans le langage LUA est j'aurai besoin d'un gros coup de main pour mon script

Voila 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
Posté(e)

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]()
Posté(e)

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 :P

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
Posté(e)

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
Posté(e)
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"))

Posté(e)

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

Posté(e)

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
 
Posté(e)

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

Posté(e)

salut a tous je deviens fou !!!!! :P

 

je galere toujours avec les scripts pour allumer ou éteindre mon alarme

quand 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






 

Posté(e)

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")
Posté(e)

ok 

 

mais comment gérer l'appuie de deux boutons dans un seul script ?.

 

ca dépasse mes compentences :(

 

merci

Posté(e)

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

 

Posté(e)

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]()

 

Posté(e)

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 ?

Posté(e)

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]()

 

Posté(e)

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.

Posté(e)

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]()
Posté(e)

honnetement,  peux importe pour moi du moment que cela fonctionne

 

c'est quoi le plus simple ?

Posté(e)

oui mais c'est surtout de faire fonctionner les 3 télécommande qui a l'air d'etre le plus dur ? non ?

Posté(e)

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]()

 

Posté(e)

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
×
×
  • Créer...