Aller au contenu
triossrf

Slider

Recommended Posts

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? 
 
:4:
 
Merci d'avance. 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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  ! :13: 

 

Je vais gratter de mon côté en attendant. 

Merci de ta réponse ;) 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Un petit exemple simple de la part d'un autre débutant qui n'a pas tout compris du LUA :D

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) :P

 

 

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é par Fredmas
  • Like 3

Partager ce message


Lien à poster
Partager sur d’autres sites

@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 ;) 

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

 

  • Thanks 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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. 

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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. 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Décidément, en ce moment je te prend beaucoup de ton temps. :P 

:2:Considéré moi comme un padawan de première année qui à juste un bâton de bois en guise de sabre laser :2:

 

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. 

 

:3:

Merci d'avance :) 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

 

  • Thanks 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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:13:,  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 ;).  

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Parce qu'en regardant le JSON on voit bien qu'il s'agit d'une chaîne de caractères.

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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

:18:

Modifié par triossrf
  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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". :D

 

1. Quand on regarde API/JSON du slider (oui je sais je fais le malin alors que j'ai découvert cette outil hier :P) 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 ? :huh:

Modifié par Fredmas
  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites
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?: huh:

I think your analysis is justified.

Fibaro is not always consistent in how they define their APIs....

  • Like 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Thanks :D

For this reason sometimes it takes time to understand the way to work of our Fibaro, and succeed doing something :huh:

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par TitiXsi

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

×