mccyrille Posté(e) le 24 février 2015 Signaler Partager Posté(e) le 24 février 2015 Bonjour Je viens vers vous car j'ai un petit problème d'utilisation des requetes POST... J'utilisais avant Exosite (un site qui permet d'afficher sous forme de graphique les données que vous lui envoyez : portals.exosite.com C'est un bon site, et comme il n'y a pas possibilité d'utiliser encore les virtual sensor, je souhaite continuer à l'utiliser pour m'afficher ces données (qui marchaient avant grâce à un script google) Ce site me permettait de visualiser les données de la netatmo, ma consommation réelle horaire / journalière en fonction de la température extérieure, et même estimer la capacité de ma cuve d'eau de pluie grâce au pluviomètre netatmo. bref... Maintenant que j'ai la HC2, je souhaite me passer complètement de google script, tant qu'à faire ! Sauf que je n'arrive plus à utiliser l'API d'Exosite avec l'HC2... Il ne doit pas me manquer grand chose... j'espère que quelqu'un pourra m'aider ici Voici ce que dit l'API d'Exosite : Write one or more dataports of alias <alias> with given <value>. The client (e.g. device, portal) is identified by<CIK>. Data is written with the server timestamp as of the time the data was received by the server. Data cannot be written faster than a rate of once per second, doing so results in undefined behavior. If multiple aliases are specified, they are written at the same timestamp. request POST /onep:v1/stack/alias HTTP/1.1Host: m2.exosite.comX-Exosite-CIK: <CIK>Content-Type: application/x-www-form-urlencoded; charset=utf-8Content-Length: <length><blank line><alias 1>=<value 1>&<alias 2...>=<value 2...>&<alias n>=<value n> Avant dans le script google, j'envoyais les données comme ça (ça marchait très bien) : function addExosite() { // Variables : var options; var reponse; var headers; // Construit la requête de type post headers = {"X-Exosite-CIK":"efe553632247a********857a2b3c"}; options = { "method" : "post", "headers" : headers, "payload" : "Cuve=" + value; }; // Envoie la requête de type POST reponse = UrlFetchApp.fetch("http://m2.exosite.com/api:v1/stack/alias", options); reponse = reponse.getContentText("UTF-8"); } Et là , j'essaie d'envoyer avec l'HC2 (dans un virtual device) : fibaro:setGlobal("Payload_Exosite", "Cuve=2900") local payload = fibaro:getGlobalValue("Payload_Exosite") Exosite = Net.FHttp("http://m2.exosite.com") Exosite:POST("/api:v1/stack/alias", '{"X-Exosite-CIK":"efe553632247a************ab946857a2b3c", "payload":{'..payload..'}') Et ça ne marche pas... en débug, je n'ai pas d'erreur, mais je n'ai pas de retour, il doit me manquer un truc... Une idée ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
solarium Posté(e) le 25 février 2015 Signaler Partager Posté(e) le 25 février 2015 Bonsoir, A vue d'oeil, tu ouvres 2 accolades, mais n'en refermes qu'une seule dans le POST. Sinon, ce que je peux te conseiller est de surveiller le traffic HTTP sortant de la fibaro avec tcpdump ou wireshark. vu que tu est en http, c'est assez simple, et efficace. cdlt, Lien vers le commentaire Partager sur d’autres sites More sharing options...
mccyrille Posté(e) le 26 février 2015 Auteur Signaler Partager Posté(e) le 26 février 2015 Ah oui ! Mais bon finalement je suis parti sur une autre solution dans une scène (je croyais que ce n'était pas possible de faire appel à des requêtes dans une scène... mais si !) au moins je peux construire "proprement" la partie "option", et en plus j'ai la réponse ! au début j'avais réponse 401 : unauthorized maintenant, je suis autantifié, mais j'ai l'erreur 406 : not acceptable ce qui me laisse penser que c'est simplement une mise en forme des données... j'ai essayé avec payload et data, mais rien y fait. --[[ %% autostart %% properties %% globals --]] local httpClient = net.HTTPClient(); httpClient:request("http://m2.exosite.com/api:v1/stack/alias", { success = function(resp) fibaro:debug('Ok '..resp.data) end, error = function(err) fibaro:debug('Ok '..err) end, options = {method = 'POST', headers = {['X-Exosite-CIK'] = 'efe553632247a************4e46ab946857a2b3c'}, data = 'Cuve=2900' } }); du coup j'ai essayé aussi comme ça et comme ça... mais ça marche pas... une idée ?? options = {method = 'POST', headers = {['X-Exosite-CIK'] = 'efe553632247**********ab946857a2b3c'}, ['Cuve'] = '2900' } options = {method = 'POST', headers = {['X-Exosite-CIK'] = 'efe553632247************46ab946857a2b3c'}, Cuve = '2900' } Lien vers le commentaire Partager sur d’autres sites More sharing options...
mccyrille Posté(e) le 27 février 2015 Auteur Signaler Partager Posté(e) le 27 février 2015 J'y arrive pas j'y arrive pas j'y arrive pas Quelqu'un peut me dire comment faire une requête sous cette forme SVP ? request_packet = '' request_packet += 'POST /api:v1/stack/alias HTTP/1.1\r\n' request_packet += 'Host: m2.exosite.com\r\n' request_packet += 'X-Exosite-CIK: '+cik+'\r\n' request_packet += 'Connection: Close \r\n' request_packet += 'Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n' request_packet += 'Content-Length: '+ str(len(content)) +'\r\n' request_packet += '\r\n' # Must have blank line here request_packet += content # Must be same size as Content-Length specified print '--REQUEST:-----------------------' print str(request_packet) print '---------------------------------' # OPEN SOCKET s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('m2.exosite.com', 80)) # SEND REQUEST s.send(request_packet) # RECEIVE RESPONSE data = s.recv(2048) # CLOSE SOCKET s.close() Peut-être est-ce possible de le faire avec la fonction net.HTTPClient, mais ça ne veut pas Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lionel57 Posté(e) le 27 février 2015 Signaler Partager Posté(e) le 27 février 2015 Peut être une piste, mais je suppose que tu accèdes à ta page avec un login et un mot de passe. Et là , attention, probablement encodé. Dans ton navigateur, une truc genre "htttp://Login@Mdp/Url encode tes identifiants si nécessaire, mais quand tu écris du code, c'est à toi de prévoir le truc. Ce n'est peut être pas ça, juste une idée Il te faudrait un truc genre : httpClient:setBasicAuthentication(Utilisateur, MotDePasse); Lien vers le commentaire Partager sur d’autres sites More sharing options...
mccyrille Posté(e) le 27 février 2015 Auteur Signaler Partager Posté(e) le 27 février 2015 non non, c'est avec le "CIK", c'est un clé qui permet authentifier directement mon compte dans le script google, je mettais mon CIK dans le headers, et mes données dans le payload, c'est tout, ça marchait super bien, mais là impossible de construire la requête correctement Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lionel57 Posté(e) le 27 février 2015 Signaler Partager Posté(e) le 27 février 2015 Parfois, je me trouve aussi face àdes trucs incompréhensibles, pas forcément très propre, mais question de facilité, je contourne avec un script php et récupère le résultat sur la HC2 Lien vers le commentaire Partager sur d’autres sites More sharing options...
mccyrille Posté(e) le 27 février 2015 Auteur Signaler Partager Posté(e) le 27 février 2015 ouais mais làc'était pas vraiment ce que je voulais faire, la box doit pouvoir, c'est juste que je sais pas comment faire cette requête... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lionel57 Posté(e) le 27 février 2015 Signaler Partager Posté(e) le 27 février 2015 Je pense que si tant de gens se bouffe les cheveux avec des netatmo, des philips-hue ou autre, c'est que la HC2 ne respecte pas tous les protocoles. D'ailleurs, le LUA, c'est un peu un LUA à leur sauce, peut être le problème vient de là . Enfin c'est ce que je me dis, quand tout semble correct, que ça marche JAVA, en VB, en PHP, en LUA sur ma vieille Vera et que ça ne marche pas sur la HC2. Peut être il y a un truc, mais j'ai pris le plie du PHP, pour interroger les trucs distants, je récupère du brut dans mon code LUA sur la HC2, au moins, ça fonctionne et je n'ai plus besoin d'investir dans des solutions capillaires... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés