Aller au contenu
jojo

Test Icone Utilisée Dans Un Vd

Recommended Posts

Bonsoir,

Pour afficher une icône en fonction de la valeur d'une variable globale, dans un virtual device, j'utilise le code suivant dans la main loop :

-- nom de la variable à  vérifier
local variable = "Auth_TV"
-- ID des icônes
local icone1 = 1097
local icone2 = 1096

if fibaro:getGlobal(variable) == "Interdit"
  then 
    fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", icone1)
  else
    fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", icone2)
end

J'ai le pressentiment que ce n'est pas idéal.

J'ai en effet des boutons pour changer la valeur de la variable, et je pourrais sans problème lui assigner à  ce moment la bonne icône.

Mais pourquoi l'ai-je mis dans la main loop ? Comme ça après un restart de la box, la bonne icône s'affiche.

Je crois que je pourrais optimiser cela en faisant un test sur le type d'icône qui est chargée dans le VD.

En effet, après un reboot, c'est l'icône par défaut (le cube bleu) qui est chargé (et lui n'a pas de numéro) ou l'icône personnalisée que j'ai définie comme icône par défaut (et qui elle a un numéro).

 

Est-ce que quelqu'un pourrait me donner la ligne de code qui me permettrait de savoir quelle icône est utilisée pour le VD ?

 

Merci beaucoup

Partager ce message


Lien à poster
Partager sur d’autres sites

Je m'auto-répond partiellement.

J'ai testé ce code pour trouver l'icone qui est affichée dans un VD (v3.x) 

local HC2 = Net.FHttp("127.0.0.1",11111)
local GET = '/api/virtualDevices?id='
-- read parameters
response, status, errorcode = HC2:GET(GET ..DeviceID)
local jsonTable = json.decode(response)
currentIcon = jsonTable.properties.currentIcon

Mais je crains que ce soit encore plus gourmand en ressources de la machine que de mettre à  jour toutes les secondes l'icône, même si c'est pour rien.

SAUF s'il y a une fonction du style fibaro:getName pour obtenir le n° du currentIcone

Partager ce message


Lien à poster
Partager sur d’autres sites

Icônes et variables globales étant liées, j'ai fait une scène qui en fonction des variables met l'icône qui va bien.

Partager ce message


Lien à poster
Partager sur d’autres sites

Voici le code sans appel direct àl'API :

-- 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);
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

@Berale24 : merci, mais moi, ce que je veux, c'est qu'il me mette la bonne icône lorsque je redémarre la box. Et dans ces cas là , la valeur de la variable ne change pas => ce sera l'icône par défaut du VD qui sera affichée, et pas en fonction de la valeur de la variable.

 

@Steven : merci pour le bout de code, grâce à  ça j'ai compris qu'on pouvait ainsi récupérer facilement n'importe quelle propriété du json. Dans mon cas ce n'est pas la "deviceIcon" qui m'intéresse, mais la "currentIcon". J'ai la réponse parfaite à  ma question.

Partager ce message


Lien à poster
Partager sur d’autres sites

@jojo:ma méthode fonctionne parfaitement. J'obtiens bien l'icône qui correspond à  l'état de la variable et pas l'icône par defaut.

 

La méthode de steven ne me donne pas le bon résultat.

Partager ce message


Lien à poster
Partager sur d’autres sites

même après un redémarrage de la box ?

 

Dans la méthode de Steven il faut vérifier si currentIcon = 0 ou 1 (et pas deviceIcon). Si oui, cela veut dire que la box a redémarré et alors je lis la valeur de la variable et mets la bonne icone, sinon je ne fait rien (car c'est déjà  la bonne icone, qui a été mise par une scène, ou ...)

Partager ce message


Lien à poster
Partager sur d’autres sites

je teste ce soir

Partager ce message


Lien à poster
Partager sur d’autres sites

 J'ai une question sur les icônes de module virtuel, j'ai ajouté un Qubino "fil pilote" avec son module virtuel mais je voudrais que l'icône corresponde aux six états possibles. Mais j'ai aussi dans la mainloop ces lignes pour m'afficher une étiquette sur la température dans le module et en vert en bas du module dans l'interface.

local temp = fibaro:getValue(68, "value")
fibaro:log(fibaro:getValue(68, "value").." °C" )
fibaro:call(172, "setProperty", "ui.Label2.value",temp.. " °C")

J'utilise un code similaire (que Steven m'avais pondu) pour les trois icônes possibles de ma VMC mais je suis paumé pour l'adapter au Qubino.

local id_vmc_lent = 236
local id_vmc_rapide = 238
local id_module_virtuel = fibaro:getSelfId()
     
local lentAllumer = tonumber(fibaro:getValue(id_vmc_lent, "value")) == 1
local rapideAllumer = tonumber(fibaro:getValue(id_vmc_rapide, "value")) == 1
     
local icon = fibaro:getValue(id_module_virtuel, "currentIcon")
if (lentAllumer and rapideAllumer) then
-- icone rapide
icon = 1103
elseif (lentAllumer) then
-- icone lent
icon = 1102
else
-- icone éteint
icon = 1091
end

fibaro:call(235, "setProperty", "currentIcon", icon)

Partager ce message


Lien à poster
Partager sur d’autres sites

@Did,

Si j'ai compris ton besoin, je modifierais le code comme suit ( ! non testé, modifié dans Notepadd++  ;) )

J'ai mis des -- (commentaires) à  ce que j'aurais supprimé pour garder l'original et revenir facilement. => si c'est bon, nettoyage à  faire

local id_vmc_lent = 236
local id_vmc_rapide = 238
local id_module_virtuel = fibaro:getSelfId()
     
local lentAllumer = tonumber(fibaro:getValue(id_vmc_lent, "value")) -- == 1
local rapideAllumer = tonumber(fibaro:getValue(id_vmc_rapide, "value"))--  == 1
     
--local icon = fibaro:getValue(id_module_virtuel, "currentIcon")
if (lentAllumer and rapideAllumer) then
-- icone rapide
icon = 1103
elseif (lentAllumer) then
-- icone lent
icon = 1102
else
-- icone éteint
icon = 1091
end
 
fibaro:call(id_module_virtuel, "setProperty", "currentIcon", icon)

ton premier code fonctionne, mais je le modifierais un peu quand-même

local temp = fibaro:getValue(68, "value")
fibaro:log(temp .." °C" )
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value",temp.. " °C")

Partager ce message


Lien à poster
Partager sur d’autres sites

et je remplacerais même la ligne 10 du premier code par

if (rapideAllumer) then

car si rapideAllumer est à1, on ne s'intéresse pas àla valeur de lentAllumer

Partager ce message


Lien à poster
Partager sur d’autres sites

 Merci jojo de t'intéresser à  mon cas mais l'exemple est celui de la mainloop de ma VMC. Dans le cas du module fil pilote, je vais avoir:

 

Id module virtuel = 301

Id sonde Dallas = 68

Id module Qubino = 302

 

fibaro:call(302, "setValue", "99") pour Confort

fibaro:call(302, "setValue", "50") pour Confort-1

fibaro:call(302, "setValue", "40") pour Confort-2

fibaro:call(302, "setValue", "0") pour Arrêt

fibaro:call(302, "setValue", "20") pour Hors gel

fibaro:call(302, "setValue", "30") pour Eco

 

et enfin le renseignement de la température en vert (en bas du module) et dans un label dans le module virtuel.

Partager ce message


Lien à poster
Partager sur d’autres sites

deviceIcon n'existe pas en 3.x ?

 

 

En 4.x j'ai ceci comme début de propriété 

{"deviceIcon":271,"ip":"\"\"","port":0,"currentIcon":"271" ...

Partager ce message


Lien à poster
Partager sur d’autres sites

pour une fois que je peux (essayer de) t'aider, c'est avec grand plaisir  :60:

local Qubino_ID = 302
-- Tables des icones
local icone = {
     99 = 105, 
	 50 = 106,
	 40 = 107,
	 0 = 108,
	 20 = 109,
	 30 = 110
	 }
	 
fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", icone[tonumber(fibaro:getValue(Qubino_ID, "value"))])

Quelques explications :

1) tu crées une table LUA. Avant le = c'est l'index de l'entrée, à  droite sa valeur (tu remplaces avec les vrais n° d'icônes). Chaque entrée est séparée par une ,

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

  • fibaro:getSelfId() = il retourne automatiquement l'ID du VD en cours => il ne faut pas se casser la tête pour le retrouver
  • icone[tonumber(fibaro:getValue(Qubino_ID, "value"))] : retourne la valeur de la table qui correspond à  la valeur de ton Qubino.

N.B. c'est toujour du Notepad++, donc à  valider SVP 

Partager ce message


Lien à poster
Partager sur d’autres sites

deviceIcon n'existe pas en 3.x ?

oui, deviceIcon existe en 3.x, mais

  • deviceIcon est l'icone qui est définie par défaut dans le VD (quand tu fait change icone), et peut donc être différente de celle qui est effectivement affichée, qui elle est currentIcon
    id: 351,
    name: "Var_Chauffage",
    roomID: 15,
    type: "virtual_device",
    properties: {
    deviceIcon: 1,
    ip: "",
    port: 0,
    currentIcon: "1077",
    
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

@Jojo 

Ok merci

 

Attention avec cela :

local icone = {
     99 = 105, 
	 50 = 106,
	 40 = 107,
	 0 = 108,
	 20 = 109,
	 30 = 110
	 }

Car cela ne fonctionne pas il faut mettre [50]=106

local icone = {
     [99] = 105, 
	 [50] = 106,
	 [40] = 107,
	 [0] = 108,
	 [20] = 109,
	 [30] = 110
	 }

Info pour info :)

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

@Did,

Tu peux donc y aller tranquille, à  la correction prêt, c'est validé par le maître  :13:

local Qubino_ID = 302
-- Tables des icones
local icone = {
     [99] = 105, 
	 [50] = 106,
	 [40] = 107,
	 [0] = 108,
	 [20] = 109,
	 [30] = 110
	 }
	 
fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", tonumber(fibaro:getValue(Qubino_ID, "value")))

Partager ce message


Lien à poster
Partager sur d’autres sites

bijour messieurs,

 

Expliquez moi svp, je ne comprends pas pourquoi récuperer la valeur currentIcon pour refaire un call sur le currentIcon ?

 

C'est en cas de redémarrage pour reassigne ler icones qui ne reapparaissent pas ? car ca me le fait aussi quand la box redémarre ?

Partager ce message


Lien à poster
Partager sur d’autres sites

@jojo :

c'est pas ca plutot pour @Did, sinon je ne comprend pas le pourquoi de la table

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

Partager ce message


Lien à poster
Partager sur d’autres sites

J'étais en cours de test et l'icône ne bougeait pas quand j'ai vu que Steven avait encore résolu le problème et le résultat est que c'est tout bon.

Voici la mainloop complète, j'ai rajouté mes lignes pour la température et ça tourne bien, apparemment.

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

 Merci jojo et Steven.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

 

@jojo :

c'est pas ca plutot pour @Did, sinon je ne comprend pas le pourquoi de la table

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

oui, erreur de copy/coller

Partager ce message


Lien à poster
Partager sur d’autres sites

Expliquez moi svp, je ne comprends pas pourquoi récuperer la valeur currentIcon pour refaire un call sur le currentIcon ?

 

C'est en cas de redémarrage pour reassigne ler icones qui ne reapparaissent pas ? car ca me le fait aussi quand la box redémarre ?

 

Si l'objectif recherché est l'affichage de l'icône du module virtuel correspondant à  l'état du Qubino FP après un redémarrage de la box, il ne me parait pas utile d'utiliser le "main loop" du module virtuel... qui tourne alors pour un besoin très ponctuel

 

Si le choix du mode de chauffage (et par conséquent l'affichage de l'icône adéquat) est réalisé de manière générale par l'appel à  l'un des 6 boutons correspondant au 6 modes du Qubino, il suffit d'ajouter une scène qui s’exécutera une seule fois lors du démarrage de la box, pour régler le problème d'icône vide ou d'icône par défaut.

Partager ce message


Lien à poster
Partager sur d’autres sites

bijour messieurs,

 

Expliquez moi svp, je ne comprends pas pourquoi récuperer la valeur currentIcon pour refaire un call sur le currentIcon ?

 

C'est en cas de redémarrage pour reassigne ler icones qui ne reapparaissent pas ? car ca me le fait aussi quand la box redémarre ?

Steven me donnait juste un exemple de comment je pouvais assigner une icone à  un VD.

 

Pour ton info, voici ce que j'ai fait pour que le VD remette bien la bonne icône après un redémarrage de la box

-- nom de la variable à  vérifier
local variable = "Auth_PS3"
-- ID des icônes
local icone1 = 1097
local icone2 = 1096

local virtualID = fibaro:getSelfId()
local currentIcon = fibaro:get(virtualID, "currentIcon")

if (currentIcon == "0" or currentIcon == "1")
  then
    if fibaro:getGlobal(variable) == "Interdit"
      then 
        fibaro:call(virtualID, "setProperty", "currentIcon", icone1);
      else
	fibaro:call(virtualID, "setProperty", "currentIcon", icone2);
    end
    fibaro:call(virtualID, "setProperty", "ui.Statut.value", ""..fibaro:getGlobal(variable))
end

Partager ce message


Lien à poster
Partager sur d’autres sites

Si le choix du mode de chauffage (et par conséquent l'affichage de l'icône adéquat) est réalisé de manière générale par l'appel àl'un des 6 boutons correspondant au 6 modes du Qubino, il suffit d'ajouter une scène qui s’exécutera une seule fois lors du démarrage de la box, pour régler le problème d'icône vide ou d'icône par défaut.

as-tu un code pour que la scène détecte un redémarrage de la box et se lance automatiquement ?

Car en effet ce serait beaucoup plus propre que je faire ma bidouille pour les 10 VD liés aux 10 variables pour lesquelles j'affiche des icônes

Partager ce message


Lien à poster
Partager sur d’autres sites

×