Aller au contenu

Messages recommandés

Posté(e)

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

Posté(e)

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

Posté(e)

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

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?

Posté(e)

en effet, ma première solution est beaucoup plus basique.

La seconde est celle d'un pro.

 

Apprend avec la première et perfectionne-toi avec la seconde

Posté(e)

Avec la version pro, j'ai un souci...

[ERROR] 22:27:49: Runtime error: /opt/fibaro/FibaroSceneAPI.lua:66: Assertion failed: Expected number

 
 
Il y avait une parenthèse de trop ligne 21, mais là , je ne vois pas..
Posté(e)

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.

Posté(e)

C'est pas bien il faut un fibaro abort au début du script qui interdit le démarrage manuel de la scène.

On fatigue... lol

Envoyé de mon SM-G900F en utilisant Tapatalk

  • Upvote 1
Posté(e)

J'ai bien tout compris..

J ai naïvement pensé qu en appuyant sur démarrer, ça m indiquerait les fautes de frappe...

Merci

Envoyé de mon SM-G925F en utilisant Tapatalk

Posté(e)

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

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

J'ai fait cela sous notepad en vitesse lol

C'est dur la reprise du boulot

Je répond a ton mp des que j'ai un peu temps car j'ai 2 ou 3 truc àte dire

Envoyé de mon SM-G900F en utilisant Tapatalk

Posté(e)

ça marche nickel.... comme une horloge suisse....mais àNancy...

Suis pas loin de mprinfo... Dommage qu'il soit un peu tard pour l'apéro... Merci àvous...

Posté(e)

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".......

Posté(e)

non, le mieux serait de créer un bouton pas Sonos, puis un autre qui appelle tous les boutons. Pour modifier le code de Krikroff, pas d'apéro pendant 3 ans ...

Posté(e)

Oh merde, alors...

C'est vrai que Krikroff c'est un peu Jesus..... c'est comme si je voulais modifier les évangiles.... c'est pas bon ça....

Je ne recommencerai plus...

pas envie de finir tué par un disciple...

Posté(e)

Jojo est le gardien des scripts

Cest un ange jojo lorsque ca femme le laisse jouer avec ca domotique

Envoyé de mon SM-G900F en utilisant Tapatalk

Posté(e)

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

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

×
×
  • Créer...