Aller au contenu

Problème Avec Les Variables Globales Dans Gea


Messages recommandés

Posté(e)

Bonjour,

 

(Ce n'est pas spécifique à  GEA, donc je ne poste pas dans le sujet "Support GEA", mais si un modo souhaite déplacer la discussion, pas de soucis)

 

Dans GEA, j'utilise deux variables globales pour alimenter des conditions.

Les variables :

local SurveillanceDebut = fibaro:getGlobalValue("SurveillanceDebut")
local SurveillanceFin  = fibaro:getGlobalValue("SurveillanceFin")

Et la condition :

local siSurveillance  = {"Time", SurveillanceDebut, SurveillanceFin}

Ces variables ont été préalablement définies en lua :

fibaro:setGlobal("SurveillanceDebut", "09:30")
fibaro:setGlobal("SurveillanceFin", "18:00")

Tout fonctionnait bien, puis depuis hier, des erreurs apparaissent dans le debug de GEA.

Apparemment, l'erreur porte sur les conditions.

 
En fait, je me suis aperçu que si je clique sur le bouton sauvegarder depuis le panel des variables globales, la chaine 09:00 devient 9 et 18:30 devient 18, ce qui fait planter la condition de GEA puisque le format n'est plus le bon.
 
J'ai essayé de redéfinir les variables en ajoutant des simples quotes autour des doubles quotes, mais ça ne marche pas.
Dans l'immédiat, ces variables ne sont utilisées que par GEA, donc je peux me passer de variables globales, mais évidemment l'idée est de les utiliser dans d'autres scripts...
 
Avez-vous déjà  constaté le même problème, et avez-vous une solution pour le contourner ? 
 
Merci
 
e1000
Posté(e)

Salut,

 

Ce code de la creation de variable est dans ta scene GEA ou dans une autre ?

 

Elles sont créées dans le panneau de variables ?

Dans le debug tu recuperes quelle valeur de tes variables ?

Posté(e)

Les variables ont été préalablement créées via le panneau des variables.

Le "setGlobal" est au début du script GEA : je l'ai exécuté une fois pour définir les variables, puis j'avais mis les 2 lignes en commentaire (dans la mesure où tout était OK, je ne pensais pas qu'elles se modifieraient toutes seules...).

J'envisage d'utiliser un VD pour les redéfinir, lorsque je veux changer les heures.

 

Tant que je ne sauvegarde pas le panneau, tout est bon et le debug me donne :

 

[DEBUG] 10:16:01: 09:30

[DEBUG] 10:16:01: 18:00

 

Mais dès que j'ai sauvegardé depuis le panneau, j'obtiens :

 

[DEBUG] 10:16:38: 9

[DEBUG] 10:16:38: 18
 

Il faudrait que j'ajoute une tâche pour forcer régulièrement la réécriture des variables globales, mais on tourne en rond : l'objectif est de les lire, pas de les écrire...

 

Ce n'est pas critique, et à  terme je vais activer la surveillance automatique dès que la maison est vide, quelle que soit l'heure.

Mais en attendant, j'aimerais régler ça ^^
Posté(e)

OK,

 

Dans GEA, tu peux definir tes VG comme cela dans les options :

{"Global", "SurveillanceDebut", "09:30"}

Dans GEA, tu peux, si tu veux utiliser du code LUA..utiliser dans les options

{"Function",...end}

Cela vient peut-etre de là ,

 

Cree ton VD pour tester et mets ton setGlobal....dans un bouton pour définir les variables

 

attention tu melanges les codes "lua fibaro" et lua "GEA .. ;-)

 

Pour définir une condition dans GEA : ensuite effectivement, GEA va faire un getGlobalValue ;-)

 

local SurveillanceDebut = {"Global", "SurveillanceDebut", "09:30"}
Posté(e)

Merci, mais justement, je veux éviter de définir les variables depuis GEA, seulement les lire.

Si je les définis depuis un VD ou un autre script, j'ai toujours le même problème : la sauvegarde depuis le panneau semble remplacer la chaine de caractères par une valeur numérique.

 

De fait, le problème ne vient pas de GEA, mais du panneau des variables.

 

La chaine {"Global", "SurveillanceDebut", "09:30"} sera bien :

Posté(e)

Merci, mais justement, je veux éviter de définir les variables depuis GEA, seulement les lire.

Si je les définis depuis un VD ou un autre script, j'ai toujours le même problème : la sauvegarde depuis le panneau semble remplacer la chaine de caractères par une valeur numérique.

 

De fait, le problème ne vient pas de GEA, mais du panneau des variables.

 

La chaine {"Global", "SurveillanceDebut", "09:30"} sera bien :

Posté(e)

essaie avec un tostring ou tonumber

 

des gros doutes sur la syntaxe ;-), eput-etre qu'un pro LUA va passer ;-)

tostring(fibaro:setGlobal("SurveillanceDebut", "09:30"))
tonumber(fibaro:setGlobal("SurveillanceDebut", "09:30"))

manque la fin de ton post ;-)

Posté(e)

Pardon, petit bug, je faisais des tests en parallèle. Je recommence donc ^^

 

 

Merci mais justement, je ne veux pas les définir dans GEA, uniquement les lire.

De fait, le problème semble venir du panneau des variables qui remplace apparemment la chaine de caractère par une valeur numérique (string to integer ?)

 

Tu as raison pour le mélange entre le code fibaro et GEA, mais il n'y a pas de commande GEA pour simplement lire une VG, si ?

 

De ce que j'ai compris, on a : 

  1. des déclencheurs : {"Global", "SurveillanceDebut"} : si SurveillanceDebut a changé, on démarre la tâche
  2. des conditions : {"Global", "SurveillanceDebut", "09:30"} : teste si SurveillanceDebut == "09:30"
  3. des actions : {"Global", "SurveillanceDebut", "09:30"} écrit "09:30" dans SurveillanceDebut si c'est mis dans les options

Par exemple ça, ça ne marche pas :

local siSurveillance = {"Time", {"Global", "SurveillanceDebut"}, {"Global", "SurveillanceFin"}}

(déjà  testé au cas où ^^)

 

 

Je pense que je vais laisser un ticket sur bugzilla.

J'ai l'impression que si une chaine de caractères commence par un nombre, seul le nombre est conservé.

 

Petit test rapide :

fibaro:setGlobal("SurveillanceDebut", "8gggg")
fibaro:setGlobal("SurveillanceFin", "9996fff")
fibaro:debug(fibaro:getGlobalValue("SurveillanceDebut"));
fibaro:debug(fibaro:getGlobalValue("SurveillanceFin"));  

[DEBUG] 11:24:28: 8gggg

[DEBUG] 11:24:28: 9996fff

 
Je vais dans le panneau des variables, c'est OK. J'enregistre, et il ne reste que les chiffres :
--fibaro:setGlobal("SurveillanceDebut", "8gggg")
--fibaro:setGlobal("SurveillanceFin", "9996fff")
fibaro:debug(fibaro:getGlobalValue("SurveillanceDebut"));
fibaro:debug(fibaro:getGlobalValue("SurveillanceFin"));   

[DEBUG] 11:29:07: 8

[DEBUG] 11:29:07: 9996
  • Upvote 1
Posté(e)

ah oui ok ;-) bien vu le ticket, c'est pe un bug connu je n'avais jamais eu, un expert peut peut-etre nous eclairé ;-)

 

Sinon pour jouer avec les valeurs de Variables globales avec GEA :

1- Pour les declencheurs, tu mets le nom de ta variable globale dans l'entete sous %globals

2 et 3 : exact ;-)

 

Pour récupérer la valeur d'une VG avec GEA

GEA.add({"Global", "Message", ""}, 1, "#value#", {{"Inverse"}})

c'est - a-dire, si la VG n'est pas vide, ...GEA stocke la valeur

 

Après tu peux jouer avec

Global!, valeur different de...

Pour ton exemple que tu as testé, cette syntaxe n'aurait pas marché ;-)

 

J'aurais pe testé comme cela dans GEA

local SurveillanceDebut = {"Function", function() fibaro:getGlobalValue("SurveillanceDebut") end }
local SurveillanceFin = {"Function", function() fibaro:getGlobalValue("SurveillanceFin") end }
local siSurveillance = {"Time", SurveillanceDebut, SurveillanceFin}

A teste, jamais eu l'occasion ;-)

Posté(e)
GEA.add({"Global", "Message", ""}, 1, "#value#", {{"Inverse"}})

c'est - a-dire, si la VG n'est pas vide, ...GEA stocke la valeur

 

Il la stocke où ? Dans #value# ?

Mais comment on l'utilise ensuite, parce que ça, ça permet uniquement de l'envoyer en push, non ?

 

J'aurais pe testé comme cela dans GEA

local SurveillanceDebut = {"Function", function() fibaro:getGlobalValue("SurveillanceDebut") end }
local SurveillanceFin = {"Function", function() fibaro:getGlobalValue("SurveillanceFin") end }
local siSurveillance = {"Time", SurveillanceDebut, SurveillanceFin}

A teste, jamais eu l'occasion ;-)

 

 

à‡a retourne une table :

 

[DEBUG] 16:08:44: table: 0x8e279c8

[ERROR] 16:08:06: line 130: attempt to concatenate local 'SurveillanceDebut' (a table value)
Posté(e)

Comme ca par exemple !!

GEA.add({"Global", "variable",""}, 30, "valeur d'id_module : #value#", {{"Inverse"},{"Value", "id", "#value#"}})

Ah ca fonctionne pas terrible le code que je t'ai donne ;-)

Posté(e)

Le bug du panneau de variable est connu depuis toujours.

 

Il faut te faire un VD ou une scène pour modifier les variables, et ne jamais modifier en direct les variables via le panneau.

Posté(e)

Ah ben c'est pourtant pas faute d'avoir cherché (ici et sur bugzilla).

J'ai sans doute pas utilisé les bons mots-clefs.

Cela dit, c'est un bug trivial qui ne me semble pas insurmontable àfixer.

Je suppose qu'ils ont d'autres chats àfouetter chez Fibaro...

Posté(e)

Sur le bugtracker, je ne sais pas, mais on en parlait beaucoup ici du temps de la v3, donc ça remonte àl'année dernière. J'ai souvenir que de modifier le panneau de variable cassait tous les VD de Krikroff car il était le premier àstocker des valeurs non conventionnelles dans ses variables.

×
×
  • Créer...