triossrf Posté(e) le 16 novembre 2021 Signaler Posté(e) le 16 novembre 2021 Bonjour, Etant novice en L.U.A j'aurai aimé trouver un Tuto dans cette rubrique concernant les SLIDER. Je suis en train de créer un Q.A pour mes Walli et j'aurai aimé utiliser un slider pour gérer la luminosité des leds. Pour le moment je me retrouve avec deux ligne de L.U.A distinct. self:updateView("slider", "value", "20") <--- Pour le SLIDER et fibaro.call(ID, 'setRingBrightness' , 20) <--- Gestion luminosité du Walli J'ai bien pensé à créer des locales pour donner des %, mais je ne suis pas certain qu'il s'utilise de cette manière. Existe t'il un tutoriel pour les slider? Merci d'avance.
Lazer Posté(e) le 16 novembre 2021 Signaler Posté(e) le 16 novembre 2021 Pas de tuto pour les slider des QuickApp sur HC3 à ma connaissance sur le forum... Il y a le manuel officiel, même si un peu léger, il explique ce qu'il y a à savoir sur les Sliders : https://manuals.fibaro.com/home-center-3-quick-apps/ Notamment comment créer une fonction d'un QuickApp qui réagit aux changements du slider. Tu récupères la valeur, puis tu l'affectes à ton module Walli (via fibaro.call() comme tu l'as déjà identifié) Est-ce que tu as besoin d'autre chose ?
triossrf Posté(e) le 16 novembre 2021 Auteur Signaler Posté(e) le 16 novembre 2021 Effectivement , pour un novice comme moi c'est super léger. Si jamais quelqu'un à des exemples je suis preneurs où même des Q.A utilisant un slider pour des lumieres qu'il n'hésite pas ! Je vais gratter de mon côté en attendant. Merci de ta réponse
Lazer Posté(e) le 16 novembre 2021 Signaler Posté(e) le 16 novembre 2021 Pour gérer des lumières non, mais mon QuickApp pour Yahama MusicCast déjà partagé sur le forum exploite un Slider (pour le volume). Mais la partie purement gestion du slider est ultra basique, c'est basé sur la doc officielle, tu as juste une fonction qui est appelée lorsque l'utilisateur clique sur le slider, exactement comme pour un bouton en fait. La seule particularité, c'est qu'il faut récupérer la nouvelle valeur du slider, puisque c'est cette valeur que tu vas affecter à ta lumière avec fibaro.call() 1
Fredmas Posté(e) le 16 novembre 2021 Signaler Posté(e) le 16 novembre 2021 (modifié) Un petit exemple simple de la part d'un autre débutant qui n'a pas tout compris du LUA function QuickApp:testSlider(event) --doit avoir le même nom de fonction que ce que tu as écrit dans le champ onChanged de ton slider valuetest = event.values[1] --récupère la valeur de ton slider et la met dans la variable valuetest que tu peux renommer self:debug("value", value) -- affiche la valeur de ton slider dans la console de debug end Ensuite tu utilises ta variable nommée dans cette exemple "valuetest" ailleurs dans ton code. Comme par exemple : fibaro.call(ID, "setRingBrightness", valuetest) Les lignes de code ci-dessous, à mettre où tu as besoin, servent uniquement à positionner le slider. Par exemple, au redémarrage de ton QA, pour que le slider se mette automatiquement à 50, tu peux mettre dans le onInit() : self:updateView("slidertoto", "value", "50") Où à l'inverse, si tu veux qu'au redémarrage de ton QA, le slider reprenne sa valeur précédente dans un variable "persistante" : self:updateView("slidertoto", "value", valuetest) Bref, tu dois comprendre le fonctionnement j'imagine Modifié le 19 novembre 2021 par Fredmas 3
triossrf Posté(e) le 17 novembre 2021 Auteur Signaler Posté(e) le 17 novembre 2021 @Lazer @Fredmas Merci pour vos réponses! Ton exemple ma beaucoup aider à comprendre le fonctionnement du slider. Du coup le slider fonctionne sans aucun problème dans mon QA. Cependant j'ai deux petites questions concernant le code LUA. -Que signifie le (event) dans la fonction? -Je vois qu'il y a un [1] cela correspond à une table? Merci encore pour votre aider
Lazer Posté(e) le 17 novembre 2021 Signaler Posté(e) le 17 novembre 2021 event, c'est un paramètre de la fonction. Quand la fonction est appelée, cette variable event est passée en paramètre de la fonction, et elle contient des informations utiles. Il s'agit d'une table, c'est pour cela qu'il faut utiliser [1] pour accéder à l'un de ses indices. Si tu veux voir le contenu complet de cette variable, tu peux par exemple faire ceci dans ta fonction QuickApp:testSlider(event) : self:debug("event :", json.encode(event)) Ainsi tu verras tous les champs de cette table. 1
triossrf Posté(e) le 17 novembre 2021 Auteur Signaler Posté(e) le 17 novembre 2021 Du coup j'ai regardé le bout de code que tu m'as donné: self:debug("event :", json.encode(event)) J'ai pour résultat seulement la phrase suivante: [DEBUG] [QA_502_GESTION_WALLI]: event walli : {"deviceId":502,"elementName":"slider","values":[64],"eventType":"onChanged"} mais rien de plus sur les champs de cette table.
Fredmas Posté(e) le 17 novembre 2021 Signaler Posté(e) le 17 novembre 2021 Avec ce debug tu as bien la description de ce que contient la table event. Par exemple tu retrouves le "values":[64] qui fait partie de la table event, d'où le event.values dans le code précédent.
triossrf Posté(e) le 17 novembre 2021 Auteur Signaler Posté(e) le 17 novembre 2021 D'accord. Je pensais que l'on pouvait avoir plus d'information que ça, d'où mon étonnement mais effectivement j'ai bien la valeur du Slider avec ce debug.
Lazer Posté(e) le 17 novembre 2021 Signaler Posté(e) le 17 novembre 2021 L'affichage se fait au format JSON, donc effectivement peu lisible si tu n'est pas habitué. Affiché plus proprement (= formaté pour un humain), ton exemple donne : "event": { "deviceId": 502, "elementName": "slider", "values": [ 64 ], "eventType": "onChanged" } Le champ "values" de la table est un peu particulier, car c'est lui-même une table (indiquée par la présence de crochets), qui contient une seule valeur non indexée : 64 Comme cette valeur n'a pas d'index nommé, on y accède par un index numérique, 1, que l'on place entre crochets. Cela donne donc : event.values[1] => on prend le 1er élément de la table values dans la table event 1
triossrf Posté(e) le 19 novembre 2021 Auteur Signaler Posté(e) le 19 novembre 2021 Décidément, en ce moment je te prend beaucoup de ton temps. Considéré moi comme un padawan de première année qui à juste un bâton de bois en guise de sabre laser Tu m'as transmis le code suivant afin que le Slider se mette automatiquement à la valeur d'une variable : Pour moi cela ne fonctionne pas. self:updateView("slidertoto", "value", valuetest) J'ai procédé de cet manière: -Création d'une variable quand je bouge le Slider (il est placé dans la fonction slider). self:setVariable("WalliLu", Intensite) --< WalliLu est la variable crée dans le Q.A Puis j'utilise le: self:updateView("slider", "value", WalliLu) Que j'ai placé dans le OnInit. Peut importe ce que je met à la place de WalliLu la barre du slider se place automatiquement à 0 dans le Dashboard. Ps: j'ai également essayé avec la local Brillance sur laquelle on à travailler hier soir, sans plus de résultat. Merci d'avance
Fredmas Posté(e) le 19 novembre 2021 Signaler Posté(e) le 19 novembre 2021 J'improvise une réponse sans tester pour vérifier. WalliLu est une variable de ton QA (dans l'onglet variable), pas une déclarée à l'intérieur de ton code, puisque tu écris un setVariable. Ce type de variable s'appelle avec un getVariable... Pas uniquement avec son nom. Donc dans ton updateView tu appelles WalliLu qui n'est pas la variable à laquelle tu penses, et qui est donc probablement nil... donc 0 pour ton slider... Soit tu fais un getVariable, soit tu utilises une variable déclarée dans ton code (local ou pas).
Lazer Posté(e) le 19 novembre 2021 Signaler Posté(e) le 19 novembre 2021 Remarque : aussi étrange que cela puisse paraitre, il faut passer une string en argument de updateView. Donc il faut parfois convertir la valeur si celle-ci est numérique. Exemple : local value = 50 self:updateView("slider", "value", tostring(value)) 1
triossrf Posté(e) le 19 novembre 2021 Auteur Signaler Posté(e) le 19 novembre 2021 Effectivement, on peut chercher un moment sans le "tostring" rien ne fonctionne. Je me demande comment vous arrivez à savoir qu'il faut mettre un tostring pour que ça marche, d'autant plus que sur une slider on utilisera jamais de chaine de caractère si je me trompe pas. En tout cas un grand merci à vous. Grâce à vous j'ai compris comment fonctionnent les slider, je vais essayer de synthétiser tout cela afin que ce Topic serve à d'autre personnes . 1
Lazer Posté(e) le 19 novembre 2021 Signaler Posté(e) le 19 novembre 2021 Parce qu'en regardant le JSON on voit bien qu'il s'agit d'une chaîne de caractères. 1
triossrf Posté(e) le 19 novembre 2021 Auteur Signaler Posté(e) le 19 novembre 2021 (modifié) Si jamais cela peu aider d'autre personne dans l'utilisation des Slider Voilà donc la conclusion de ce topic. function QuickApp:onInit() self:debug("onInit") end function QuickApp:Brightness(event) Intensite = event.values[1] walliBur = fibaro.call(41, 'setRingBrightness', Intensite) self:debug("Slider", Intensite) --<Affiche la valeur du slider dans le débug> self:updateView("LblSlider", "text", "Intensité:" ..Intensite) --<M.A.J Intensité dans un Label> self:setVariable("WalliLu", Intensite) --<Creation d'une variable dans le Q.A lorsqu'on positionne le Slider> local VarWalli = self:getVariable("WalliLu") --<Lecture de la variable WalliLu> self:debug("WalliLu:" ..VarWalli) --<Débug Variable WalliLu> self:updateView("SliderBrightness", "value", tostring(VarWalli) ) --<M.A.J Slider automatiquement à l'ouverture du Q.A> end Modifié le 20 novembre 2021 par triossrf 1
Fredmas Posté(e) le 20 novembre 2021 Signaler Posté(e) le 20 novembre 2021 (modifié) Oui effectivement j'utilise bien le string également, mais je n'ai jamais compris pourquoi il fallait le faire. Car un truc m'interpelle concernant cette idée de passer la valeur en "string". 1. Quand on regarde API/JSON du slider (oui je sais je fais le malin alors que j'ai découvert cette outil hier ) sa valeur n'a pas de " " comme pour les string, et ressemble donc à un number. Où alors je me trompe et ne regarde pas au bon endroit. 2. Quand on fait un self:debug(type(event.values[1])) la console affiche : number. Donc cela voudrait confirmer que le slider renvoie bien un number et pas un string. Du coup ces 2 points réunis me font dire que lorsqu'on souhaite dans l'autre sens envoyer une valeur à ce slider pour en modifier sa position, ce devrait être un number logiquement non ? Ou un truc m'échappe dans l'analyse ? Modifié le 20 novembre 2021 par Fredmas 1
jang Posté(e) le 20 novembre 2021 Signaler Posté(e) le 20 novembre 2021 il y a 5 minutes, Fredmas a dit : Suddenly these 2 points together make me say that when you want to send a value to this slider in the other direction to modify its position, it should be a number logically no? Or something escapes me in the analysis? I think your analysis is justified. Fibaro is not always consistent in how they define their APIs.... 2
Fredmas Posté(e) le 20 novembre 2021 Signaler Posté(e) le 20 novembre 2021 Thanks For this reason sometimes it takes time to understand the way to work of our Fibaro, and succeed doing something 1
TitiXsi Posté(e) le 12 octobre 2023 Signaler Posté(e) le 12 octobre 2023 (modifié) Bonjour à tous, je rebondis sur ce sujet, est'il possible de définir les limites du slider et son step ? Merci Edit : J'ai rien dit, enfin si, mais j'ai trouvé, je ne comprenais pas pourquoi celà ne fonctionnait pas, en faite, ca fonctionne, seulement le gui de debug n'est pas updaté... c'est dommage self:updateView("slider","min","15") -- set absolute min of slider / ref self:updateView("slider","max", "30") --set absolute max of slider / ref self:updateView("slider", "value", "21") --set slider at 21 at start self:updateView("slider", "step", "0.5") --step 0.5 at the time Modifié le 12 octobre 2023 par TitiXsi
Lazer Posté(e) le 12 octobre 2023 Signaler Posté(e) le 12 octobre 2023 De mémoire la limitation des bornes min/max ne fonctionnait pas dans les anciens firmwares de la HC3. Tant mieux si ça fonctionne maintenant.
Messages recommandés