maconly34 Posté(e) le 22 mai 2015 Signaler Posté(e) le 22 mai 2015 Bonjour, le problème a surement déjà était évoqué, dà» à un problème de module je l'ai supprimé, puis rajouter. Forcément l'ID à changé, est donc mes scripts sont faux. Y a t-il une solution pour éviter ces problèmes ? Surtout le jour où je vais switcher en V4, si je dois réassocier tout mes modules !!! Help, MERCI
jojo Posté(e) le 22 mai 2015 Signaler Posté(e) le 22 mai 2015 solution = Générateur D'id Pour Gea (Ou Autre Script) by Steven
maconly34 Posté(e) le 22 mai 2015 Auteur Signaler Posté(e) le 22 mai 2015 Salut Jojo, si je comprends bien, une fois que tout mes modules sont inclus, je lance se script qui va leurs affecter un ID virtuel, que j'utiliserais dans mes scènes ? Et si je dois réinclure un module, comment procède t-on pour qu'il ai le même ID ? Bon, je nage un peu. J'ai plein de choses à apprendre/comprendre, les liens inter BOX (Jeedom <->HC2), GEA, JSON ???? tout ça est un peu flou dans mon cervelet.
HANSOLO Posté(e) le 22 mai 2015 Signaler Posté(e) le 22 mai 2015 Non le générateur d ID génère une liste d'alias des tous les modules, cette liste est a utiliser dans du code LUA. par la suite si un ou des modules changent d'ID, il suffit de relancer le générateur, récupérer la liste et actualiser dans les codes LUA
maconly34 Posté(e) le 22 mai 2015 Auteur Signaler Posté(e) le 22 mai 2015 Merci, mais si il faut réactualiser tous les scripts utilisant ces modules, je vois pas l'intérêt ??? Y'a quelque chose qui doit clocher.
jojo Posté(e) le 22 mai 2015 Signaler Posté(e) le 22 mai 2015 intérêt : dans tes scripts tu utilises les nom des devices, et comme le script associe au nom (pour peu que le nom n'a pas changé !) l'ID du device dans une table, tu n'as qu'à mettre à jour la table auto-générée en début de tes codes LUA. En fait tu dois tourner le script en mode debug, et à la fin il te montre un exemple d'utilisation
mprinfo Posté(e) le 22 mai 2015 Signaler Posté(e) le 22 mai 2015 si tu n'es pas pressé j'ai un bout de script qui traine sur ma box qui permet de récuperer l'id d'un module via l'api par rapport au nom que tu lui donne et si il ne le trouve pas il t’avertit par un push. j'essaie de te donner cela ce WE
jojo Posté(e) le 22 mai 2015 Signaler Posté(e) le 22 mai 2015 ah, ça ce serait cool, on pourrait ainsi vérifier si la table qu'on a générée il y aa x temps est toujours d'actualité !
maconly34 Posté(e) le 22 mai 2015 Auteur Signaler Posté(e) le 22 mai 2015 C'est ce que je pensais, Donc si je retire/réajoute un module et que je lui donne le même nom, ce script va me régénérer une table associant le nouvel ID au "même_nom". Donc il faut mettre à jour la table de tous les scripts. N'est-il pas possible de mettre cette table sous forme de variable globale ? cela simplifierai la mise à jour.
jojo Posté(e) le 22 mai 2015 Signaler Posté(e) le 22 mai 2015 oui, il y a un tuto quelque part sur le forum pour sauver les ID des devices dans une variable globale, MAIS je crains que les variables globales soient limitées en nombre de charactères
mprinfo Posté(e) le 22 mai 2015 Signaler Posté(e) le 22 mai 2015 La table on la il suffit d'utiliser l'api de pour la récupérer. Vu que les id change je ne vois pas l'intérêt de les sauvegarder
jojo Posté(e) le 22 mai 2015 Signaler Posté(e) le 22 mai 2015 Je vais ouvrir un topic spécifique pour récolter les idées et continuer la discussion
mprinfo Posté(e) le 22 mai 2015 Signaler Posté(e) le 22 mai 2015 C'est très simple tu récupère la table des device via l api tu compares le nom rechercher avec la table et tu récupères l id si il trouve le nom
jojo Posté(e) le 22 mai 2015 Signaler Posté(e) le 22 mai 2015 mprinfo, on mélange 2 choses ici : vérifier que la dernière table exportée est toujours la bonne ( tu as raison c'est très "simple", c'est exacteent ce àquoi je pensais) mon souhait de faire un backup de la config en exportant les json (http://www.domotique-fibaro.fr/index.php/topic/4841-backup-hc2-id%C3%A9es/)
mprinfo Posté(e) le 22 mai 2015 Signaler Posté(e) le 22 mai 2015 En v4 c'est super simple Oui je stock parfois des tables avec des id avec un json pour les vd
mprinfo Posté(e) le 22 mai 2015 Signaler Posté(e) le 22 mai 2015 local TousLesModules = api.get("/devices/") fibaro:debug("Nombres de modules : " ..#TousLesModules) for i,v in ipairs(TousLesModules) do local Nom = TousLesModules.name local visible = TousLesModules.visible if visible == true then local id = TousLesModules.id fibaro:debug("Id = "..id.." - Nom = "..Nom) end end
maconly34 Posté(e) le 23 mai 2015 Auteur Signaler Posté(e) le 23 mai 2015 Bon, on avance, ça cogite dur ! Mon angle, c'est bien d'utiliser le générateur de table, mais de copier cette table (données) dans le panneau de variables globales. Comme ça si l'on supprime plusieurs modules et qu'on les réinclus avec attribution des nom originels, alors on régénère la table. Les noms des modules étant les mêmes, seuls les ID auront changés, il suffira de remettre à jour les ID de ces modules dans le panneau variables globales. Résultat, pas besoin de recopier la table dans tous les scripts. Et peut-être que l'on peut gérer les variables globales par script (suppression puis recréation automatique avec la table générée. Un petit bouton et hop tout est à jour !?!? Je viens de créer une variable globale de 20 car, seul 18 s'affichent dans le tableau, mais peut-être que les 20 sont pris en compte ?
mprinfo Posté(e) le 23 mai 2015 Signaler Posté(e) le 23 mai 2015 Le script que j'ai donné récupère tout les devices qui ce trouve dans la box via l'api si tu copie ce code dans une scene tu verras tout le module qui s affiche dans le debug nom + id Des que j'ai un peu de temp je te fais cela avec une function qui retournera l'id
maconly34 Posté(e) le 23 mai 2015 Auteur Signaler Posté(e) le 23 mai 2015 Oui, ça j'ai bien compris, c'est comme cela que je l'utilise (MERCI). Ce qui serait bien c'est la recopie automatique de cette table dans des var globales. Comme ça dans les scripts on utilise les noms générés par cette table sous forme de var globales qui ne changerons jamais. Donc on ne touche plus les scripts, seul un petit bouton pour régénérer le tableau de globales avec ta table
mprinfo Posté(e) le 23 mai 2015 Signaler Posté(e) le 23 mai 2015 Le mieux c'est une function return On peux aussi faire plusieurs table par exemple un table pour les fgrm222 etc...
jojo Posté(e) le 23 mai 2015 Signaler Posté(e) le 23 mai 2015 je comprend bien ce que tu veux : on génère les ID on sauve le tout dans une var globale et en début de chaque script, on lit la var globale avec les noms et id et dans le scipt , on fait simplement réf au nom du device je vois 2 difficultés : longueur maximale de la variable globale (perso, le script me génère un string de 3900 caractères !) le temps CPU de lecture de la VG à chaque exécution de chaque script
mprinfo Posté(e) le 23 mai 2015 Signaler Posté(e) le 23 mai 2015 Pour moi pas besoin de vg On crée la table au debut du script via l'api c'est bien plus simple et c'est a jour en temp réel Envoyé de mon SM-G900F 1
mprinfo Posté(e) le 24 mai 2015 Signaler Posté(e) le 24 mai 2015 voici un solution 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) si on a pas besoin de tout les devises dans la scène local TousLesModules = api.get("/devices?") on peut par exemple faire comme cela pour ne récuperer que les modules FGRM222 local TousLesModules = api.get("/devices?type=com.fibaro.FGRM222") Pour une piéce local TousLesModules = api.get("/devices?roomID=8") ce qui permet de réduire la taille de la table
maconly34 Posté(e) le 24 mai 2015 Auteur Signaler Posté(e) le 24 mai 2015 J'ai un peu cogité cette nuit, et voilà mon bouillon de culture, qu'en pensez-vous ? @Jojo. Moi je voyais, une VG par module avec juste le nom généré du module = n° ID donc pas de lecture totale de la table. Utilisation directe de la VG dans le script. @ mprinfo. Belle solution qui permet de diminuer la table et la charge processeur. Ok pour le générateur de table directement en début de script, mais déclenchement par une VG de mise à jour et une var locale pour génération un seule fois. Cela évitera de générer à chaque fois cette table par tous les scripts. Donc un bouton qui incrémente l'état d'une VG "mise_a_jour_table" et en début de script de génération : si mise_a_jour_table > locale_generation alors script de génération locale_generation = mise_a_jour_table Fin de si Chaque fois que l'on veut mettre à jour, un appui sur le bouton de mise à jour et c'est tout. Comme çà on ne régénère pas chaque fois la table.
Messages recommandés