Aller au contenu

Messages recommandés

Posté(e)

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

 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.

Posté(e)

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

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

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

  • 2 ans après...
Posté(e)

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

 

×
×
  • Créer...