Aller au contenu
Cardane

Velux ... intégration avec HC2, un peu de teasing :-)

Recommended Posts

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 ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

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

 

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

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

 

Partager ce message


Lien à poster
Partager sur d’autres sites

@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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

merci pour l'explication :60:

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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é

Partager ce message


Lien à poster
Partager sur d’autres sites
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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

@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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

 

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites
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 ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah d'accord.

 

Tu pourras regarder sur tes plaques d'identification sur tes velux ce que tu as stp ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

 

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

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

 

 

Ok, je sors...

Partager ce message


Lien à poster
Partager sur d’autres sites

@Nico, non par contre si je dis "Dis Siri, ouvre les velux", ca marche :2:

Partager ce message


Lien à poster
Partager sur d’autres sites

mets ça pour voir :

token = string.gsub(token, "\\", "\\\\")

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Footer title

This content can be configured within your theme settings in your ACP. You can add any HTML including images, paragraphs and lists.

Footer title

This is an example of a list.

Footer title

This content can be configured within your theme settings in your ACP. You can add any HTML including images, paragraphs and lists.

Footer title

This content can be configured within your theme settings in your ACP. You can add any HTML including images, paragraphs and lists.

×
/* Navigation */ function ipsfocusNavigation() { var navwidth = 0; var morewidth = $('.ipsNavBar_primary .focus-nav-more').outerWidth(true); $('.ipsNavBar_primary > ul > li:not(.focus-nav-more)').each(function() { navwidth += $(this).outerWidth( true ) + 2; }); var availablespace = $('.ipsNavBar_primary').outerWidth(true) - morewidth; if (availablespace > 0 && navwidth > availablespace) { var lastItem = $('.ipsNavBar_primary > ul > li:not(.focus-nav-more)').last(); lastItem.attr('data-width', lastItem.outerWidth(true)); lastItem.prependTo($('.ipsNavBar_primary .focus-nav-more > ul')); ipsfocusNavigation(); } else { var firstMoreElement = $('.ipsNavBar_primary li.focus-nav-more li').first(); if (navwidth + firstMoreElement.data('width') < availablespace) { firstMoreElement.insertBefore($('.ipsNavBar_primary .focus-nav-more')); } } if ($('.focus-nav-more li').length > 0) { $('.focus-nav-more').removeClass('focus-nav-hidden'); } else { $('.focus-nav-more').addClass('focus-nav-hidden'); } } $(window).on('load',function(){ $(".ipsNavBar_primary").removeClass("focus-nav-loading"); ipsfocusNavigation(); }); $(window).on('resize',function(){ ipsfocusNavigation(); }); // Make hover navigation work with touch devices // http://osvaldas.info/drop-down-navigation-responsive-and-touch-friendly ;(function(e,t,n,r){e.fn.doubleTapToGo=function(r){if(!("ontouchstart"in t)&&!navigator.msMaxTouchPoints&&!navigator.userAgent.toLowerCase().match(/windows phone os 7/i))return false;this.each(function(){var t=false;e(this).on("click",function(n){var r=e(this);if(r[0]!=t[0]){n.preventDefault();t=r}});e(n).on("click touchstart MSPointerDown",function(n){var r=true,i=e(n.target).parents();for(var s=0;s ul > li:has(ul)').doubleTapToGo(); var browserResponsiveWidth = 980; var defaultBrowserWidth = $(window).width(); var headerHeight = $("#header").height(); var headerWrap = $(".headerWrap"); var headerBackgrounds = $(".headerBackgrounds"); var headerBlur = $(".headerBlur"); var blurEnd = 110; var headerEffects = function(){ var amountScrolled = $(window).scrollTop(); // Make navigation fixed if( amountScrolled >= headerHeight ){ headerWrap.addClass("fixedBlur"); } else { headerWrap.removeClass("fixedBlur"); } // Blur header if( (amountScrolled <= blurEnd) ){ headerWrap.removeClass("blurred"); } else { headerWrap.addClass("blurred"); } // Parallax effect var translateHeader = amountScrolled / 2; if( amountScrolled <= headerHeight ){ headerBackgrounds.css( "margin-top", translateHeader + "px" ); } else { headerBackgrounds.css( "margin-top", (headerHeight / 2) + "px" ); } } if( $('body').hasClass('wDesktop') ){ $(window).scroll(function(){ headerEffects(); }); }; });