971jmd Posté(e) le 9 novembre 2021 Signaler Posté(e) le 9 novembre 2021 bonjour à tous Je recherche désespérément comment récupérer une valeur dans une partie d'un API Ce que je souhaite récupérer : updateVersion Dans mon Quick app j'ai essayé comme ça mais ça fonctionne pas, et j'ai essayé bien d'autres solutions mais toujours aucun résultat QuickApp.clima2 = tostring(fibaro.getValue(clim, "properties", firmwareUpdate: "updateVersion")) QuickApp.clima2 = tostring(fibaro.getValue(clim, "firmwareUpdate", "updateVersion")) etc j'ai tester comme ca et ça commence à bouger : QuickApp.clima2 = tostring(fibaro.getValue(clim, "firmwareUpdate")) et comme résultat : table: 0xf3a8a50 }, "dead": false, "deadReason": "", "deviceControlType": 0, "deviceIcon": 70, "endPointId": 0, "firmwareUpdate": { "info": "", "progress": 0, "status": "UpToDate", "updateVersion": "1.7" }, local clim = 375 QuickApp.clima = tostring(fibaro.getValue(clim, "coolingThermostatSetpoint")) QuickApp.clima2 = tostring(fibaro.getValue(clim, "properties", firmwareUpdate: "updateVersion")) function QuickApp:onInit() self:debug(self.clima) self:debug(self.clima2) self:updateView("label1", "text", self.clima.. " °") self:updateView("label20", "text", self.clima2.. " °") end merci d'avance pour votre aide
Fredmas Posté(e) le 14 novembre 2021 Signaler Posté(e) le 14 novembre 2021 Que cherches-tu à récupérer ? Tu voudrais que ta variable "clima2" prenne la valeur "1.7" venant de "updateVersion" concernant le matériel de ID=375 ?
971jmd Posté(e) le 14 novembre 2021 Auteur Signaler Posté(e) le 14 novembre 2021 non récupérée la valeur 1.7 et l'afficher dans une label QA
Fredmas Posté(e) le 14 novembre 2021 Signaler Posté(e) le 14 novembre 2021 OK compris. Pour le Label ce ne sera pas difficile. Bon le problème c'est que je ne connais pas ton matériel et que me le dire ne m'avancerai pas. Donc si je me base uniquement sur ce que tu as essayé et écrit, comment obtiens-tu la table ci-dessous : { "dead": false, "deadReason": "", "deviceControlType": 0, "deviceIcon": 70, "endPointId": 0, "firmwareUpdate": { "info": "", "progress": 0, "status": "UpToDate", "updateVersion": "1.7"}, }
971jmd Posté(e) le 14 novembre 2021 Auteur Signaler Posté(e) le 14 novembre 2021 dans API de ma HC3 Tu peux prendre un autre exemple dans ta HC3 ton ID 85 par exp
Fredmas Posté(e) le 14 novembre 2021 Signaler Posté(e) le 14 novembre 2021 (modifié) Toujours si je me base sur ce que tu as écrit : Le 09/11/2021 à 04:16, 971jmd a dit : j'ai tester comme ca et ça commence à bouger : QuickApp.clima2 = tostring(fibaro.getValue(clim, "firmwareUpdate")) et comme résultat : table: 0xf3a8a50 }, "dead": false, "deadReason": "", "deviceControlType": 0, "deviceIcon": 70, "endPointId": 0, "firmwareUpdate": { "info": "", "progress": 0, "status": "UpToDate", "updateVersion": "1.7" }, firmareUpdate est une table, donc ça me semble normal que ça te retour comme résultat une table... As-tu essayé simplement : ça : QuickApp.clima2 = tostring(fibaro.getValue(clim, "updateVersion")) ou ça : QuickApp.clima2 = tostring(fibaro.getValue(clim, "firmwareUpdate.updateVersion")) Modifié le 14 novembre 2021 par Fredmas
971jmd Posté(e) le 14 novembre 2021 Auteur Signaler Posté(e) le 14 novembre 2021 oui je reçois [QUICKAPP378]: nil
Fredmas Posté(e) le 14 novembre 2021 Signaler Posté(e) le 14 novembre 2021 (modifié) Quand tu fais ça : QuickApp.clima2 = tostring(fibaro.getValue(clim, "deviceIcon")) Tu reçois bien : "70" Modifié le 14 novembre 2021 par Fredmas
971jmd Posté(e) le 14 novembre 2021 Auteur Signaler Posté(e) le 14 novembre 2021 oui jusque-là je suis toujours arrivé local clim = 375 ---QuickApp.clima = tostring(fibaro.getValue(clim, "coolingThermostatSetpoint")) QuickApp.clima = tostring(fibaro.getValue(clim, "deviceIcon")) function QuickApp:onInit() self:debug(self.clima) self:updateView("label1", "text", self.clima.. " °") setInterval(function() self:onInit() end,5) end Mais je pense que le faite que updateVersion dans la table firmwareUpdate c'est plus compliqué
Fredmas Posté(e) le 14 novembre 2021 Signaler Posté(e) le 14 novembre 2021 Un truc comme ça : var1 = fibaro.getValue(clim, "firmwareUpdate") var2 = var1.updateVersion print(var2) Ca donne quoi ?
971jmd Posté(e) le 14 novembre 2021 Auteur Signaler Posté(e) le 14 novembre 2021 [14.11.2021] [15:50:20] [DEBUG] [QUICKAPP378]: 1.7
971jmd Posté(e) le 14 novembre 2021 Auteur Signaler Posté(e) le 14 novembre 2021 merci pour ton aide le code complet local clim = 375 QuickApp.var2 = tostring(fibaro.getValue(clim, "firmwareUpdate")) QuickApp.var2 = var1.updateVersion function QuickApp:onInit() self:debug(self.var2) self:updateView("label1", "text", "verssion "..self.var2.. " ") end
Fredmas Posté(e) le 14 novembre 2021 Signaler Posté(e) le 14 novembre 2021 (modifié) QuickApp.var2 = tostring(fibaro.getValue(clim, "firmwareUpdate")) QuickApp.var2 = var1.updateVersion A mon avis là il y a une erreur entre les var2 et var1. Ca devrait plutôt être : QuickApp.var1 = fibaro.getValue(clim, "firmwareUpdate") -- met la table "firmwareUpdate dans var1 QuickApp.var2 = tostring(var1.updateVersion) -- met la valeur "updateVersion" de la table var1 dans var2 Au passage, je pense que le tostring est inutile puisque les valeurs ont l'air d'être string dans la table, mais au moins on dira que tu es sûr... Sinon si tu écris ça : QuickApp.var2 = tostring(fibaro.getValue(clim, "firmwareUpdate").updateVersion) Ca devrait fonctionner également il me semble. Avec la même remarque précédente à propos du tostring... Modifié le 14 novembre 2021 par Fredmas
971jmd Posté(e) le 14 novembre 2021 Auteur Signaler Posté(e) le 14 novembre 2021 oui ca fonctionne avec ou sans le TOSTING
Fredmas Posté(e) le 14 novembre 2021 Signaler Posté(e) le 14 novembre 2021 (modifié) Donc au final ça peut donner tout simplement ça sans tes variables : local clim = 375 function QuickApp:onInit() self:updateView("label1", "text", "version "..fibaro.getValue(clim, "firmwareUpdate").updateVersion) end Modifié le 14 novembre 2021 par Fredmas
971jmd Posté(e) le 14 novembre 2021 Auteur Signaler Posté(e) le 14 novembre 2021 et si nous souhaitons récupérer sur trois niveaux j'imagine que là c'est le même principe mais beaucoup plus compliqué sachant qu'il faut demander ID du parameters properties parameters id = 26
971jmd Posté(e) le 14 novembre 2021 Auteur Signaler Posté(e) le 14 novembre 2021 Je vais essayer avec ta ligne de code function QuickApp:onInit() self:updateView("label1", "text", "version "..fibaro.getValue(clim, "firmwareUpdate").updateVersion) end
Fredmas Posté(e) le 14 novembre 2021 Signaler Posté(e) le 14 novembre 2021 il y a 5 minutes, 971jmd a dit : et si nous souhaitons récupérer sur trois niveaux j'imagine que là c'est le même principe mais beaucoup plus compliqué sachant qu'il faut demander ID du parameters Oui normalement. il y a 1 minute, 971jmd a dit : Je vais essayer avec ta ligne de code function QuickApp:onInit() self:updateView("label1", "text", "version "..fibaro.getValue(clim, "firmwareUpdate").updateVersion) end Tu me diras, car je suis dans l'impro
971jmd Posté(e) le 14 novembre 2021 Auteur Signaler Posté(e) le 14 novembre 2021 Ben tu improvise bien
Fredmas Posté(e) le 14 novembre 2021 Signaler Posté(e) le 14 novembre 2021 (modifié) Cool ça fonctionne alors Après comme je l'ai déjà dit, partant de zéro cette année concernant les QA (et le LUA d’ailleurs) j’apprends grâce à notre forum et mes plus grands formateurs techniques sont @Lazer et @jang alors j'ai peu de mérite. Mais j'essaie d'aider autant que je peux, quand je le peux Modifié le 14 novembre 2021 par Fredmas 1
triossrf Posté(e) le 18 novembre 2021 Signaler Posté(e) le 18 novembre 2021 (modifié) Salut @Fredmas et @971jmd ! Ce topic tombe à point nommé! J'arrive à faire sensiblement ce que vous avez expliqué, cependant je suis bloqué à la dernière étape, je m'explique: "properties": { "parameters": [ { "id": 13, "lastReportedValue": 28, "lastSetValue": 28, <--- La valeur qui m'interesse de récuperer. "size": 1, "value": 28 }, { "id": 11, "lastReportedValue": 4, "lastSetValue": 4, "size": 1, "value": 4 }, J'ai utilisé la syntaxe suivante au milieu de multiple essais catastrophiques... function QuickApp:test() Brillance = fibaro.getValue(Walli, lastSetValue) --Brillance = fibaro.getValue(Walli, "parameters").lastSetValue) self:debug("Slider", Brillance) end Tout en sachant que le deviceIcon fonctionne, il s'agit donc uniquement d'un problème de synthaxe... Le débug m'affiche la réponse suivante: [18.11.2021] [14:28:51] [ERROR] [QUICKAPP502]: main.lua:18: Wrong parameter type, string required. Provided param 'nil' is type of nil Merci d 'avance pour le coup de pousse! Modifié le 18 novembre 2021 par triossrf
Fredmas Posté(e) le 18 novembre 2021 Signaler Posté(e) le 18 novembre 2021 Tu n'aurais pas oublié les " " autour de lastSetValue par hasard ? Brillance = fibaro.getValue(Walli, lastSetValue) au lieu de : Brillance = fibaro.getValue(Walli, "lastSetValue") Et Walli correspond bien à une variable dans laquelle tu a indiqué précédemment l'ID de ton module ? 1
triossrf Posté(e) le 18 novembre 2021 Signaler Posté(e) le 18 novembre 2021 Oui correct j'ai bien rentré la local et j'avais déjà essayé avec les " " Le code complet donne cela: local Walli = 41 function QuickApp:test() Brillance = fibaro.getValue(Walli, "lastSetValue") self:debug("Intensité du Walli", Brillance) end Mais le débug m'affiche seulement : [18.11.2021] [20:26:45] [DEBUG] [QUICKAPP502]: onInit [18.11.2021] [20:26:45] [DEBUG] [QUICKAPP502]: Intensité du Walli sans aucune valeur concernant le lastsetvalue.
triossrf Posté(e) le 18 novembre 2021 Signaler Posté(e) le 18 novembre 2021 Si je rajoute ce code: self:updateView("Label1", "text", "Intensité:" ..Brillance) j'obtiens dans le débug : [18.11.2021] [20:39:32] [ERROR] [QUICKAPP502]: main.lua:22: attempt to concatenate a nil value (global 'Brillance')
Messages recommandés