pepite Posté(e) le 22 avril 2015 Signaler Posté(e) le 22 avril 2015 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: local variableGlobale = "Icones" local icones = json.decode(fibaro:getGlobalValue(variableGlobale))
Did Posté(e) le 22 avril 2015 Signaler Posté(e) le 22 avril 2015 Merci Steven, je teste ce soir, pas trop le temps ce midi.
Did Posté(e) le 24 avril 2015 Signaler Posté(e) le 24 avril 2015 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.
Steven Posté(e) le 24 avril 2015 Signaler Posté(e) le 24 avril 2015 @Did Tu préfères que entre 0 et 19 ce soit l'icone 1030 puis entre 20 et 29 le 1029, ... ?
Did Posté(e) le 24 avril 2015 Signaler Posté(e) le 24 avril 2015 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 = 0Mais comment les rédiger dans la mainloop? local icone = { [99] = 1027, [50] = 1134, [40] = 1135, [0] = 1030, [20] = 1029, [30] = 1028 }
Steven Posté(e) le 24 avril 2015 Signaler Posté(e) le 24 avril 2015 @Did Dans ton tableau, il te manque donc le 10 ?
Steven Posté(e) le 24 avril 2015 Signaler Posté(e) le 24 avril 2015 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") 1
Did Posté(e) le 24 avril 2015 Signaler Posté(e) le 24 avril 2015 @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).
Did Posté(e) le 25 avril 2015 Signaler Posté(e) le 25 avril 2015 Bah j'ai bien peur que ça fonctionne. Merci Steven.
mprinfo Posté(e) le 26 avril 2015 Signaler Posté(e) le 26 avril 2015 C'est bizarre depuis un certain temps les codes de steven bug Serait il de nouveau opérationnel ? MDR Envoyé avec mon SmartPhone
Steven Posté(e) le 26 avril 2015 Signaler Posté(e) le 26 avril 2015 Non, non, c'est juste un moment de faiblesse que j'ai eu avec Did
Felig Posté(e) le 5 mai 2017 Signaler Posté(e) le 5 mai 2017 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
Messages recommandés