Aller au contenu

Messages recommandés

Posté(e)

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

Posté(e)

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.

Posté(e)

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

Posté(e)

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.

Posté(e)

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

Posté(e)

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

Posté(e)

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é !

Posté(e)

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. 

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)


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

Posté(e)

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 ?

Posté(e)

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

Posté(e)

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

Posté(e)

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
Posté(e)

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

  • Upvote 1
Posté(e)

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

Posté(e)

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.

×
×
  • Créer...