jjacques68 Posté(e) le 18 octobre 2017 Signaler Posté(e) le 18 octobre 2017 (modifié) 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... Modifié le 22 octobre 2017 par jjacques68 Version 2 1 4
trainkill666 Posté(e) le 21 octobre 2017 Signaler Posté(e) le 21 octobre 2017 Sujet intéressant, il me liste : 43 x com.fibaro.binarySwitch Un de mes fgs est boiteux ? Aucun dans les modules cachés ou désactivés, hors le 3éme pour chaque fgs non utilisé.
jjacques68 Posté(e) le 21 octobre 2017 Auteur Signaler Posté(e) le 21 octobre 2017 ?? alors là ?? ben normalement il compte un FGS en double !
jjacques68 Posté(e) le 21 octobre 2017 Auteur Signaler Posté(e) le 21 octobre 2017 tu en as combien physiquement des FGS ? 22 ?
trainkill666 Posté(e) le 21 octobre 2017 Signaler Posté(e) le 21 octobre 2017 21 installés si pas d'erreur, donc 42. Il faut que je liste le nom de chaque binaryswitch pour comprendre d'où vient l'intrus. La box m'étonnes toujours autant.
jjacques68 Posté(e) le 21 octobre 2017 Auteur Signaler Posté(e) le 21 octobre 2017 intéressant en effet... En tout cas chez moi ça colle, et je viens de rajouter un FGS, et il me la bien compter (en double biensûr à cause des 2 relais) Si j'ai le temps ce weekend, j'essaye de faire un script qui permette de lister les device physique réel... Il faut pour ça que je joue avec les parentId, et je sens que je vais y passer du temps...
trainkill666 Posté(e) le 21 octobre 2017 Signaler Posté(e) le 21 octobre 2017 Ok, j'ai compris en filtrant avec les noms. Ma sirène Everspring SE812 est listée comme com.fibaro.binarySwitch .
jjacques68 Posté(e) le 22 octobre 2017 Auteur Signaler Posté(e) le 22 octobre 2017 et voilà, la version 2 est faite avec le nombre réel de device présent. Chez moi ça colle pil poil 2
fredokl Posté(e) le 26 septembre 2018 Signaler Posté(e) le 26 septembre 2018 @jjacques68Salut. Je découvre cette scène. Merci, elle est vraiment très superbe.
Messages recommandés