c-lol Posté(e) le 13 décembre 2014 Signaler Posté(e) le 13 décembre 2014 HC2 : V3.590 Salut à tous, je viens m'en remettre aux spécialistes du dev, après plusieurs heures sur le même problème. Lors d'une requête POST vers la HC2, j'ai l'erreur suivante : {"type":"ERROR","reason":"MISSING_PARAMETER","message":"name: missing required parameter"} Mais quel est ce paramètre requis? La doc développer de Fibaro dit qu'il y a un exemple de commande avec un formatage JSON pour le body. Même en copiant collant j'ai l'erreur. J'ai essayé en codant, avec l'outil REST Console, PHP et c'est le même. Pour info voici le code PHP <?php $ipHc2 = "192.168.1.10"; $tcpPort = "80"; $request = "/api/globalVariables"; $userName = "myusername"; $password = "mypassword"; $data = array("name" => "Hagrid", "value" => "36", "readOnly" => false, "isEnum" => false); $data_string = json_encode($data); $url = 'http://'.$userName.':'.$password.'@'.$ipHc2.':'.$tcpPort .$request; $ch = curl_init($url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); echo $result; ?> et pour les tests avec REST CONSOLE Request URI : http://192.168.1.10:80/api/globalVariables Request Method : POST CONTENT HEADER CONTENT TYPE : application/json REQUEST PAYLOAD RAW BODY : "name":"test","value":"999","readOnly":false,"isEnum":false CUSTOM HEADER : X-Fibaro-Version:2 BASIC AUTHENTIFICATION : myusername/mypassword Resultat : RAW BODY : {"type":"ERROR","reason":"MISSING_PARAMETER","message":"name: missing required parameter"}RESPONSE HEADER : Status Code: 400 Date: Sat, 13 Dec 2014 16:26:24 GMT Cache-Control: no-cache, no-store Server: 0.9 Connection: close Transfer-Encoding: chunked Content-Type: application/json;charset=UTF-8 REQUEST BODY : Request Url: http://192.168.100.10:80/api/globalVariables Request Method: POST Status Code: 400 Params: {} REQUEST HEADER : Content-Type: application/json Authorization: Basic YMLtaW46YWR4= X-Fibaro-Version: 2 Accept: */* Connection: keep-alive Origin: chrome-extension: //rest-console-id User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 Dans le REQUEST BODY je vois params:{} le problème vient peut etre de là ??!! J'ai fais une requête GET pas de problème particulier. J’espère avoir été assez explicite et si vous avez une idée je suis preneur. Merki
Krikroff Posté(e) le 13 décembre 2014 Signaler Posté(e) le 13 décembre 2014 La soc développeur est pour la V4 tu trouveras dans le menu haut du forum un lien vers la documentation de l'api de la V3 et en français en Plus Envoyé de mon iPhone àl'aide de Tapatalk
c-lol Posté(e) le 14 décembre 2014 Auteur Signaler Posté(e) le 14 décembre 2014 Pourtant le plugin xbmc de ADN182 créé les variables dans la HC2. C'est du python mais il devrait être possible de faire pareil. Je vais continuer mais investigations. Vivement que la V4 soit stable
Krikroff Posté(e) le 14 décembre 2014 Signaler Posté(e) le 14 décembre 2014 Nous sommes d'accord je dis juste que l'api a changé entre la V3 et la V4 et que les infos sur la doc développeur concerne uniquement la V4 donc il faut prendre comme référence pour la V3 l'ancienne doc qui n'existe plus sur le site Fibaro. Envoyé de mon iPhone àl'aide de Tapatalk
c-lol Posté(e) le 14 décembre 2014 Auteur Signaler Posté(e) le 14 décembre 2014 Plus de docs, plus de dev J'ai vu la doc en haut mais elle ne traite pas du REST/JSON ou alors je suis miro (dimanche matin ). Il y a une copie de la doc quelque part sur le net?
c-lol Posté(e) le 13 janvier 2015 Auteur Signaler Posté(e) le 13 janvier 2015 MAJ en V4 faite!! Aprés toute la reconf des scenes et module, je me rattaque à mon probleme de la derniere fois. J'ai reussi à créer une variable simple dont voici le code php <?php $ipHc2 = "192.168.1.10"; $tcpPort = "80"; $request = "/api/globalVariables"; $userName = "mysuername"; $password = "mypassword"; $data = array("name" => "simple", "value" => "val1", "readOnly" => false, "isEnum" => 0); $data_string = json_encode($data); $url = 'http://'.$userName.':'.$password.'@'.$ipHc2.':'.$tcpPort .$request; $ch = curl_init($url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); echo $result; ?> Mais voila maintenant je cherche à créer une variable avec plusieurs valeurs. J'ai donc fait <?php $ipHc2 = "192.168.1.10"; $tcpPort = "80"; $request = "/api/globalVariables"; $userName = "myusername"; $password = "mypassword"; $data = array("name" => "multi", "value" => "0", "readOnly" => false, "isEnum" => 1, "enumValues" => array("val1","val2")); $data_string = json_encode($data); $url = 'http://'.$userName.':'.$password.'@'.$ipHc2.':'.$tcpPort .$request; $ch = curl_init($url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); echo $result; ?> voila ce que me retourne la requête {"name":"multi","value":"0","readOnly":false,"isEnum":true,"enumValues":[],"created":1421156759,"modified":1421156759} la variable 'multi' est bien créé dans le HC2 mais aucune valeur. Une idée?
Krikroff Posté(e) le 13 janvier 2015 Signaler Posté(e) le 13 janvier 2015 Sur l' API REST de la V4 il faut faire un PUT et pas un POST pour créer un variable avec le nom de la variable derrière /api/globalVariables/ comme ceci PUT 192.168.1.1/api/globalVariables/Multi avec en body le json formé ainsi {"name":"Multi","value":"a","isEnum":true,"enumValues":["a","b","c"]}
c-lol Posté(e) le 13 janvier 2015 Auteur Signaler Posté(e) le 13 janvier 2015 Ok je vais essayer ça!!! Pourquoi faut-il utiliser PUT? POST fonctionne, d'ailleurs je viens de faire un script en lua pour les virtuals Devices ici
c-lol Posté(e) le 13 janvier 2015 Auteur Signaler Posté(e) le 13 janvier 2015 Je viens de faire des tests sur mon virtual device en LUA. J'en ai conclus que le POST est à utiliser pour une création et le PUT pour une mise a jour. Ensuite pour le body, il faut mettre la valeur de "isEnum" à 1. Si on met true on a une erreur "unsigned Int". En mettant "isEnum":1 on a comme retour "isEnum":true Concernant les valeurs dans le [array] ca passe toujours pas. Voici le debug du VD [DEBUG] 19:35:37:payload = {"name":"multi","value":"a","isEnum":1,"enumValues":["a","b","c"]} [DEBUG] 19:35:37: response = {"name":"multi","value":"a","readOnly":false,"isEnum":true,"enumValues":[],"created":1421174137,"modified":1421174137} je continu à chercher.
Krikroff Posté(e) le 13 janvier 2015 Signaler Posté(e) le 13 janvier 2015 - Tu ne peux pas te fier àla sortie du debug qui corrige au passage des choses pour garantir l'affichage . - Lors de la création d'un variable globale prédéfinie tu es bien obligé de passer une valeur au moment de la création non ? Donc c'est bien PUT qu'il faut utiliser. - Pour le payload {"name":"Multi","value":"a","isEnum":true,"enumValues":["a","b","c"]} et la manière correcte de faire, en tout cas c'est comme cela qui Fibaro utilise sa propre API
Messages recommandés