Aller au contenu

Messages recommandés

Posté(e)

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

 

Posté(e)

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

 

merci beaucoup

Posté(e)

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

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

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

 

Posté(e)

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

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

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

Posté(e)

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 ;-)

Posté(e)

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.

 

;)

Posté(e)

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

non pardon pas d'erreur 

 

j'ai du rater un truc , ca marche impeccable

 

merci a vous tous pour l'aide

 

a bientot

Posté(e)

excellent trainkill, j'ai eu la flemme de le faire comme ceci ;-), j'avais même pas eu l'idee ;-)

 

du beau boulot ;-) TOP !!

Posté(e)

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

Posté(e)

@ 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. :60:

Posté(e)

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

Posté(e)

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

ca marche a la perfection :P

 

merci pour le coup de main

 

Je rajouterai ma sirene intérieur quand je l 'aurai récupéré du sav :(

 

a bientot

  • Upvote 1
×
×
  • Créer...