Aller au contenu

Messages recommandés

Posté(e)
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 ;-)

Posté(e)

P... on va le mater, ton truc, j'te dis :angry:

 

local token = response:match('\\\"token\\\":\\\"(.+)\\\",\\\"result')

print("token = " .. tostring(token))

 

  • Like 1
  • Upvote 1
Posté(e) (modifié)

@OJC@pepite@Steven@Lazer

alors là, @OJC chapeau bas :13::13::13:

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 :D

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é par Cardane
  • Like 2
Posté(e)

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 :D:D

Posté(e)

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...

  • Like 2
  • Upvote 1
Posté(e)

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.

  • Like 2
Posté(e)

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é

  • Like 2
Posté(e)
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 ?

Posté(e) (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é par OJC
  • Like 1
Posté(e)

@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 :D)

 

 

 

 

Posté(e)
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 ;-)

Posté(e)

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

Posté(e)

Yo, je te fais ca ce weekend, (faudra que je monte à l'échelle :D)...  mais comme de toute manière je crois que pour faire revivre ma télécommande je dois faire un reset des velux...

Posté(e)

@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 ?????

Posté(e)

 

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":[]}

 

Posté(e)

Et si tu dis : Ok Google, ouvre le Velux, ça ne fonctionne pas tout seul ?

 

 

Ok, je sors...

Posté(e)

@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 :(

Posté(e)

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...

Posté(e)

@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

×
×
  • Créer...