Bonsoir à tous,
Voici un rapide bout de code tout simple mais toujours utile, qui permet de connaitre le nombre de device que l'on a sur notre HC2.
Version 1 : CountDeviceV1.lua
Le critère de sélection est simplement la propriété "visible" du device qui doit être à "true".
Il sont classés selon leurs types, sans tenir compte de leurs "parentId".
C'est à dire par exemple pour 1 FGMS, il va compter donc 1 détecteur de mouvement, 1 détecteur du luminosité et 1 détecteur de température.
Il ne fait pas la différence entre les version 1 et n des device.
Version 2 : CountDeviceV2.lua
Dans cette version il est possible de connaitre le nombre réel de device.
--[[
Version 2
Scène qui compte les device.
Permet de savoir combien on en a.
C'est tout.
--]]
print("Les device listés en VERT correspondent aux device réels ou physiquement présent.\n")
local Detail = true --mettre false pour ne pas avoir le détail
if Detail == true then
print("Les device listés en ORANGE correspondent au nombre de device du même type.")
print("Il peut y avoir un décallage entre le nombre de device réels ")
print("et le nombre de device du même type,")
print("car un device réel peut en contenir plusieurs (exemple pour les FGMS, FGS, ...)\n")
end
print("Analyse en cours...\n")
local Device = api.get("/devices")
local DeviceFind = false
local AllDevice = {} --{parentId = x, id = y}
local RealDevice = {} --{TypeDevice = "", Number = x}
local NbRealDevice = 0
local NbDevice = 0
--[[----------------------------------------------------------------------------
--------------------------------------------------------------------------------
ajoute le couple parentId - Id dans la table AllDevice.
Si pas de parentId (cas des VD) alors on force le parentId à 0.
PID | ID
---------
0 | 2
1 | 434
434 | 439
434 | 440
434 | 441
--]]
for i = 1, #Device do
if Device[i].parentId then
table.insert(AllDevice,{parentId = Device[i].parentId, id = Device[i].id})
else
--sinon ajoute le device avec comme parentId forcé à 0 (c'est en faite les VD)
table.insert(AllDevice,{parentId = 0, id = Device[i].id})
--print(Device[i].id.." "..Device[i].type)
end
end
--[[----------------------------------------------------------------------------
--------------------------------------------------------------------------------
2 étapes pour l'ajout dans la table RealDevice :
1ère étape : ajoute/compte les device de AllDevice dont le parentId = 0 (user, mobile, VD, ...).
2ème étape : sélectionne dans AllDevice, que le premier device des chlidId pour ajouter/compter :
PID | ID
---------
1 | 434
434 | 439 <---- c'est celui là qui nous intéresse
434 | 440
434 | 441
--]]
for i,v in ipairs(AllDevice) do --pour tous les devices de AllDevice
--ETAPE 1 : --ajoute les type de device dont le parentId = 0 (user, mobile, ...)
if AllDevice[i].parentId == 0 then
--on récupère les info du device
Device = api.get("/devices/"..AllDevice[i].id)
--pour tous les Device déjà enregistrés
for j,v in ipairs(RealDevice) do
--si y a déjà un type device identique dans la liste -> on incrémente juste le nombre
if RealDevice[j].TypeDevice == Device.type then
RealDevice[j].Number = RealDevice[j].Number + 1
DeviceFind = true
break
else
DeviceFind = false
end
end
--ajoute si pas present dans le tableau
if DeviceFind == false then
table.insert(RealDevice, {TypeDevice = Device.type, Number = 1})
end
end
--arrête si arrivé au dernier (sinon bug à cause du i+1)
if i == #AllDevice then break end
--ETAPE 2 : ajoute des autres devices
--si id en cours = parentId du suivant c'est que
--l'id du suivant est le premier device enfant que l'on doit garder
if AllDevice[i].id == AllDevice[i+1].parentId then
--on récupère les infos du premier device enfant
Device = api.get("/devices/"..AllDevice[i+1].id)
--si le device enfant n'est pas directement le suivant,
--on prends encore le suivant, et encore et encore jusqu'à trouver le bon.
k=1
while Device.visible == false do
k=k+1
Device = api.get("/devices/"..AllDevice[i+k].id)
end
--pour tous les Device déjà enregistrés
for j,v in ipairs(RealDevice) do
--si y a déjà un type device identique dans la liste -> on incrémente juste le nombre
if RealDevice[j].TypeDevice == Device.type then
RealDevice[j].Number = RealDevice[j].Number + 1
DeviceFind = true
break
else
DeviceFind = false
end
end
--ajoute si pas present dans le tableau
if DeviceFind == false then
table.insert(RealDevice, {TypeDevice = Device.type, Number = 1})
end
end
end
--on affiche le résultat------------------------------------------------------------
Device = api.get("/devices")
for i = 1, #RealDevice do
print ("<font color = 'green'>"..RealDevice[i].Number.." x "..RealDevice[i].TypeDevice.."</font>")
NbRealDevice = NbRealDevice + tonumber(RealDevice[i].Number)
if Detail == true then
k=1
for j = 1, #Device do
if Device[j].type == RealDevice[i].TypeDevice and Device[j].visible == true and Device[j].enabled == true then
print("<font color = 'orange'>______ "..k.." ---> "..Device[j].name.." - "..Device[j].id.."</font>")
NbDevice = NbDevice+1
k=k+1
end
end
end
end
--et les toto----------------------------------------------------------------------
print()
print("<font color = magenta>Nombre Réel de device : "..NbRealDevice.."</font>")
if Detail == true then
print("<font color = magenta>Nombre de device : "..NbDevice.."</font>")
end
voilà le debug :
Si vous avez des propositions d'améliorations... n'hésitez pas...