Aller au contenu

Scene Alarme Avec Déclenchement Non Fonctionnel


oldelvis

Recommended Posts

Salut à  tous,

 

Je viens vers vous car je suis débutant en LUA et les scènes que j'ai écrites ne sont pas toujours au top.

 

Celle ci doit déclencher une notification sur mon enceinte Sonos grâce au script Playfile de l'excellent Kriroff.

Les déclencheurs de cette scène sont les capteurs de mouvements et une variable globale qui s'appelle "jedors"

 

J'ai inséré dans le script deux lignes print pour vérifier les valeurs lors du déclenchement et elles sont bonnes.

 

Malgré tout seul le premier déclencheur fonctionne (c'est la premère condition avec if....)

 

Les autres fonction if... ne déclenchent rien...

Je pense qu'il manque qque chose du style or ou elseif... mais ça ne fonctionne pas...

 

Si vous avez une idée, je suis plus que preneur... je pourrais enfin écrire d'autres scènes qui fonctionneront..enfin, j'espère...

 

scenealarmenuit.rtf

Lien vers le commentaire
Partager sur d’autres sites

Pour faciliter la lecture de ton code, tu peux l'inclure facilement en appuyant sur l'icône <> (juste en dessous des smily).

Je recole donc ton code original

--[[
%% properties
94 value
124 value
119 value
10 value
32 value
%% globals
jedors
--]]


local jedors = fibaro:getGlobal("jedors")
local capteurentree = fibaro:getValue(94, 'value')
local capteurcuisine = fibaro:getValue( 124, 'value')
local capteursalon = fibaro:getValue(119,'value')
local porteentree = fibaro:getValue(10, 'value')
local portecouloir = fibaro:getValue(32, 'value')

print (capteurentree)
print (jedors)
if (jedors == '1' and capteurentree == '1') then
    fibaro:call(134,"pressButton","4")
  end
if (jedors == '1' and capteurcuisine == '1') then
   fibaro:call(134,"pressbutton","5")
  end
if (jedors == '1' and capteursalon == '1') then
   fibaro:call(134,"pressbutton","6")
  end
if (jedors == '1' and porteentree == '1') then
  fibaro:call(134,"pressbutton","2")
 end
if (jedors =='1' and portecouloir == '1') then
  fibaro:call(134,"pressbutton","3")
  end
}
 

maintenant, je n'y vois pas d'erreur flagrante. Cependant, je le modifierais ainsi pour une plus grande fiabilité, en y ajoutant des debug :

--[[
%% properties
94 value
124 value
119 value
10 value
32 value
%% globals
jedors
--]]


local jedors = fibaro:getGlobal("jedors")
local capteurentree = fibaro:getValue(94, 'value')
local capteurcuisine = fibaro:getValue( 124, 'value')
local capteursalon = fibaro:getValue(119,'value')
local porteentree = fibaro:getValue(10, 'value')
local portecouloir = fibaro:getValue(32, 'value')

print (capteurentree)
print (jedors)
if jedors == '1' then
  fibaro:debug('jedors = 1')
  if capteurentree == '1' then
    fibaro:debug('Capteur entrée')
    fibaro:call(134,"pressButton","4")
  elseif capteurcuisine == '1' then
    fibaro:debug('Capteur cuisine')
    fibaro:call(134,"pressbutton","5")
  elseif capteursalon == '1' then
    fibaro:debug('Capteur salon')
    fibaro:call(134,"pressbutton","6")
  elseif porteentree == '1' then
    fibaro:debug('Porte entrée')
    fibaro:call(134,"pressbutton","2")
  elseif portecouloir == '1' then
    fibaro:debug('Porte couloir')
    fibaro:call(134,"pressbutton","3")
  end
  else
   fibaro:debug('jedors <> 1')
end
 

tu devrais ainsi avoir également un meilleur debug

Lien vers le commentaire
Partager sur d’autres sites

Non testé, il y a peut-être des fautes de frappes  :)  :

--[[
%% properties
94 value
124 value
119 value
10 value
32 value
%% globals
--]]

--jedors est retiré des déclencheurs car pas utile

-- récupération de l'ID déclencheur
local moduleactif = fibaro:getSourceTrigger()
local IDactif = tonumber(moduleactif['deviceID'])

local jedors = fibaro:getGlobal("jedors")

--affichage du nom du capteur déclencheur et de son ID
fibaro:debug(fibaro:getName(IDactif))
fibaro:debug(IDactif)

-- correspondance entre ID capteur et numéro du message à  envoyer
local buttonpourcapteur = {[10] = "2", [32] = "3", [94] = "4", [119] = "6", [124] = "5"}


-- Lancement
if jedors == "1" and tonumber(fibaro:getValue(IDactif, 'value')) > 0 then
fibaro:call(134, "pressButton", buttonpourcapteur[IDactif])
fibaro:debug("notification envoyée")
end
  • Upvote 2
Lien vers le commentaire
Partager sur d’autres sites

Merci pour vos réponses rapides...

La première solution me semble plus facile d'accès pour un débutant comme moi...

Je vais essayer les deux dès que je peux et vous tiens au courant....

 

Encore une petite question : à  quoi peut servir le debug dans une scène à  part vérifier que le module déclenché est le bon? Est ce que ça a une utilité pour que le script se déroule comme il faut ou non?

Lien vers le commentaire
Partager sur d’autres sites

Testé sur ma box, tout tourne comme une horloge suisse, il y avait juste la parenthèse en trop d'hier.

 

Mais je viens de comprendre pourquoi tu as une erreur,

 

tu lances le programme en cliquant sur démarrer, il n'y a donc pas d'ID déclencheur, or IDactif = au nombre de l'ID qui a déclenché la scène. IDactif = nil.

 

Pour le tester, n'utilise pas ce bouton "démarrer", fait le en condition réel en te déplaçant devant tes capteurs par exemple,

ou force une valeur a IDactif a la ligne 16 le temps de ce test.

 

Si tu n'a pas compris je peux reformuler différemment.

Lien vers le commentaire
Partager sur d’autres sites

Voila la solution pour ne pas que la scéne ce lance avec un bouton

-- récupération de l'ID déclencheur
local moduleactif = fibaro:getSourceTrigger()

if (moduleactif ['type'] == 'property') then
   IDactif  = tonumber(moduleactif ['deviceID'])
   fibaro:debug("moduleactif id = "..IDactif)
   local NomDeclencheur = tonumber(fibaro:getValue(IDactif, "sceneActivation"))
   print("ID du Module déclencheur = ", IDactif, " - Nom : ", NomDeclencheur)
else
   fibaro:debug("La scéne ne peut être lancer que par un module")
   fibaro:abort();
end

--[[
%% properties
94 value
124 value
119 value
10 value
32 value
%% globals
--]]
 
--jedors est retiré des déclencheurs car pas utile
 
-- récupération de l'ID déclencheur
local moduleactif = fibaro:getSourceTrigger()

if (moduleactif ['type'] == 'property') then
   IDactif  = tonumber(moduleactif ['deviceID'])
   fibaro:debug("moduleactif id = "..IDactif)
   local NomDeclencheur = tonumber(fibaro:getValue(IDactif, "sceneActivation"))
   print("ID du Module déclencheur = ", IDactif, " - Nom : ", NomDeclencheur)
else
   fibaro:debug("La scéne ne peut être lancer que par une Variable Globale")
   fibaro:abort();
end

- correspondance entre ID capteur et numéro du message à  envoyer
local buttonpourcapteur = {[10] = "2", [32] = "3", [94] = "4", [119] = "6", [124] = "5"}
 
 
-- Lancement
if jedors == "1" and tonumber(fibaro:getValue(IDactif, 'value')) > 0 then
fibaro:call(134, "pressButton", buttonpourcapteur[IDactif])
fibaro:debug("notification envoyée")
end
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

@ mprinfo :

Tu fatigues aussi ou tu es déjà  à  l'apéro :60: ,

 

il y a 3 coquilles dans ta scène :

 

la ligne 20 : il faut plutôt mettre ça :

local NomDeclencheur = fibaro:getName(IDactif)

Ligne 27, il manque "-" :

-- correspondance entre ID capteur et numéro du message à  envoyer

Tu as oublié :

local jedors = fibaro:getGlobal("jedors")

Bah du coup je te suis pour l'apéro, avec un bon saucisson sec. :P

Je vais encore manger tard aujourd'hui. :2:

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Au fait, comment fait on pour diffuser le message sur plusieurs sonos sachant que j'ai crée un module virtuel pour chaque enceinte...

J'imagine qu'il faut modifier la ligne 30 en mettant plusieurs id de module mais je ne sais pas comment l'écrire... peut être fibaro:call(134,145,136 ,"pressbutton".......

Lien vers le commentaire
Partager sur d’autres sites

ça va mieux, cela fait au moins 10 jours que je n'ai plus entendu "domotique de m...."

Sauf hier soir : diffusion d'un message sur sonos : une des portes extérieures est ouverte. Elle: c'est quoi ce bol, puis : mais pourquoi la porte d'entrée est ouverte ???

Je buvais du petit lait ...

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

C'est top la domotique... On est juste des incompris...

Question du jour : comment passer une variable nommée 'alarme' en mode 1 ou 0 si aucun détecteurs ne capte de mouvement pendant 15 minutes, par exemple...? J'ai vu qu'il existait des choses en Gea mais je ne sais pas si c'est faisable ou si il vaut mieux rester sur du lua...

Envoyé de mon SM-G925F en utilisant Tapatalk

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...