pepite Posté(e) le 17 novembre 2017 Signaler Posté(e) le 17 novembre 2017 il y a 6 minutes, Cardane a dit : je viens de le mettre deux posts plus haut , ce n'est pas ca que tu veux ? tu as fait une copie d'ecran, @OJC veut pouvoir le copier-coller ;-) afin de recuperer le formatage du json et faire les tests sans avoir à te demander ;-)
OJC Posté(e) le 17 novembre 2017 Signaler Posté(e) le 17 novembre 2017 P... on va le mater, ton truc, j'te dis local token = response:match('\\\"token\\\":\\\"(.+)\\\",\\\"result') print("token = " .. tostring(token)) 1 1
Cardane Posté(e) le 17 novembre 2017 Auteur Signaler Posté(e) le 17 novembre 2017 (modifié) @OJC@pepite@Steven@Lazer alors là, @OJC chapeau bas je ne comprends toujours rien au pattern, mais CA MAAAAAARCHE !!!! une super grand merci à tous pour votre aide, je vais enfin pouvoir ouvrir mes Velux via la HC2 il me reste à intégrer la commande du run pour actionner les scènes du klf, remettre tout au propre, et vous faire un petit tuto un peu mieux torché si vous le désirez Modifié le 17 novembre 2017 par Cardane 2
Cardane Posté(e) le 17 novembre 2017 Auteur Signaler Posté(e) le 17 novembre 2017 oufffff, super content, le WAF rentre ce soir, et comme j'ai bousillé l'autre télécommande en faisant mes tests, je crois que si je n'avais pas de solution via la HC2, j'aurais encore entendu parler de ma domotique tout le weekend
OJC Posté(e) le 17 novembre 2017 Signaler Posté(e) le 17 novembre 2017 Juste pour expliquer... Le contenu de la variable response est : {"headers":{"Connection":"Keep-Alive","Content-Type":"application\/json","Content-Length":"100"},"status":200,"data":")]}',\n{\"token\":\"2|3Cfg0j0mOfSwsiIQISQA==\",\"result\":true,\"deviceStatus":{},\"errors\",[]"} On se concentre là dessus : \"token\":\"2|3Cfg0j0mOfSwsiIQISQA==\",\"result Le point délicat qui nous a bien baladé, ce sont les caractères d'échappement \ qu'il faut aussi échapper pour que le moteur lua ne les considère pas comme des caractères d'échappement et que tout foire. Tout en échappant également les guillemets. Ce qui donne ça : \\\"token\\\":\\\"2|3Cfg0j0mOfSwsiIQISQA==\\\",\\\"result Et il reste plus qu'à préciser dans la formule qu'on veut récupérer ce qui est vert, qu'on remplace donc par (.+) = + les parenthèses pour que la fonction comprenne que c'est ça qu'il doit retourner + le point pour lui dire qu'on se fout du caractère et qu'il prend tout ce qu'il trouve + le plus pour lui dire qu'il prend tout ce qu'il trouve peu importe le nombre de caractères Et on a la formule à lui donner à manger... 2 1
Cardane Posté(e) le 17 novembre 2017 Auteur Signaler Posté(e) le 17 novembre 2017 merci pour l'explication
OJC Posté(e) le 17 novembre 2017 Signaler Posté(e) le 17 novembre 2017 En revanche, là où tu vas peut être avoir un problème, c'est pour renvoyer le token vers la boitier de commande s'il contient un caractère d'échappement comme tout à l'heure... Si tu as un pb à ce niveau-là, tu peux faire un string.gsub(token, "\\", "\\\\") avant de l'utiliser, comme ça tout caractère d'échappement contenu dans le token sera lui-même échappé et le moteur lua le considèrera comme un caractère lambda. 2
Cardane Posté(e) le 17 novembre 2017 Auteur Signaler Posté(e) le 17 novembre 2017 ah oui, juste, il faut que je rajoute systématiquement ce bout de code avant de réutiliser le token, merci d'y avoir pensé 2
pepite Posté(e) le 17 novembre 2017 Signaler Posté(e) le 17 novembre 2017 il y a 30 minutes, Cardane a dit : si vous le désirez C'est désiré, faut pas oublier que je suis dans la grosse m..je n'arrive pas à réinitialiser mes Velux qui ont été associés dès la pose par les artisans au KUX100 et @Krikroff annonce bien que l'electronique ne veut plus faire autrement après ;-) il y a 20 minutes, OJC a dit : "result pourquoi s'occuper du result au fait, je ne comprends pas. ca ne fait pas partie du token ? si ?
OJC Posté(e) le 17 novembre 2017 Signaler Posté(e) le 17 novembre 2017 (modifié) @pepite Non, mais c'est pour que la fonction sache où s'arrêter. Comme on lui demande de ramener tous les caractères après \"token\":\", il faut lui dire où s'arrêter autrement qu'avec \", puisque sinon, elle te ramène tout jusqu'à errors inclus. Mais sinon, il est vrai que local token = response:match('\\\"token\\\":\\\"(.+)\\\",\\\"') marche aussi. Modifié le 17 novembre 2017 par OJC 1
Cardane Posté(e) le 17 novembre 2017 Auteur Signaler Posté(e) le 17 novembre 2017 @pepite, pas de problème je vais essayer de faire ca dans les meilleurs délais (suis un peu débordé ce weekend mais je vais essayer) par contre tu as bien des Velux Integra ? parce que j'ai l'impression que ca ne marche qu'avec ca... ou tu as des velux que tu as motorisé par la suite ? oui, moi aussi quand le gars est venu installer les velux il avait un KUX100, mais je ne voyais pas l'intérêt d'installer ce truc puisque de toute manière ils étaient fournis avec la télécommande tactile KLR200 (celle que je viens de bousiller )
pepite Posté(e) le 17 novembre 2017 Signaler Posté(e) le 17 novembre 2017 il y a 2 minutes, Cardane a dit : Velux Integra je dis oui mais tu me mets le doute d'un coup. Je ne les ai pas motorises, les volets l'etaient deja à l'install puisq'ils ont associé les KUX le jour même ;-) JE verifierai. Pas d'urgence tout de meme, puisque comme un c..j'avais enlevé tous les KUX comme j'ai fait le placo. ;-) Fau donc que je les reinstalle et les reassocie et que je trouve une autre destination pour l'IPX 800V4 qui etait prevu pour gerer les velux ;-)
Cardane Posté(e) le 17 novembre 2017 Auteur Signaler Posté(e) le 17 novembre 2017 ah tu parles des volets toi ? moi je parle des moteurs d'ouverture des velux. Les Integra, ils arrivent avec le moteur d'ouverture et toute la connectique pour venir brancher rapidement tous les autres accessoires, comme les volets, les stores, les lampes, etc et d'office tu les retrouves sur la télécommande. en fait moi je n'ai qu'un câble d'alimentation 220v qui arrive au Velux
pepite Posté(e) le 17 novembre 2017 Signaler Posté(e) le 17 novembre 2017 Ah d'accord. Tu pourras regarder sur tes plaques d'identification sur tes velux ce que tu as stp ;-)
Cardane Posté(e) le 17 novembre 2017 Auteur Signaler Posté(e) le 17 novembre 2017 Yo, je te fais ca ce weekend, (faudra que je monte à l'échelle )... mais comme de toute manière je crois que pour faire revivre ma télécommande je dois faire un reset des velux...
Cardane Posté(e) le 17 novembre 2017 Auteur Signaler Posté(e) le 17 novembre 2017 @OJC re salut bon, mauvaise nouvelle, en fait dès que le token contient un caractère d'échappement, ca ne marche pas... mon test c'est d’enchaîner un login, puis un logout, donc lors de l'appel au logout je lui passe comme paramètre le token obtenu lors du login. j'ai bien rajouté le peit bout de code que tu m'as donné ci-dessus mais je reçois un access denied (erreur 403) lors de l'appel au logout. si c'est un token normal, ca marche tu as une idée ?????
Cardane Posté(e) le 17 novembre 2017 Auteur Signaler Posté(e) le 17 novembre 2017 voici le code -- Authentification local ip = "192.168.1.33" local url = 'http://'.. ip .. '/api/v1/auth' local dataslogin = '{"action":"login","params":{"password":"velux123"}}' local dataslogout = '{"action":"logout","params":{}}' local klf = net.HTTPClient() klf:request(url , { success = function(response) fibaro:debug(json.encode(response)) local temp = json.encode(response) local key = "token" local token = temp:match('\\\"token\\\":\\\"(.+)\\\",\\\"result') string.gsub(token, "\\", "\\\\") fibaro:debug("token\n") fibaro:debug("") fibaro:debug(token) klf:request(url , { success = function(response) fibaro:debug("Je suis dans response\n") fibaro:debug("response\n") fibaro:debug(json.encode(response)) fibaro:debug("response.data\n") fibaro:debug(response.data) end, error = function(err) print ("Je suis dans err") print('error = ' .. err) end, options = { method = 'POST', headers = { ["content-type"] = 'application/json, charset=utf-8', ["Authorization"] = "Bearer "..token, }, data = dataslogout } }) end, error = function(err) print ("Je suis dans err") print('error = ' .. err) end, options = { method = 'POST', headers = { ["content-type"] = 'application/json, charset=utf-8', }, data = dataslogin } }) et voici le debug [DEBUG] 20:28:54: {"data":")]}',\n{\"token\":\"Ezm\/TjhEQwAWeEhrpWu\/YA==\",\"result\":true,\"deviceStatus\":\"IDLE\",\"data\":{},\"errors\":[]}","status":200,"headers":{"Content-Length":"100","Connection":"Keep-Alive","Content-Type":"application\/json"}} [DEBUG] 20:28:54: token [DEBUG] 20:28:54: [DEBUG] 20:28:54: [DEBUG] 20:28:54: Ezm\/TjhEQwAWeEhrpWu\/YA== [DEBUG] 20:28:55: Je suis dans response [DEBUG] 20:28:55: [DEBUG] 20:28:55: response [DEBUG] 20:28:55: [DEBUG] 20:28:55: {"data":"HTTP\/1.1 403\r\nContent-Type: application\/json\r\nConnection: Keep-Alive\r\nContent-Length: 65\r\n\r\n)]}',\n{\"result\":true,\"deviceStatus\":\"IDLE\",\"data\":{},\"errors\":[]}","status":1,"headers":{}} [DEBUG] 20:28:55: response.data [DEBUG] 20:28:55: [DEBUG] 20:28:55: HTTP/1.1 403 [DEBUG] 20:28:55: Content-Type: application/json [DEBUG] 20:28:55: Connection: Keep-Alive [DEBUG] 20:28:55: Content-Length: 65 [DEBUG] 20:28:55: [DEBUG] 20:28:55: )]}', [DEBUG] 20:28:55: {"result":true,"deviceStatus":"IDLE","data":{},"errors":[]}
Nico Posté(e) le 17 novembre 2017 Signaler Posté(e) le 17 novembre 2017 Et si tu dis : Ok Google, ouvre le Velux, ça ne fonctionne pas tout seul ? Ok, je sors...
Cardane Posté(e) le 17 novembre 2017 Auteur Signaler Posté(e) le 17 novembre 2017 @Nico, non par contre si je dis "Dis Siri, ouvre les velux", ca marche
OJC Posté(e) le 18 novembre 2017 Signaler Posté(e) le 18 novembre 2017 mets ça pour voir : token = string.gsub(token, "\\", "\\\\")
Cardane Posté(e) le 18 novembre 2017 Auteur Signaler Posté(e) le 18 novembre 2017 @OJC toujours le même problème... en plus c'est chiant, faut que je teste 20 fois avant qu'il ne me génère un token avec un caractère comme ca
OJC Posté(e) le 18 novembre 2017 Signaler Posté(e) le 18 novembre 2017 Essaie comme ça : options = { method = 'POST', headers = { ["content-type"] = 'application/json, charset=utf-8', ["Authorization"] = "Bearer ".. string.gsub(token, "\\", "\\\\"), }, Sinon, une fois que tu as un token, c'est mort pour en avoir un autre tant que la session est en cours ? Parce que sinon, il suffirait de vérifier s'il y a ces %#§!& de caractères d'échappement dedans pour aller en chercher un autre...
Cardane Posté(e) le 18 novembre 2017 Auteur Signaler Posté(e) le 18 novembre 2017 @OJC en fait il faudrait l'équivalent du jq -r qu'il utilise dans le shell script (comme j'ai mis en page 3), mais là, je ne connais pas du tout assez bien lua pour ca
Messages recommandés