Aller au contenu

Récupérer valeur dans un API


971jmd

Recommended Posts

@Fredmas

Effectivement je me suis fais le raisonnement , je pense qu'on ne peut pas avoir de résultat à cet endroit. 

 

Mais j'essai toujours de trouver des valeurs non numérique, je m'explique.

 

Quand je fais la synthax suivante: 

local ApiIntensite = api.get("/devices/"..WalliDimmer).properties.value
	self:debug("Intensite:" ..ApiIntensite) 
On obtien la valeur de "value": 0 (extrait du JSON) 

Par contre si je met: 
local ApiIntensite = api.get("/devices/"..WalliDimmer).properties.state
	self:debug("State:" ..APIState) 
Je devrais obtenir un true ou un false cependant j obtiens dans la console: 
[ERROR] [QUICKAPP530]: main.lua:22: attempt to concatenate a boolean value (local 'APIState')

Je me doute qu'il s'agit d'une erreur de synthaxe, j'ai essayer avec plusieurs manière de l'écrire. Mais je sèche. 

Modifié par triossrf
Lien vers le commentaire
Partager sur d’autres sites

Normal tu définies ta variable local ApiIntensite = ... puis tu utilises APIState qui n'existe pas (en fait si, elle semble exister et est de type boolean comme l'indique ton message d'erreur, car tu dois probablement utiliser cette variable plus haut dans ton code LUA)

Lien vers le commentaire
Partager sur d’autres sites

Autant pour moi @Lazer, il s'agit juste une erreur de copier/collé. 

sur mon code j'ai bien utiliser la borne synthax soit: 

    local APIProfil= api.get("/profiles").activeProfile
    local APIState = api.get("/devices/"..WalliDimmer).properties.state
    self:debug("Intensite:" ..ApiIntensite) 
    self:debug("State:" ..APIState) 

 

Je n'ai pas utilisé cette variable plus haut et le message d'erreur est bien là. 

 

Alors je m'était dis que de base quand on va chercher un api, il s'attend à une valeur numérique et non pas Boolean ou string. 

Je pense cependant que je l'ai bien localisé mais il est peut-être tout simplement pas possible de retourner une valeur autre que des numériques? 

 

Si cela peut éclairer voici une partie du JSON. (j'ai supprimer un petit peu pour que cela soit plus lisible) 

{
  "id": 522,
  "name": "Lumiere",
  "roomID": 230,
  "view": [
  ...
  ],
  "properties": {
    "parameters": [
    ...
    ],
    ],
    "configured": true,
    "dead": false,
    "deadReason": "",
    "deviceControlType": 23,
    "deviceIcon": 15,
    "endPointId": 0,
    "energy": 0.03,
    "firmwareUpdate": {
      "info": "",
      "progress": 0,
      "status": "UpToDate",
      "updateVersion": "5.1"
    },
    "isLight": true,
    "localProtectionState": 0,
    "localProtectionSupport": 5,
    "log": "",
    "logTemp": "",
    "manufacturer": "",
    "markAsDead": true,
    "model": "",
    "nodeId": 48,
    "parametersTemplate": "836",
    "power": 0,
    "productInfo": "1,15,28,1,16,0,5,1",
    "protectionExclusiveControl": 0,
    "protectionExclusiveControlSupport": false,
    "protectionState": 0,
    "protectionTimeout": 0,
    "protectionTimeoutSupport": false,
    "saveLogs": true,
    "saveToEnergyPanel": true,
    "serialNumber": "h'000000000000d04d",
    "showEnergy": true,
    "state": false,  <---- IL EST LA L AFFREUX !!!! 
    "updateVersion": "",
    "useTemplate": true,
    "userDescription": "",
    "value": 0
  },

 

 

Modifié par triossrf
Lien vers le commentaire
Partager sur d’autres sites

OK donc le message d'erreur est logique, il te dit que tu ne peux pas concaténer une chaine avec un booléen. Tout simplement.

Donc tu as 2 choix pour afficher ta valeur :

self:debug("State:" .. tostring(APIState))
self:debug("State:", APIState)

 

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

il y a 31 minutes, Lazer a dit :

OK donc le message d'erreur est logique, il te dit que tu ne peux pas concaténer une chaine avec un booléen. Tout simplement.

Donc tu as 2 choix pour afficher ta valeur :


self:debug("State:" .. tostring(APIState))
self:debug("State:", APIState)

 

Mon dieu... Maintenant que tu le dis tout parait si logique. 

Je m'obstinais à croire que c était

api.get("/devices/"..WalliDimmer).properties.state

qui n'était pas bon alors que c'était le debug... 

J'était donc bon sur la recherche du l'api mais pas sur le débug... Je pouvais toujours chercher... 

 

Merci à toi, comme d'habitude très efficace. 

 

:60:

Lien vers le commentaire
Partager sur d’autres sites

Le 22/11/2021 à 04:35, triossrf a dit :

Pour revenir aux moutons de @971jmd!  :P Et non, on ne ta pas oublié ! 

Je pense que l'on peut utiliser les codes suivants: 


api.delete("")
api.get("")
api.post("", {})
api.put("", {})

Aprés c'est toujours le même soucis, il faut trouver la bonne synthax ^^ 

 

salut

 

j'ai tester avec ça et toujours erreur :  main.lua:28: unexpected symbol near ')'

 

function QuickApp:modif()
api.put ("/devices/"..Walli).properties.parameters[36], {value='33'}
end

 

{
        "id": 158,
        "lastReportedValue": 16,
        "lastSetValue": 16,
        "size": 2,
        "value": 16
      },

 

 

 

bon ça fonctionne toujours bien pour afficher la valeur qui est 16

ID = api.get("/devices/"..Walli).properties.parameters[36].value

 

Modifié par 971jmd
Lien vers le commentaire
Partager sur d’autres sites

j'ai tester comme ça :

 

function QuickApp:modif()
api.put ("/devices/"..Walli).properties.parameters[36], value='99'
end

 

 

[13.12.2021] [21:07:05] [TRACE] [QUICKAPP470]: UIEvent: {"values":[null],"deviceId":470,"elementName":"modif","eventType":"onReleased"}
[13.12.2021] [21:07:05] [DEBUG] [QUICKAPP470]: ./include/main.lua:25: attempt to index a nil value (field 'properties')
[13.12.2021] [21:07:05] [ERROR] [QUICKAPP470]: QuickApp crashed
[13.12.2021] [21:07:05] [ERROR] [QUICKAPP470]: Unknown error occurred: handleJsonRpc

 

Lien vers le commentaire
Partager sur d’autres sites

Allé un truc comme ça par exemple, histoire de te laisser comprendre la structure du code pour trouver ton paramètre puis le modifier (attention je n'ai pas réellement essayé de mon coté) :

function QuickApp:modif()
  local toto = api.get("/devices/"..Walli)
  toto.properties.parameters[36].value = 99 --ou 33
  api.put("/devices/"..Walli, toto)
end

 

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

j'ai tester le code de Lazer il y a quand même un problème, je m'explique.

 

Si par exemple je souhaite changer le paramètre 12 d'une walli ( paramètre 12 =changer la couleur de l'anneau quand OFF )

ça fonctionne, mai quand on se rend dans l' API du module concerné, on se rend compte que tous les autres paramètres ont disparu sauf le paramètre 12.

 

J'ai remarqué qu'il est pas possible ne modifier un autre paramètre car il y en existe qu'un seul. le 12 pour exemple

 

Visiblement pour faire apparaître tous les paramètres il faut rafraîchir et pour l'instant le code visiblement ne le fais pas

 

{
        "id": 12,
        "lastReportedValue": 7,
        "lastSetValue": 7,
        "size": 1,
        "value": 7
      }

 

Lien vers le commentaire
Partager sur d’autres sites

Il y a 6 heures, Fredmas a dit :

Allé un truc comme ça par exemple, histoire de te laisser comprendre la structure du code pour trouver ton paramètre puis le modifier (attention je n'ai pas réellement essayé de mon coté) :


function QuickApp:modif()
  local toto = api.get("/devices/"..Walli)
  toto.properties.parameters[36].value = 99 --ou 33
  api.put("/devices/"..Walli, toto)
end

 

 

Je viens de tester avec ton code et lui par compte aucun problème

 

Il modifie bien le paramètre en position 36 et visiblement tous les autres paramètres sont toujours là

Lien vers le commentaire
Partager sur d’autres sites

Tant mieux si cela fait ce que tu voulais alors :P

Après je n'ai absolument aucun mérite. Comme j'aime à le répéter afin de rendre à César ce qui lui appartient, la majorité de ce que je sais, je l'ai appris à gauche et à droite sur notre forum ;)

Tu sauras le partager à ton tour lorsque quelqu'un posera à nouveau la même question que toi :D

Lien vers le commentaire
Partager sur d’autres sites

Ben pas sûr que ce soit Fibaro.

Nous avons décidé de faire mieux que de simples scènes bloc en codant nous-mêmes… ben du coup la moindre variante sémantique compte et doit être comprise. Et comme souvent tout dépend de nous-mêmes du coup :D 

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

Pour qu'on comprenne mieux la chose

 

le code suivant 20 c'est positionné sur la 36e tables et non le paramètre 36 OK

 

function QuickApp:modif()
  local toto = api.get("/devices/"..Walli)
  toto.properties.parameters[36].value = 99 --ou 33
  api.put("/devices/"..Walli, toto)
end

 

 

ET et c'est dernier ci-dessous se positionne directement sur le paramètre 158.

Après LAZER me disait qu'il est préférable de faire une boucle,   Pourquoi exactement ?

 

 

function QuickApp:lum99()

local deviceID = 429
local mycolor = 0
local data = {
	id = tonumber(deviceID),
	properties = {
		parameters = {
			{
				id = 158,
				size = 2,
				value = 11
			}
		}
	}
}
local response, status = api.put("/devices/"..deviceID, data)
print("status : " .. status)
print("response : " .. response)


end

 

 

Modifié par 971jmd
Lien vers le commentaire
Partager sur d’autres sites

il y a 7 minutes, 971jmd a dit :

Après LAZER me disait qu'il est préférable de faire une boucle,   Pourquoi exactement ?


Page précédente :

 

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

Salut! 

 

Pour ma part quand je souhaites modifier quelque chose par exemple: 

        WalliIntensite.properties.parameters[151].value = 30  --ou 33  
        api.put("/devices/"..WalliDimmer, WalliIntensite) 

 

Je me retrouve avec l'erreur: 

 

[ERROR] [QUICKAPP530]: main.lua:47: attempt to index a nil value (field '?')

 

Alors que je trouve bien le parametre 151 avec la boucle de recherche. 

 

Une idée? 

 

Merci d'avance ;) 

Lien vers le commentaire
Partager sur d’autres sites

Attention à ne pas confondre le paramètre n°151 du module Z-Wave, avec l'index n°153 de la table qui contient les paramètres.

On en a discuté précédemment, et on a donné la boucle LUA à écrire pour retrouver l'index de la table qui correspond au bon numéro de paramètre.

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

Le 21/12/2021 à 16:52, Lazer a dit :

Attention à ne pas confondre le paramètre n°151 du module Z-Wave, avec l'index n°153 de la table qui contient les paramètres.

On en a discuté précédemment, et on a donné la boucle LUA à écrire pour retrouver l'index de la table qui correspond au bon numéro de paramètre.

@Lazer

 

J'avais procédé de la manière suivante:

-Recherche avec la boucle du paramètre 151 de mon module qui correspond à: Maximum Brigthness level. 

-Après vérification dans le Swagger, il se trouve que le Parametre 151 est égale à l'Index (ID??) 151 également. (Une erreur???)  

-Dans ma console il me transmet bien le bon résultat. 

 

Cependant je voulais le modifier en écrivant: 

        WalliIntensite.properties.parameters[151].value = 30  --ou 33  
        api.put("/devices/"..WalliDimmer, WalliIntensite) 

Et donc l'erreur est celle que j'ai précité. 

Tu pense que je me suis tromper dans la manière d'utiliser la boucle? 

Lien vers le commentaire
Partager sur d’autres sites

Alors il y' a quelque chose que je ne saisi pas. 

Dans la boucle et dans le fonctionnement. 

 

Voici donc mon parametre 151:

Image Parametre

 

Voici mon swager avec mon id 151: 

Je veux donc modifier l'ID 151 (ID = Index exact?) 

 

6vcj.jpg

 

 

 

 

Modifié par triossrf
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...