Aller au contenu
jojo

Test Icone Utilisée Dans Un Vd

Recommended Posts

oui tout a fait d'accord mais la, ce sont bien 2 icones ;-), et icones n'est donc pas Icones ;-)

J'ai bien suivi @berale24 :60: :60: :60:

local variableGlobale = "Icones"
 local icones = json.decode(fibaro:getGlobalValue(variableGlobale))

Partager ce message


Lien à poster
Partager sur d’autres sites

 Merci Steven, je teste ce soir, pas trop le temps ce midi.

Partager ce message


Lien à poster
Partager sur d’autres sites

 Merci Steven, ça refonctionne mais il faut être pile sur la valeur sinon, c'est le cube bleu.

 

Edit: Mais c'était peu être déjà  le cas avant (en appuyant directement sur le plus petit trait du module Qubino pour faire un quart), la valeur retourne 25 alors que l'icône réagit à  20.

Partager ce message


Lien à poster
Partager sur d’autres sites

@Did

Tu préfères que entre 0 et 19 ce soit l'icone 1030 puis entre 20 et 29 le 1029, ... ?

Partager ce message


Lien à poster
Partager sur d’autres sites

 Oui Steven, c'était l'idée.

Les valeurs du Qubino sont réparties comme ceci:

 

-- Confort = 51-99
 -- Confort-1°C = 41-50
 -- Confort-2°C = 31-40
 -- Eco = 21-30
 -- Hors Gel = 1-20
 -- Arrêt = 0
Mais comment  les rédiger dans la mainloop?

local icone = {
[99] = 1027,
[50] = 1134,
[40] = 1135,
[0] = 1030,
[20] = 1029,
[30] = 1028
}

Partager ce message


Lien à poster
Partager sur d’autres sites

@Did

Dans ton tableau, il te manque donc le 10 ? 

Partager ce message


Lien à poster
Partager sur d’autres sites

Sinon, voici le code. Si tu dois ajouter le 10, met le simplement dans le tableau des icones.

 

Donc

si tu as 61, cela te donnera 1027

si tu as 50, cela te donnera 1134

...

Il manque juste le 100 qui ne donnera aucune valeur et cela prendra donc en compte comme si c'est un 0.

local Qubino_ID = 302
-- Tables des icones
local icone = {
[99] = 1027,
[50] = 1134,
[40] = 1135,
[0] = 1030,
[20] = 1029,
[30] = 1028
}
 
local value = tonumber(fibaro:getValue(Qubino_ID, "value"))
local ico = icone[0]
local min = 999
for k, v in pairs(icone) do  
  if (value <= k and k < min) then 
    ico = v
    min = k
  end
end
fibaro:debug(ico)
fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", tostring(ico))

local temp = fibaro:getValue(279, "value")
fibaro:log(temp .." °C" )
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value",temp.. " °C")
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

 @Steven,

En fait, je viens de tester, c'est l'ordre "Arrêt" égal à  0 et Hors Gel de 1 à  20 (j'ai modifié au dessus).

Partager ce message


Lien à poster
Partager sur d’autres sites

OK, as-tu essayé le script ?

Partager ce message


Lien à poster
Partager sur d’autres sites

 Bah j'ai bien peur que ça fonctionne. :60:

Merci Steven.

Partager ce message


Lien à poster
Partager sur d’autres sites

Arg zut alors 😉

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est bizarre depuis un certain temps les codes de steven bug

Serait il de nouveau opérationnel ? MDR

Envoyé avec mon SmartPhone

Partager ce message


Lien à poster
Partager sur d’autres sites

Non, non, c'est juste un moment de faiblesse que j'ai eu avec Did  ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir,

 

Désolé de ressortir un sujet vieux de 2 ans, mais le code proposé par @Steven est très utile je trouve, pour restaurer facilement les icones des VD, sans avoir à les noter.

Par contre j'ai eu un problème en voulant l'utiliser dans une scene. Après beaucoup de tests, je me suis aperçu que c'était lié à un bug de la fonction json.encode: quand on récupère un tableau avec cette fonction, et qu'on essaie d'actualiser une entrée existante du tableau, ça la duplique parfois au lieu de l'écraser. Donc j'avais plusieurs icones pour le même module, et la scene ne restaurait pas toujours la bonne icone.

 

J'ai trouvé une solution de contournement: je transfère les valeurs du json.encode (tableau t1) une par une dans un nouveau tableau (tableau t2), et le nouveau tableau lui se comporte normalement, sans duplication de valeurs. Bref, voici le code qui fonctionne chez moi:

 

--[[
%% autostart
%% properties
145 currentIcon
195 currentIcon
105 currentIcon
138 currentIcon
139 currentIcon
--]]

-- code inspiré de Steven (avril 2015) mais beaucoup moins beau, désolé!
local variableGlobale = "listicones"
local trigger = fibaro:getSourceTrigger()

if (trigger.type == "property") then
  local prop = trigger.propertyName
  local device = trigger.deviceID
  local val = fibaro:getValue(device, prop)
  local t2 = {}  -- tableau dans lequel seront transférées les valeurs du json.decode
  -- mémorisation de l'icone qui vient d'être changée
  if tonumber(val)>999 then  -- test pour éviter de mémoriser l'icone bleue
    fibaro:debug(string.format("Module Virtuel %s (%d) propriété %s = %s", fibaro:getName(device), device, prop, val))
    local icones = fibaro:getGlobalValue(variableGlobale)
    -- vérificaion que la variable globale n'est pas vide ni ne contient une valeur incorrecte
    if icones ~= nil then 
      if string.sub(tostring(icones),1,1) ~= "{" then icones = "{}" end
    end
    -- si la variable globle n'est pas vide on transfère les entrées Vd,icones dans le nouveau tableau t2
    if icones ~= nil then  -- pour ce test "{}" semble équivalent à nil
      fibaro:debug("Liste précédente: " .. icones)
      local t1 = json.decode(icones)
      for k,v in pairs(t1) do
        if tonumber(k) ~= tonumber(device) then t2[k] = v end  
      end
    end  
 -- Ajout ou modification de l'icone du device trigger
    t2[device] = val
-- réencodage de la variable globale
    icones = json.encode(t2)
    fibaro:debug("Liste actualisée:   " .. icones)
    fibaro:setGlobal(variableGlobale, icones)
    fibaro:debug(" ")
  end

elseif (trigger.type == "autostart" or trigger.type == "other") then
-- restauration des icones précédemment enregistrées
  if trigger.type == "autostart" then fibaro:sleep(10*1000) end
  fibaro:debug("==== Mise à jour des icones sur les VD ====")
  local icones = json.decode(fibaro:getGlobalValue(variableGlobale))
  for k,v in pairs(icones) do
    fibaro:debug(string.format("Module : %s - currentIcon %s", k, v))
    fibaro:call(tonumber(k), "setProperty", "currentIcon", v)
  end  
end

 

Partager ce message


Lien à poster
Partager sur d’autres sites

×