Aller au contenu

Messages recommandés

Posté(e)

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  ;)

Posté(e) (modifié)

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

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

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

belle idée trainkill666,

je remplacerais le n° du VD (228) par la fonction fibaro:getSelfId(), ce qui permet de rendre le VD plus portable encore

Posté(e)

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.

Posté(e)

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?

Posté(e)

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

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.  ;) 

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