Aller au contenu

Lua - Connaitre Le Dernier Id Et Le Nombres De Modules


mprinfo

Messages recommandés

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
  • Upvote 3
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...