mprinfo Posté(e) le 7 décembre 2015 Signaler Posté(e) le 7 décembre 2015 Connaitre le dernier ID et le Nombres de Modules Comment connaitre le nombres de modules installer sur notre Box ? C'est très simple il suffit d’interroger la box via l'api "/api/devices" Exemples : Dans un module virtuel : local HC2 = Net.FHttp("127.0.0.1", 11111) local reponse = HC2:GET("/api/devices") local TousLesModules = json.decode(reponse) fibaro:debug("Nombres de modules : " ..#TousLesModules) Dans une Scéne : local TousLesModules = api.get("/devices/") fibaro:debug("Nombres de modules : " ..#TousLesModules) Le caractère "#" devant le nom de la tables ici " TousLesModules " permet de donner le nombres d'entrée de la table Dans cette exemple cela nous donnera le nombres de Modules. Le chiffre que j'obtiens doit donc correspondre au dernier ID ? OUI : Si ne n'ai supprimer aucun modules Non : Si j'ai supprimer des modules Je m'explique lors que l'on crée ou ajoute de nouveau modules les ID croitre chronologiquement ainsi que le nombres d'entrés dans ma table. Par contre si je supprime un module cela va supprimer une entrée dans ma table mais les ID ne bougeront pas ce qui va créé un décalage entre le nombre d'entrée dans ma table et les numéro d'ID. Comment faire pour résoudre ce probléme ? C'est très simple puisque l'on connait le nombre d'entrée dans la table et que l'on sait que le dernier ID ce trouve a la fin de cette table on va donc récuperer l'ID de la dernière entrée Exemple : Dans un module virtuel : local HC2 = Net.FHttp("127.0.0.1", 11111) local reponse = HC2:GET("/api/devices") local TousLesModules = json.decode(reponse) local IdEnd = TousLesModules[#TousLesModules].id fibaro:debug("Nombres de modules : " ..#TousLesModules) fibaro:debug("Dernier ID : "..IdEnd) Dans une scéne : local TousLesModules = api.get("/devices/") local IdEnd = TousLesModules[#TousLesModules].id fibaro:debug("Nombres de modules : " ..#TousLesModules) fibaro:debug("Dernier ID : "..IdEnd) A partir de maintenant nous savons comment connaitre le dernier ID de notre BOX. Une autre solution aurait était d'utiliser ce code. Exemple : Dans un module virtuel : local HC2 = Net.FHttp("127.0.0.1", 11111) local reponse = HC2:GET("/api/devices") local TousLesModules = json.decode(reponse) local IdEnd = TousLesModules[#TousLesModules].id fibaro:debug("Nombres de modules : " ..#TousLesModules) fibaro:debug("Dernier ID : "..IdEnd) for i,v in ipairs(TousLesModules) do local Nom = TousLesModules[i].name local visible = TousLesModules[i].visible if visible == true then local id = TousLesModules[i].id fibaro:debug("Id = "..id.." - Nom = "..Nom) end end Dans une scéne : local TousLesModules = api.get("/devices/") local IdEnd = TousLesModules[#TousLesModules].id fibaro:debug("Nombres de modules : " ..#TousLesModules) fibaro:debug("Dernier ID : "..IdEnd) for i,v in ipairs(TousLesModules) do local Nom = TousLesModules[i].name local visible = TousLesModules[i].visible if visible == true then local id = TousLesModules[i].id fibaro:debug("Id = "..id.." - Nom = "..Nom) end end On s' aperçois qu'en utilisant " for i,v ipairs " on n'a pas besoin de connaitre le dernier ID pour afficher toute la table Par contre si on utilise ce genre de code nous aurons besoin du dernier ID Exemple dans un VD : Je veux connaitre tous les ID de mes Volets local HC2 = Net.FHttp("127.0.0.1", 11111) local reponse = HC2:GET("/api/devices") local Modules = json.decode(reponse) local Var_Id = {"Tous"} local IdEnd = Modules[#Modules].id fibaro:debug("IdEnd "..IdEnd) for i = 3, IdEnd do local theType = string.sub(fibaro:getType(i), 12,15) local Var_Name = fibaro:getName(i) if (theType == 'FGRM') then local t_id = #Var_Id + 1 table.insert(Var_Id, t_id, tonumber(i)) fibaro:debug("Type : "..theType..' - Volets ID '..i .." = "..Var_Name) end end 3
pepite Posté(e) le 8 décembre 2015 Signaler Posté(e) le 8 décembre 2015 Quand je vous dis, le come back du tuto ;-) Super, merci !!
Steph11 Posté(e) le 8 décembre 2015 Signaler Posté(e) le 8 décembre 2015 Nickel !!! Mais a force d'inclure et de déinclure mes modules ( changement des piles ) Y a t'ils un moyen pour que les N id se suivent. Exemple: mes modules filaires se suivent 1,2,3,4,5 puis je passe aux modules sur batterie à230,231,240,250
Lazer Posté(e) le 8 décembre 2015 Signaler Posté(e) le 8 décembre 2015 Non impossible de "choisir" ses ID. Ils sont utilisés comme clé primaire dans les tables de la base de données, donc àchaque exclusion/inclusion, de nouveaux ID sont obligatoirement générés. Ce n'est pas un problème, au contraire, ça ne peut que faire du bien àla base de données. Seul inconvénient, on doit modifier nos scénarios àchaque modification d'ID.
Steph11 Posté(e) le 8 décembre 2015 Signaler Posté(e) le 8 décembre 2015 Merci pour l'info Lazer, dommage serait été plus simple pour trouvé les modules sur batterie
Messages recommandés