Aller au contenu

Changement Icônes D’Après L'état


Fredric

Messages recommandés

j'ai un petit soucis surement tout bête mais je ne trouve pas mon bonheur.

 

j'arrive sans problème à  faire changer les icônes d'un vd selon sont état mais je n'arrive pas à  donner un delta pour le changement de l'eco-device.

 

par exemple, changer l'icone si la valeur de la variable "CONSO" est entre 2000 et 3000.

if tonumber(fibaro:getGlobalValue("CONSO")) <= tonumber("1000") then
  fibaro:call(440, "setProperty", "currentIcon", 1089)

merci de votre aide  ;)

Lien vers le commentaire
Partager sur d’autres sites

bon, je progresse...

local Watts = fibaro:getGlobalValue("CONSO")
Watts = Watts/1000
fibaro:debug(Watts)

if Watts <= 1 then fibaro:call(228, "setProperty","currentIcon", 1118) 
elseif Watts > 1  then fibaro:call(228, "setProperty", "currentIcon", 1119)
elseif Watts >= 2  then fibaro:call(228, "setProperty", "currentIcon", 1119)
elseif Watts >= 3  then fibaro:call(228, "setProperty", "currentIcon", 1120)
elseif Watts >= 4  then fibaro:call(228, "setProperty", "currentIcon", 1120)
elseif Watts >= 5  then fibaro:call(228, "setProperty", "currentIcon", 1121)
elseif Watts >= 6  then fibaro:call(228, "setProperty", "currentIcon", 1122)
elseif Watts >= 7  then fibaro:call(228, "setProperty", "currentIcon", 1122)
elseif Watts >= 8  then fibaro:call(228, "setProperty", "currentIcon", 1122)
elseif Watts >= 9  then fibaro:call(228, "setProperty", "currentIcon", 1122)
elseif Watts >= 10 then fibaro:call(228, "setProperty", "currentIcon", 1122)
elseif Watts >= 11 then fibaro:call(228, "setProperty", "currentIcon", 1123)
end

fibaro:sleep(6*1000) 

le problème, c'est que cela s’arrête à  1, je vois pourquoi, mais ne trouve pas la solution  :(

 

j'ai fait ça:

local Watts = fibaro:getGlobalValue("CONSO")
Watts = Watts/1000
fibaro:debug(Watts)

if Watts <= 1 then fibaro:call(228, "setProperty","currentIcon", 1118) 
elseif Watts > 1  then fibaro:call(228, "setProperty", "currentIcon", 1119)
  end
if Watts >= 2  then fibaro:call(228, "setProperty", "currentIcon", 1119)
  end
if Watts >= 3  then fibaro:call(228, "setProperty", "currentIcon", 1120)
  end
if Watts >= 4  then fibaro:call(228, "setProperty", "currentIcon", 1120)
  end
if Watts >= 5  then fibaro:call(228, "setProperty", "currentIcon", 1121)
  end
if Watts >= 6  then fibaro:call(228, "setProperty", "currentIcon", 1122)
end
if Watts >= 7  then fibaro:call(228, "setProperty", "currentIcon", 1122)
  end
if Watts >= 8  then fibaro:call(228, "setProperty", "currentIcon", 1122)
end
if Watts >= 9  then fibaro:call(228, "setProperty", "currentIcon", 1122)
  end
if Watts >= 10 then fibaro:call(228, "setProperty", "currentIcon", 1122)
  end
if Watts >= 11 then fibaro:call(228, "setProperty", "currentIcon", 1123)
end

fibaro:sleep(6*1000)

ça fonctionne mais je ne suis pas sur que ce soit très optimisé.

Modifié par Fredric
Lien vers le commentaire
Partager sur d’autres sites

Frédéric,

Je ferais ton premier code (avec les elseif), mais en inversant les conditions : en partant du plus grand au plus petit.

Logique, si tu as une conso de 8 w, et que ta première condition est > 2 W (elle est donc remplie, et ne va pas plus loin ...)

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

A tester ;)

local Watts = fibaro:getGlobalValue("CONSO")
local icone = {1118, 1119, 1120, 1120, 1121, 1122, 1122, 1122, 1122, 1122, 1123}

Watts = math.floor((Watts - 1) /1000)
if Watts == 0 then Watts = 1
elseif Watts > 11 then Watts = 11
end
fibaro:debug(Watts)
fibaro:debug(icone[Watts])

fibaro:call(228, "setProperty", "currentIcon", icone[Watts])

fibaro:sleep(6*1000)
  • Upvote 3
Lien vers le commentaire
Partager sur d’autres sites

Bravo trainkill666, c'est ce vers quoi je voulais emmener Fredric, mais je n'avais pas pris le temps d'écrire les quelques lignes de code.

Le tableau est la meilleure méthode àemployer plutôt que tous ces "if" disgracieux.

Lien vers le commentaire
Partager sur d’autres sites

C'est vrai que c'est plus propre, depuis que @Shad m'a fait mon premier code en tableau il y a plus d'un ans, je l'utilise souvent, mais je n'est pas pensé àl'utiliser dans ce cas.

Par contre,@trainkill666, la fonction "math.floor", je croyais connaître sa fonction, mais là, je ne comprends pas bien son interét par rapport a

Watts == Watts/1000

Peut-tu m'expliquer?

Lien vers le commentaire
Partager sur d’autres sites

JoJo a répondu à  ta question :)

 

Pour être plus précis, j'ai d'abord simplifié au maximum tes encadrements de valeurs pour arriver à  ça :

 

Si <= 1 alors 1118

Si < 3 alors 1119

Si < 5 alors 1120

Si < 6 alors 1121

Si < 11 alors 1122

sinon 1123

 

Pour que la valeur "Watts" tombe juste avec le tableau il faut arrondir avec math.floor ou math.ceil.

 

J'ai choisi math.floor pour l'arrondi inférieur après quelques tests ET (Watts - 1) car < et pas =< .

 

Pour le <= 1 , math.floor renvoie 0, or la valeur mini de tableau est 1 d'où

  • if Watts == 0 then Watts = 1

et pour le = de <= 1 math.floor, le problème est également contourné par ce if.

 

J'ai ensuite créé le tableau pour les encadrements (toujours en testant, car ce n'est pas évident).

 

Il ne manque plus que 

  • elseif Watts > 11 then Watts = 11

Pour l'encadrement maximum du tableau.

 

J'espère avoir été simple dans la méthodologie employée. Je suis gaucher jusqu'au bout et mon raisonnement et souvent curieux, tout tourne à  l'envers. :P

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

Merci @trainkill666 ;) , j'aime bien comprendre les cheminements et aller au plus simple.

je vais effectivement rajouter  la fonction fibaro:getSelfId().

mon code fonctionne parfaitement mais je vais quand même utiliser le tiens qui est bien plus beau.  ;) 

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...
×
×
  • Créer...