Aller au contenu

Récupérer valeur dans un API


971jmd

Messages recommandés

 

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

 

Lien vers le commentaire
Partager sur d’autres sites

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"},
}

 

Lien vers le commentaire
Partager sur d’autres sites

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é par Fredmas
Lien vers le commentaire
Partager sur d’autres sites

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é 

Lien vers le commentaire
Partager sur d’autres sites

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

 

Lien vers le commentaire
Partager sur d’autres sites

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é par Fredmas
Lien vers le commentaire
Partager sur d’autres sites

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é par Fredmas
Lien vers le commentaire
Partager sur d’autres sites

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

 

Lien vers le commentaire
Partager sur d’autres sites

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  :2:

 

Modifié par Fredmas
  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

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é par triossrf
Lien vers le commentaire
Partager sur d’autres sites

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 ?

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

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. 

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...