jojo Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 Pour la HCL, j'avais en son temps fait un tuto pour afficher une icône dans un virtual device une icône en fonction de la valeur d'une variable globale, et de pouvoir modifier sa valeur (également depuis son smartphone), quelle se mette à jour lors d'un restart de la box, etc pour une HCL En passant sous HC2, j'avais gardé le même principe, et pour chaque VD (et donc chaque variable), la main loop tournait en continu pour vérifier que l'icône correspond bien à la valeur de la variable. Ce n'est vraiment pas optimal. Je vais vous expliquer ici la solution que j'ai mise en place pour que la charge sur la box soit moins importante. Merci à Steven, i-magin et mprinfo qui m'ont aidé pour débugger Création des variables Je prendrai dans mon exemple 2 variables globales : Auth_PS3 avec 2 valeurs possibles : "Autorisé" et "Interdit" Auth_TV avec 2 valeurs possibles : "Autorisé" et "Interdit" (mais les valeurs pourraient être différentes que pour la 1° variable, ou avoir plus que 2 valeurs) Modules virtuels Chaque variable a son module virtuel. Il a pour objectif d'afficher une icône différente en fonction de la valeur de la variable. Pour facilement les retrouver, j'ai créé une section "Section Virtuelle" et dedans une pièce "Variables". Chaque VD a le nom suivant : "Var_xxxx" où xxxx est le nom de la variable globale. Dans notre exemple : "Var_Auth_PS3" et "Var_Auth_TV". L'icône par défaut du VD est et doit rester l'horrible cube bleu (facile ainsi de repérer si la VD est à jour) J'ai créé les boutons suivants : Bouton 1 : Autorisé / Interdit Il permet simplement de faire le switch de la valeur de la variable. C'est le bouton par défaut du VD. Il n'y a pas d'icône associée. -- nom de la variable à modifier local variable = "Auth_PS3" if fibaro:getGlobal(variable) == "Interdit" then fibaro:call(fibaro:getSelfId(), "pressButton", "3") else fibaro:call(fibaro:getSelfId(), "pressButton", "4") end Label : Statut afficher en texte la valeur de la variable Bouton3 : Autorisé c'est le bouton qui est appelé pour mettre la variable à "Autorisé" Il contient l'icône qu'on veut voir affichée (comme ça on ne doit pas chercher son ID) fibaro:setGlobal('Auth_PS3', 'Autorisé') fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Statut.value", 'Autorisé') Bouton4 : Interdit c'est le bouton qui est appelé pour mettre la variable à "Interdit" Il contient l'icône qu'on veut voir affichée (comme ça on ne doit pas chercher son ID) fibaro:setGlobal('Auth_PS3', 'Interdit') fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Statut.value", 'Interdit') N.B. l'ID de ce bouton ne peut pas être appelée par le bouton Switch, mais seulement son numéro QUI CHANGE si vous changez l'ordre. C'est débile, mais c'est comme ça … Utilisation On clique sur le bouton principal, et il switch la valeur de la variable On peut utiliser Google Calendar pour lui dire d'appuyer directement sur le bouton "Autorisé" ou "Interdit" Vous devez modifier les scènes qui modifiaient directement la variable, en la faisant appuyer sur le bouton de la VD qui modifie la variable et met à jour l'icône de la VD (car il n'y a plus le mainloop qui contrôle en continu la valeur de la variable) Limitations et solution : Lors du redémarage de la box, ou Lors de la sauvegarde du VD (parce que vous avez fait une petite modif, ou …) L'icône qui est affichée pour le VD, est l'icône par défaut du VD. Le cube bleu, pas cool … Donc pour pallier à ce problème, j'ai créé un VD supplémentaire "Var_Update" Dont voici le code : un GRAND merci à mprinfo qui m'a beaucoup aider pour faire qqch de plus sympa et générique ---------------------------------- -- User Settings ---------------------------------- -- la Table doit avoir la structure suivante : -- 1/ nom de la variable globale entre " -- 2/ ID du VD qui affiche la valeur de la VG -- 3/ n° du premier bouton qui doit être appuyé -- (qui correspond à la première valeur de la variable) -- 4/ n° du dernier bouton qui doit être appuyé -- (qui correspond à la dernière valeur de la variable -- on suppose que tous les boutons se suivent de 1 en 1) -- 5/ valeurs possibles de la variable entre " -- (elles doivent être listées dans l'ordre des boutons de la VD) local Table = {"Auth_PS3", 23, 3, 4, "Autorisé", "Interdit", "Auth_TV", 289, 3, 4, "Autorisé", "Interdit", "Auth_VMCEtage", 290, 3, 4, "Autorisé", "Interdit", "Auth_TerrPar", 291, 3, 4, "Autorisé", "Interdit", "Auth_LumHallNuit", 362, 3, 4, "Autorisé", "Interdit", "ECS", 292, 3, 4, "Oui", "Non", "DayPart", 130, 3, 4, "After SunRise", "After SunSet", "Noel", 363, 3, 4, "Oui", "Non", "Saison", 133, 3, 6, "Printemps", "Eté", "Automne", "Hiver", "Chauffage", 351, 3, 5, "0", "1", "2", "Vacances", 293, 3, 4, "Oui", "Non" } ---------------------------------- -- DO not change bellow this line ---------------------------------- local i = 1 while Table[i] ~= nil do local VG_Nom = tostring(Table[i]) fibaro:debug("----------------------------") fibaro:debug("Nom de la variable Globale = " ..VG_Nom) local VD_id = tostring(Table[i+1]) local Btn_Deb = tonumber(Table[i+2]) local Btn_Fin = tonumber(Table[i+3]) local NbrVal = (Btn_Fin - Btn_Deb) + 1 --Nbr de valeur possibles de la variable fibaro:debug('NbrVal = ' ..NbrVal) i = i + 4 local VG_Val = fibaro:getGlobalValue(VG_Nom) fibaro:debug('Valeur de la variable Globale = ' ..VG_Val) for j = 1,NbrVal do if VG_Val == Table[i+j-1] then fibaro:debug(VG_Nom.. ' = ' ..VG_Val) fibaro:debug("Il faut appuyer sur le bouton : " ..Btn_Deb.. " de la VD_id " ..VD_id) fibaro:call(VD_id, "pressButton", Btn_Deb) end Btn_Deb = Btn_Deb + 1 end -- for i = i + NbrVal end -- while Pour retrouver l'ID du VD, vous avez plusieurs solutions : Le toolkit de Krikroff l'API : http://<IP Box>:<Port Box>/api/virtualDevices vous exportez le VD, et dans l'URL vous voyez ?id=xxx vous éditez le VD, et dans l'URL vous voyez ?vid=xxx Il vérifie la valeur de la variable et appuie sur le bouton correspondant à l'icône. D/Variable. Donc maintenant, quand je vois qu'une des icônes associée à mes variables est l'icone standard, je clique sur le bouton, et tout est remis au carré. Cela évite d'avoir un main loop qui tourne pour chaque variable 99% du temps pour rien. On a donc trouvé une parade à la deuxième limitation ;-) Pour la première limitation (mise à jour après un restart de la box) la solution est facile : Créer une scène qui appelle la VD "Var_Update" / bouton 1 au démarrage de la box. --[[ %% autostart --]] fibaro:sleep (10*1000) fibaro:call(361, "pressButton", "1") où 361 est l'ID du Vd "Var_Update" Merci à Steven qui finalement à trouvé la solution du sleep au début de la scène, ainsi qu'à i-magin et mprinfo pour leurs bonnes idées 3
i-magin Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 Pour être précis, et puisque je suis cité, ce qui marche chez moi, c'est la scène suivante exécutée au démarrage de la box (voir ci-après) Cette scène permet d'afficher dans un module virtuel, l'icône et le mode de chauffage correspondant à l'état d'un module Qubino FP, uniquement au démarrage de la box (ou lors de la sauvegarde de la scène) En marche normale, l'icône et le mode de chauffage sont gérés par les 6 boutons du module virtuel correspondant au 6 ordres possibles du Qubino FP --[[ %% autostart %% properties %% globals --]] -- -- Scène exécutée après redémarrage box HC2 -- -- chauffage Salon local id_qubino_salon = 255 local id_chauffe_salon = 155 local id_icone = { [99] = 1016, [50] = 1047, [40] = 1048, [30] = 1012, [20] = 1013, [0] = 1050, } local mod_chauffe = { [99] = "CONFORT", [50] = "CONFORT -1", [40] = "CONFORT -2", [30] = "ECO", [20] = "HORS-GEL", [0] = "ARRET" } fibaro:call(id_chauffe_salon, "setProperty", "currentIcon", id_icone[tonumber(fibaro:getValue(id_qubino_salon, "value"))]) fibaro:call(id_chauffe_salon,"setProperty","ui.Label1.value",mod_chauffe[tonumber(fibaro:getValue(id_qubino_salon, "value"))]) fibaro:debug("Redémarrage box : "..os.date()) Je n'ai donc pas testé la procédure de @jojo ... un peu trop complexe pour moi
jojo Posté(e) le 20 mars 2015 Auteur Signaler Posté(e) le 20 mars 2015 i-magin, Merci pour ta précision. Plein d'espoir àla lecture de ton feedback, j'ai collé le code de la VD_Update dans la scène. Et zut, ça ne fonctionne toujours pas. Je crois avoir compris : on ne pourrait pas faire de pressButton depuis une scène... Je t'este cela ce WE
i-magin Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 Aucun souci pour exécuter un "pressButton" depuis une scène, et heureusement.... La programmation de mon chauffage tient essentiellement dans une scène qui appelle des boutons de modules virtuels Petit rappel : ne pas oublier de valider l'option "Scène Active" 1
Steven Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 Dans GEA ... une scène .. cela donne cela {"VirtualDevice", <ID_MODULE>, <position du bouton>} donne fibaro:call(<ID_MODULE>, "pressButton", <position du bouton>) Donc oui c'est 100% possible
jojo Posté(e) le 20 mars 2015 Auteur Signaler Posté(e) le 20 mars 2015 donc cela devrait être un problème chez moi uniquement, et tant mieux si ça marche chez vous. Je ferai avec. Même si "ma" proposition semble complexe (beaucoup de call imbriqués) il me semble qu'elle a l'avantage d'être simple àmaintenir une fois mise en place.
jojo Posté(e) le 20 mars 2015 Auteur Signaler Posté(e) le 20 mars 2015 je vous le donne en 1000 : la solution au problème de démarrage de la scène avec le redémarrage de la box est venu de qui ? de Steven, bien-sà»r ! II fallait juste mettre un sleep de 10s au démarrage de la scène, histoire de laisser le temps à notre petite box de se réveiller en douceur
Steven Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 Coup de chance mais je voyais rien d'autre qui pouvait poser le problème.
mprinfo Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 Super JOJO te reste plus qu'a passer en V4 si madame le veux bien
mprinfo Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 local Var_Id = {23, 289, 290, 291} for i = 1,#Var_Id do if fibaro:getGlobal(Var_Id) == 'Autorisé' then fibaro:call(Var_Id, "pressButton", "3") else fibaro:call(Var_Id, "pressButton", "4") end end
jojo Posté(e) le 20 mars 2015 Auteur Signaler Posté(e) le 20 mars 2015 oui mprinfo, ce code pourrait fonctionner si mes variables ont toutes les mêmes valeurs autorisées ("Autorisé" et "Interdit'), mais s'il y a d'autres valeurs ('Oui' ou "Non"), ou plus que 2 valeurs, ça ne marche plus. Il faudra quelque chose de plus générique, surtout si je veux le partager : Disons que toi tu utilises des variables avec comme valeurs permises "Permis" et "Non-Permis" (par exple), il faut que ça marche aussi ...
mprinfo Posté(e) le 21 mars 2015 Signaler Posté(e) le 21 mars 2015 on peut faire un tableau du style suivant : local Var_Id = {23, autorisé, 3, 4, 289, OUI, 3, 5,} on incrémente i de 4 dans la boucle ID , "autorisé, OUI, etc..., Bouton de départ, bouton Fin
mprinfo Posté(e) le 21 mars 2015 Signaler Posté(e) le 21 mars 2015 j'ai oublié les "" il faut mettre "autorisé" et "OUI"
jojo Posté(e) le 21 mars 2015 Auteur Signaler Posté(e) le 21 mars 2015 merci pour l'idée, c'est une excellente piste d'amélioration, je devrais m'y pencher dessus, mais je DOIS (et ça va être dur ...) essayer de ne plus trop toucher àla domotique jusqu'au 20 avril ...
mprinfo Posté(e) le 21 mars 2015 Signaler Posté(e) le 21 mars 2015 Pauvre Jojo à‡a va être dur dur enfin si tu as une petite autorisation je veux bien te donné un coup de main courage il y aura des jours meilleurs....
jojo Posté(e) le 21 mars 2015 Auteur Signaler Posté(e) le 21 mars 2015 Je te rassure, je dois préparer mes vacances de début avril. C'est donc pour la bonne cause ...
mprinfo Posté(e) le 21 mars 2015 Signaler Posté(e) le 21 mars 2015 Ah ok tiens moi au courant quand tu pourras ? Car j'ai plusieurs solutions mais je voudrais que tu m expliques plus en détails ce que tu veux Envoyé de mon SM-G900F en utilisant Tapatalk
jojo Posté(e) le 22 mars 2015 Auteur Signaler Posté(e) le 22 mars 2015 voilà, avec l'aide de mprinfo (MERCI), nous avons modifié le code de la VD "Var_Update" pour qu'il soit générique. Pour les modif, voir le post initial qui a été adapté
domo Posté(e) le 30 août 2015 Signaler Posté(e) le 30 août 2015 merci jojo pour ce tuto me reste plus cas les intégrer dans mes scenes
domo Posté(e) le 30 août 2015 Signaler Posté(e) le 30 août 2015 je voulais utiliser google calendar pour ma scène vacances seulement j'ai rien compris du tout , c'est pas fait pour moi
lamparo Posté(e) le 13 mai 2017 Signaler Posté(e) le 13 mai 2017 Bonsoir à vous, je remonte ce sujet car j'aimerai afficher dans l'étiquette d'un VD, la valeur de consommation d'un FGS223. Je récupère la valeur via le json, mais je ne sais pas si c'est possible d'afficher la valeur récupérée via l'étiquette, en la renommant par exemple. A la place de "consommation", je voudrais afficher la valeur récupérée via json.
Messages recommandés