Aller au contenu
henri-allauch

Ecriture par API

Recommended Posts

Pour préparer et tester des commandes Http sur l'api des VD ou pseudo device, j'utilise un VD de test ou je code en lua la requette à tester ( avant de la coder dans un autre language pour l'appli externe)

Je m'appui souvent sur la doc obtenue par : http://IP HC2/docs/

Dans l'exemple ci dessous, j'arrive ( depuis longtemps ) à écrire dans la property power d'un fake device (wall plug ) exemple 1

idem pour modifier l'icône d'un VD exemple 2

mais je n'arrive jamais à écrire dans un label de VD  exemple 3

Je ne trouve pas mon erreur. Si quelqu'un qui sait passe par là ... merci d'avance

 

--1 Ecriture properties power fake device (wallaplug )---> OK
local fakedevice = 116
local W = 1234,56
local myJson = '{"properties":{"power":'..W..'}}'
local payload = "/api/devices/"..fakedevice
local HC2 = Net.FHttp("127.0.0.1",11111);
HC2:PUT(payload, myJson)

-- 2 Ecriture properties deviceIcon d'un VD -->OK
local myId = fibaro:getSelfId()
local myJson = '{"properties":{"deviceIcon": 1004 }}'
local payload = "/api/devices/"..myId
local HC2 = Net.FHttp("127.0.0.1",11111);
HC2:PUT(payload, myJson)


-- 3 Ecriture properties label d'un VD -->NOK
local myId = fibaro:getSelfId()
local myJson = '{"properties":{"ui.LblMaison.value": '..W..' }}'
local payload = "/api/devices/"..myId
local HC2 = Net.FHttp("127.0.0.1",11111);
HC2:PUT(payload, myJson)




 

Modifié par henri-allauch

Partager ce message


Lien à poster
Partager sur d’autres sites

Vérifie le json du VD.  Tu ne peux écrire que dans les properties

Partager ce message


Lien à poster
Partager sur d’autres sites

Pourtant je vois bien ui.LblMaison.value ( à la valeur 10 )  dans les properties 

 

Capture d’écran 2017-01-10 à 10.14.41.png

Capture d’écran 2017-01-10 à 10.22.33.png

Modifié par henri-allauch

Partager ce message


Lien à poster
Partager sur d’autres sites

salut,

 

Manquerait pas ta declaration de variable "local W"  dans ton ecriture de label num 3 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

essaye ceci, en rajoutant des "

local myJson = '{"properties":{"ui.LblMaison.value": "'..W..'" }}'

 

Partager ce message


Lien à poster
Partager sur d’autres sites

j'essaierais sans variable d'abord aussi. oui peut-etre les guillemets c'est vrai, mais ca fonctionne pour le fake device

 

avec un fibaro call tu arrives a ecrire dans le label ?ou cela ne fonctionne pas non plus ?

Partager ce message


Lien à poster
Partager sur d’autres sites

regarde l'extrait du json, tu verra que pour les label ils faut les "et que pour deviceincon c'est un champ numérique

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci Petite et Jojo de vos conseils.

Je reprend mes essais à 0 c'est mieux avec les idées claires.

Pour le moment avec un call ça marche  

 

Demain Je vais essayer avec le Put du Json   en suivant aussi vos idées et je vous tiens au courant

Merci

 

fibaro:call(myId, "setProperty", "ui.LblChauffage.value", "7777,88") ecrit 7777,88

local MyVal = 2266,66
fibaro:call(myId, "setProperty", "ui.LblChauffage.value", MyVal )  ecrit 2266

local MyVal = "2266,66"
fibaro:call(myId, "setProperty", "ui.LblChauffage.value", MyVal )  ecrit 2266,66

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon j'ai tour repris avec un vd qui passe les commandes et un qui les reçoit pour pas d'ambiguïté

Résultat : 

--Modifier Valeur dans le VD cible  OK
local MyVal = "1234,56"
fibaro:call(recID, "setProperty", "ui.LblTest.value", MyVal )
------------------------------------------------------------------------------
Ecrire Value dans Fake device OK
local fakedevice = 116
local W = 1234,56
local myJson = '{"properties":{"power":'..W..'}}'
local payload = "/api/devices/"..fakedevice
local HC2 = Net.FHttp("127.0.0.1",11111);
local response, status, errorCode = HC2:PUT(payload, myJson)
------------------------------------------------------------------------------
--Modifier Icone dans le VD cible OK
local IconImperihome = 1001
local recID = 292
local myJson = '{"properties":{"deviceIcon": '..IconImperihome..' }}'
local payload = "/api/devices/"..recID
local HC2 = Net.FHttp("127.0.0.1",11111);
local response, status, errorCode = HC2:PUT(payload, myJson)
------------------------------------------------------------------------------
--Modifier LblValue dans le VD cible  NOK Quelque soit le Json utilisé avec Status 200 OK ca semble un pb de syntaxe ?
local recID = 292
local MyVal = "9876,54"
local myJson   	 = '{"properties":{"ui.LblTest.value": '..MyVal..' }}'
local JoJoJson	 = '{"properties":{"ui.LblTest.value": "'..MyVal..'" }}'
local PepiteJson = '{"properties":{"ui.LblTest.value": "1234" }}'
local myJson2    = '{"properties":{"ui.LblTest.value": 100 }}'
local myJson3    = '{"properties":{"ui.LblTest.value": ' ..tostring(4444) ..' }}'

local payload = "/api/devices/"..recID
local HC2 = Net.FHttp("127.0.0.1",11111);
local response, status, errorCode = HC2:PUT(payload, myJson3)
------------------------------------------------------------------------------
--Modifier LblValue dans le VD cible ( API call action ) OK
local MyVal = "9876,54"
local Param = "/api/callAction?deviceID="..recID .."&name=setProperty&arg1=ui.LblTest.value&arg2="..MyVal
local HC2 = Net.FHttp("127.0.0.1",11111);
local response, status, errorCode = HC2:GET(Param)    

Donc j'en suis au même point il doit y avoir une astuce 

Modifié par henri-allauch

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

Je ne comprends pas ce qui cloche ;-)

Je ne vois pas pourquoi cela ne fonctionne pas. Je cherche ;-)

Avec un peu de chance un expert va passer par là ;-)

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est Steven qui le fait mais je le faisais aussi lors de nos tests à l'époque pour ma passerelle Zibase (Depuis plus le besoin donc j'ai tout viré). Il faudrait retrouvé ça, je ne sais plus trop, a moins que cela ait été bloqué depuis, mais je ne crois pas, Steven fait encore comme ça.

Partager ce message


Lien à poster
Partager sur d’autres sites

le json de @Pepite devrait fonctionner

local PepiteJson = '{"properties":{"ui.LblTest.value": "1234" }}'

TRES bête question.

Es-tu sûr que le label LblTest existe bien ? As-tu vérifié dans le json ?

Partager ce message


Lien à poster
Partager sur d’autres sites

@jojo Ce n'est pas une question Bête et c'est pour éviter ce genre d'étourderie que j'ai changé les noms ce matin.

 

Oui LblTest   existe bien,  d'ailleurs c'est ok dans le dernier test par /api/callAction. Pour être sur,  j'ai exporté le json dans un fichier dont voici le début :

{"name":"Test Label Rec","type":"virtual_device","properties":{"deviceIcon":1001,"currentIcon":"1004","log":"","logTemp":"","mainLoop":"","ui.LblTest.value":"0","visible":"true", ........... 

 

Et pour lever le doute sur une erreur de saisie,  je viens de copier/ coller ce  ui.LblTest.value  dans le PepiteJson et refait un essai 

Et le canard est toujours vivant ... mais la chasse continue

Modifié par henri-allauch
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Je ne me prends pas la tête avec des PUT, je fait simplement ainsi

 

https://HC2_IP/api/callAction?deviceID=100&name=setProperty&arg1=ui.Label1.value&arg2=10

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

OK merci encore une fois merci Steven, C'est effectivement ce que j'ai pu vérifier dans mon exemple du 11/1 

J'ai mis tous les autres tests au placard et j'utilise api/callAction

Modifié par henri-allauch
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Conclusion ? Est-ce possible ou non avec un api.ptu de modifier un Label ?

Avec tous les tests @henri-allauch à priori on ne peut pas.

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

En effet, comme "IP" et "Port" (et certainement plein d'autre) cela ne fonctionne pas

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

×