pepite Posté(e) le 11 février 2016 Signaler Posté(e) le 11 février 2016 Bonjour, La question du jour ;-) bon le code c'est pas trop trop mon truc. Pour aider notre king de l'electricite nommé @Did, je suis parti d'un code posté par @steven et j'ai essayé de l'adapter au mieux pour les besoins de @Did. Pourriez-vous corriger et me dire s'il y a des boulettes ? et si vous comprenez le besoin ? Et du code de @steven je ne comprends pas bien le if (g) ..;si vous avez envie de m'expliquer lol Code de @steven local var_global = "RGB_PREVIOUS" local id = 27 if (fibaro:getGlobalValue(var_global) == "" or fibaro:getGlobalValue(var_global) == nil) then -- On stock l'état du ruban -- et on lance l'alarme local prog = fibaro:getValue(id, "currentProgram") local color = fibaro:getValue(id, "color") if (prog == 0) then -- on stocke la couleur du ruban car pas de programme en cours fibaro:setGlobal(var_global, color) else -- on stocke le programme en cours fibaro:setGlobal(var_global, prog) end fibaro:call(id, "setColor", "0", "0", "255", "100" ) else -- on récupère les valeurs précédentes et on les remets sur le ruban local r,g,b,w = string.match(fibaro:getGlobalValue(var_global), "(%d),(%d),(%d),(%d)") if (g) then fibaro:call(id, "setColor", r, g, b, w) else fibaro:call(id, "startProgram", r) end -- On désactive la variable fibaro:setGlobal(var_global, "") end Le code modifié local var_global = {"RGB_Previous1", "RGB_Previous2"} local idRGB = {239, 545} local prog_rgb = 546 local CeL = fibaro:getValue(208, 'value' ) local currentdate = os.date("%d/%m/%Y %H:%M:%S") function GetValueRGB(id) local prog = tonumber(fibaro:getValue(id, "currentProgram")) local color = fibaro:getValue(id, "color") for i = 1,#var_global do if (prog == 0) then -- on stocke la couleur du ruban car pas de programme en cours -- si éteint : color = 0,0,0,0 fibaro:setGlobal(var_global[i], color) else -- on stocke le programme en cours fibaro:setGlobal(var_global[i], prog) end end end function PutValueRGB(id) for i = 1,#var_global do local r,g,b,w = string.match(fibaro:getGlobalValue(var_global[i]), "(%d),(%d),(%d),(%d)") if (g) then fibaro:call(id, "setColor", r, g, b, w) else fibaro:call(id, "startProgram", r) end end end for i = 1, #idRGB do fibaro:debug("Démarrage du script : " ..currentdate) if ((fibaro:getGlobalValue(var_global1) == "" or fibaro:getGlobalValue(var_global1) == nil) and (CeL == '1')) then GetValueRGB(idRGB[i]) fibaro:call(idRGB[i], "startProgram", prog_rgb) fibaro:sleep(15*1000) PutValueRGB(idRGB[i]) for i = 1,#var_global do fibaro:setGlobal(var_global[i], "") end fibaro:call(idRGB[i], "turnOff") end end
jojo Posté(e) le 11 février 2016 Signaler Posté(e) le 11 février 2016 et si tu nous disais ce que tu voulais faire avec ce code, histoire qu'il ne faille pas faire du rétroengenering. On est faînéant de ce coté ci de la frontière
Lazer Posté(e) le 11 février 2016 Signaler Posté(e) le 11 février 2016 A mon avis, le if (g) permet de tester si le string.match(getGlobalValue...) a retourné une valeur de type RGB, ou une uniquement valeur de programme courant.... lequel programme serait alors uniquement stocké dans la variable r Pas sur d'être clair, mais on voit là une optimisation digne d'un développeur de talent tel que Steven
mprinfo Posté(e) le 11 février 2016 Signaler Posté(e) le 11 février 2016 @did avait qu'a demander lui même Na lol La je suis perdu qui fait quoi et qui veut allé ou car la c'est pas simple de résoudre un probléme sans données. Comme @jojo le courage c'est pas le pays ou on habite mais c'est l'age LOL 1
mprinfo Posté(e) le 11 février 2016 Signaler Posté(e) le 11 février 2016 @lazer toi aussi tu prends des cours chez @jojo
pepite Posté(e) le 11 février 2016 Auteur Signaler Posté(e) le 11 février 2016 hihihi messieurs, j'ai fait expres de ne mettre que le code sans explication pour savoir si ce que j'avais fait n'etait pas trop nimp.. à priori ouii ca l'est. Je donne le besoin de @Did : - 2 RGB ( 239, 245) sur le coup qui peuvent etre éteints, ou sur une couleur, ou sur un programme. - au passage devant les cellules (208), changement du programme en cours ou debut programme des 2 RGB en 546 - après 15 secs, remise des valeurs précedent le passage devant les cellules (si RGB allumé avec couleur ou prog ou extinction) J'ai compris à partir du code de Steven : - recuperation des valeurs "prog" et "color" du RGB mise dans une Variable - demarrage du programme souhaite -string.match que je ne maitrise pas du tout pour recup les valeurs rgbw - on remet le RGB dans l'etat précedent - on reinitialise la variable. J'ai rajouté une 2eme variable ne sachant pas comment retravaillé si je mets tout dans une seule varibale. @mrpinfo : le 1er code est de maitre @steven, le 2ème, celui que j'ai fait pour essayer de répondre au besoin de @Did ;-) A vos commentaires !!! pas d'hesitation,ca me fera encore apprendre
Did Posté(e) le 12 février 2016 Signaler Posté(e) le 12 février 2016 @Pepite, Ce n'était pas urgent, je ne peux pas tester avant dimanche.
mprinfo Posté(e) le 12 février 2016 Signaler Posté(e) le 12 février 2016 @did et @pepite je vais regardé cela dés je j'ai une flamme de motivation Car en ce moment je suis dans le shell linux comme mon neurone est limite en puissance il n'est pas multi taches Je note cela dans un coin comme dirai @jojo Je pense que dimanche je pourrai voir ce que je peux faire 1
pepite Posté(e) le 12 février 2016 Auteur Signaler Posté(e) le 12 février 2016 @Did et @mprinfo, Ca me plait aussi @did, faut que je progresse en lua alors je bosse dessus, j'y reflechis encore, J'ai mis un code modifié pour avoir les avis et commentaires des experts sur mon code hihihihi
Did Posté(e) le 15 février 2016 Signaler Posté(e) le 15 février 2016 @pepite, Sur la version modifiée (un peu plus haut), j'ai une c-----e dans le debug, [DEBUG] 16:22:08: Démarrage du script : 15/02/2016 16:22:08 [DEBUG] 16:22:08: line 130: Assertion failed: Expected string bizarre le code ne fait que 52 lignes. C'est une nouvelle scène créée aujourd'hui. Edit: L'idée de réunir les Id des FGRGB sous une variable locale serait top pour pouvoir ajouter simplement de nouveaux FGRGB.
pepite Posté(e) le 16 février 2016 Auteur Signaler Posté(e) le 16 février 2016 sympa le debug ligne 130 pour un code de 50 lignes lol ah oui bonne idee, je vais essayer..avec quoi je sais pas encore amis ca va venir lol
Debona Lua Posté(e) le 19 février 2016 Signaler Posté(e) le 19 février 2016 Haut les mains variable ! Bonjour, j’espère ne pas trop m'incruster sur ce sujet... Pourriez vous m'indiquer l'élément dans ce code qui permet de stocker la valeur d'une variable? je précise... - Si on dit variable1 = couleur rgb, puis que l'on change la couleur rgb, la variable1 change... OK - si je fais variable2 = variable1 à cet instant T, puis HAUT LES MAINS variable2 puis je change la couleur rgb, je suis capable de remettre la couleur rgb de variable2 n'importe quand...ok Mais alors qui tient le flingue dans ce script? Je suis dans le jus... merci.
jojo Posté(e) le 20 février 2016 Signaler Posté(e) le 20 février 2016 j'ai relu 3 fois ton post, et je ne comprends pas la question, ni ce que tu veux faire.
Debona Lua Posté(e) le 20 février 2016 Signaler Posté(e) le 20 février 2016 Merci, jojo, Je vais essayer de mieux m'expliquer, mais je vais surtout reprendre l'API du début, où je trouverais sans doute des réponses et éviter de faire perdre du temps aux membres... Voila, Dans le code de @Pepite & celui de @steven, il s'agit de stocker une valeur "color" ou "prog" pour la ressortir plus tard, si j'ai bien compris. ma question est : comment stocker une valeur (ampoule allumée (1) ou eteinte (0) par exemple) à un instant T1, pour pouvoir modifier cette valeur à volonté T2=0 T3=0 T4=1 etc...et être capable de rappeler la valeur de l'instant T1 quand bon me chante? application fictive : detecteur de porte = ouvert -- alors j'enregistre la valeur de l'ampoule X -- je la fais clignoter pendant 2mn -- et je rappel son état avant clignotement pour un retour "a la normal". Je ne comprend pas dans ces codes ce qui permet de le faire. bon weekend!
jojo Posté(e) le 21 février 2016 Signaler Posté(e) le 21 février 2016 ok, compris <= c'est la bonne nouvelle la n"mauvaise" nouvelle : je n'ai pas de RGBW et aucune expérience avec.Donc je n'ai pas analysé les codes. Mais, l'idée serait de stocker les informations que tu voudrais récupérer dans une variable (si plusieurs paramètre, en y stockant un json), puis de les relire quand tu veux pour les réinjecter
Did Posté(e) le 23 février 2016 Signaler Posté(e) le 23 février 2016 @pepite, Je suis tombé sur ce script de @Domodial, je ne sais pas si ça peut aider pour le script proposé en début de post. http://www.domotique-fibaro.fr/index.php/topic/5189-associer-synchroniser-2-modules-fibaro-rgbw/?p=103954 Il faut ajouter "405 currentProgramID" dans l'entête. Et celui-ci: http://www.fibarouk.co.uk/synchronising-rgbw-modules/
pepite Posté(e) le 24 février 2016 Auteur Signaler Posté(e) le 24 février 2016 Salut @Did, alors la ke ne risquais pas d'écrire ce type de code, je ne maitrise pas du tout du tout les split et autre, tu pourrais me parler chinois ce serait la même chose ;-) Super intéressant ce code, je regarde, merci beaucoup @Did de faire bosser mon cerveau lol @domodial, la classe ;-)
pepite Posté(e) le 25 février 2016 Auteur Signaler Posté(e) le 25 février 2016 @Did et avis aux experts pour commenter Je suis parti de ce que tu m'as linké. ;-) La scène a pour trigger ta cellule 208. -- Recup des couleurs, la fonction split de @domodial -- Si programme en cours, recup dans une variable Globale, 1 pour chaque RGB -- Au changement de 208, PROG 546 sur les 2 RGBs -- Tempo de 15 secs -- Remise des valeurs précédentes sur les RGB -- Réinitialisation des Variables. Je garantis rien, mais mon cerveau a bien chauffé ;-) A tester ;-) --[[ %% properties 208 value %% globals --]] local id_master = 239; -- ID des Master (ID Master) local id_slaves = {545}; -- ID des Slaves {1}, {1,2,3} local prog_rgb = 546 local var_global_master = "RGB_Previous1" local var_global_slave = "RGB_Previous2" local debug = true; -- Debug local CeL = fibaro:getValue(208, 'value' ) local currentdate = os.date("%d/%m/%Y %H:%M:%S") local VGMaster = fibaro:getGlobalValue(var_global_master) local VGSlave = fibaro:getGlobalValue(var_global_slave) if debug then fibaro:debug("Démarrage du script : " ..currentdate) end function split(s, pattern, maxsplit) local pattern = pattern or ' ' local maxsplit = maxsplit or -1 local s = s local t = {} local patsz = #pattern while maxsplit ~= 0 do local curpos = 1 local found = string.find(s, pattern) if found ~= nil then table.insert(t, string.sub(s, curpos, found - 1)) curpos = found + patsz s = string.sub(s, curpos) else table.insert(t, string.sub(s, curpos)) break end maxsplit = maxsplit - 1 if maxsplit == 0 then table.insert(t, string.sub(s, curpos - patsz - 1)) end end return t end --Recup couleur et Prog du RGB Master local result = split(fibaro:getValue(id_master, "color"), ',') local ProgMaster = fibaro:getValue(id_master, "currentProgramID") -- Recup couleur et Prog du RGB slave local resultat = split(fibaro:getValue(id_slaves, "color"), ',') local ProgSlave = fibaro:getValue(id_slaves, "currentProgramID") --Affichage dans le debug des couleurs de RGB Master et RGB Slave if debug then fibaro:debug("Couleur Master :" ..result[1]..","..result[2]..","..result[3]..","..result[4]) fibaro:debug("Programme Master :" ..ProgMaster) fibaro:debug("Couleur Slave :" ..resultat[1]..","..resultat[2]..","..resultat[3]..","..resultat[4]) fibaro:debug("Programme slave :" ..Progslave) end -- Affectation PROG aux VG fibaro:setGlobal(var_global_master, ProgMaster) fibaro:setGlobal(var_global_slave, ProgSlave) -- SI activation cellule 208, les 2 RGB avec le programme 546 if CeL == "1" then for i = 1, #id_master do fibaro:call(id_master[i], "startProgram", prog_rgb) end for i = 1, #id_slaves do fibaro:call(id_slaves[i], "startProgram", prog_rgb) end end -- Tempo de 15 secs fibaro:sleep(15*1000) -- Remise prog/couleur des RGB en cours avant activation cellule 208 for i = 1, #id_master do if (result[1] == "0" and result[2] == "0" and result[3] == "0" and result[4] == "0" and VGMaster ~="") then if debug then fibaro:debug("Programme Master :" ..VGMaster);end fibaro:call(id_master[i], "startProgram", VGMaster); else fibaro:call(id_master[i], "setColor", result[1], result[2], result[3], result[4]) end end -- Remise prog/couleur des RGB en cours avant activation cellule 208 for i = 1, #id_slaves do if (resultat[1] == "0" and resultat[2] == "0" and resultat[3] == "0" and resultat[4] == "0" and VGSlave ~="") then if debug then fibaro:debug("Programme Slave :" ..VGSlave);end fibaro:call(id_slaves[i], "startProgram", VGSlave); else fibaro:call(id_slaves[i], "setColor", resultat[1], resultat[2], resultat[3], resultat[4]) end end --Reinitialisation des variables fibaro:setGlobal(var_global_master, "") fibaro:setGlobal(var_global_slave, "")
Did Posté(e) le 25 février 2016 Signaler Posté(e) le 25 février 2016 Bonjour @pepite et merci, Nouvelle scène créée et ça ne bascule pas sur le prog 546. Je doit supprimer les deux variables RGB_Previous1 & 2 dans le panneau? Voici le debug, il bloque sur la ligne 91. [DEBUG] 18:39:30: Démarrage du script : 25/02/2016 18:39:30 [DEBUG] 18:39:31: line 91: attempt to concatenate local 'deviceId' (a table value) [DEBUG] 18:40:39: Démarrage du script : 25/02/2016 18:40:39 [DEBUG] 18:40:39: line 91: attempt to concatenate local 'deviceId' (a table value) [DEBUG] 18:40:41: Démarrage du script : 25/02/2016 18:40:41 [DEBUG] 18:40:41: line 91: attempt to concatenate local 'deviceId' (a table value) [DEBUG] 18:40:42: Démarrage du script : 25/02/2016 18:40:42 [DEBUG] 18:40:42: line 91: attempt to concatenate local 'deviceId' (a table value) [DEBUG] 18:40:43: Démarrage du script : 25/02/2016 18:40:43 [DEBUG] 18:40:43: line 91: attempt to concatenate local 'deviceId' (a table value) [DEBUG] 18:54:06: Démarrage du script : 25/02/2016 18:54:06 [DEBUG] 18:54:06: line 91: attempt to concatenate local 'deviceId' (a table value) [DEBUG] 18:54:07: Démarrage du script : 25/02/2016 18:54:07 [DEBUG] 18:54:07: line 91: attempt to concatenate local 'deviceId' (a table value) [DEBUG] 18:54:07: Démarrage du script : 25/02/2016 18:54:07 [DEBUG] 18:54:08: line 91: attempt to concatenate local 'deviceId' (a table value) Pas de 239 currentProgramID et 239 color dans l'entête?
Domodial Posté(e) le 25 février 2016 Signaler Posté(e) le 25 février 2016 Bonjour, La question du jour ;-) bon le code c'est pas trop trop mon truc. Pour aider notre king de l'electricite nommé @Did, je suis parti d'un code posté par @steven et j'ai essayé de l'adapter au mieux pour les besoins de @Did. Pourriez-vous corriger et me dire s'il y a des boulettes ? et si vous comprenez le besoin ? Et du code de @steven je ne comprends pas bien le if (g) ..;si vous avez envie de m'expliquer lol Code de @steven local var_global = "RGB_PREVIOUS" local id = 27 Hello Pepite ! Alors quelques précisions 1 - Steven s'était penché sur mon besoin, mais j'avoue n'avoir jamais rien compris. J'ai trituré le truc dans tous les sens, j'ai essayé de mixer ça avec GEA, j'ai .... et au final j'ai rien réussis à faire. 2 - Pour le scripts de moi dont vous parlez, il n'est pas de moi. J'ai dit que j'avais démerdé ce script. J'ai trouvé ce script sur un blog ou je ne sais ou, le truc c'est que l'auteur avait fait un copier coller ET il avait du coup, mis des parasites dans le code. J'ai contacté l'auteur mais il ne m'a jamais répondu. J'avais tellement besoin de ce script, que au final j'ai lu ligne après ligne. Et bien que ne connaissant rien en code, je suis arrivé à trouver le problème, un ou deux mauvais caractères certainement dà» au copier/collé, de mémoire un &-§ un truc comme ça. Donc non, je ne suis pas devenu codeur par le saint esprit EDIT : c'est con, vous avez faillit me faire passer pour une idole 1
Domodial Posté(e) le 25 février 2016 Signaler Posté(e) le 25 février 2016 Par contre je suis très interressé par une explication et mise en pratique du script de Steven.... Le but initial était d'avoir un programme ou une couleur d'ambiance, qui revienne à l'état initial "APRES" une alerte lumineuse (style porte ouverte, approche vers la maison, ouverture garage).
pepite Posté(e) le 26 février 2016 Auteur Signaler Posté(e) le 26 février 2016 @domodial, Ben franchement, tu as lul le code et compris c'est deja enorme, je galere aussi hihihi Oui, le besoin de @did est excatement celui la, en cas d'alerte, changement de couleur ou de programme sur les RGB concernes et remise à la valeur précédente avant cette alerte ;-) On y travaille aussi, je suis plus lent que les autres hihih, voire beaucoup plus ;-) @did Non garde les variables, je n'ai pas mis dans l'entete le 239, pour les tests, le declencheur est bien ton 208 value. Vais essayer de corriger sans mettre les tables ;-) 1
pepite Posté(e) le 26 février 2016 Auteur Signaler Posté(e) le 26 février 2016 j'ai rajouté des debug et enlevé la lecture des tables ;-) --[[ %% properties 208 value %% globals --]] local id_master = 239 -- ID des Master (ID Master) local id_slaves = 545 -- ID des Slaves {1}, {1,2,3} local prog_rgb = 546 local var_global_master = "RGB_Previous1" local var_global_slave = "RGB_Previous2" local debug = true -- Debug local CeL = fibaro:getValue(208, 'value' ) local currentdate = os.date("%d/%m/%Y %H:%M:%S") local VGMaster = fibaro:getGlobalValue(var_global_master) local VGSlave = fibaro:getGlobalValue(var_global_slave) if debug then fibaro:debug("Démarrage du script : " ..currentdate) fibaro:debug("Valeur CeL : " ..CeL) end function split(s, pattern, maxsplit) local pattern = pattern or ' ' local maxsplit = maxsplit or -1 local s = s local t = {} local patsz = #pattern while maxsplit ~= 0 do local curpos = 1 local found = string.find(s, pattern) if found ~= nil then table.insert(t, string.sub(s, curpos, found - 1)) curpos = found + patsz s = string.sub(s, curpos) else table.insert(t, string.sub(s, curpos)) break end maxsplit = maxsplit - 1 if maxsplit == 0 then table.insert(t, string.sub(s, curpos - patsz - 1)) end end return t end --Recup couleur et Prog du RGB Master local result = split(fibaro:getValue(id_master, "color"), ',') local ProgMaster = fibaro:getValue(id_master, "currentProgramID") -- Recup couleur et Prog du RGB slave local resultat = split(fibaro:getValue(id_slaves, "color"), ',') local ProgSlave = fibaro:getValue(id_slaves, "currentProgramID") --Affichage dans le debug des couleurs de RGB Master et RGB Slave if debug then fibaro:debug("Couleur Master :" ..result[1]..","..result[2]..","..result[3]..","..result[4]) fibaro:debug("Programme Master :" ..ProgMaster) fibaro:debug("Couleur Slave :" ..resultat[1]..","..resultat[2]..","..resultat[3]..","..resultat[4]) fibaro:debug("Programme slave :" ..ProgSlave) end -- Affectation PROG aux VG fibaro:debug("Affectation PROG aux variables") fibaro:setGlobal(var_global_master, ProgMaster) fibaro:setGlobal(var_global_slave, ProgSlave) -- SI activation cellule 208, les 2 RGB avec le programme 546 fibaro:debug("RGB sur Programme 546") fibaro:call(id_master, "startProgram", prog_rgb) fibaro:call(id_slaves, "startProgram", prog_rgb) -- Tempo de 15 secs fibaro:debug("tempo de 15 secs") fibaro:sleep(15*1000) -- Remise prog/couleur des RGB en cours avant activation cellule 208 fibaro:debug("Remise valeur précédente Master") if (result[1] == "0" and result[2] == "0" and result[3] == "0" and result[4] == "0" and VGMaster ~="") then if debug then fibaro:debug("Programme Master :" ..VGMaster);end fibaro:call(id_master, "startProgram", VGMaster); else fibaro:call(id_master, "setColor", result[1], result[2], result[3], result[4]) end -- Remise prog/couleur des RGB en cours avant activation cellule 208 fibaro:debug("Remise valeur précédente Slave") if (resultat[1] == "0" and resultat[2] == "0" and resultat[3] == "0" and resultat[4] == "0" and VGSlave ~="") then if debug then fibaro:debug("Programme Slave :" ..VGSlave);end fibaro:call(id_slaves, "startProgram", VGSlave); else fibaro:call(id_slaves, "setColor", resultat[1], resultat[2], resultat[3], resultat[4]) end --Reinitialisation des variables fibaro:debug("Réinitialisation des variables") fibaro:setGlobal(var_global_master, "") fibaro:setGlobal(var_global_slave, "")
Messages recommandés