jjacques68 Posté(e) le 13 mars 2017 Auteur Signaler Posté(e) le 13 mars 2017 @Steven et @pepite, ôtez moi d'un doute, on parle bien de la même chose ? Je suis entrain d'essayer de faire un put sans passer par une connexion de type : local HC2 = Net.FHttp("127.0.0.1", 11111) comme dans l'exemple de @Lazer !!! J'essaye de faire un api.put tout simple. Comme quand je récupère une valeur avec api.get (sans connexion Net.FHttp) !!
pepite Posté(e) le 13 mars 2017 Signaler Posté(e) le 13 mars 2017 Bonsoir @jjacques68, Pas d'inquiétude, je pense qu'avec le master @Steven nous avons bien compris ;-) le code a planté ta box ? Je viens de tester en créant un panneau "rien que pour toi" ;-) Et en fait, je tombe sur la même chose que toi ;-) sans planter la box ;-) Moi non plus ça ne change pas l'affichage, le changement a bien mieux, mais cela ne persiste pas. local idpanel = 90 local toto = api.get("/panels/heating/" ..idpanel) print("Avant : " ..json.encode(toto.properties.monday.morning.hour)) toto.properties.monday.morning.hour = 8 api.put("panels/heating/" ..idpanel, toto.properties.monday.morning.hour) print("Après : " ..json.encode(toto.properties.monday.morning.hour)) local titi = api.get("/panels/heating/" ..idpanel) print("Encore après : " ..json.encode(titi.properties.monday.morning.hour)) Et le debug, [DEBUG] 20:55:21: Avant : 6 [DEBUG] 20:55:21: Après : 8 [DEBUG] 20:55:21: Encore après : 6
jjacques68 Posté(e) le 14 mars 2017 Auteur Signaler Posté(e) le 14 mars 2017 Ok je retombe sur le même résultat que toi. Sans plantage de la box... Je n'utilise pas la fonction json.encode par contre... Et le panneau de chauffage ne se met pas à jour... pffffff je ne trouve rien là-dessus nul part...
pepite Posté(e) le 14 mars 2017 Signaler Posté(e) le 14 mars 2017 Salut, Pas d 'énervement, tu ne casses pas ta box ;-) tu la laisses tranquille, maintenant que c'est plutôt très stable, le boulet est certainement moi ;-) Et cela tu peux tester stp local idpanel = 90 local morninghour = 8 local payload = "/panels/heating/" ..idpanel local myJson = '{"properties":{"monday":{"morning":{"hour":'..morninghour..'}}}}' local toto = api.get(payload) print("Avant : " ..json.encode(toto.properties.monday.morning.hour)) api.put(payload, myJson) print("Après : " ..json.encode(toto.properties.monday.morning.hour)) local titi = api.get(payload) print("Encore après : " ..json.encode(titi.properties.monday.morning.hour))
jjacques68 Posté(e) le 14 mars 2017 Auteur Signaler Posté(e) le 14 mars 2017 Il y a 1 heure, pepite a dit : Et cela tu peux tester stp plantage de la box, erreur 503...
jjacques68 Posté(e) le 14 mars 2017 Auteur Signaler Posté(e) le 14 mars 2017 suis entrain de réfléchir à une autre syntaxe du genre "/panels/heating?id=61&properties=monday&morning=hour"
pepite Posté(e) le 14 mars 2017 Signaler Posté(e) le 14 mars 2017 ah bon ? m..pardon, j'ai du me tromper dans la syntaxe du myJson. Une autre syntaxe ? je crois vraiment que c'est la bonne. tu essaies avec la syntaxe de l'API en HTTP là.
jjacques68 Posté(e) le 14 mars 2017 Auteur Signaler Posté(e) le 14 mars 2017 oui je crois que je suis entrain de m'emmeler les pédales là... local Panel = api.get("/panels/heating/61?properties=monday&morning=hour") Et voilà le debug : [DEBUG] 17:29:50: table: 0x9311860 ça ressemble à une table json mais impossible de la décoder, si j'utilise json.decode(Panel), j'obtiens : [DEBUG] 17:32:04: line 74: bad argument #1 to 'match' (string expected, got table)
Lazer Posté(e) le 14 mars 2017 Signaler Posté(e) le 14 mars 2017 C'est normal, le api.get a déjà décodé la string pour te la transformer en tableau : api.get = function(uri) uri = "/api" .. uri local http = Net.FHttp("127.0.0.1", 11111) local result, status, errorCode = http:GET(uri) if result ~= "" then return json.decode(result) else return "" end end PUT (ne met pas de string) attend un tableau : api.put = function(uri, data) uri = "/api" .. uri local http = Net.FHttp("127.0.0.1", 11111) local jsonData = json.encode(data) local result, status, errorCode = http:PUT(uri, jsonData) if result ~= "" then return json.decode(result) else return "" end end 1
jjacques68 Posté(e) le 14 mars 2017 Auteur Signaler Posté(e) le 14 mars 2017 ok pour l'explication. Mais je crois que je vai abandonner mon idée de passer sans connexion Net.FHttp... Je voulais économiser quelques lignes de code en passant directement avec api.put mais ça marche pô du tout. C'est d'un compliqué tout ça... 1
pepite Posté(e) le 14 mars 2017 Signaler Posté(e) le 14 mars 2017 en fait, quand tu fais un api.put, tu utilises Net.FHttp ;-) C'est ce que fait la fonction api.put(uri, data) ;-) cf ce qu'a posté@Lazer
jjacques68 Posté(e) le 14 mars 2017 Auteur Signaler Posté(e) le 14 mars 2017 MINUTE LA !!!!! Je viens de faire un VD pour faire la même chose avec un Net.FHttp... Et même plantage !!! erreur 503 !!!
Lazer Posté(e) le 14 mars 2017 Signaler Posté(e) le 14 mars 2017 (modifié) Absolument Donc api.get et api.put te simplifie bien la vie comme tu le souhaitais. Pas besoin de Net.Fhttp ni de json.encode et decode(). Après si ton code ne fonctionne pas, c'est probablement parce tu t'es planté dans les champs du panneau de chauffage que tu souhaites modifier. EDIT : ton dernier test en Net.Fhttp confirme ma phrase du dessus. Modifié le 14 mars 2017 par Lazer
jjacques68 Posté(e) le 14 mars 2017 Auteur Signaler Posté(e) le 14 mars 2017 OH put... de put... de m... !! Je viens de comprendre que depuis le début, la valeur que je voulais insérer était 8. Moi je mettais 8 sous forme de string, soit "8". La je viens de comprendre qu'il attend un entier, soit 8. Et la ça marche !! @pepite, je vais reprendre tes exemples... du coup
Lazer Posté(e) le 14 mars 2017 Signaler Posté(e) le 14 mars 2017 Cool Forcément, quand on parle de string, t'es perturbé 1
jjacques68 Posté(e) le 14 mars 2017 Auteur Signaler Posté(e) le 14 mars 2017 @Lazer -----> attendez les gars je repasse dans la scène pour voir ma connerie...
jjacques68 Posté(e) le 14 mars 2017 Auteur Signaler Posté(e) le 14 mars 2017 (modifié) Zut, replantage de la box avec ça dans une scène : local Panel = api.get("/panels/heating/61") Panel.properties.monday.morning.hour = 8 api.put("/panels/heating/61", Panel.properties.monday.morning.hour) Modifié le 14 mars 2017 par jjacques68
Lazer Posté(e) le 14 mars 2017 Signaler Posté(e) le 14 mars 2017 Normal, il faut envoyer la variable Panel entière dans le PUT. 1
jjacques68 Posté(e) le 14 mars 2017 Auteur Signaler Posté(e) le 14 mars 2017 YEAH !!! ça marche maintenant !!! voilà le bon code : local Panel = api.get("/panels/heating/61") Panel.properties.monday.morning.hour = 7 api.put("/panels/heating/61", Panel) MERCI @pepite , @Lazer et @Steven !! Mais j'ai besoin d'explications... là parce que moi pas comprendre. local Panel = api.get("/panels/heating/61") La variable Panel reçoit le contenu complet sous forme de tableau (json décodé) du panneau de chauffage 61. -> ok ? Panel.properties.monday.morning.hour = 7 Je modifie ma valeur dans le tableau qui est dans la variable Panel. -> ok ? api.put("/panels/heating/61", Panel) Et la maintenant j'envois la le tableau de la variable Panel dans l'api. -> ok ? Mais alors si je compare avec ce code du VD : local HC2 = Net.FHttp("127.0.0.1", 11111) local response, status, errorCode = HC2:GET("/api/panels/heating/61") if tonumber(errorCode) == 0 and tonumber(status) == 200 and response ~= nil and response ~= "" then local Panel = json.decode(response) Panel.properties.monday.morning.hour = 7 Panel = json.encode(Panel) HC2:PUT("/api/panels/heating/61", Panel) end ... ... ... Bon je viens de percuter que c'est la même chose. Comme vous avez dis api.put ou api.get permet d'éviter les lignes Net.FHttp, encode, decode, errorCode, ...
pepite Posté(e) le 14 mars 2017 Signaler Posté(e) le 14 mars 2017 Et ton affichage alors ? bien à jour ? Bon moi ça fonctionne mais, mon panneau ne se met jamais à jour en affichage, peut-être parce qu'il n'est pas actif ;-) Regarde la fonction api.put et api.get que @Lazer a partagé. Tout ce dont tu parles, Net.FHttp et error, status, code sont dans la déclaration de la fonction ;-)
jjacques68 Posté(e) le 14 mars 2017 Auteur Signaler Posté(e) le 14 mars 2017 Oui alors je viens de comprendre ces fonctions. Mon affichage dans le panneau de chauffage est ok. Il est bien modifié, et en regardant dans l'API de la HC2, la valeur est prise en compte. Mais c'est quand même fou le peu de documentation disponible ! Si des gars comme vous n'étiez pas là, on avancerait pas ! (ou alors je cherche mal...)
Messages recommandés