Aller au contenu
Franco268

Code exécuté aléatoirement

Recommended Posts

Bonjour,

 

J'ai l'impression que mon code ne s'exécute pas de manière correct. Pouvez vous me donner votre avis?

 

Ce code est dans une boucle de VD est et sensé "appuyer" sur un bouton toutes les 10min. Cependant, dans les faits (mode debbug), il le fait plus souvent.

local FrequenceExecutionBoucleFraicheurEnMin = 10
if type(OldTempsSysteme) == "nil" -- Au premier lancement du VD la variable est vide, alors on l'initialise avec une valeur qui lancera tout de suite la boucle
then
  OldTempsSysteme = os.time() - (FrequenceExecutionBoucleFraicheurEnMin + 1) * 60
end 

if (fibaro:getGlobalValue("FraichVolet") == "Oui" or fibaro:getGlobalValue("FraichVelux") == "Oui") and ((os.time() - OldTempsSysteme) >= (FrequenceExecutionBoucleFraicheurEnMin * 60))
then
	OldTempsSysteme = os.time() 
	fibaro:debug("Lancement de la boucle");
	fibaro:call(fibaro:getSelfId(), "pressButton", "26") -- On appui sur le bouton 26
end

 

 

image.png

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est quoi le délir????

 

J'ai changé ceci:

fibaro:debug("Lancement de la boucle");

par cela:

fibaro:debug("Lancement boucle");

et j'obtien ça:

 

C'est quoi ces fantomes??

image.png

Partager ce message


Lien à poster
Partager sur d’autres sites

Question toute bête : est ce que tu as limité à 1 scène en parallèle ? Peut être que tu as plusieurs instances en même temps...

Envoyé de mon SM-A520F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est la boucle principale d'un VD pas d'une scene.

J'ai essayé un redémarrage et un export import du VD, mais le résultat est le même.

Je vais essayé de recréer le VD depuis le début pour voir....

Partager ce message


Lien à poster
Partager sur d’autres sites

Je me rends compte que dès que je modifie un VD, il y a toujours sa version - 1 qui toune en parallèle. Chez vous aussi?

 

Voir même 4 fois la version -1. A moins que ce ne soit les versions -1, -2, -3, -4 (Je ne sais pas, le fibaro:debug avait les mêmes intitulés).

 

Vraiment bizzare!!! Est ce normal?

 

image.png.3a566fadb5275a3f9c527aed9a9ae4ed.png

Modifié par Franco268
Complement

Partager ce message


Lien à poster
Partager sur d’autres sites

Finalement, j'ai trouvé ce qui supprime ce bug, sans pour autant vraiment comprendre le pourquoi.

J'ai remplacé la ligne suivante:

OldTempsSysteme = os.time() - (FrequenceExecutionBoucleFraicheurEnMin + 1) * 60

par:

OldTempsSysteme = os.time()

Ce qui, pour le coup, ne lance pas immédiatement l'appui sur le bouton au démarrage de la box.

Y a t'il un problème au démarrage des box, si on sollicite des boutons trop vite??? Je ne sais pas. Mais cela semble avoir réglé mon problème

Partager ce message


Lien à poster
Partager sur d’autres sites

Etrange ce problème.....

 

J'ai bien quelques VD qui appuient sur des boutons au démarrage, et il ne me semble pas avoir jamais rencontré ce problème.

 

En tout cas tant mieux si tu as une solution.

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 10/08/2018 à 09:20, Franco268 a dit :

(fibaro:getGlobalValue("FraichVolet") == "Oui" or fibaro:getGlobalValue("FraichVelux") == "Oui") and ((os.time() - OldTempsSystem

vérifie bien tes parenthèses, car les and s'exécutent avant les or

Partager ce message


Lien à poster
Partager sur d’autres sites

T'es sûr ?

Il me semblait qu'il ne fait pas la différence, or et and ont le même niveau de priorité, donc ils sont interprétés dans l'ordre de gauche à droite.

 

Mais dans l'absolu tu as raison, dans le doute il veut mieux utiliser des parenthèses.

Partager ce message


Lien à poster
Partager sur d’autres sites

Normalement oui, c'est ça la règle, mais peut être pas en lua ou en lua Fibaro :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok je ne connaissais pas cette règle.

Après, en LUA, faudrait faire le test.....

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a une heure, jojo a dit :

vérifie bien tes parenthèses, car les and s'exécutent avant les or 

Je ne sais jamais non plus quelle est la priorité, c'est pour ça que je mets beaucoup de parenthèse.

Mais imaginons que je n'ai pas mis les parenthèses au bon endroit.

Je ne comprends pas pourquoi, on voit également "Lancement de la boucle" alors qu'il ne figure même plus dans le code.

 

image.png.9c65ceb517730dec6dc0b378f5b6e904.png

 

Je voulais rajouter que vous êtes vraiment tous au top, pour prendre autant de temps à faire vivre ce forum et à repondre presque à tous les postes. Un grand merci

Partager ce message


Lien à poster
Partager sur d’autres sites

ou bien j'ai mal lu, mais dans ce if je ne vois pas de ( pour regrouper les conditions :

if (fibaro:getGlobalValue("FraichVolet") == "Oui" or fibaro:getGlobalValue("FraichVelux") == "Oui") and ((os.time() - OldTempsSysteme) >= (FrequenceExecutionBoucleFraicheurEnMin * 60))

 

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 9 minutes, Franco268 a dit :

Je ne comprends pas pourquoi, on voit également "Lancement de la boucle" alors qu'il ne figure même plus dans le code.

je ne comprends pas non plus.

Il y a 20 ans, j'avais un collègue qui disait tout le temps : "il n'y a pas de mystère, il n'y a que des conneries."

 

Alors remplace le texte de ton débug par qqch de super unique : "tartampion".

 

Et reposte ton dernier code avec son débug

Partager ce message


Lien à poster
Partager sur d’autres sites

pffffff.... J'ai passé toute une grosse soirée et une matinée à me bagarrer contre ce bug et maintenant, plus moyen de le répéter...... j'en perd mon lua......

 

Mais bon le screen shot ne ment pas, il y a eu qqchose, mais quoi?

Partager ce message


Lien à poster
Partager sur d’autres sites

×