Aller au contenu

Mise À Jour Script Après Suppression/ Rajout Module


maconly34

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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. 

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

mprinfo, on mélange 2 choses ici :

Lien vers le commentaire
Partager sur d’autres sites


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

Lien vers le commentaire
Partager sur d’autres sites

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

je comprend bien ce que tu veux :

  1. on génère les ID 
  2. on sauve le tout dans une var globale
  3. et en début de chaque script, on lit la var globale avec les noms et id
  4. et dans le scipt , on fait simplement réf au nom du device

je vois 2 difficultés :

  1. longueur maximale de la variable globale (perso, le script me génère un string de 3900 caractères !)
  2. le temps CPU de lecture de la VG à  chaque exécution de chaque script
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...