oldelvis Posté(e) le 7 septembre 2015 Signaler Posté(e) le 7 septembre 2015 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
jojo Posté(e) le 7 septembre 2015 Signaler Posté(e) le 7 septembre 2015 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
trainkill666 Posté(e) le 7 septembre 2015 Signaler Posté(e) le 7 septembre 2015 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 2
oldelvis Posté(e) le 8 septembre 2015 Auteur Signaler Posté(e) le 8 septembre 2015 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?
jojo Posté(e) le 8 septembre 2015 Signaler Posté(e) le 8 septembre 2015 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
oldelvis Posté(e) le 8 septembre 2015 Auteur Signaler Posté(e) le 8 septembre 2015 t'as raison , j'ai de la marge en perfectionnement..
oldelvis Posté(e) le 8 septembre 2015 Auteur Signaler Posté(e) le 8 septembre 2015 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..
trainkill666 Posté(e) le 9 septembre 2015 Signaler Posté(e) le 9 septembre 2015 c corrigé : fibaro:debug(fibaro:getName(IDactif))) par fibaro:debug(fibaro:getName(IDactif))
oldelvis Posté(e) le 9 septembre 2015 Auteur Signaler Posté(e) le 9 septembre 2015 J'ai quand même le message d'erreur après avoir ôté la parenthèse.. Envoyé de mon SM-G925F en utilisant Tapatalk
trainkill666 Posté(e) le 9 septembre 2015 Signaler Posté(e) le 9 septembre 2015 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.
mprinfo Posté(e) le 9 septembre 2015 Signaler Posté(e) le 9 septembre 2015 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 1
oldelvis Posté(e) le 9 septembre 2015 Auteur Signaler Posté(e) le 9 septembre 2015 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
mprinfo Posté(e) le 9 septembre 2015 Signaler Posté(e) le 9 septembre 2015 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 1
trainkill666 Posté(e) le 9 septembre 2015 Signaler Posté(e) le 9 septembre 2015 @ mprinfo : Tu fatigues aussi ou tu es déjà à l'apéro , 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. Je vais encore manger tard aujourd'hui. 1
mprinfo Posté(e) le 9 septembre 2015 Signaler Posté(e) le 9 septembre 2015 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
oldelvis Posté(e) le 9 septembre 2015 Auteur Signaler Posté(e) le 9 septembre 2015 ç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...
mprinfo Posté(e) le 9 septembre 2015 Signaler Posté(e) le 9 septembre 2015 Oui moi je de pont a mousson enfin juste a côté la futur gare TGV Envoyé de mon SM-G900F en utilisant Tapatalk
oldelvis Posté(e) le 9 septembre 2015 Auteur Signaler Posté(e) le 9 septembre 2015 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".......
oldelvis Posté(e) le 9 septembre 2015 Auteur Signaler Posté(e) le 9 septembre 2015 Pas très loin...j'habite nancy centre...
jojo Posté(e) le 9 septembre 2015 Signaler Posté(e) le 9 septembre 2015 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 ...
oldelvis Posté(e) le 9 septembre 2015 Auteur Signaler Posté(e) le 9 septembre 2015 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...
mprinfo Posté(e) le 9 septembre 2015 Signaler Posté(e) le 9 septembre 2015 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
jojo Posté(e) le 9 septembre 2015 Signaler Posté(e) le 9 septembre 2015 ç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 ... 1
oldelvis Posté(e) le 10 septembre 2015 Auteur Signaler Posté(e) le 10 septembre 2015 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
Messages recommandés