jojo Posté(e) le 18 mars 2015 Signaler Posté(e) le 18 mars 2015 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
jojo Posté(e) le 18 mars 2015 Auteur Signaler Posté(e) le 18 mars 2015 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
Berale64 Posté(e) le 19 mars 2015 Signaler Posté(e) le 19 mars 2015 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.
Steven Posté(e) le 19 mars 2015 Signaler Posté(e) le 19 mars 2015 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); 1
jojo Posté(e) le 19 mars 2015 Auteur Signaler Posté(e) le 19 mars 2015 @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.
Berale64 Posté(e) le 19 mars 2015 Signaler Posté(e) le 19 mars 2015 @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.
jojo Posté(e) le 19 mars 2015 Auteur Signaler Posté(e) le 19 mars 2015 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 ...)
Did Posté(e) le 19 mars 2015 Signaler Posté(e) le 19 mars 2015 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)
jojo Posté(e) le 19 mars 2015 Auteur Signaler Posté(e) le 19 mars 2015 @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")
jojo Posté(e) le 19 mars 2015 Auteur Signaler Posté(e) le 19 mars 2015 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
Did Posté(e) le 19 mars 2015 Signaler Posté(e) le 19 mars 2015 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.
Steven Posté(e) le 19 mars 2015 Signaler Posté(e) le 19 mars 2015 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" ...
jojo Posté(e) le 19 mars 2015 Auteur Signaler Posté(e) le 19 mars 2015 pour une fois que je peux (essayer de) t'aider, c'est avec grand plaisir 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
jojo Posté(e) le 19 mars 2015 Auteur Signaler Posté(e) le 19 mars 2015 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", 1
Steven Posté(e) le 19 mars 2015 Signaler Posté(e) le 19 mars 2015 @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 1
jojo Posté(e) le 19 mars 2015 Auteur Signaler Posté(e) le 19 mars 2015 @Did, Tu peux donc y aller tranquille, à la correction prêt, c'est validé par le maître 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")))
pepite Posté(e) le 19 mars 2015 Signaler Posté(e) le 19 mars 2015 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 ?
pepite Posté(e) le 19 mars 2015 Signaler Posté(e) le 19 mars 2015 @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"))])
Did Posté(e) le 19 mars 2015 Signaler Posté(e) le 19 mars 2015 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. 1
jojo Posté(e) le 19 mars 2015 Auteur Signaler Posté(e) le 19 mars 2015 @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
i-magin Posté(e) le 19 mars 2015 Signaler Posté(e) le 19 mars 2015 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.
jojo Posté(e) le 19 mars 2015 Auteur Signaler Posté(e) le 19 mars 2015 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
jojo Posté(e) le 19 mars 2015 Auteur Signaler Posté(e) le 19 mars 2015 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
Messages recommandés