Aller au contenu
ebouilleur

boucle for et tonumber

Recommended Posts

Bonsoir, 

 

J'essaye de faire un VD qui me permet d'éteindre toute mes wallplug.

Bizarre j'arrive a tout allumer, mais éteindre ça ne veut pas.

Une idée :

local ID_wallplug = {75,75}; --ID wallplug
local conso = 10; -- consommation en dessous de laquelle on coupe les prises

fibaro:setGlobal("SysPrise_auto","OFF");
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value", "Toujours OFF");
fibaro:debug("début scene toujours off")
  for i=1, #ID_wallplug do
    id_w = tonumber(ID_wallplug[i]);
    fibaro:debug("debut")
   fibaro:debug(tonumber(fibaro:getValue(id_w, "value")))
   fibaro:debug(id_w)
    fibaro:debug("fin")
    if tonumber(fibaro:getValue(id_w, "value")) then
      fibaro:debug(id_w.." allumé")
      if tonumber(fibaro:getValue(id_w, "power")) < conso then
        fibaro:debug("veille => turnOff "..id_w)
        fibaro:call(id_w, 'turnOff');
      end
    end
  end

 

En fait il ne passe jamais dans le if : if tonumber(fibaro:getValue(id_w, "value")) then

et le debug de : fibaro:debug(tonumber(fibaro:getValue(id_w, "value"))) m'affiche rien

 

Et autre question, j'ai du mal a comprendre cet histoire de tonumber et j'ai pas réussi a trouver une explication clair...

Merci

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

Il ne manquerait pas un test dans votre if ?

tonumber(fibaro:getValue(id_w, "value"))

cela donne un nombre, mais pas un test... :D

 

Voilà ... :P

Partager ce message


Lien à poster
Partager sur d’autres sites

En effet je l'ai vu entre temps, que j'ai corrigé en 

if tonumber(fibaro:getValue(id_w, "value")) == 1 then

Mais en fait ca ne va pas dans le if, car 

fibaro:debug(fibaro:getValue(id_w, "value"))

Ne m'affiche rien... et je ne comprend pas pourquoi

je continue de chercher

Partager ce message


Lien à poster
Partager sur d’autres sites

étrange j'ai copié/collé ton code et chez moi ça marche très bien (juste supprimé la ligne avec la VG) !

 

tu n'aurais pas la fonction  "Always ON mode" de ce wallplug qui serait activée par hasard ?

 

pour le tonumber :

 

c'est une histoire de type de données 

 

local conso = 10  ---> dans ce cas, conso prend la valeur 10, avec 10 considéré comme en nombre (pas besoin de tonumber quand tu utilise la variable conso)

local conso = "10"   ---> dans ce cas, conso prend la valeur 10, avec 10 considéré comme chaîne de caractères (besoin de tonumber si tu veux faire des calculs ou comparaisons)

fibaro:getValue(id_w, "power")

cela te retourne une valeur considérée comme chaîne de caractère, exemple "10,5"

 

et bien sur tu ne peux pas comparer une chaîne de caractère avec un nombre !

du coup c'est pour ça qu'on utilise tonumber

tonumber(fibaro:getValue(id_w, "power"))

autre exemple, celui-là est inutile :

id_w = tonumber(ID_wallplug[i])

car ton tableau ID_Wallplug{} contient des nombre (75,75) et non des chaînes ("75","75")

 

celui-là aussi inutile :  (c'est de l'affichage, donc obligatoirement du texte)

fibaro:debug(tonumber(fibaro:getValue(id_w, "value")))

ceux-là obligatoire car tu fais une comparaison à un nombre :

if tonumber(fibaro:getValue(id_w, "value")) == 1 then
if tonumber(fibaro:getValue(id_w, "power")) < conso then

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 12 heures, jjacques68 a dit :

étrange j'ai copié/collé ton code et chez moi ça marche très bien (juste supprimé la ligne avec la VG) !

 

La ligne avec VG ?

En tout cas merci pour ton explication, j'avais supposé ça, mais bon, au moins je suis sur et tu as super bien expliqué clairement :) merci !

 

Pour revenir au code, est ce qu'il ne marche que dans une boucle principale? ou dans le code d'un bouton c'est sensé marché? car c'est ce que j'au fait.

Si jamais tu veux regarder ce que j'au fait, j'ai mis le module en PJ

Ici ce qui ne marche pas étant le bouton "power OFF" qui est donc sensé couper les prises. Le power ON lui fonctionne.

Merci 

 

Prise_auto.vfib

Partager ce message


Lien à poster
Partager sur d’autres sites

Nan nan ça doit macher dans un bouton.

 

Faudra que je regarde le code du main, mais n'y aurait-il pas un conflit avec le main justement ?

 

essaye de désactiver le code du main et tu verras...

Modifié par jjacques68

Partager ce message


Lien à poster
Partager sur d’autres sites

Non je ne vois pas ce qui créerais un conflit (tester et confirmé).

Et puis ça bug lorsque je passe par l'outil pour déboguer justement

 

Par curiosité, j'ai testé avec un autre wallplug, qui s'est bien éteind...

et dont les debug m'affiches bien des valeurs.

 

Edit :

Bon, j'ai trouvé.. et c'est un peu la honte.

Ce nouveau wallplug était nouveau et je n'y ai pas touché depuis son insertion, et il portait le nom 75.0

j'ai supposé, à tord, que son id était 75, mais non, son id c'est 76...  et du coup ça marche mieux

 

Bon après il y a surement plus simple que mon code rajouter dans les bouton ON et OFF, mais bon ^^

 

Enfin, merci Jacques j'ai quand même appris des choses et au moins j'ai vu ma bêtise ^^

bon lundi

Modifié par ebouilleur
  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

×