Aller au contenu

Astuce : Sauvegarder Vos Id Dans Une Variable Globale


Indyana

Messages recommandés

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
Lien vers le commentaire
Partager sur d’autres sites

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");

Lien vers le commentaire
Partager sur d’autres sites

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).

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

 

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/

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Excellent cette astuce Indyana  :13:

 

J'ai mis cela en application ici http://www.domotique-fibaro.fr/index.php/topic/2832-je-ne-reçois-plus-les-notifications/?p=46941 pour me "libérer" des numéros d'ID "rentrés en dur" dans les programmes  :)

 

Merci encore

Cordialement - Jean-Paul

post-15-0-71083500-1421165537_thumb.jpg

Lien vers le commentaire
Partager sur d’autres sites

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).

Lien vers le commentaire
Partager sur d’autres sites

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:

Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...

@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 ?

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...