Krikroff Posté(e) le 28 mars 2020 Signaler Posté(e) le 28 mars 2020 L'idée ici est partager nos retours d' expérience sur l'utilisation des variables dans les Quick App. Nous connaissons tous pour la plupart l'existence des variables globales mais le HC3 dans les Quick App apporte une nouvelle notion de variable au niveau du QA. Cela va considérablement simplifier la vie du développeur et du l'utilisateur au quotidien. L'utilisation est très simple et repose sur 2 méthodes: La création ou la mise à jour d'une variable existante : self:setVariable("NOM_DE_LA_VARIABLE", "VALEUR_DE_LA_VARIABLE") > le set se charge de créer la variable si elle n'existe pas, bien joué Fibaro La lecture de la valeur d'une variable : self:getVariable("NOM_DE_LA_VARIABLE") Avouons le c'est difficile de faire plus simple Les variables ainsi ajoutées sont visibles depuis l'onglet "Variables" au niveau du périphérique, comme ceci: Ou bien encore en interrogeant l' API via le SWAGGER intégré au Home Center ... 2 1
jjacques68 Posté(e) le 28 mars 2020 Signaler Posté(e) le 28 mars 2020 (modifié) Et d'après ce que j'ai compris, on ne peut pas accéder à ces variables (QA) depuis une scène. Et ni les utiliser comme trigger de scènes. Elles n'ont pas la portée du VG. Modifié le 28 mars 2020 par jjacques68
Krikroff Posté(e) le 28 mars 2020 Auteur Signaler Posté(e) le 28 mars 2020 Utiliser une variable d'un Quick App comme trigger d'une scène en effet ce n'est pas possible, je trouve que c'est cohérent. En revanche avec un peu d'huile de coude il est parfaitement possible d’accéder et d'utiliser une variable d'un QA depuis une scène, voici comment: -- Description: retrieve a quick app variable by name -- arg: [id] (integer): > QA device ID -- arg: [name] (string): QA variable name -- arg: [cs] (boolean): Search is case sensitive or not -- Return: The QA variable value or nil do function getQuickAppVariable(id, name, cs) assert(tonumber(id),"getQuickAppVariable(id, name), arg [id] must be a number") assert(type(name)=="string","getQuickAppVariable(id, name), arg [name] must be a string") local v, r = api.get(string.format("/devices/%s", id)).properties.quickAppVariables, nil if (not cs) then name = name:lower() end for i=1, #v do local search = v[i].name if (not cs) then search = v[i].name:lower() end if (search == name) then r = v[i].value break end end return r end end et pour l'utiliser local value = getQuickAppVariable(941, "IP_Address") print(value) 4 1
jjacques68 Posté(e) le 13 avril 2020 Signaler Posté(e) le 13 avril 2020 (modifié) Le 28/03/2020 à 19:41, Krikroff a dit : il est parfaitement possible d’accéder et d'utiliser une variable d'un QA depuis une scène, voici comment: ça marche nickel ce code !!! merci encore !!! Modifié le 13 avril 2020 par jjacques68
mprinfo Posté(e) le 10 mai 2020 Signaler Posté(e) le 10 mai 2020 ca fait un peu beaucoup pour récupérer une valeur je crois que je vais rester avec des VG dans mes scènes
Franco268 Posté(e) le 15 avril 2021 Signaler Posté(e) le 15 avril 2021 Hello pouvez vous m'expliquer ce qu'il ne va pas: Il n'est pas possible de récupérer un variable dans une fonction? function AffichageJour() if self:getVariable("OuvAutoMardi") == "OUI" then v= v .."Ma " end self:updateView("lblJour", "text", v) end function QuickApp:onInit() AffichageJour() end [15.04.2021] [22:51:13] [ERROR] [QUICKAPP29]: QuickApp crashed [15.04.2021] [22:51:13] [ERROR] [QUICKAPP29]: main.lua:21: attempt to index a nil value (global 'self')
Lazer Posté(e) le 15 avril 2021 Signaler Posté(e) le 15 avril 2021 Rien à voir avec les variables. Ta fonction AffichageJour n'est pas membre de QuickApp, donc self est inconnu à l'intérieur de celle-ci => attempt to index a nil value (global 'self') Toujours bien prendre le temps de lire le message d'erreur, ce n'est pas toujours clair, mais dans le cas présent ça l'est Il faut donc lui passer self en paramètre : function AffichageJour(self) if self:getVariable("OuvAutoMardi") == "OUI" then v= v .."Ma " end self:updateView("lblJour", "text", v) end function QuickApp:onInit() AffichageJour(self) end Si tu avais mis n'importe quelle autre fonction, pas exemple self:debug() tu aurais eu la même erreur. 2
Manu31 Posté(e) le 17 janvier 2022 Signaler Posté(e) le 17 janvier 2022 Bonjour, J'aurai besoin d'un peu daide pour afficher une variable local de ma HC3 dans un quickapp. J'ai donc créé un QuickApp de Temperature sensor et mis ca dedans mais ça n'a pas l'air de marcher function QuickApp:onInit() self:debug("onInit") self:getVariable("Temp_Piscine") end Auriez-vous un peu de temps ou des liens qui sont bien pour apprendre à creer des quickapp ? En vous remerciant
Lazer Posté(e) le 17 janvier 2022 Signaler Posté(e) le 17 janvier 2022 Attention, ton Temp_Piscine n'est pas une variable, mais un label du QuickApp. Cela n'est pas le sujet de ce topic qui traitait à l'origine des variables du QuickApp, qu'on retrouve dans l'onglet présenté sur la capture d'écran de Krikroff. Les labels servent à afficher des informations, pour l'utilisateur. Cela se fait avec la fonction updateProperty(), voir la documentation officielle : https://manuals.fibaro.com/home-center-3-quick-apps/ Lire un label n'a que peu d'intérêt, voire même aucun. Les valeurs des labels ne sont pas persistants, contrairement à ce qui était le cas sur les VD de la HC2. La doc officielle n'est pas très détaillé, et surtout assez peu didactique. Il faut bidouiller par mal pour finir par comprendre la logique des QA. Il n'y a pas de tutoriel complet à ma connaissance, en tout cas pas sur le forum, si ce n'est plusieurs discussions plus ou moins poussées autour de différents sujets. Si tu veux devenir un dieu du QuickApp, que tu as pas mal de temps à y investir, et que tu lis l'anglais, je te conseille le topic de @jang sur le forum officiel : https://forum.fibaro.com/topic/49113-hc3-quickapps-coding-tips-and-tricks/ Lire en particulier les 4 (longs) messages sur l'anatomie d'un QuickApp (Part 1 à 4) et de leurs enfants (voir table des matières du 1er post) Il y a un début très théorique sur les notions de bases du LUA, indispensable pour bien comprendre comment sont construits les QuickApps, avant d'aborder des aspects plus pratiques. 1
flamalex Posté(e) le 6 février 2022 Signaler Posté(e) le 6 février 2022 Bonjour, dans mon QA, sur appui du BP j'ai une erreur sur " main.lua:64: attempt to concatenate a boolean value (local 'screenOn') " la valeur True ou False s'affiche bien dans le panneau variable du QA face à "Etat_Ecran" mais ne veut pas l'afficher dans mon Label 2 à l'aide please !!!! PS: la ligne 64: self:updateView("Lbl2", "text", "Etat Ecran = "..screenOn.."..") --- Lire etat tablette --==== function QuickApp:Etat_TAB() local http = net.HTTPClient() http:request("http://192.168.1.17:2323/?type=json&cmd=home&password=xxxxx",{ options={ headers = {Accept = "application/json"}, method = 'GET'}, success = function(response) --self:debug("response status:", response.status) --self:debug("headers:", response.headers["Content-Type"]) apiResult = response.data print(apiResult) jsonTable = json.decode(apiResult) -- JSON decode from api to lua-table ---------------------------------------------- -- Récupération des données ---------------------------------------------- local currentPageUrl = jsonTable.currentPageUrl -- Get the values self:debug("Page actuelle: ", currentPageUrl) local screenOn = jsonTable.screenOn -- Get the values self:debug("Etat_Ecran: ", screenOn) ---------------------------------------------- -- Création des variables de QuickApp création ou la mise à jour d'une variable ---------------------------------------------- self:setVariable("Page actuelle", currentPageUrl) self:setVariable("Etat_Ecran", screenOn) --== lecture de la valeur d'une variable -- self:getVariable("NOM_DE_LA_VARIABLE") --afficher données dans label self:updateView("Lbl1", "text", "Page actuelle = "..currentPageUrl .. "..") self:updateView("Lbl2", "text", "Etat Ecran = "..screenOn.."..") --self:updateProperty("Lbl2", "Etat Ecran = "..screenOn".."") end, error = function(error) self:debug('error: ' .. json.encode(error)) end }) end --=========
Krikroff Posté(e) le 6 février 2022 Auteur Signaler Posté(e) le 6 février 2022 Un booléen ne peut pas subir une concaténation comme une chaîne de caractères, il est nécessaire de changer le type en string : tostring ou encore faire un string.format
flamalex Posté(e) le 6 février 2022 Signaler Posté(e) le 6 février 2022 Merci @Krikroff oui en effet, c'est mieux ainsi local screenOn = jsonTable.screenOn -- Get the values -- convertir en chaine caracteres local myString = tostring(screenOn) self:debug("Etat_Ecran: ", screenOn) self:setVariable("Etat_Ecran", myString) self:updateView("Lbl2", "text", "Etat Ecran = "..myString.."")
mikael2235 Posté(e) le 6 février 2022 Signaler Posté(e) le 6 février 2022 Hello a tous, Je ne sais pas si c'est le bon endroit ou pas. Je voudrais savoir comment fait on pour lire la valeur d'un label dans un QuickApp ?? Je ne trouve que la fonction UpdateView... Il y a peut être un ReadView ou équivalent ??
flamalex Posté(e) le 6 février 2022 Signaler Posté(e) le 6 février 2022 as tu regardé ceci (puis passer par une variable)
mikael2235 Posté(e) le 6 février 2022 Signaler Posté(e) le 6 février 2022 il y a 50 minutes, flamalex a dit : as tu regardé ceci (puis passer par une variable) Merci pour l'info ! Je vais utiliser les variables alors
mprinfo Posté(e) le 6 février 2022 Signaler Posté(e) le 6 février 2022 Hello a tous, Je ne sais pas si c'est le bon endroit ou pas. Je voudrais savoir comment fait on pour lire la valeur d'un label dans un QuickApp ?? Je ne trouve que la fonction UpdateView... Il y a peut être un ReadView ou équivalent ?? Je crois que tu devrais changer ton approche sur hc3On ne stock plus les valeurs dans les labelsSur hc2 on le faisait pour continuer les limitations des vdEnvoyé de mon BLA-L29 en utilisant Tapatalk
flamalex Posté(e) le 5 mars 2022 Signaler Posté(e) le 5 mars 2022 (modifié) --================================ function QuickApp:BTN_PRESENT() self:updateProperty("value",true) self:setVariable("statut", "present") -- on renseigne la variable self:getVariable("statut") --on lit la variable print ("etat:",statut) self:debug(statut) self:updateView("Lbl1", "text", statut) -- on affiche la variable dans label --self:updateView("Lbl1", "text", "Status: "..statut) --self:updateView("Lbl1", "text", "prez" ) end function QuickApp:BTN_ABSENT() self:updateProperty("value",false) -- on change le statut du QA self:setVariable("statut", "absent") --on modifie variable self:getVariable("statut") --on lit la variable print ("etat:",statut) self:debug(statut) self:updateView("Lbl1", "text", statut) -- on affiche la variable dans label --self:updateProperty("satut", statut) --self:updateView("Lbl1", "text", "Abs" ) end Hello, dans un QA, via 2 BTN je modifie une variable "statut" (present/absent), une fois modifiée, je souhaite la récupérer pour l'afficher dans un label (recuperer la valeur de la variable et non pas comme dans le code ici afficher un text) comment afficher une variable dans un label? merci nota: le print et le debug m'affiche rien et nil j'essaie de comprendre (il doit y avoir une notion de variable dans QA ou fonction () ..... ) Modifié le 5 mars 2022 par flamalex
mprinfo Posté(e) le 5 mars 2022 Signaler Posté(e) le 5 mars 2022 Il faut faire un set pour stocker une variableIl faut faire un get pour récupérer la valeur de la variableIl faut faire un update view pour afficher la valeur dans un labelJe te conseille de jeter un œil sur la doc que fibaro a faitEnvoyé de mon BLA-L29 en utilisant Tapatalk
flamalex Posté(e) le 5 mars 2022 Signaler Posté(e) le 5 mars 2022 (modifié) Oui, dans mes commentaires du code ci dessus, on retrouve ces notions de lecture, écriture, affichage mais pour l’affichage de la variable dans le label, rien ne fonctionne d’ou l’objet de ma question dans la doc j’ai ceci, mais ils font référence à une variable globale (ce n’est pas mon cas) https://manuals.fibaro.com/home-center-3-lua-scenes/ et avec la doc QA je ne suis pas plus avancé (ça me parait être simple pourtant, un bon de 8ans en arrière avec hc2, mm question) https://manuals.fibaro.com/home-center-3-quick-apps/ Modifié le 5 mars 2022 par flamalex
flamalex Posté(e) le 5 mars 2022 Signaler Posté(e) le 5 mars 2022 la solution --================================ function QuickApp:BTN_PRESENT() self:updateProperty("value",true) self:setVariable("statut", "present") -- on renseigne la variable self.statut = self:getVariable("statut") --on lit la variable print ("etat:",self.statut) self:debug(self.statut) self:updateView("Lbl1", "text", self.statut) -- on affiche la variable dans label end function QuickApp:BTN_ABSENT() self:updateProperty("value",false) -- on change le statut du QA self:setVariable("statut", "absent") --on modifie variable self.statut = self:getVariable("statut") --on lit la variable print ("etat:",self.statut) self:debug(self.statut) self:updateView("Lbl1", "text", self.statut) -- on affiche la variable dans label end c'etait le self est il possible de faire plus simple? ici le statut s'actualise, dans le label, lorsque je clique sur un BTN, n'est il pas possible (de le sortir) que le statut s'actualise automatiquement lorsqu'il change de statut?
jjacques68 Posté(e) le 5 mars 2022 Signaler Posté(e) le 5 mars 2022 je vais dire peutêtre une bêtise, mais sers toi que et uniquement que du status du QA ! Pas besoin de variable...
flamalex Posté(e) le 5 mars 2022 Signaler Posté(e) le 5 mars 2022 @jjacques68 Non tu as raison, (ça serait plus « propre ») mais comment récupérer le statut du QA dans gea ou une scène ?
mprinfo Posté(e) le 5 mars 2022 Signaler Posté(e) le 5 mars 2022 Fibaro call Envoyé de mon BLA-L29 en utilisant Tapatalk 2
mprinfo Posté(e) le 5 mars 2022 Signaler Posté(e) le 5 mars 2022 Autrement tu peux aussi utiliser les variables globales cela existe toujours même si avec les variables QA on les utilisent beaucoup moinsMon QA jours fériés utilisent 2 variables globalesD'ailleurs il faudrait que je jui donne un coup de jeune mais je suis pas motivé Envoyé de mon BLA-L29 en utilisant Tapatalk 1
Messages recommandés