Aller au contenu

Messages recommandés

Posté(e)

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
Posté(e)

moi j'ai également observé que les tableaux sauvés dans des variables globale, se transformaient en NaN, mais ce n'était pas lié àune coupure de courant intenpestive

Invité chris6783
Posté(e)

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

Invité chris6783
Posté(e)

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.

Invité chris6783
Posté(e)

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

Posté(e)

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 ?

Posté(e)

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
Invité chris6783
Posté(e)

Pour moi ça relève effectivement du bug car on modifie une variable et les voisines sont impactees

Envoyé de mon SM-G850F en utilisant Tapatalk

Posté(e)

le test que je viens de faire est pire  :angry:

Je sauve mon panneaux des variables (sans avoir rien changé) et toutes (9 sur les 12) mes VG (non prédéfinies) passes à  NaN => c'est un bug ?

Posté(e)

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
Posté(e)

mais il ne faut pas oublier de la redémarrer après un restart de la box (si toutes les variables sont ok après le restart).

Le seul qui ne devra jamais se poser la question est Lazer  ;)

  • Upvote 1
×
×
  • Créer...