Aller au contenu

Gvar & Json


Berale64

Messages recommandés

J'utilise la facilité json.encode et decode pour stocker des infos dans les variables globales.

J'ai remarqué, depuis que j'ai installé un UPS, qu'une coupure de courant intempestive fait perdre ces valeurs.

On se retrouve avec "NaN" (Not a Number) en lieu et place.

Alors qu'un arrêt propre, avec le petit bouton derrière la box préserve nos valeurs.

 

Voilà , c'est juste pour info. ;)

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Invité chris6783

Ça arrive également si on passe par le panneau variable et on sauve une autre variable après avoir regardé le tableau.... Au début ça cassait mon gestionnaire de piscine et j'ai dû le protéger de ce phénomène.

Lien vers le commentaire
Partager sur d’autres sites

Invité chris6783

Mon VD stoque ses options et des résultats de calcul dans une VG qui est un tableau json avec des sous tableau. Et àl'époque je créais pas mal d'autres VG. Régulièrement le gestionnaire de piscine s'arrêtait de calculer les temps de filtration... Les tableaux était remplacé par ´NaN' sans raison apparente (gt encore en v3). Pour reproduire le problème il suffisait de regarder le tableau dans le panneau variable et ensuite sauver une quelconque autre VG.... Et toutes les variables tableau passaient àNaN. Même la variable de GEA basculait.

Donc dans mon VD j'ai ajouté une protection pour gérer le ças du tableau disparu. D'ailleurs je dois partager cet update car si qq'un utilise le gestionnaire de piscine et joue avec les VG le device peut s'arrêter. Une journée entière voir même plus.

Lien vers le commentaire
Partager sur d’autres sites

Invité chris6783

Je vais essayer de reproduire ce soir mais c peut être corrigé, si tu parles du VD de gestion de piscine c corrigé mais pas sûr d'avoir publié de dernier update de ce printemps. J'ai retiré quelques cycles de calculs inutiles et supporte le NaN. Le VD tourne et je ne m'occupe plus des temps de filtration :-)

Tu avais prévu de creuser une piscine il me semble, j'espère qu'il te sera utile

Lien vers le commentaire
Partager sur d’autres sites

merci chris,

J'avais également des tableaux stockés dans des VG, et parfois ils venaient àNaN, sans raison apparente.

Maintenant j'ai reproduit exactement ce que tu as dis et mon tableau est passé àNaN.

C'est peut-être la cause du "plantage" de GEA, comme la variable GEA_Task passe également àNaN ?

=> c'est un bug de la box, je vais le remonter sur le bug traker ?

Lien vers le commentaire
Partager sur d’autres sites

Je ne pense pas que ce soit un bug.

C'est plutôt un abus d'utilisation de notre part.

Si le message est "Not a Number" c'est bien que le système attend une valeur numerique.

Mais si Fibaro veut bien changer son fusil d'épaule, je suis preneur.

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Bon, ça vaut ce que ça vaut, mais voilà  une scène qui conserve les variables globales et les restaure si besoin.

 

L'idée est de lancer la scène avant que les variables ne soient perdues, puis de boucler pour vérifier qu'elles sont toujours bonnes.

Si NaN on remet la valeur précédente.

 

Les courageux pourront incorporer un VD avec différents icônes pour signaler un problème éventuel.

Je n'ai pas mis de autostart. Je conseil de lancer la scène manuellement quand toutes les variables sont correctes.

 

Il faut modifier lma ligne 8 et mettre le nom des variables que vous voulez préserver.

--[[
%% properties

%% globals
--]]

local Gvar = {"GVTempMM","Rain","Rain_Month"};
local tempGvar = {};
local temp;

-- On mémorise les variables globales
-- On présuppose qu'elles ne sont pas perdues

for i = 1,#Gvar do
  temp = fibaro:getGlobalValue(Gvar[i]);
  if temp == "NaN" then
    fibaro:debug("bad Gvar "..Gvar[i]);
  end
  tempGvar[i] = temp;
end

-- Boucle qui vérifie les variables
-- Si NaN on reprend la valeur précédente

do while true
  for i = 1,#Gvar do
  temp = fibaro:getGlobalValue(Gvar[i]);
  if temp == "NaN" then
    fibaro:setGlobal(Gvar[i], tempGvar[i]);
  else
    tempGvar[i] = temp;
  end
  fibaro:sleep(60*1000);
end
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...