sebcbien Posté(e) le 14 avril 2015 Signaler Posté(e) le 14 avril 2015 dites, ch'tite question: Si j'utilise le scripts 3.6, quand je passerai en V4, le script 4 va générer les mêmes id's ? Sur-sur certain-certain ?
pepite Posté(e) le 15 avril 2015 Signaler Posté(e) le 15 avril 2015 heuuu je dirais pas sur sur ;-)..etant donne qu'en changeant de firmware, on court le risque de changer d'IDs, d'ou l'interet d'utiliser le generateur après mise àjour ;-)
sebcbien Posté(e) le 15 avril 2015 Signaler Posté(e) le 15 avril 2015 oui sorry, je voulais dire les noms des id's :-/ comme je vois que la génération parfois ne colle pas trop au nom d'origine de l'id
jojo Posté(e) le 23 mai 2015 Signaler Posté(e) le 23 mai 2015 depuis ma migration en V4, j'ai voulu relancer le script pour vérifier, et il ne me retourne rien du coup j'ai mis des debug un peu partout pour voir jusqu'où il allait, et en fait, il va jusqu'au bout, sauf qu'il ne veut pas afficher le résultat : fibaro:debug(result) la variable result a chez moi une longueur de 4017 caractères. Aurait-on atteint la limite des possibilités du fibaro:debug ?
Steven Posté(e) le 23 mai 2015 Auteur Signaler Posté(e) le 23 mai 2015 Possible. A la ligne 77 supprime les espaces avant et après le = pour gagner quelques caractères.
jojo Posté(e) le 23 mai 2015 Signaler Posté(e) le 23 mai 2015 @Steven, Je viens de faire une analyse un peu plus approfondie, en remplaçant reseult = par fibaro:debug( Donc j'affiche mes lignes de débug au fur et à mesure, mais c'est inutilisable, car il y a l'heure, ... Mais cela m'a permis de voir qu'il listait également tous les devices qui étaient cochés comme invisibles (dont tous les main zwave controler). Donc dans la fonction d'exclusion, il faudrait également supprimer les devices pour lesquels visible = false, et le tour est joué.
jojo Posté(e) le 23 mai 2015 Signaler Posté(e) le 23 mai 2015 A la ligne 77 supprime les espaces avant et après le = pour gagner quelques caractères. Sorry, je ne comprends pas. Comment vais-je réduire la taille de la variable result si je modifie ça result = result .. "<BR>--"..rooms[v.roomID].."<BR>" en ça ? result=result .. "<BR>--"..rooms[v.roomID].."<BR>"
jojo Posté(e) le 23 mai 2015 Signaler Posté(e) le 23 mai 2015 comme je suis impatient, j'ai fait le test en supprimant les devices invisibles for k, v in pairs(devicesJSon) do local doit = (dead or not v.dead) -- exclure les device invisibles if v.visible == false then doit = false end if (doit) then et j'ai réduit result à2897 caractères, mais c'est encore de trop. Je continuerai àchercher demain
jojo Posté(e) le 23 mai 2015 Signaler Posté(e) le 23 mai 2015 comme on était déjà demain , j'ai regardé, et il ne m'affiche plus rien de trop. Je pense donc qu'en plus, on devra faire un test sur la longueur de la variable result, et dès qu'elle atteint 2000 car, l'imprimer et recommencer. Mais maintenant je dois aller dormir
mprinfo Posté(e) le 24 mai 2015 Signaler Posté(e) le 24 mai 2015 @jojo voila comment je fais (merci steven) c'est moi complet que le script de steven mais c'est plus léger local TousLesModules = api.get("/devices?") -- Création de la table qui va permettre de retrouver l'id fibaro:debug("Nombres de modules : " ..#TousLesModules) ---------------------------------------------------------------------------------------------- -- Fonction qui permet de récuperer l'id par le nom du module ---------------------------------------------------------------------------------------------- function ID(NomModule) for i,v in ipairs(TousLesModules) do if TousLesModules[i].visible == true then if NomModule == TousLesModules[i].name then return (tonumber(TousLesModules[i].id)) end end end end -------------------------------------------------------------------------------------------- -- Debut du programme -------------------------------------------------------------------------------------------- local id = ID("Volet Bureau") fibaro:debug("l'id est "..id) @Steven peux tu m'aider car cela ne fonctionne pas avec tout les parametres -- cela fonctionne local TousLesModules = api.get("/devices?") --ou local TousLesModules = api.get("/devices?type=com.fibaro.FGRM222") --ou local TousLesModules = api.get("/devices?roomID=8") -- cela ne fonctionne pas local TousLesModules = api.get("/devices?visible=true")
jojo Posté(e) le 1 juin 2015 Signaler Posté(e) le 1 juin 2015 je viens de voir pourquoi j'avais le problème. Dans le VD, la longueur de la variable qui est affichée en DEBUG est limitée. Dans une scène il n'y a pas de limite. Et Steven a proposé une scène. Mais moi j'avais pris la version pour 3.6 (j'étais en 3.6 àl'époque) qui est une version VD. Et donc en v4.x, comme il y a beaucoup plus d'id, cela explosait.
jojo Posté(e) le 20 septembre 2015 Signaler Posté(e) le 20 septembre 2015 Steven, J'abuse de ton script. Mais j'ai beaucoup de devices et pièces. Ta scène trie les pièce par ID. J'ai essayé de la modifier pour rajouter la notion de section, pour trier donc par section, puis pièce, puis devices (de préférence sur le nom et pas sur l'id). Mais j'y arrive pas, je n'arrive pas à faire du rétro-engineering de ton code. Si tu passes par là , je suis sà»r que tu peux proposer cela en 30 min. Merci d'avance
sebcbien Posté(e) le 20 septembre 2015 Signaler Posté(e) le 20 septembre 2015 Rhooooo c abuser Jojo ;-) Sent from my SM-N910F using Tapatalk 1
Steven Posté(e) le 24 septembre 2015 Auteur Signaler Posté(e) le 24 septembre 2015 Voilà . Je te joint le fichier mais voici un aperçu du résultat (c'est donc trié par nom de section puis par nom de pièce) : Je te laisse modifier le script à ton aise. Je l'ai volontairement fait de manière tordu mais cela est uniquement à des fins pédagogiques. (un objet "generateur" qui contient des propriétés et des fonctions qui s'appellent l'une l'autre, qui pour finir va remplir un tableau de "devices" qui contient toutes les propriétés d'un device + la nom de la pièce "roomname" et de la section "sectionname"). Que du bonheur à lire (je plaisante). J'ai laissé la possibilité de ne pas utiliser les sections "useSections = false" au cas ou cela ne fonctionnerait pas bien. Amicalement -- IDs générés le : 24/09/15 à 17:57:43 local id = { -- SECTION : Autre -- ROOM : Divers AGENDA = 178, JOURS_CHEOME = 110, CLOCK_SYNC = 252, PING = 397, MY_BATTERIES = 130, VARIABLES_GLOBALES = 288, GEA_ALARM = 279, X400CT_____AN6 = 284, X400CT_____AN5 = 283, NOTIFICATION_CENTER = 290, EVENEMENTS = 173, UPDATE_NOTIFIER_1_0_6 = 206, IMPERIHOME = 208, X400CT_____AN7 = 285, ANDROID_FILES = 162, VACANCES_SCOLAIRES = 151, -- SECTION : Etage -- ROOM : Chambres FENETRE_NOLAN = 149, FENETRE_NORA = 143, TEMPERATURE = 147, PLAFONNIER_NOLAN = 21, PLAFONNIER_KENDRA = 23, PLAFONNIER_NORA = 18, FENETRE_KENDRA = 145, -- ROOM : Couloir SPOTS = 230, PORTE_TERRASSE = 153, DETECTEUR_DEFECT = 5, HUMIDITE = 365, TEMPERATURE_COULOIR = 364, LEDS_ESCALIER = 27, APLIQUE_ESCALIER = 25, LUMINOSITE_DEFECT = 7, TEMPERATURE_DEFECT = 6, -- SECTION : Extérieur -- ROOM : Garage SURPRESSEUR = 118, PORTE_GARAGE = 64, CAMERA = 403, HUMIDITE_GARAGE = 400, PORTE_GARAGE_GARAGE = 238, TEMPERATURE_GARAGE = 399, -- ROOM : Jardin TEMPERATURE_JARDIN = 69, METEOALERTE___74 = 406, COIN_REPAS = 14, LUMINOSITE = 70, ARROSAGE = 158, DETECTEUR = 68, TERRASSE = 160, PLUIE = 139, SEISMOMETRE = 71, LAMPE_OUEST = 234, -- SECTION : Rez-de-chaussé -- ROOM : Chambre parentale SECHE_SERVIETTE = 60, -- ROOM : Cuisine CAPTEUR_FUMEE = 46, TEMPERATURE_CUISINE = 47, SIRENE = 200, FRIGO = 52, BRITA__FILTRE_ = 131, ALARME_FUMEE = 48, LAVE_VAISSELLE = 50, CUISINE = 237, -- ROOM : Entrée DETECTEUR_ENTREE = 414, LUMINOSITE_ENTREE = 416, PLAFONNIER = 10, CAMERA_ENTREE = 129, PORTE_ENTREE = 58, TEMPERATURE_ENTREE = 415, -- ROOM : Local Technique IPX800_RELAIS = 106, WAKE_SYNO = 404, PLAFONNIER_LOCAL_TECHNIQUE = 54, PORTE_LOCAL = 56, PASSERELLE_ZIBASE = 126, LAVE_LINGE = 120, VMC_DOUBLE_FLUX = 114, -- ROOM : Salon WI = 40, PRISE_LIBRE = 41, KAROTZ = 134, HIFI = 42, TV = 39, OCTAN = 412, ROMBA = 43, FREBOX_TV = 307, HUMIDITE_SALON = 360, PLAFONNIER_SALON = 282, LUMIERE_SALON = 107, FRE_PLAYER = 44, BRISE_SOLEIL = 105, OPENKAROTZ = 133, TEMPERATURE_SALON = 359, CHAUFFAGE = 104, -- SECTION : inconnu -- ROOM : inconnu SEISMOMETRE_DEFECT = 8, LUA_SNIPPETS = 141, } -- usage : -- fibaro:getValue(id["LUA_SNIPPETS"], "value") -- GEA.add(id["LUA_SNIPPETS"], 30, "") GEA_ID.lua 3
jojo Posté(e) le 24 septembre 2015 Signaler Posté(e) le 24 septembre 2015 MERCI, c'est exactement ce que je voulais avoir 1
jojo Posté(e) le 27 septembre 2015 Signaler Posté(e) le 27 septembre 2015 @Steven, Voici ce que j'ai dans mon debug du GEA lorsque j'utilise la v2 du générateur d'id. Avec la G1 (donc les même modules,) mon GEA fonctionne parfaitement. [DEBUG] 19:52:27: [ 158 | Alarme_Activee ] Add Autostart : ajout de la tache pour 1 secondes (ID:86) [Inverse] [StopTask,66] [DEBUG] 19:52:27: [ 158 | Alarme_Activee ] Add Autostart : ajout de la tache pour 1 secondes (ID:87) [Inverse] [StopTask,69] [DEBUG] 19:52:28: [ 158 | Alarme_Activee ] Add Autostart : ajout de la tache pour 1 secondes (ID:88) [SetDisarmed,643] [DEBUG] 19:52:28: [1;31m2015-09-27 19:52:28.020126 [ fatal] Runtime error: /opt/fibaro/scenes/615.lua:815: bad argument #1 to 'lower' (string expected, got nil)[0m @Sakkhho, L'as-tu déjàintégré dans GEA ? Sans erreur àla fin du débug ?
jojo Posté(e) le 27 septembre 2015 Signaler Posté(e) le 27 septembre 2015 "zut" alors, ,je ne comprends vraiment pas, car j'ai régénéré les ID (donc exactement les mêmes) avec l'anciene version du générateur, et ça fonctionne. Ca va être dur à trouver
Steven Posté(e) le 28 septembre 2015 Auteur Signaler Posté(e) le 28 septembre 2015 Arrives-tu me transmettre le résultat du générateur v2 stp ... par pm si possible.
Evilsky Posté(e) le 17 janvier 2016 Signaler Posté(e) le 17 janvier 2016 Bonjour, J'ai juste un petit problème, je n'arrive pas à faire un "copier" dans la fenêtre debug pour "coller" le résultat dans le GEA. Des conseils ??
jojo Posté(e) le 19 janvier 2016 Signaler Posté(e) le 19 janvier 2016 j'ai également des difficultés. La sélection n'est pas top. Il faut aller vite, dès que tu crois que c'est bon, ctrl+C. Ensuite ctrl+V dans notepad pour vérifier
jojo Posté(e) le 20 mai 2016 Signaler Posté(e) le 20 mai 2016 Steven, Puis-je encore abuser ... Dans la dernière version de ton script, tu as fait un tri par section, puis par pièce. Serait-il possible de rajouter, pour chaque pièce, un tri sur le nom du device ? Cela me serait vraiment très utile, car mon GEA devient tellement gros... Merci P.S. n'oublie pas qu'il ne faut rien changer d'autre, car nous avions eu des problème avec notre GEA.
Steven Posté(e) le 6 juin 2016 Auteur Signaler Posté(e) le 6 juin 2016 Oups, non pas vu, désolé. Peux tu m'envoyer ton scripts car j'ai peur que le mien ne soit plus àjour (backup, restore, backup, restore, ...).
jojo Posté(e) le 6 juin 2016 Signaler Posté(e) le 6 juin 2016 Merci Steven. Voici ton code : local hidden = false --- true pour exporter les devices cachés local dead = false -- true pour exporter les devices morts local useSections = true local excludeType = {"com.fibaro.zwaveDevice", "weather", "HC_user", "iOS_device", "com.fibaro.voipUser"} local excludeID = {} local generateur = { devices = {}, names = {}, rooms = {}, sections = {}, devicesJSon = api.get("/devices"), roomsJSon = api.get("/rooms"), sectionsJSon = api.get("/sections"), -- Retourne la section souhaitée getSection = function(self, id) if (not useSections) then return "" end if (#self.sections == 0) then for k, v in ipairs(self.sectionsJSon) do self.sections[v.id] = v.name end end id = tonumber(id) if (type(self.sections[id]) == "nil") then return "inconnu" else return self.sections[id] end end, -- Retourne la pièce souhaitée getRoom = function(self, id) if (#self.rooms == 0) then for k, v in ipairs(self.roomsJSon) do self.rooms[v.id] = {} self.rooms[v.id].name = v.name self.rooms[v.id].sectionId = v.sectionID self.rooms[v.id].sectionName = self:getSection(v.sectionID) end end id = tonumber(id) if (type(self.rooms[id]) == "nil") then return "inconnu", "inconnu", 0 else return self.rooms[id].name, self.rooms[id].sectionName, self.rooms[id].sectionId end end, -- Retourne un nom unique addName = function(self, name, roomname) if (type(self.names[name]) == "nil") then self.names[name] = true return name else return self:addName(name.."_"..roomname, roomname) end end, -- Supprime les caractères indésirables et rend le nom unique rename = function(self, name, roomname) local name = name:upper():gsub("[éêèë]", "E"):gsub("EE", "E"):gsub("[ûüù]", "U"):gsub("UU", "U"):gsub("[àâä]", "A"):gsub("AA", "A"):gsub("[öô]", "O"):gsub("OO", "O"):gsub("[îï]", "I"):gsub("II", "I"):gsub("%W", "_") local roomname = roomname:upper():gsub("[éêèë]", "E"):gsub("EE", "E"):gsub("[ûüù]", "U"):gsub("UU", "U"):gsub("[àâä]", "A"):gsub("AA", "A"):gsub("[öô]", "O"):gsub("OO", "O"):gsub("[îï]", "I"):gsub("II", "I"):gsub("%W", "_") return self:addName(name, roomname) end, proceed = function(self) for k, v in pairs(self.devicesJSon) do local doit = (hidden or v.visible) and (dead or not v.dead) if (doit) then for h, w in pairs(excludeType) do if (v.type == w) then doit = false end end if (doit) then for h, w in pairs(excludeID) do if (v.id == w) then doit = false end end end end if (doit) then v.roomname, v.sectionname, v.sectionID = self:getRoom(v.roomID) table.insert(self.devices, v) end end table.sort(self.devices, function(a, if (not useSections) then return a.roomID < b.roomID else return a.sectionname..a.roomname < b.sectionname..b.roomname end end) return self.devices; end } local result = "<BR><BR>-- IDs générés le : " .. os.date("%d/%m/%y à%X") local room = "" local section = "" local lastinfo = "" result = result .. "<BR><BR>local id = {" local devices = generateur:proceed() for k, v in ipairs(devices) do if (section ~= v.sectionname and useSections) then section = v.sectionname result = result .. "<BR><BR>-- SECTION : "..v.sectionname end if (room ~= v.roomname) then room = v.roomname if (not useSections) then result = result .. "<BR>" end result = result .. "<BR>-- ROOM : "..v.roomname.."<BR>" end lastinfo = generateur:rename(v.name, v.roomname) result = result .. lastinfo .. " = " .. v.id .. ", " end result = result .. "<BR>}" result = result .. "<BR>" result = result .. "<BR>-- usage :" result = result .. "<BR>-- fibaro:getValue(id[\""..lastinfo .."\"], \"value\")" result = result .. "<BR>-- GEA.add(id[\""..lastinfo .."\"], 30, \"\")" print(result)
Messages recommandés