Aller au contenu

Astuce : Sauvegarder Vos Id Dans Une Variable Globale


Messages recommandés

Posté(e)

Voici une petite astuce sà»rement utilisée par beaucoup mais que je n'ai pas vue sur le forum (j'avoue j'ai pas lu tous les sujets) et qui pourra vous faire gagner beaucoup de temps notamment lors des changements de version et des recovery. En effet il peut arriver lors des recovery que l'identifiant de module change, cela implique donc de modifier l'ensemble de vos scripts Lua pour corriger les id de module, et lorsque vous avez beaucoup de scripts, ça peut prendre un temps fou.

 

L'idée est donc de stocker l'ensemble de vos id dans une variable globale et de les restituer à  chaque début de script.

 

Dans le panneaux des variables, créez une nouvelle variable globale nommée "id".

 

Ce premier bout de code à  placer dans un bouton de module virtuel vous permet de sauvegarder les id dans la variable globale à  chaque appui sur le bouton:

-- Déclaration de la table des id
id={};
-- Affectation des id de chaque device
id.pcdavid=7;
id.pcchristelle=11;
id.freebox=6;
id.diskstation=12;
id.notification=12;
-- Sauvegarde des id dans la variable globale
fibaro:setGlobal('id',json.encode(id));

Pour restituer ces id à  l'entrée de votre script et les utiliser dans un programme:

-- Récupération de vos id en début de vos scripts
id=json.decode((fibaro:getGlobal('id')));

-- Exemple d'utilisation
fibaro:call(id.freebox, "pressButton", "12");
fibaro:debug(id.pcchristelle);

Voilà , voilou, si ça peut aider quelque newbees comme moi ;)

  • Upvote 4
Posté(e)

Salut Indyana,

 

Je ne sais pas oຠest l'erreur, mais avec cette scene:

--[[
%% properties

%% globals
--]]


-- Récupération de vos id en début de vos scripts
idCocina=json.decode((fibaro:getGlobal('idCocina')));
 
-- Exemple d'utilisation
fibaro:debug(idCocina.NFC);

Le debug:

 

[ERROR] 22:40:09: line 10: attempt to index global 'json' (a nil value)

 
 
Et le code du Virtual Device:
 

-- Declaracià³n de la tabla
idCocina={};

-- Definicià³n de los ID's

idCocina.Persiana=7;
idCocina.Estor=49;
idCocina.Tecla=17;
idCocina.NFC=76;

-- Guardar datos
fibaro:setGlobal('idCocina',json.encode(idCocina));
fibaro:debug("Actualizando ID");

Posté(e)

Tu as bien déclenché le bouton du virtual device pour mettre àjour la variable globale et la variable est bien chargée (tu devrais y voir une accolade { )? Je demande au cas où car je ne vois pas le problème dans ton script (je débute aussi en Lua et les messages d'erreurs sont pour le moins.....pourris).

Posté(e)

attention qu'il y a une longueur limite pour les VG...

Attention aussi de trouver un moyen de les charger dans la VG dès que la box a rebooté, sinon la VG sera vide et rien ne fonctionnera...

Posté(e)

Génial, mois qui suis lentement entrain de passer de HCL à  HC2 (migration presque terminée), je me disais que ce n'était pas cool d'identifier ses devices, etc par des numéros; Maintenant c'est réglé.

 

Merci sebcbien, pour la remarque de recharger la VG au redémarrage de la box.

On pourrait faire une scène qui tourne en continu, mais c'est lourd. N'y a-t-il pas moyen en LUA de récupérer le up-time de la box : on le voit dans Configuration -> Server status. si up-time < 30 sec, il faut réinitialiser la VG

Posté(e)

 

Salut Indyana,

 

Je ne sais pas oຠest l'erreur, mais avec cette scene:

--[[
%% properties

%% globals
--]]


-- Récupération de vos id en début de vos scripts
idCocina=json.decode((fibaro:getGlobal('idCocina')));
 
-- Exemple d'utilisation
fibaro:debug(idCocina.NFC);

Le debug:

 

[ERROR] 22:40:09: line 10: attempt to index global 'json' (a nil value)

 
 
Et le code du Virtual Device:
 

-- Declaracià³n de la tabla
idCocina={};

-- Definicià³n de los ID's

idCocina.Persiana=7;
idCocina.Estor=49;
idCocina.Tecla=17;
idCocina.NFC=76;

-- Guardar datos
fibaro:setGlobal('idCocina',json.encode(idCocina));
fibaro:debug("Actualizando ID");

 

 

Malheureusement dans les scenes la fonction json.encode ne fonctionne pas :

http://www.fibarouk.co.uk/support/lua/library/json-encode/

Posté(e)

Merci pour l'astuce, il est préférable de mettre la partie déclaration des variables dans une scène qui s'exécutera automatiquement au démarrage avec

 

--[[
%% autostart
--]]

 

Pour ma part, je récupère les variables aussi bien dans un device virtuel que dans une scène (je suis en  V4).

Posté(e)

Malheureusement dans les scenes la fonction json.encode ne fonctionne pas :

http://www.fibarouk.co.uk/support/lua/library/json-encode/

 

Donc, si je comprends, c'est une mauvaise fausse bonne idée.

Dommage.

 

Mais je me pose de plus en plus de questions sur le codage chez fibaro ?

Du LUA reste du LUA, que ce soit dans une scène ou un bouton virtuel, mais il semble que non. :angry:

  • 2 mois après...
Posté(e)

@pir2d2  ben oui ! pas trouver d'autre solution. Par contre j'ai fait la même chose mais simple  un tableau d'ID={} global mais sans la fonction json.encode ou json.decode 

Quel peut être l'intérêt d'encode son tableau en json ? Pourvoir le tableau récupérer sur un requête externe ?

×
×
  • Créer...