Aller au contenu

Recommended Posts

Ton "options" est mal formaté, c'est plutôt un truc dans ce genre là :

 

local myJson = {
	"event": {
		"cgi": "modzona",
		"system_number": "1",
		"zone_number": "4",
		"option": "state",
		"value": 0,
		"device_id": "5a37f4167765621039320000"
	}
}

local http = net.HTTPClient()
http:request('https://airzonecloud.com/events/' .. myConsigne, {
	options = {
		method = 'PUT',
		data = json.encode(myJson)
	},
	-- la suite ...
}

 

Modifié par Lazer

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci !

 

j'ai posé la variable myJson sur une seule ligne car sinon j'ai toujours des erreur de

local myJson = '{
	"event": {
		"cgi": "modzona",
		"system_number": "1",
		"zone_number": "4",
		"option": "state",
		"value": 0,
		"device_id": "5a37f4167765621039320000"
	}
}'

local myJson =

local http = net.HTTPClient()
http:request('www.airzonecloud.com/events/?user_email=****&user_token=****' , {
	options = {
		method = 'PUT',
		data = json.encode(myJson)
	},
	fibaro:debug('Retour : '.. myJson)
})

 

[DEBUG] 22:54:20: [1;31m2018-06-15 22:54:20.597466 [ fatal] Unknown exception: /opt/fibaro/scenes/47.lua:15: '}' expected (to close '{' at line 14) near ':'

 

 

et si je pose en ligne :

 

local myJson = '{ "event": {"cgi": "modzona", "system_number": "1", "zone_number": "4", "option": "state", "value": 0, "device_id": "5a37f4167765621039320000" }}'
local http = net.HTTPClient()
http:request('www.airzonecloud.com/events/?user_email=****&user_token=****' , {
	options = {
		method = 'PUT',
		data = json.encode(myJson)
	},
	fibaro:debug('Retour : '.. myJson)
})
[DEBUG] 22:53:24: Retour : { "event": {"cgi": "modzona", "system_number": "1", "zone_number": "4", "option": "state", "value": "0", "device_id": "5a37f4167765621039320000" }}

[DEBUG] 22:53:24: �[1;31m2018-06-15 22:52:24.972194 [ fatal] Unknown exception: std::runtime_error: 'Invalid argument'

:15: 

Partager ce message


Lien à poster
Partager sur d’autres sites

@Lazer toc toc toc :(

bon je me doute qu'avec Alexa mon sujet n’intéresse pas grand monde ( visiteur 1 ( moi))  lol mais puis je avoir ton analyse sur le message d'erreur? et vers quel coté chercher ?

Est-ce une erreur du coté de la requette qui semble fausse du myjson ou de la 'method'  ? 

 

merci :D

 

Modifié par Bloug

Partager ce message


Lien à poster
Partager sur d’autres sites

euh, je crois que c'est juste ton code LUA qui est mal formaté, avec des virgules ou des accolades placées n'importe où.

 

Je t'ai donné un exemple de code, mais désolé je n'ai pas le temps de tester du LUA, donc c'est purement théorique....

Sinon aide toi des nombreux exemples sur le forum.

 

Par exemple le dernier code que j'ai partagé utilisant httpclient() est dans la scène sur le tuto Yamaha MusicCast.

Mais ce n'est pas le seul.

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 50 minutes, Lazer a dit :

 avec des virgules ou des accolades placées n'importe où.

loool :D

 

impec je regarde cela :)

merci.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

désolé c'était mal formulé :lol:

Mais c'est en substance ce que te dis le message d'erreur.

Partager ce message


Lien à poster
Partager sur d’autres sites

y'a pas de pb lol

C'est la fameuse erreur entre la chaise et le clavier

Partager ce message


Lien à poster
Partager sur d’autres sites

Bloug, désolé, toujours pas de code LUA, mais j'ai rédigé un mini tuto qui, je l'espère, t'aidera un peu à y voir plus clair :

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Oh cool !

Merci beaucoup je vais prendre une aspirine avant :P

Partager ce message


Lien à poster
Partager sur d’autres sites

Voici mon pb :

 

Je souhaite utiliser des fonctions de mon system AirZone via la HC2 pour combiner des actions ( fenetre ouverte ==> push ==> extinction de la zone  ou genre   CO2 > xx =>> mode ventilation etc... )

L'API AirZone n'est pas publique mais dans le dernier Airzone m'informent qu'ils y bossent .... ( bientot 1ans ... )

 

Du coup je me suis amusé avec le sniffer Android : Packet Capture :  pc.png.d120f8996dc5a82c47d4323cc41a2f1c.png  où j'ai trouver des infos comme les requêtes GET sur mon Groupe Nuit composée de 4 Zones  :

https://airzonecloud.com/zones/?format=json&system_id=5b139f1ef51445a30df80c69&user_email=*****&user_token=*****

ou mon Groupe Jour composée d'une seule Zone :

https://airzonecloud.com/zones/?format=json&system_id=5b139f1ef51445a30df80c6f&user_email=*****&user_token=*****

 

Voici voici un extrait du retour de la requête ( j'ai coupé pour pas la faire trop longue ) Zone NUIT  :

 

{
	"zones": [
		{
			"id": "5b139f1ef51445a30df80c6c",
			"system_id": "5b139f1ef51445a30df80c69",
			"device_id": "5a37f4167765621039320000",
			"modes": "1111111011",
			"warning": "0",
			"name": "Alyssa",
			"system_number": "1",
			"zone_number": "3",
			"state": "0",
			"consign": "25.0",
			"temp": "25.8",
			"mode": "1",
			"velocity": null,
			"show_velocity": null,
			"sleep": "0",
			"lower_conf_limit": "18.0",
			"upper_conf_limit": "30.0",
			"master": null,
			"eco": "0",
			"prog_enabled": "0",
			"speed_prog_mode": null,
			"show_ventilation": "1",
			"updated_at": 1529765477,
			"setup_type": "0",
			"class": "Zone",
			"last_update": 1529765477,
			"next_schedule_number": "0",
			"led": null,
			"offset": null,
			"cold_offset": null,
			"heat_offset": null,
			"scene": null,
			"air_flow": null,
			"humidity": null,
			"coldConsign": "",
			"heatConsign": "",
			"auto": false,
			"temperature_unit": false,
			"config": {
				"id": "5b159daaf51445a30df8123c",
				"cold_values": null,
				"heat_values": null,
				"cold_angle": null,
				"heat_angle": null,
				"swing_horizontal": null,
				"swing_vertical": null,
				"antifreeze": "0",
				"vla": null,
				"zone_number": "3",
				"slave": null,
				"master": null,
				"basic_mode": null,
				"ambient_temp": null,
				"heat_type": null,
				"cold_type": null,
				"heat_type_config": null,
				"cold_type_config": null,
				"ventilation": null,
				"q_weight": null,
				"window": null,
				"presence": null,
				"spray_dew": null,
				"local_vent": null,
				"tact_fw": null,
				"firm_lm": null,
				"manufacturer": null,
				"led": null,
				"confort_cold_consign": null,
				"confort_heat_consign": null,
				"eco_cold_consign": null,
				"eco_heat_consign": null,
				"unocupied_cold_consign": null,
				"unocupied_heat_consign": null,
				"vacation_cold_consign": null,
				"vacation_heat_consign": null,
				"firm_ws": "3.10",
				"offset": null,
				"errors": "0",
				"zone_id": "5b139f1ef51445a30df80c6c",
				"automatic_weight": null,
				"autochange_differential": null,
				"offset_environment_cold": null,
				"offset_environment_heat": null
.......................................................
			}
		},
		{
			"id": "5b139f1ef51445a30df80c6d",
			"system_id": "5b139f1ef51445a30df80c69",
			"device_id": "5a37f4167765621039320000",
			"modes": "1111111011",
			"warning": "0",
			"name": "Bureau",
    
.......................................................
			}
		},
		{
			"id": "5b139f1ef51445a30df80c6a",
			"system_id": "5b139f1ef51445a30df80c69",
			"device_id": "5a37f4167765621039320000",
			"modes": "1111111011",
			"warning": "0",
			"name": "Parents",
.......................................................
		},
		{
			"id": "5b139f1ef51445a30df80c6b",
			"system_id": "5b139f1ef51445a30df80c69",
			"device_id": "5a37f4167765621039320000",
			"modes": "1111111011",
			"warning": "0",
			"name": "Sport",
		}
	]
}

j'ai donc accès avec le GET  aux info importante grace au code :

 

local http = net.HTTPClient()
http:request('https://airzonecloud.com/zones/' .. myAuthNuit, {
	options = {
		method = 'GET'
	},
	success = function(response)
		if response.status == 200 then
			if response.data and response.data ~= "" then
				local jsonTable = json.decode(response.data)
-- Alyssa
				local nameAlyssa = jsonTable.zones[1].name 
			    local consAlyssa = jsonTable.zones[1].consign 
				local tempAlyssa = jsonTable.zones[1].temp 
				local modeAlyssa = jsonTable.zones[1].mode 
				local etatAlyssa = jsonTable.zones[1].state
          		local lupdAlyssa = jsonTable.zones[1].last_update

-- Etat de la Zone Alyssa    
		  if etatAlyssa == "0" then 
            etatAlyssa = " arret " 
          elseif etatAlyssa == "1" then 
            etatAlyssa = " marche " 
          end
	  
-- Mode de travail Alyssa 
          if modeAlyssa == "1" then
             modeAlyssa = " Refroidissement " 
      elseif modeAlyssa == "3" then 
             modeAlyssa = " Chauffage " 
      elseif modeAlyssa == "5" then 
             modeAlyssa = " Deshumidification " 
      elseif modeAlyssa == "7" then 
             modeAlyssa = " Ventilation " 
          end  
   
--  Débug Alyssa 
				fibaro:debug( 'Zone Nuit : ' .. nameAlyssa )
				fibaro:debug( 'Consigne à :' .. consAlyssa .. '°C  --  Température Actuelle : ' .. tempAlyssa .. '°C ' )
				fibaro:debug( 'Mode de Fonctionnement :' .. modeAlyssa .. '  --  Etat Actuel : en' .. etatAlyssa )
				fibaro:debug( '*************' )
          --- Suite ci dessous ---
         
			else
				fibaro:debug("Error : empty response data")
			end
		else
			fibaro:debug("Error : status=" .. tostring(response.status))
		end
	end,
	error = function(err)
		fibaro:debug("Error : " .. err)
	end
})

 

 

Enfin analyser les modifications avec packet caputure sur la mise en marche et arrêt d'une zone  j'ai le  POST suivant :

 

 

POST /events/?user_email=********&user_token=******** HTTP/1.1 
Host: www.airzonecloud.com 
Connection: keep-alive 
Content-Length: 131 
Accept: application/json, text/plain, */* 
Origin: file:// 
X-Requested-With: XMLHttpRequest 
User-Agent: Mozilla/5.0 (Linux; Android 8.0.0; SM-G950F Build/R16NW; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/67.0.3396.87 Mobile Safari/537.36 
Content-Type: application/json;charset=UTF-8 
Accept-Encoding: gzip, deflate 
Accept-Language: fr-FR,en-US;q=0.9


{
  "event": {
    "cgi": "modzona",
    "system_number": "1",
    "zone_number": "4",
    "option": "state",
    "value": 0,
    "device_id": "5a37f4167765621039320000"
  }
}

ou j'utilise donc ta scene :

 


local myAuth = ( '?user_email=' .. user_email .. '&user_token=' .. user_token )

-- ====================== Z O N N E   N U I T ===================== --

-- Appel HTTPS
local http = net.HTTPClient()
http:request('https://airzonecloud.com/events/' .. myAuth, {
	success = function(response)
		if response.status == 200 then
			if response.data and response.data ~= "" then
				fibaro:debug('Retour : '.. response.data)
				local jsonTable = json.decode(response.data)
				-- Parcours de la table JSON
				local k, v
				for k, v in pairs(jsonTable) do
					fibaro:debug("key = " .. k .. " - type(v) = " .. type(v))
				end
				-- Ici la suite du code, exécuté en asynchrone, donc après la fin de l'exécution du code appelant http:request()
				-- ...
			else
				fibaro:debug("Error : empty response data")
			end
		else
			fibaro:debug("Erreur : status=" .. tostring(response.status))
		end
	end,
	error = function(err)
		fibaro:debug("Erreur : " .. err)
	end,
	options = {
		method = 'POST',
          data = '{"event":{"cgi":"modzona","system_number":"1","zone_number":"4","option":"state","value":1,"device_id":"5a37f4167765621039320000"}}' 
    }
})
-- Ici la suite du code, exécuté en synchrone, donc avant l'exécution du contenu de la fonction success()
-- ...

 

mais j'ai une Erreur : 401 unauthorized

[DEBUG] 09:29:05: Erreur : status=401

 

déjà pour le data je suis obligé de le réduire en une ligne et de le placer entre des  '  '   (  Ôhhh passage,  suis passé par le site : https://codebeautify.org/jsonviewer  )

 

  data = '{"event":{"cgi":"modzona","system_number":"1","zone_number":"4","option":"state","value":1,"device_id":"5a37f4167765621039320000"}}' 

 sinon j'ai toujours des erreurs, même si je le pose sous la forme :

data = {
	"event": {
		"cgi": "modzona",
		"system_number": "1",
		"zone_number": "4",
		"option": "state",
		"value": 1,
		"device_id": "5a37f4167765621039320000"
	}
}

 

Donc pour GET je passe par ici :

http:request('https://airzonecloud.com/zones/' .. myAuthNuit, {

et pour POST par là :

http:request('https://airzonecloud.com/events/' .. myAuth, {

 

mais rien dans le navigateur si je colle la ligne : https://airzonecloud/events/?user_email=******&user_token=*****

 

d'où ma question de hier de faire un POST directement après le GET en utilisant  le : jsonTable.zones[1].state = "1"   sur la requette :  https://airzonecloud.com/zones/  et non   /events/...

 

 

j'espère avoir été assez clair :S  lol

merci.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Déjà tu as le début de réponse de ton problème dans le message : 401 Utilisateur non authentifié

Donc un problème avec ton login/mot de passe.

Vu que c'est une adresse email, je te conseille de faire un urlencode() de ton adresse avant de la donner en argument.

Tu trouveras le code de la fonction urlencode() sur le forum, par exemple sur le topic de SMS Gateway.

 

Je ne sais pas si ça suffira, mais c'est un début.

 

 

Une fois que tu auras résolu ton problème d'authentification, il faut passer les data proprement. J'ai bien précisé sur l'autre topic qu'il faut que ça soit une chaine de caractères.
Donc ton premier code avec les guillemets devrait être correct.

Le second où tu passes un tableau ne peut pas fonctionner, sauf si tu fais un json.encode() de ce tableau. Ce qui devrait te donner la même chaine de caractère qu'au dessus.... à vérifier avec des affichages fibaro:debug()

Partager ce message


Lien à poster
Partager sur d’autres sites

merci beaucoup @Lazer pour ton temps !

 

j'a donc trouvé la fonction urlencode()  que j'ai adapté pour l'authentification   t

 

local myAuth = ( '?user_email=' .. urlencode(tostring(user_email)) .. '&user_token=' .. user_token )

          function urlencode(str)
	if (str) then
		str = string.gsub (str, "\n", "\r\n")
		str = string.gsub (str, "([^%w ])",
		function (c) return string.format ("%%%02X", string.byte(c)) end)
		str = string.gsub (str, " ", "+")
	end
	return str
end
fibaro:debug("urlencode : " .. urlencode(tostring(user_email)))


[DEBUG] 06:47:41: Erreur : status=401           <---- mais toujours le meme pb  . L'erreur 401 ( unauthorized )

 

 

Modifié par Bloug

Partager ce message


Lien à poster
Partager sur d’autres sites

peut etre une autre piste , en trifouillant le sniffer j'ai trouvé une commande PUT qui change également l’état :

PUT
/zones/5b139f1ef51445a30df80c6c?user_email=*****&user_token=*****


{
"zone": {
"state": "1"
  }
}

voici mon code :

 

--================= IDENTIFICATION ===========================================

local serveur     = 'airzonecloud.com'
local user_email  = '*******'
local user_token  = '*******'
local regist_Id   = '*******'

--============================================================================

local device_ID    = '5a37f4167765621039320000'  ----- ID du System ------
local espace_Jour  = '5b139f1ef51445a30df80c6f'  --  Jour
local zone_Salon   = '5b139f1ef51445a30df80c70'  --------------- Salon   0
local espace_Nuit  = '5b139f1ef51445a30df80c69'  --  Nuit
local zone_Parents = '5b139f1ef51445a30df80c6a'  --------------- Parents 0
local zone_Sport   = '5b139f1ef51445a30df80c6b'  --------------- Sport   1
local zone_Alyssa  = '5b139f1ef51445a30df80c6c'  --------------- Alyssa  2 
local zone_Bureau  = '5b139f1ef51445a30df80c6d'  --------------- Bureau  3

--============================================================================
local myAuthJour = ( '/?format=json&system_id=' .. espace_Jour .. '&user_email=' .. user_email .. '&user_token=' .. user_token )
local myAuthNuit = ( '/?format=json&system_id=' .. espace_Nuit .. '&user_email=' .. user_email .. '&user_token=' .. user_token )
local myAuth = ( '?user_email=' .. urlencode(tostring(user_email)) .. '&user_token=' .. user_token )

          function urlencode(str)
	if (str) then
		str = string.gsub (str, "\n", "\r\n")
		str = string.gsub (str, "([^%w ])",
		function (c) return string.format ("%%%02X", string.byte(c)) end)
		str = string.gsub (str, " ", "+")
	end
	return str
end
--fibaro:debug("urlencode : " .. urlencode(tostring(user_email)))


-- Appel HTTPS
local http = net.HTTPClient()
http:request('https://airzonecloud.com/zones/' .. zone_Bureau .. myAuth, {
	success = function(response)
		if response.status == 200 then
			if response.data and response.data ~= "" then
				fibaro:debug('Retour : '.. response.data)
				local jsonTable = json.decode(response.data)
				-- Parcours de la table JSON
				local k, v
				for k, v in pairs(jsonTable) do
					fibaro:debug("key = " .. k .. " - type(v) = " .. type(v))
				end
				-- Ici la suite du code, exécuté en asynchrone, donc après la fin de l'exécution du code appelant http:request()
				-- ...
			else
				fibaro:debug("Error : empty response data")
			end
		else
			fibaro:debug("Erreur : status=" .. tostring(response.status))
		end
	end,
	error = function(err)
		fibaro:debug("Erreur : " .. err)
	end,
	options = {
		method = 'PUT',
		data = '{"zone":{"state":"1"}}'
	}
})
-- Ici la suite du code, exécuté en synchrone, donc avant l'exécution du contenu de la fonction success()
-- ...

 

malheureusement j'ai également une erreur mais.....  différente :D :

 

 

[DEBUG] 07:21:31: Erreur : Bad file descriptor

 

peut être qu'ici le pb peut être contourné

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour le urlencode(), il faut encoder l'ensemble "email:password"

 

Pour le second exemple, le fonction échoue car tu concatènes la variable myAuth à l'url.
Mais cette variable myAuth n'est pas une chaine de caractères, mais un tableau... il faut donc que tu la formates correctement à la main ou avec json.encode

Partager ce message


Lien à poster
Partager sur d’autres sites

pour le urlencode() tu parle de "email:password"  dans mon cas j'ai une "email"  &user_token= "Token"

c'est l'ensemble de la ligne que je dois encoder : email&user_token=Token

car en encodant chacun de son coté , meme problème. , le token est genre : 3ICzvRojbmRZ-BjuNEOqy0vUQSudNYOMedHwTFt8

 

Pour la seconde :

j'ai modifié avec :

 

https://airzonecloud.com/zones/?format=json&system_id=5b139f1ef51445a30df80c6c?user_email=*****&user_token=****

qui me donne du 404 - mais dans le navigateur j'ai : 

 

{"error":"Il est nécessaire que vous soyez inscrit afin de pouvoir continuer."}

 

 

Modifié par Bloug

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah oui tu as raison, je n'avais pas fait attention à l'URL, dans ton cas il n'y a que le email à urlencoder.

Je pense que le token n'a pas besoin de l'être (mais tu peux essayer et comparer, je pense que ça sera identique)

 

Par contre là je ne sais pas trop quoi te conseiller de plus.... essayer de sniffer le flux qu'envoie la HC2 pour le comparer avec ce que tu sniffe depuis ton application, pour voire quelles seraient les différences.

Partager ce message


Lien à poster
Partager sur d’autres sites

J'avance sur la 2eme solution !

avec deja un piège de la team AirZone ! suite à un coup de tel hier à la hotline le tech c'est connecté dessus et du coup le Token à changé .... donc j'arrive à règler le pb de l'dentification :

 
{"error":"Il est nécessaire que vous soyez inscrit afin de pouvoir continuer."}

ensuite mes deux coquilles :

https://airzonecloud.com/zones/?format=json&system_id=5b139f1ef51445a30df80c6c?user_email=*****&user_token=****

déjà j'ai deux erreurs dans l'url  : le ? je pense qu'il faut le remplacer par une & , et le system_id lui est pour le Groupe Nuit et non la "Zone" donc à remplacer par l’étiquette : id

 

https://airzonecloud.com/zones/?format=json&device_id=5b139f1ef51445a30df80c6d&user_email=*****&user_token=*****

 

quand je colle cela dans mon navigateur celui ci m'affiche :

{"zones":[]}

je pense donc arriver pas trop loin du bon endroit :) vu que la commande du  PUT est : data = '{"zone":{"state":"1"}}'

reste à comprendre pourquoi du coté de la HC2 j'ai une erreur 404  

 

 

Edit : en fait non même avec  : https://airzonecloud.com/zones/?format=json&user_email=*****&user_token=***** j'ai le meme retour ....

 

 

Modifié par Bloug

Partager ce message


Lien à poster
Partager sur d’autres sites

@Lazer

juste pour être sur .... si mon url : 

https://airzonecloud.com/zones/?format=json&device_id=5a37f4167765621039320000&user_email=*****&user_token=*****


me retourne un json tout plein d'info quand je la pose dans un navigateur....

cette meme URL placé dans mon http:request n'est pas censé me retourner une erreur 404 ( not Found ) non ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui je confirme, deux "?" dans l'URL ce n'est pas possible, il faut remplacer le second par un "&"

 

Effectivement il est étrange que via la HC2 tu obtiennes un code 404 Not Found.

Il faut bien penser à urlencoder proprement le user_email

Partager ce message


Lien à poster
Partager sur d’autres sites

je viens de de tout RE-vérifier,

 

j'encode le mail , j'encode le token , je débug l'ensemble et le résultat copier dans le navigateur marche mais avec la HC2 .... 404

 

 

[DEBUG] 12:07:58: mail : *****%40*****%2E**
[DEBUG] 12:07:58: token : ******%5F******
[DEBUG] 12:07:58: auth : ?format=json&device_id=5a37f4167765621039320000&user_email=*****%40*****%2E**&user_token=******%5F*****

 

y'a surement une sécurité c'est pas possible ..... des redirections ou autre...

Partager ce message


Lien à poster
Partager sur d’autres sites

Plutôt que de debugguer chaque variable individuellement, tu devrais concaténer tout cela dans une variable url

puis tu affiches le contenu de url

et enfin tu passes url tel tel en argument de la fonction http()

 

Parce que si ça se trouve, ça coince au moment où tu concatène toutes tes variables au moment de faire l'appel http

 

Et si il y avait une redirection, ce n'est pas un 404, mais un code 302 que tu aurais.

Partager ce message


Lien à poster
Partager sur d’autres sites
local fullurl      = ( serveur .. myAuth_DID )
--============================================================================

-- Fonction Urlencode()

          function urlencode(str)
	if (str) then
		str = string.gsub (str, "\n", "\r\n")
		str = string.gsub (str, "([^%w ])",
		function (c) return string.format ("%%%02X", string.byte(c)) end)
		str = string.gsub (str, " ", "+")
	end
	return str
end
fibaro:debug('<font color="green"> fullurl : </font>' .. fullurl )


-- Appel HTTPS

local http = net.HTTPClient()

http:request(fullurl, {
	success = function(response)
		if response.status == 200 then

 

le débug de la variable fullurl copié dans le navigateur fonctionne parfaitement

 

c'est pas demain que je hack qq moi .....

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

:lol:

 

bon bah décidément là je ne sais pas....

Partager ce message


Lien à poster
Partager sur d’autres sites

je vais continuer à chercher ! doucemanette ;)

 

Encore merci ! :D

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon j'avance ! et bien même 

Je me suis concentré sur le problème de Token qui change souvent, il faut s'identifier avec un POST qui retourne alors le bon Token et j'ai trouvé comment faire marcher mon POST grace à  https://apitester.com/

 

en fait j'ai besoin du/des bon Headers sinon la requette merdouille et de bidouillé l'encodage du data

 

 

local http = net.HTTPClient()
http:request('https://www.airzonecloud.com/users/sign_in/', {
	success = function(response)
		if response.status == 201 then
			if response.data and response.data ~= "" then
		      --fibaro:debug('Retour : '.. response.data)
				local jsonTable = json.decode(response.data)
				local k, v
				for k, v in pairs(jsonTable) do
				end
                   
                fibaro:setGlobal("airzone_Token", jsonTable.user.authentication_token) -- Token envoyé dans une variable
			else
				fibaro:debug("Error : empty response data")
			end
		else
			fibaro:debug("Erreur : status=" .. tostring(response.status))
		end
	end,
	error = function(err)
		fibaro:debug("Erreur : " .. err)
	end,
    options = {
		method = 'POST',
      headers = {["Content-Type"] = "application/json;charset=UTF-8",},
      data = "{\"email\":\"******\",\"password\":\"********\"}"
	}
})

 

Enfin j'arrive egalement a reproduire une commande ON ou OFF d'une Zone MAIS je suis obliger de m'identifier avant :(

sur api test.com j'y arrive seulement grace à la fonction STEP en deux étapes :

 

STEP1 : Identification via un POST

STEP2 : Demande de modif de zone via un Post ( avec d'autre arguments en header )

 

le second POST est vers :

 

https://www.airzonecloud.com/events/?user_email=******&user_token=******

avec le data :

"{\"event\":{\"cgi\":\"modzona\",\"system_number\":\"1\",\"zone_number\":\"4\",\"option\":\"state\",\"value\":0,\"device_id\":\"5a37f4167765621039320000\"}}"

 

Donc ma question Comment faire cela ?  faut il reproduire l'ensemble du code en déut de mon post :

 

comme dans ton tuto sous  : 

-- Ici la suite du code, exécuté en synchrone, donc avant l'exécution du contenu de la fonction success()

ou sous :

-- Ici la suite du code, exécuté en asynchrone, donc après la fin de l'exécution du code appelant http:request()

ou 3eme option un truc de fous d'informaticien ? 

 

 

 

MErci 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

×