Aller au contenu

Test Icone Utilisée Dans Un Vd


jojo

Messages recommandés

  • 4 semaines après...

bonjour à  tous,

 

Mer revoila en mode boulet ;-)

 

Je pensais avoir fait ce qu'il fallait pour recup mes icônes de VD après reboot, ben en faisant la mise à  jour en 4.042, j'ai du me tromper quelque part.

 

Je fais appel à  vous, qu'avez-vous utiliser alors ? sachant que je prefererais éviter le mainloop des VD ;-)

 

une scene qui fait appel a chaque bouton de vos VD pour remettre a jour l'icone ? avec ca par exemple : mais lourd a chque nouveau VD faut ajuster la scene

-- On reprend l'id de l'icone du module virtuel en cours
local icon_id = fibaro:get(fibaro:getSelfId(), "deviceIcon");

-- Puis on en fait ce qu'on veux 
fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", icon_id);
  •  
Lien vers le commentaire
Partager sur d’autres sites

quel est ton secret ?

 

Lol je n'ai pas ete très clair hihi

 

Après la mise a jour en 4.042, au redémarrage, j'ai quelques VD qui n'ont plus d'icône perso mais les 'beaux carrés bleus" de FIbaro.

 

Je dois bien me tromper quelque part mais où ? 

 

J'ai mis pourtant des icones derriere les boutons mais après redémarrage, icone bleu lol

Lien vers le commentaire
Partager sur d’autres sites

A ben oui, les icônes derrière les boutons ne sont affiché QUE si tu cliques sur le bouton, ce qui est normal et voulu.

 

Tu dois mettre une icône sur le module virtuel lui-même pour qu'il s'affiche après un reboot.

Lien vers le commentaire
Partager sur d’autres sites

bon ben voila, je savais bien que le boulet c'etait moi hihi

 

Ou alors comment remettre l'icone avant le redemarrage ?

Recup le "currentIcon", le garder quelquepart et le remettre avec un call ? pas pratique lol

Lien vers le commentaire
Partager sur d’autres sites

En effet, pas pratique, mais pas vraiment le choix. Chaque fois que tu cliques sur un bouton d'un VD, il faudrait que tu stockes dans un Variable Global le numéro du VD et du currentIcon ... lourd tout cela mais réalisable.

-- On récupère la liste des VD/Icones stocké dans la variable globale "Icones"
-- et on le transforme en tableau exploitable
local icones = json.decode(fibaro:getGlobalValue("Icones"))
-- On ajoute/modifie la valeur du couple VD/Icone
icones[fibaro:getSelfId()] = fibaro:getValue(id, "currentIcon")
-- On remet cela en json dans la variable globale "Icones"
fibaro:setGlobal("Icones", json.encode(icones))

.

.

Puis la scène pour les remettre

--[[
%% autostart
--]]

-- On récupère la liste des VD/Icones stocké dans la variable globale "Icones"
-- et on le transforme en tableau exploitable
local icones = json.decode(fibaro:getGlobalValue("Icones"))
-- On parcours toutes les entrées et on met l'icone àjour
for k,v in ipaires(icones) do
   fibaro:call(k, "setProperty", "currentIcon", v)
end

Bien évidement, je n'ai rien testé et cela n'est qu'une suggestion.

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

pepite,

Dans le tuto que j'ai écris àl'époque

http://www.domotique-fibaro.fr/index.php/topic/4149-afficher-les-valeurs-dune-variable-dans-un-vd-sour-hc2/

j'explique comment au redémarrage de la box, il clique sur le bon bouton de tous les VD qui gèrent mes variables.

Lien vers le commentaire
Partager sur d’autres sites

Voici une proposition : 

 

Il faut juste mettre en entête, les ID des Modules virtuels (ex. 194 currentIcon).

 

Donc chaque fois que le currentIcon du module virtuel va changer, cette scène va stocker l'information dans une variable globale. Au démarrage de la box, elle va chercher la variable globale et va écrire les valeurs stockées dans les modules virtuels.

 

En bref, elle écoute les changements de currentIcon et les restaure au redémarrage.

 

Il faut créé la variable globale.

--[[
%% autostart
%% properties
104 currentIcon
--]]

local variableGlobale = "Icones"

local trigger = fibaro:getSourceTrigger()

if (trigger.type == "autostart" or trigger.type == "other") then
  
  fibaro:debug("Mise à  jour des icones sur les VD")
  
  local icones = json.decode(fibaro:getGlobalValue(variableGlobale))
  -- On parcours toutes les entrées et on met l'icone à  jour
  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  
  
elseif (trigger.type == "property") then
  
  local prop = trigger.propertyName
  local device = trigger.deviceID
  local val = fibaro:getValue(device, prop)
  
  fibaro:debug(string.format("Module Virtuel %s (%d) propriété %s = %s", fibaro:getName(device), device, prop, val))
  
  local icones = json.decode(fibaro:getGlobalValue(variableGlobale))
  if (not icones) then
    icones = {}
  end
  -- On ajoute/modifie la valeur du couple Virtual Device/Icone
  icones[device] = val
  -- On remet cela en json dans la variable globale "Icones"
  fibaro:setGlobal(variableGlobale, json.encode(icones))

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

Yes, Steven, voila j'ai teste,petit bug dans le debug :

[DEBUG] 21:34:01: Mise àjour des icones sur les Virtual Device
[ERROR] 21:34:01: line 19: bad argument #1 to 'pairs' (table expected, got number)
[DEBUG] 21:34:07: Mise àjour des icones sur les Virtual Device
Lien vers le commentaire
Partager sur d’autres sites

 Personne n'a de réponse ou d'idée pour mon problème: l'icône du module virtuel ne change plus quand je change l'état du module "fil pilote" directement. Voici le code mis en place dans la mainloop (qui fonctionnait au début).

local Qubino_ID = 302
-- Tables des icones
local icone = {
[99] = 1027,
[50] = 1134,
[40] = 1135,
[0] = 1030,
[20] = 1029,
[30] = 1028
}
 
fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon",
icone[tonumber(fibaro:getValue(Qubino_ID, "value"))])
 
local temp = fibaro:getValue(279, "value")
fibaro:log(temp .." °C" )
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value",temp.. " °C")
 

Les trois dernières lignes m'affiche la température de la zone dans une étiquette et en bas de la case du module dans l'interface HC2. Les Id n'ont pas changé mais ça ne fonctionne plus.

Lien vers le commentaire
Partager sur d’autres sites

@pepite

Tu dois avoir quelque chose de bizzare dans ta variable globale qui fait que le json.decode ne te renvoi pas un tableau mais un chiffre. Je te laisse vérifier.

 

@Did

Si tu es sà»re des valeurs et des id d'icones, tu peux essayer ceci :

fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon",
tostring(icone[tonumber(fibaro:getValue(Qubino_ID, "value"))]))

au lieu d'envoyer un numéro d'icone, on lui envoi le numéro sous forme de chaine .. me semble que j'avais eu ce soucis.

 

Sinon, ajoute cette ligne a la fin pour controler les valeurs :

fibaro:debug("Quibino value = " .. fibaro:getValue(Qubino_ID, "value"))
Lien vers le commentaire
Partager sur d’autres sites

@steven,

 

Effectivement ca doit etre cela vu le debug mais je ne vois pas d'ou cela vient

DEBUG] 10:50:28: Module Virtuel Mode_Maison (24) propriété currentIcon = 1007
[ERROR] 10:50:28: line 37: attempt to index local 'icones' (a number value)

ma ligne 37 :

icones[device] = val

Alors la, vous n'allez pas me croire, ca fonctionne au TOP Steven, bon j'ai pas encore redemarré mais aucun doute..

 

Ce qui n'allait pas : le nom de ma Variable GLobale etait : "Icones", me suis as embete, j'ai repris ce que tu avais mis Steven

Je l'ai modifiée en "icones" (sans la majuscule) et la tout est OK :-(

 

Une explication pour ma culture svp ? la majuscule "I" est-elle interpretee autrement ?

 

MErci encore Steven

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...