Script ICO

Bonjour,

Je n’ai pas trop de connaissance, mais je vai essayer à partir du script FLIPR dispo ICI => « Flipr piscine » de créer un boue de script pour récupérer les information de ICO en attendant qu’une âme charitable crée un plugin.

J’ai a peu près compris le bout de script.

J’ai testé dans POSTMAN l’exécution de ma requête POST pour récupérer la clef TOKEN, et j’ai cette erreur en retours :
Capture d’écran 2020-05-10 à 21.34.01

Dans la doc de l’api ICO, il est écris ceci :
Capture d’écran 2020-05-10 à 21.37.06

j’ai renseigner l’adresse de mon jeedom, mais j’obtient se message d’erreur, je comprend que cette adresse sert pour me renvoyer le token, mais nie ne vois rien d’équivalent dans le script FLIPR… si ce n’est que le TOKEN est écrit dans un fichier TXT, mais il n’y pas d’URL…

Pouvez vous m’aider ?

Merci

2 J'aimes

j’avance, pour le moment le tous en manuel sous POSTMAN, j’ai réussi à récupérer mon token, valable une heure, et mes paramètres de piscine :
Capture d’écran 2020-05-11 à 07.50.00

j’ai modifier le script de Flipr, pour l’adapter avec Ico, j’ai mis le fichier dans /var/www/html/plugins/script/core/ressources/scriptICO.PY

et lors de l’enregistrement de mon script sous jeedom, j’obtiens ceci :

Capture d’écran 2020-05-11 à 08.24.34

C’est bon, il me manquais une ligne au début du script => #! /usr/bin/env python3

Et voila :

Capture d’écran 2020-05-11 à 13.06.52

Depuis le temps que je l’attendais !!!

1 J'aime

Génial, ca ! Est ce que tu partagerais ton script, stp ? Ca m’intéresse beaucoup, je ne savais même pas que l’API était dispo :stuck_out_tongue:

pH et°C
:tired_face:

Antoine

De quoi ?qu’y a t’il ?

Oui je ferai ca se soir, y a tt une petite procédure pour avoir le Token

1 J'aime

pH jamais Ph.

°C et pas °c car M. Celcius.

Antoine

Alors, comme promis, un petit tutoriel :

je n’ai aucune compétence pour faire des requêtes GET, POST, donc pour me facilitée la chose, j’ai utilisé l’application POSTMAN, je vous la recommande, si comme moi vous n’avez pas les compétences.

L’api d’ICO est plus sécurisé que celle de FILPR.

Sous POSTMAN, il vous faudra crée 2 onglets

un onglet GET qui va nous servir à générer notre requête GET, il faudra le renseigner comme ceci :

Capture d’écran 2020-05-12 à 19.16.07

Dans le champ a coté de GET, il faudra renseigner :

https://interop.ondilo.com/oauth2/authorize

Une fois tout les champs de l’onglet PARAM renseigné, POSTMAN va vous compléter la ligne a coté de GET, il n’y aura plus qu’ à la copier coller dans votre navigateur.

Vous devriez obtenir qq chose comme ca :

https://interop.ondilo.com/oauth2/authorize?client_id=customer_api&response_type=code&redirect_uri=https://VOTRE_URL%2Fauthorize&scope=api&state=c0d45ff768a0

Attention, il vous faut remplir le champ redirect_uri par une URL valide, pour ma par j’ai mis mon adresse IP mais sans le HTTP devant comme ca, il n’y accède pas. D’après ce que j’ai compris, cette adresse sert à renvoyer le code d’acces, mais n’ayant les compétences pour l’intercepter, j’ai procédé autrement.
pour ma part ca a donner ceci :

https://interop.ondilo.com/oauth2/authorize?client_id=customer_api&response_type=code&redirect_uri=mon_URL.freeboxos.fr/index.php?v=m%26p=home&scope=api&state=c0d45ff768a0

Ensuite, il faut crée un 2ème onglet, celui si avec une requête POST, ici il faudra renseigner les champ de l’onglet BODY, comme ci dessous :

Capture d’écran 2020-05-12 à 19.26.33

Dans le champ a coter de POST, il faudra coller cette Url :

https://interop.ondilo.com/oauth2/token

Une fois Postman Configurer, retourner sous le 1er onglet GET, et copier L’url qu’il vous à généré et coller la dans votre navigateur.
Si tous se passe bien vous devriez avoir ceci :

Capture d’écran 2020-05-12 à 19.04.38

il faudra ici renseigner votre identifiant ICO et mot de passe, mettre en français, puis valider.

vous devriez alors obtenir ceci :

Capture d’écran 2020-05-12 à 19.07.22

normalement, si votre adresse était valide, il vous renverrait sur la page que vous aviez renseigné et impossible d’intercepter l’url qui nous intéresse… je sais c’est carrément moche, mais je n’ai aucune compétence pour faire ca proprement…

on sélectionne l’url de la page ainsi fraichement ouverte, vous devriez avoir une url du genre :

https://interop.ondilo.com/oauth2/mon_URL.freeboxos.fr/index.php?v=m&p=home&code=XXXXXXXXXX&state=c0d45ff768a0

la partie qui nous intéresse est le Code de sécurité XXXXXXXX

Attention se code est valable une 30ène de seconde, copier le.

il vous faudra ensuite retourner sous POSTMAN, et aller dans l’onglet POST puis dans le champs CODE, et coller le code copier précédemment.

Ensuite, cliquer sur SEND, vous devriez obtenir ceci :

Capture d’écran 2020-05-12 à 19.32.58

Nous voila avec le précieux CESAM… le token qui lui est valable seulement une heure et surtout le refresh Token lui aussi valable une heure, mais qui nous permet d’avoir un nouveau token sans avoir à refaire toute cette procédure avec le code d’authentification, et donc d’automatiser tout ca avec le script issu de FLIRP.

Enregistrez bien le refresh TOKEN.

Nous allons maintenant interroger l’api d’ICO avec le token que nous venons de générer, j’ai bien dis le token, pas le refresh token, qui lui nous sert à obtenir un nouveau token.

Créé un nouvel onglet sous POSTAM avec une commande GET
dans le champs Authorization, sélectionner BEARER Token dans TYPE.

Renseigner cet URL dans le champ à droite de GET :

https://interop.ondilo.com/api/customer/v1/pools

Puis cliquer sur SEND, vous devriez obtenir ceci :

Capture d’écran 2020-05-12 à 19.44.31

copier l’id de votre ICO, il sera à coller dans le script.

Alors voila le script :

#! /usr/bin/env python3

import requests, json, codecs

url_token = "https://interop.ondilo.com/oauth2/token"
url_ico = "https://interop.ondilo.com/api/customer/v1/pools/ID_VOTRE-ICO/lastmeasures"

payload_token = "refresh_token=VOTRE_REFRESH_TOKEN&grant_type=refresh_token&client_id=customer_api"
headers_token = {
    'Content-Type': "application/x-www-form-urlencoded",
    'Cache-Control': "no-cache",
    }

response_token = requests.request("POST", url_token, data=payload_token, headers=headers_token)
jsonlist = json.loads(response_token.text)
jsonlist = jsonlist['access_token']


headers_ico = {
    'Authorization': "Bearer " + str(jsonlist),
    'Cache-Control': "no-cache",
    }

response_ico = requests.request("GET", url_ico, headers=headers_ico)
payload = response_ico.text

f = codecs.open('/var/www/html/ico_data.txt', 'w', encoding='utf8')
f.write(payload)

et voila, le plus dur est fait.

Enregistrez votre fichier en .PY

il faut créer un nouveau script sous jeedom en y insérant le nouveau fichier que l’on vien de créer, et créer un fichier ico_data.txt à placer à la racine de jeedom, juste dans le répertoire HTML. je me suis servis de jeexplorer.

Ensuite il vous faudra créer les commande dans le plugin script de cette manière :

Capture d’écran 2020-05-12 à 20.32.39

il faudra aussi mettre le CRON de votre script sur la valeur dont vous souhaitez, perso j’ai mis sur 15 minutes.

Et je rapatrie toutes mes valeurs via un virtuel sous jeedom.

Capture d’écran 2020-05-12 à 20.37.34

Voila, j’ai essayé d’être le plus claire possible, alors oui, j’ai utiliser des moyens nous conventionnel et qui choquerai peu être certain pour toute la 1er partie réaliser en manuel, mais je n’ai pas les compétences de faire plus.

N’hésitez pas si vous avez des questions.

2 J'aimes

Merci ! Je vois pour tester ca ce weekend :smiley:

Bonjour,

je suis ton post avec intérêt, et te remercie d’avoir créer ce script attendu par de nombreuses personnes.
Par contre, étant novice, à quelle donnée correspond state ?

Je suis ton tuto pas à pas, en espérant arriver à ton résultat.

Merci de ton aide

Ou y a t’il state ?

Dans ton premier screenshot
Capture d’écran 2020-05-12 à 19.16.07

5e ligne, tu as écrit en Value: c0d45ff768a0

Cela correspond à quoi ?
Merci

C’est le code de sécurité qui est noté dans la doc de L’API ICO. je l’ai reporter ici. il fallait qu’il ser trouve dans l’URL pour obtenir le code d’authentification du TOKEN… que de CODE…

Capture d’écran 2020-05-15 à 14.22.07

D’apres se que j’ai compris, c’est un code normalement généré par l’application qui se connecte a l’API. Elle envoie se code généré aléatoirement chez ONDILO, leur serveur en répondant a la requête, répond avec se code, si les Code Match, ton application va plus loin, si ca ne Match pas ca arrête tout…

Dans notre cas ou s’en fou, on fait ca manuellement.

Si je me trompe que quelqu’un me corrige et nous explique lol

Bon, c’est pas gagné pour moi vu que je débute.
Quand je colle l’URL dans mon navigateur j’ai ces erreurs

{« error »:« invalid_uri »,« error_description »:« No redirect URI was supplied or stored »}

Une idée ?

peux tu me coller ton URL stp, t’es tu servis de postant pour la crée ? si oui fais moi une copie d’écran de ton postam

Hello Dede

Merci pour le tuto.

Je butte toujours sur le post

image

Toujours cette même erreur.
La diiférence que je vois est que moi je suis sur l’onglet param et toi sur l’onglet body…mais la je sèche.
Je copie le code de la page de connection ondilo trop lentement ?

As tu une idée ?

Merci

il faut être sur l’onglet BODY pour que ca fonctionne avec POST, et tu a a peine 30seconde pour taper le code obtenu à l’etape précédente.

1 J'aime