Comment faire une requete HTTP en GET avec header , sur une V5?

Salut @tout le monde,

C’est vrai que je suis habituellement peu actif sur le forum, mais je suis client GCE depuis la V3, beta testeur avec actuellement 4 V4 chez moi, et plus je suis passé à la V5 pendant les préventes.

Je viens vers la communauté GCE today, car j’essaie de faire des requetes HTTP en GET (avec header), sur un serveur distant.

Ce serveur distant est le serveur de la société IO Pool, qui contient via API ouvert, toutes les données que ma sonde flottante de piscine IO_Pool Eco product lui envoie toutes les 5 min.

Donc la sonde dans piscine communique en bluetooth avec un relais (passerelle bluetooth / ethernet TCP/IP). Et donc ce relais remonte les infos vers le serveur distant.

J’arrive via le logiciel « insomnia » à faire et envoyer la requete :

HTTP GET sur l’url :
https://api.iopool.com/v1/pool/<mon_ID>

avec comme header :
titre du header : « x-api-key » … et la valeur : <mon_APIKEY>

Actuellement, sur la V5, il n’est pas possbile de mettre des entetes dans les PUSH GET.
J’ai la confirmation de IO_Pool que ce n’est pas possible de concatener (avec une orthographe specifique) l’ID et l’APIKEY, dans l’URL.

Est ce qu’il y aurait une ame charitable qui saurait comment développer la requete javascript dans un widget HTML, pour faire ce PUSH … si toutefois c’est faisable ?

La réponse du serveur est une réponse standard JSON, qui avec une tuile parser sur la V5 pourrait ensuite me permettre d’avoir les 3 valeur suivante de la piscine :

  • temperature de l’eau
  • PH de l’eau
  • ORP de l’eau

Ensuite, pour l’affichage dans le bon liveview, et l’utilisation des valeurs pour piloter mon temps de fonctionnement de la pompe (par rapport à la température de l’eau), ca j’en fait mon affaire.

Je pourrais partager eventuellement ce que j’ai mis en place pour les potentiels intéressés, mais l’urgence du moment, c’est d’arriver à acquérir dans la V5 ces 3 valeurs ANA.

Merci mille foi par avance pour votre aide pour ceux qui sauraient faire et qui voudraient bien m’aider,
:slightly_smiling_face:

Bon W-E @toutes et @tous,
Christophe

Bonjour,
l’API de IOPOOL est simpliste, malheureusement, et ne permet pas la récupération unitaire des valeurs.

le JSON retourné par leur API est imbriqué (j’ai tracé la hiérarchie en rouge)
image

Le Parser de la V5 ne sait pas traiter ce type de fichier.
bonne journée

Salut fgtoul,

Merci beaucoup pour ce prompt retour ; et qui plus est très clair !
:slight_smile:
C’est cool !

Reste plus qu’à notre « marque de coeur à 3 lettres » ;-), à updater les PUSH et PARSER …
LOL
Je dis ca à la volée, mais est ce que s’il est envisagé un jour d’updater les PUSH et les PARSER, pour pouvoir effectuer ces taches de requetes et lecture des info dans la reponse JSON, la V5 serait capable de le faire ?
… ou bien est ce que c’est cause perdue d’avance ?
@Pluch
Chri

rien n’est bloqué :slight_smile:
En attendant, un script externe peut faire le taff.

Pour info,

Suite des évènements :slight_smile: 1ere étape :

Code PHP à mettre sur un serveur à part …
(Un grand merci à Marc Guyard de chez IO_Pool qui a développé cette requete PHP)

<?php

// Request iopool API
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.iopool.com/v1/pool/<IP_Perso>',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'x-api-key: <les 40 caractères de l'APIKEY>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

// Parse JSON
$jsonDecoded = json_decode($response, true);

// Flatten JSON
$flatten = new RecursiveIteratorIterator(new RecursiveArrayIterator($jsonDecoded));
$flattenOutput = array();
foreach($flatten as $key => $value) {
  $flattenOutput[$key] = $value;
}

// Return a flatten JSON
echo json_encode($flattenOutput, JSON_PRETTY_PRINT);

Ca retourne ceci :

{

    "id": "<mon_ID>",
    "title": "Cléa",
    "temperature": 21.568278169673192,
    "ph": 8.379251700680273,
    "orp": 290,
    "mode": "STANDARD",
    "isValid": true,
    "ecoId": "BO4DPlOF",
    "measuredAt": "2022-03-28T12:18:00.000Z",
    "hasAnActionRequired": true,
    "filtrationDuration": 7
}

La sonde est pour les essaies, dans un verre d’eau du robinet …

=> Maintenant, reste à savoir comment on fait pour récupérer cette valeur sur une V5 ?
(actuellement sur le server PHP indépendant qui fait la requete HTTP au server IO_Pool)

Salut à Tous,

Alors j’ai mis du temps, mais j’y suis enfin arrivé (et tout seul comme un grand, avec quand du temps de libre pour apprendre le PHP … donc pas beaucoup de temps de libre depuis 2022) !!!
:slight_smile:

Il faut utiliser sur JEEDOM le plugin script (type = script ; info et requete = /var/www/html/plugins/script/data/fichier.php)

« fichier.php » est donc un fichier à créer à ce lien dans l’arborescence ‹ edition de fichier › JEEDOM.

Ensuite, dans le fichier, le code est le suivant :

<?php // URL you want to fetch $url = 'https://[numero_VPN_JEEDOM].eu.jeedom.link/core/api/jeeApi.php?apikey=[APIKEY]&type=cmd&id=[id_commande_jeedom]'; // Initialize cURL session $ch = curl_init(); // Set cURL options curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Accept: application/json' ]); // Execute the request $response = curl_exec($ch); $float_response = floatval($response); // Check for errors if(curl_errno($ch)){ echo json_encode(['error' => curl_error($ch)]); } // Output the response alresponse = array('temperaturepiscine' => $float_response); echo json_encode($finalresponse); // Close cURL session curl_close($ch); ?>

ATTENTION,
[id_commande_jeedom] est à remplacer par le numero ID de la commande pour obtenir la temperature via le plugin IO_Pool dans JEEDOM.

[APIKEY] est a remplacer par votre clé API délivré par JEEDOM.

=> le plus simple est de cliquer sur URL dans la commande IOPOOL temperature de l’equipement du plugin jeedom, et vous aurez votre adresse complete dans la barre d’adresse URL.

Ensuite, cette commande SCRIPT (via le plugin SCRIPT JEEDOM) a donc elle aussi un ID.

Il suffit de faire depuis la V5 un PUSH GET sur cette commande SCRIPT JEEDOM (voir URL dans le code PHP du format de la requete HTTPS), et de parser :slight_smile:

Maintenant, question à 2 franc 6 sous pour vous les amis : la VAR ANA à la sortie du PARSE V5 doit etre en ANA16.

La VAR ANA consigne d’une X-0-10V est une ANA8.
Je présume qu’il doit y avoir une subtilité sur real et raw et la précision, mais :
=> comment convertir sur une V5, une VAR AN16 en VAR ANA8 ?

Je pense que ce topic va en aider plus d’un !

Bonne domotique à tous :slight_smile:
@pluch les amis,
Christophe

2 « J'aime »