Moicphil Posté(e) le 16 janvier 2014 Signaler Posté(e) le 16 janvier 2014 Est ce que quelqu'un peut m'expliquer plus précisément cette fonction ? : fibaro:countScenes(sceneID) > 1 then fibaro:abort(sceneID) Pour info, voila mon script : (Je viens de le passer de "block" en "lua") --[[ %% properties 133 value 25 value 26 value 27 value 28 value 29 value 30 value 31 value 132 value 103 value 131 value 104 value 133 armed 25 armed 26 armed 27 armed 28 armed 29 armed 30 armed 31 armed 132 armed 103 armed 131 armed 104 armed %% globals VAR --]] local startSource = fibaro:getSourceTrigger(); if ( ( (tonumber(fibaro:getValue(133, "value")) > 0 and tonumber(fibaro:getValue(133, "armed")) > 0) or (tonumber(fibaro:getValue(25, "value")) > 0 and tonumber(fibaro:getValue(25, "armed")) > 0) or (tonumber(fibaro:getValue(26, "value")) > 0 and tonumber(fibaro:getValue(26, "armed")) > 0) or (tonumber(fibaro:getValue(27, "value")) > 0 and tonumber(fibaro:getValue(27, "armed")) > 0) or (tonumber(fibaro:getValue(28, "value")) > 0 and tonumber(fibaro:getValue(28, "armed")) > 0) or (tonumber(fibaro:getValue(29, "value")) > 0 and tonumber(fibaro:getValue(29, "armed")) > 0) or (tonumber(fibaro:getValue(30, "value")) > 0 and tonumber(fibaro:getValue(30, "armed")) > 0) or (tonumber(fibaro:getValue(31, "value")) > 0 and tonumber(fibaro:getValue(31, "armed")) > 0) or (tonumber(fibaro:getValue(132, "value")) > 0 and tonumber(fibaro:getValue(132, "armed")) > 0) or (tonumber(fibaro:getValue(103, "value")) > 0 and tonumber(fibaro:getValue(103, "armed")) > 0) or (tonumber(fibaro:getValue(131, "value")) > 0 and tonumber(fibaro:getValue(131, "armed")) > 0) or (tonumber(fibaro:getValue(104, "value")) > 0 and tonumber(fibaro:getValue(104, "armed")) > 0) ) and ( tonumber(fibaro:getGlobalValue("VAR")) == tonumber("3") ) or startSource["type"] == "other" ) then fibaro:call(5, "pressButton", "5"); fibaro:call(82, "pressButton", "1"); fibaro:call(138, "pressButton", "1"); fibaro:call(7, "pressButton", "5"); fibaro:call(7, "pressButton", "7"); fibaro:sleep(15000); fibaro:call(42, "setValue", "100"); fibaro:call(38, "setValue", "100"); fibaro:call(43, "setValue", "100"); fibaro:sleep(135000); fibaro:call(82, "pressButton", "2"); fibaro:sleep(30000); fibaro:call(42, "turnOff"); fibaro:call(38, "turnOff"); fibaro:call(43, "turnOff"); end Mon problème est le suivant : Cette scène concerne la gestion d'une intrusion si une porte passe en alerte. Elle fonctionne bien, néanmoins, quand cette scène se déclenche, je reçois des push en continu tant que la porte n'est pas refermée! La fonction push vient d'un VD ( fibaro:call(5, "pressButton", "5") avec le service "Pushover" D’où ma question, est ce que je peux utiliser la fonction "fibaro:countScenes(sceneID) > 1 then fibaro:abort(sceneID)" ? Si oui, ou dois je la positionner dans mon code ? Merci d'avance
i-magin Posté(e) le 16 janvier 2014 Signaler Posté(e) le 16 janvier 2014 Désolé, je n'ai pas le temps de regarder.... je peux juste t'indiquer que tu n'as pas àcontourner le problème que tu rencontres avec une fonction A mon avis, il y a un bug dans ton code : le changement d'état d'un détecteur de porte ne devant générer qu'une seule alerte (sauf àvouloir la traiter dans une boucle)
Shad Posté(e) le 16 janvier 2014 Signaler Posté(e) le 16 janvier 2014 En fait le bug que tu as, c'est que tu as as mis dans ton code: (tonumber(fibaro:getValue(133, "value")) > 0 and tonumber(fibaro:getValue(133, "armed")) > 0) Ce qui signifie que tant que ta porte est ouverte et qu'il est armé il fera .... Essaye plutot un truc comme: (trigger['deviceID']= 113 and tonumber(fibaro:getValue(133, "value")) > 0 and tonumber(fibaro:getValue(133, "armed")) > 0) Ce qui signifira que si on ouvre la porte et que c'est armé il fera ... (trigger['deviceID']= 113 and tonumber(fibaro:getValue(133, "value")) == 0 and tonumber(fibaro:getValue(133, "armed")) > 0) Ce qui signifira que si on ferme la porte et que c'est armé il fera ... et pour faire encore plus simple if (trigger['deviceID']==tostring(doorID)) then PS: J'ai pas essayer c'est juste de tête ^^ edit: Tu peux aussi essayer un truc comme sa: --[[ %% properties 133 value 25 value 26 value 27 value 28 value 29 value 30 value 31 value 132 value 103 value 131 value 104 value 133 armed 25 armed 26 armed 27 armed 28 armed 29 armed 30 armed 31 armed 132 armed 103 armed 131 armed 104 armed %% globals VAR --]] local doorID = {133,25,26,27,28,29,30,132,103,131,104}; if (trigger['type']=='property') then for i =1, #doorID do --Porte s'ouvre if (trigger['deviceID']==doorID[i] and tonumber(fibaro:getValue(doorID[i], "value")) > 0 and tonumber(fibaro:getValue(doorID[i], "armed")) > 0 ) then fibaro:call(5, "pressButton", "5"); fibaro:call(82, "pressButton", "1"); fibaro:call(138, "pressButton", "1"); fibaro:call(7, "pressButton", "5"); fibaro:call(7, "pressButton", "7"); fibaro:sleep(15000); fibaro:call(42, "setValue", "100"); fibaro:call(38, "setValue", "100"); fibaro:call(43, "setValue", "100"); fibaro:sleep(135000); fibaro:call(82, "pressButton", "2"); fibaro:sleep(30000); fibaro:call(42, "turnOff"); fibaro:call(38, "turnOff"); fibaro:call(43, "turnOff"); --Porte se ferme elseif (trigger['deviceID']==doorID[i] and tonumber(fibaro:getValue(doorID[i], "value")) == 0 and tonumber(fibaro:getValue(doorID[i], "armed")) > 0 ) then end end end
Moicphil Posté(e) le 16 janvier 2014 Auteur Signaler Posté(e) le 16 janvier 2014 Merci Shad, je vais essayer ça ce week-end, je te tiendrais au jus!
Shad Posté(e) le 16 janvier 2014 Signaler Posté(e) le 16 janvier 2014 Derient sinon plus simple if (trigger['deviceID']==doorID[i] and tonumber(fibaro:getValue(doorID[i], "armed")) > 0 ) then Chaque fois que la porte s'ouvre ou se ferme et qu'elle est armé.
Moicphil Posté(e) le 16 janvier 2014 Auteur Signaler Posté(e) le 16 janvier 2014 Et du coup, la fonction " fibaro:countScenes(sceneID) > 1 then fibaro:abort(sceneID)" Dans quel cas est elle utile ?
Shad Posté(e) le 16 janvier 2014 Signaler Posté(e) le 16 janvier 2014 Bas besoin car le ce que je t'ai donné actionné le code qu'en cas de mouvement de la porte
Moicphil Posté(e) le 16 janvier 2014 Auteur Signaler Posté(e) le 16 janvier 2014 Je viens de faire un essais, mais ca ne fonctionne pas. J'ai ça comme erreur : [ERROR] 17:10:13: line 34: attempt to index global 'trigger' (a nil value) Mon script : --[[ %% properties 133 value 25 value 26 value 27 value 28 value 29 value 30 value 31 value 132 value 103 value 131 value 104 value 133 armed 25 armed 26 armed 27 armed 28 armed 29 armed 30 armed 31 armed 132 armed 103 armed 131 armed 104 armed %% globals VAR --]] local doorID = {133,25,26,27,28,29,30,132,103,131,104}; if (trigger['type']=='property') then for i =1, #doorID do --Porte s'ouvre if (trigger['deviceID']==doorID[i] and tonumber(fibaro:getValue(doorID[i], "armed")) > 0 ) then fibaro:call(5, "pressButton", "5"); -- fibaro:call(82, "pressButton", "1"); -- fibaro:call(138, "pressButton", "1"); -- fibaro:call(7, "pressButton", "5"); -- fibaro:call(7, "pressButton", "7"); -- fibaro:sleep(15000); -- fibaro:call(42, "setValue", "100"); -- fibaro:call(38, "setValue", "100"); -- fibaro:call(43, "setValue", "100"); -- fibaro:sleep(135000); -- fibaro:call(82, "pressButton", "2"); -- fibaro:sleep(30000); -- fibaro:call(42, "turnOff"); -- fibaro:call(38, "turnOff"); -- fibaro:call(43, "turnOff"); --Porte se ferme elseif (trigger['deviceID']==doorID[i] and tonumber(fibaro:getValue(doorID[i], "armed")) > 0 ) then end end end
Shad Posté(e) le 16 janvier 2014 Signaler Posté(e) le 16 janvier 2014 lol oui, rajoute ça a côté de l'autre local local trigger = fibaro:getSourceTrigger(); Je t'ai dis que j'avais de tête comme sa ^^.
Moicphil Posté(e) le 16 janvier 2014 Auteur Signaler Posté(e) le 16 janvier 2014 Ok, merci, j'ai rajouté et je n'ai plus de message d'erreur mais j'ai plus de push ! --[[ %% properties 133 value 25 value 26 value 27 value 28 value 29 value 30 value 31 value 132 value 103 value 131 value 104 value 133 armed 25 armed 26 armed 27 armed 28 armed 29 armed 30 armed 31 armed 132 armed 103 armed 131 armed 104 armed %% globals VAR --]] local doorID = {133,25,26,27,28,29,30,132,103,131,104}; local trigger = fibaro:getSourceTrigger(); if (trigger['type']=='property') and ( tonumber(fibaro:getGlobalValue("VAR")) == tonumber("3") ) then for i =1, #doorID do --Porte s'ouvre if (trigger['deviceID']==doorID[i] and tonumber(fibaro:getValue(doorID[i], "armed")) > 0 ) then fibaro:call(5, "pressButton", "5"); -- fibaro:call(82, "pressButton", "1"); -- fibaro:call(138, "pressButton", "1"); -- fibaro:call(7, "pressButton", "5"); -- fibaro:call(7, "pressButton", "7"); -- fibaro:sleep(15000); -- fibaro:call(42, "setValue", "100"); -- fibaro:call(38, "setValue", "100"); -- fibaro:call(43, "setValue", "100"); -- fibaro:sleep(135000); -- fibaro:call(82, "pressButton", "2"); -- fibaro:sleep(30000); -- fibaro:call(42, "turnOff"); -- fibaro:call(38, "turnOff"); -- fibaro:call(43, "turnOff"); --Porte se ferme elseif (trigger['deviceID']==doorID[i] and tonumber(fibaro:getValue(doorID[i], "armed")) > 0 ) then end end end
Shad Posté(e) le 16 janvier 2014 Signaler Posté(e) le 16 janvier 2014 Ta modifier mon code. Enleve le elseif car c est la meme condition que le if. En theorie sa devrais fonctionner sans probleme. Je regarde des que je suis devanr mon pc.
Moicphil Posté(e) le 16 janvier 2014 Auteur Signaler Posté(e) le 16 janvier 2014 non, je l'ai copié selon tes modifs ! je ne me serais pas permis de modifier ton code!! Je testerais plus tard. merci
Shad Posté(e) le 16 janvier 2014 Signaler Posté(e) le 16 janvier 2014 Non il te manque des valeurs . Mais par contre il correspond à quoi le VAR :/ Mais si sa bloque encore met des fibaro:debug pour voir ou.
Moicphil Posté(e) le 16 janvier 2014 Auteur Signaler Posté(e) le 16 janvier 2014 Je vois pas de quelles valeurs tu parles... La variable me sert juste pour différencier la scène de "jour" de celle de "nuit".
Moicphil Posté(e) le 16 janvier 2014 Auteur Signaler Posté(e) le 16 janvier 2014 Désolé, mais j'vois toujours pas... Je reprendrais tout ça calmement ce week-end! Merci pour ton aide !
chrispec Posté(e) le 3 mars 2016 Signaler Posté(e) le 3 mars 2016 @Moicphil, tu as toujours ton "bug" ? J'ai une scène: J'ai un FGS221: S1 à OFF et S2 à OFF: ETAT 1 S1 à ON et S2 à OFF: ETAT 2 S1 à ON et S2 à OFF: ETAT 3 --[[ %% properties 386 value 388 value 215 value 217 value 410 value %% events %% globals --]] -- id sorties FGS221 Myfox local idS1 = 386; local idS2 = 388; -- id des WallPlug local WPCamEntree = 215; local WPCamCuisine = 217; -- id VD serveur SMS PAW local idPAW = 410; -- Etats S1 et S2 local EtatS1 = fibaro:getValue(idS1, "value"); local EtatS2 = fibaro:getValue(idS2, "value"); if (EtatS1 == "0") and (EtatS2 == "0") then EtatMyfox = "desactivee" fibaro:call(WPCamEntree, "turnOff") fibaro:call(WPCamCuisine, "turnOff") fibaro:debug("Alarme désactivée et caméras éteintes") -- sms via SERVEUR PAW message = ("Bonjour, l'alarme est désactivée et les caméras éteintes") fibaro:setGlobal("sms", message); fibaro:debug(message) -- activation du VD et bouton ad hoc fibaro:call(idPAW, "pressButton", "1"); elseif (EtatS1 == "1") and (EtatS2 == "0") then EtatMyfox = "partielle" fibaro:call(WPCamEntree, "turnOn") fibaro:call(WPCamCuisine, "turnOn") fibaro:debug("Alarme partielle et caméras allumées") -- sms via SERVEUR PAW message = ("Bonjour, l'alarme est activée PARTIELLE et les caméras allumées") fibaro:setGlobal("sms", message); fibaro:debug(message) -- activation du VD et bouton ad hoc fibaro:call(idPAW, "pressButton", "1"); elseif (EtatS1 == "1") and (EtatS2 == "1") then EtatMyfox = "totale" fibaro:call(WPCamEntree, "turnOn") fibaro:call(WPCamCuisine, "turnOn") fibaro:debug("Alarme totale et caméras allumées") -- sms via SERVEUR PAW message = ("Bonjour, l'alarme est activée TOTALE et les caméras allumées") fibaro:setGlobal("sms", message); fibaro:debug(message) -- activation du VD et bouton ad hoc fibaro:call(idPAW, "pressButton", "1"); end et le VD SMS Paw (que le "main process"): ------------------------------------------------------------------------------------------- -- Main process ------------------------------------------------------------------------------------------- function SendSMS(number, message) local uri = "/actions/sms.xhtml"; local params = "?numero=" .. number .. "&message=" .. urlencode(tostring(message or "empty")); Tk.Net.isTraceEnabled = false; local HttpClient = Tk.Net.HttpRequest("192.xxx.xxx.xxx", 8080); HttpClient:setReadTimeout(500); local response, status, errorCode = HttpClient:request("GET", uri..params, { "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9" }); HttpClient:disconnect(); HttpClient:dispose(); HttpClient = nil; end local message = fibaro:getGlobalValue("sms") -- numéro de tel, message... SendSMS("06xxxxxxxx", message); L'état m'est envoyé à chaque fois que la box redémarre (lors d'une mise à jour de firmware par exemple). Et je reçois 3 SMS à chaque fois ??? Une idée ?
Moicphil Posté(e) le 3 mars 2016 Auteur Signaler Posté(e) le 3 mars 2016 Salut , Je n'utilise plus cette scène ( punaise ça date de janvier 2014 ) Pour ton pb, c'est bizarre la redondance des push au démarrage car tu n'as pas d' autostart dans l’entête à ce que je vois. Les 5 id dans properties correspondent à des capteurs ? car il n'y a qu'eux qui puissent déclencher ta scène normalement.
chrispec Posté(e) le 3 mars 2016 Signaler Posté(e) le 3 mars 2016 Les ID dans l'entête: 2 wall plug, un VD (sms serveur PAW) et les bornes S1 et S2 du FGS221 ... C'est indispensable de mettre ces ID dans l'entête ? Et pour l'histoire de 'scène active' ? son utilité ?
chrispec Posté(e) le 3 mars 2016 Signaler Posté(e) le 3 mars 2016 Je viens de supprimer les 5 id de l'entête ... plus qu'un seul sms Par contre "scène active" coché ou décoché, toujours un DEBUG et SMS lors de l'enregistrement de la scène ...
Moicphil Posté(e) le 3 mars 2016 Auteur Signaler Posté(e) le 3 mars 2016 Dans l’entête, il faut mettre ce qui va déclencher ta scene,. Si tu décoche "scène active", normalement celle ci ne pourra être lancer que manuellement Bizarre donc qu'au moment de sauvegarder ca te lance la scène. Je peux pas te dire si c'est normal ou pas ( je dirais non quand même )
Messages recommandés