Indyana Posté(e) le 9 janvier 2015 Signaler Posté(e) le 9 janvier 2015 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 4
Zorgonaute84 Posté(e) le 9 janvier 2015 Signaler Posté(e) le 9 janvier 2015 Excellente astuce que je ne connaissais pas. J'implémente cela ce weekend !!! Merci
Berale64 Posté(e) le 10 janvier 2015 Signaler Posté(e) le 10 janvier 2015 Très bonne idée. Dès que j'ai fini ma migration, je me lance.
maestrea Posté(e) le 10 janvier 2015 Signaler Posté(e) le 10 janvier 2015 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");
Indyana Posté(e) le 10 janvier 2015 Auteur Signaler Posté(e) le 10 janvier 2015 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).
sebcbien Posté(e) le 11 janvier 2015 Signaler Posté(e) le 11 janvier 2015 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...
jojo Posté(e) le 11 janvier 2015 Signaler Posté(e) le 11 janvier 2015 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
jojo Posté(e) le 11 janvier 2015 Signaler Posté(e) le 11 janvier 2015 pour générer le fichier de départ, faite un export avec le Toolkit de Krikoff, puis xls ...
Vince Posté(e) le 11 janvier 2015 Signaler Posté(e) le 11 janvier 2015 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/
jpr105 Posté(e) le 13 janvier 2015 Signaler Posté(e) le 13 janvier 2015 Bonjour, Excellent cette astuce Indyana 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
bencol Posté(e) le 17 janvier 2015 Signaler Posté(e) le 17 janvier 2015 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).
Berale64 Posté(e) le 18 janvier 2015 Signaler Posté(e) le 18 janvier 2015 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.
bencol Posté(e) le 18 janvier 2015 Signaler Posté(e) le 18 janvier 2015 pour ma part cela fonctionne très bien dans un device virtuel ou dans une scène.
Vince Posté(e) le 18 janvier 2015 Signaler Posté(e) le 18 janvier 2015 en V4.x ca marche mais pas avec la V3.6 !
pir2d2 Posté(e) le 25 mars 2015 Signaler Posté(e) le 25 mars 2015 impec en v4.037. ça me fait une variable avec 700 caractères. c'est quoi la limite ?
Tsv91 Posté(e) le 25 mars 2015 Signaler Posté(e) le 25 mars 2015 Que se passe t'il quand l'ID fait partie du triiger d'une scène ?
pir2d2 Posté(e) le 25 mars 2015 Signaler Posté(e) le 25 mars 2015 là , je pense qu'il faut mettre les id à la main.
Tsv91 Posté(e) le 25 mars 2015 Signaler Posté(e) le 25 mars 2015 @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 ?
pir2d2 Posté(e) le 25 mars 2015 Signaler Posté(e) le 25 mars 2015 alors là, bonne question. Je ne sais pas.
Messages recommandés