Aller au contenu

tibahut

Membres confirmés
  • Compteur de contenus

    166
  • Inscription

  • Dernière visite

Tout ce qui a été posté par tibahut

  1. Je n'ai pas vu de sujet concernant cet objet donc je vais faire une petite description. Il s'agit d'un boîtier connecté pour voiture et qui se branche pour la plupart des modèles sur le port OBD2 de cette dernière, pour les autres il faut le faire installer par un professionnel. Que fait donc ce boîtier ? Ici la page de présentation sur le site officiel : http://www.xee.com/comment-ca-marche/ Ce boîtier rend les voitures compatibles connectées grâce à la récupération des informations de diagnostic sur la prise OBD2 par laquelle il est aussi alimenté. Il comprend pour plus d'informations une balise GPS, un accéléromètre ainsi qu'une carte SIM de l'opérateur Orange pour envoyer les données sur leurs serveurs. Le point intéressant est qu'il n'y a pas d'abonnement à payer. C'est comme ça que j'ai pu connecter ma vieille Laguna 2 de 2003, qu'aucun autre boîtier OBD2, même en bluetooth ne reconnaissait. La fonctionnalité principale du boîtier est de savoir si notre véhicule roule et sa position. De plus, suivant les modèles, il est possible de récupérer le niveau d'essence, si les feux sont restés allumés ou encore si la voiture n'est pas fermée. Là où ça devient encore plus intéressant, c'est qu'il y a une API pour récupérer les données et que l'on peut se créer un compte développeur afin de créer notre propre application. Je me suis donc inscrit et je me suis créé une application de test pour récupérer mes données via un script PHP sur mon serveur. Ma box récupère ensuite le JSON pour l'afficher dans un module virtuel. Voici le lien pour s'inscrire en tant que développeur pour accéder à l'API : https://dev.xee.com/ Il est possible de récupérer les informations concernant l'utilisateur, la voiture et son status et l'historique des trajets. MAJ du 18/05/2016 : Ajout en pièce jointe du module virtuel de test pour Fibaro HC2. Je laisse l'url de test afin que vous puissiez voir le rendu et le contenu du JSON. Attention, le contenu du fichier JSON de test est compilé à partir de plusieurs requêtes effectuées sur l'API. Je vous prépare pour bientôt un exemple de fichier PHP à mettre sur un serveur. Il me reste un point bloquant qui est l'identification obligatoire par le site de Xee. MAJ du 23/05/2016 : nouvelle version du module virtuel V1 pour Fibaro HC2 avec 2 icônes, le script PHP à mettre sur votre serveur et un mini tuto pour faire votre application sur le site de Xee. Prérequis pour pouvoir récupérer des données de l'API, l'inscription sur le site de développement de Xee : https://dev.xee.com/ NB : je pense que l'on peut utiliser son compte Xee pour se connecter à Xee dev, à vérifier. Une fois l'inscription réalisée, il faut créer une nouvelle application comme suit : Vous obtiendrez alors un client ID et un secret ID qu'il faut précieusement garder sinon il faudra refaire une nouvelle application. Ces IDs vous seront utile pour faire fonctionner le script PHP. Script PHP pour faire l'interface entre l'API de Xee et la box domotique (à installer sur un serveur web accessible depuis la HC2) : 1. Remplacer les données dans les constantes en haut du fichier par celles que vous avez renseignées lors de la création de votre application et celles que vous avez obtenues : XEE_API_CLIENT_ID, XEE_API_SECRET_ID et XEE_API_REDIRECT_URI. 2. Déposer le fichier sur votre serveur à l'emplacement XEE_API_REDIRECT_URI. 3. Aller sur la page via un navigateur. Vous devez arriver sur une page de connexion où il faut renseigner vos identifiants Xee. 4. Récupérer le refresh_token dans le code JSON retourné et l'ajouter dans le module de la HC2. (variable defaultToken). <?php define('XEE_API_CLIENT_ID', 'votreclientid'); define('XEE_API_SECRET_ID', 'votresecretid'); define('XEE_API_REDIRECT_URI', 'http://votre-serveur.com/le/chemin/de/votre/script/php'); define('XEE_API_DEFAULT_URL', 'https://cloud.xee.com/v3/'); /** * get data from the web service * @return array agreggation from all results */ function getData() { $totalResults = array(); $totalResults['token'] = getAccessToken(); $totalResults['user'] = getUserData($totalResults['token']['access_token']); $totalResults['car'] = getCarData($totalResults['token']['access_token'], $totalResults['user']['id']); $totalResults['carStatus'] = getCarStatusData($totalResults['token']['access_token'], $totalResults['car']['id']); return $totalResults; } /** * get connected user data * @param string $accessToken access token * * @return array all informations about me */ function getUserData($accessToken) { return getRequest( XEE_API_DEFAULT_URL . 'users/me', $httpHeaders = array( 'authorization: Bearer ' . $accessToken, 'cache-control: no-cache' ) ); } /** * get user's car data * @param string $accessToken access token * @param int $userId car's owner * * @return array all informations about the first car */ function getCarData($accessToken, $userId) { $carData = getRequest( XEE_API_DEFAULT_URL . 'users/' . $userId . '/cars', $httpHeaders = array( 'authorization: Bearer ' . $accessToken, 'cache-control: no-cache' ) ); //get only the first car return $carData[0]; } /** * get car status * @param string $accessToken access token * @param int $carId car id * * @return array all informations about car status */ function getCarStatusData($accessToken, $carId) { $carStatusData = getRequest( XEE_API_DEFAULT_URL . 'cars/' . $carId . '/status', $httpHeaders = array( 'authorization: Bearer ' . $accessToken, 'cache-control: no-cache' ) ); return $carStatusData; } /** * automatic switch to get the first token from first connection * or to get a fresh token from the web service * @return array access token, refresh token and expiration date */ function getAccessToken() { if (isset($_GET['token']) && !empty($_GET['token'])) { return getFreshToken($_GET['token']); } elseif (isset($_GET['code']) && !empty($_GET['code'])) { return getToken($_GET['code']); } firstConnection(); } /** * get an access token and a new refresh token from a refresh token * @param string $refreshToken current refresh token * @return array access token, refresh token and expiration date */ function getFreshToken($refreshToken) { return getToken($refreshToken, 'refresh_token'); } /** * generic function to get a token * @param string $key authorization code or refresh token * @param string $type grant type * * @return array access token, refresh token and expiration date */ function getToken($key, $type = '') { switch ($type) { case 'refresh_token': $parameters = 'grant_type=refresh_token&refresh_token=' . $key; break; default: $parameters = 'grant_type=authorization_code&code=' . $key; break; } return postRequest( XEE_API_DEFAULT_URL . 'auth/access_token', $parameters, $httpHeaders = array( 'authorization: Basic ' . base64_encode(XEE_API_CLIENT_ID . ':' . XEE_API_SECRET_ID), 'cache-control: no-cache', 'content-type: application/x-www-form-urlencoded' ) ); } /** * first Connection to the webservice with an Oauth authentification */ function firstConnection() { $urlParams = array( 'client_id' => XEE_API_CLIENT_ID, 'scope' => 'users_read cars_read trips_read signals_read locations_read status_read', 'redirect_uri' => XEE_API_REDIRECT_URI ); header('Location: ' . XEE_API_DEFAULT_URL . 'auth/auth?' . http_build_query($urlParams)); die; } /** * do a request with POST method * @param string $url url do do the request * @param string $postFields keys/values to POST * @param array $httpHeaders additionnal HTTP headers * * @return array json decoded request result */ function postRequest($url, $postFields, $httpHeaders = array()) { return sendRequest($url, $requestType = 'POST', $postFields, $httpHeaders); } /** * do a request with GET method * @param string $url url do do the request * @param array $httpHeaders additionnal HTTP headers * * @return array json decoded request result */ function getRequest($url, $httpHeaders = array()) { return sendRequest($url, $requestType = 'GET', $postFields = '', $httpHeaders); } /** * generic function to make curl request * @param string $url url do do the request * @param string $requestType request type : GET or POST * @param string $postFields keys/values urlencoded for POST method * @param array $httpHeaders additionnal HTTP headers * * @return array json decoded request result */ function sendRequest($url, $requestType = 'GET', $postFields = '', $httpHeaders = array()) { $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => $requestType, CURLOPT_POSTFIELDS => $postFields, CURLOPT_HTTPHEADER => $httpHeaders, ) ); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { die('cURL Error #:' . $err); } else { return json_decode($response, true); } } // display json encoded data echo json_encode(getData()); exit; Et enfin, installation du module : 1. Importer le module 2. Ajouter les 2 icônes, vert pour l'icône par défaut et rouge pour l'icône en erreur 3. Modifier les paramètres du module : Voici les paramètres à modifier dans le module pour que celui-ci récupère les données : local host = 'votre-serveur.com'; local path = '/chemin/ou/se/trouve/le/fichier/php'; local defaultToken = 'token a récupérer lors de la première connexion au script PHP dans un navigateur'; local iconNok = numéro de l’icône quand le script est déconnecté de l'API, soit xee_fail.png; 4. Enjoy ! XeeConnect.vfib
  2. tibahut

    Support Gea

    Merci bien , je vais tester ce que je peux suivant les modules
  3. tibahut

    Support Gea

    @pepite je veux bien tester tes ajouts dans les limites des possibilités de mes modules ça fera une occasion de me remettre dans GEA. Merci de relancer l'élan de l'optimisation du code de GEA pour le rendre encore plus puissant ! @MAM78 Non, je n'ai pas encore eu le temps de toucher au code. ça va se faire maintenant que j'ai quitté mon travail. Je vais avoir plus de temps libre pour programmer L'intérêt est justement que tout le monde peut ajouter sa pierre à l'édifice.
  4. tibahut

    Support Gea

    @MAM78 merci pour les infos, je vais commencer à me remettre dans le code de GEA déjà ^^
  5. Hello tout le monde, je vais essayer de reprendre le fil après avoir fait une pause dans la programmation ces derniers mois. En effet, j'ai modifié le code pour tenter de le rendre plus maintenable. Il y a quelques bugs et ajouts à faire encore. Je ne peux rien promettre mais je vais essayer de m'y replonger. Serait-il possible de me décrire en MP ou sur le post GEA, ce que le code doit faire, pour que je puisse bien cerner ce qu'il y a à modifier ?
  6. tibahut

    Support Gea

    Merci les gens, c'est gentil Hélas non, je n'ai pas encore de vacances. Ce sera pour février. Mais les fêtes de fin d'année, ça remonte toujours le moral ^^
  7. tibahut

    Support Gea

    Hello tous, sorry pour le temps pour mettre à jour le script GEA sur Github. C'est pas trop la forme en ce moment, donc difficile d'avoir le cerveau dispo pour coder tranquillement. Je n'oublie pas les modifications à faire et les retours de bug.
  8. Salut Phillipe, Où en étions-nous arrêté la dernière fois ? As-tu essayé de refaire les étapes de notre conversation en messages privés pour faire fonctionner déjà le PHP ? On verra ensuite pour le module HC2. Sinon, non, il n'est pas possible d'utiliser le fichier de Jeedom nativement car il est spécifique à ce software.
  9. Bonjour tout le monde, @Freeman59 : tout le code pour la HC2 est disponible sur la première page de ce topic. Il y a un script PHP qui fait les appels à l'API de Xee et retourne un objet JSON avec toutes les informations sur le véhicule. Ce script est indépendant et exécutable tout seul. La version actuelle se reconnecte à chaque fois au service car à l'époque, il y avait un bug sur les refresh token. Ce script fonctionne bien chez moi, testé sur un hébergement web et aussi sur un NAS Qnap après demande d'aide de @Jorderic. Le module LUA pour la HC2 fait appel au script PHP, parse le JSON et affiche les données. Rien de bien sorcier. Le soucis de @q.philippe est déjà de faire fonctionner le script PHP. Donc nous pouvons faire abstraction de la HC2 car la méthode est similaire à Jeedom si c'est aussi en PHP. Si vous avez plus de questions, je suis à votre disposition.
  10. tibahut

    Hc2 Et Hc Lite- V4.100 - Stable - 29/09/2016

    Là est la question ^^ On trouvera bien sur Github un plugin qui permet d'exécuter du code
  11. tibahut

    Hc2 Et Hc Lite- V4.100 - Stable - 29/09/2016

    ça c'est la classe ! Merci du partage, j'essaierai àl'occasion sur sublime text 3 quand j'aurai fini les 50 trucs que j'ai àfaire ^^
  12. tibahut

    Support Gea

    Ah bah si ça marche en utilisant le setValue d'une globale, je vais essayer ce soir alors
  13. tibahut

    Hc2 Et Hc Lite- V4.100 - Stable - 29/09/2016

    Sublime text 3 ?
  14. tibahut

    Support Gea

    J'ai fait cette modif (http://www.domotique-fibaro.fr/index.php/topic/1211-support-gea/?p=138873) dans mon GEA local pour tester mais je n'ai pas de module avec un setValue. Est-ce qu'il y a moyen de tester autrement avec un module virtuel ou est-ce qu'il faut que je trouve un beta testeur ?
  15. tibahut

    Hc2 Et Hc Lite- V4.100 - Stable - 29/09/2016

    Quality Assurance
  16. tibahut

    Support Gea

    Oui, j'ai bien saisi Le but est d'aider la communauté.
  17. tibahut

    Support Gea

    @sebcbien : J'ai revert le fix pour la 4.081 sur mon local. Je vais remplacer les lignes que tu as mis sur le fil de discussion et le tester en local à partir de lundi pendant quelques jours. Pour ajouter de la fiabilité au code, je pense que je vais réfléchir à faire un fichier de test de chaque méthode de GEA pour être plus serein sur les modifications, en plus de ma période de test sur ma box de production.
  18. tibahut

    Support Gea

    ça marche, je regarderai ça ce weekend pour ne pas faire n'importe quoi
  19. tibahut

    Support Gea

    Yep, est-ce que tu peux m'envoyer un MP avec ce qu'il faut faire plus précisément, afin de faire les bonnes modifs sans tout casser
  20. tibahut

    Support Gea

    Oui, en effet, c'est lisible quand on relis les IDs mais ce que je recherche, c'est que lorsque j'écris les lignes de commande GEA, je ne cherche pas comment écrire les IDs. Ils sont structurés par pièce et ont une syntaxe commune en essayant d'éviter les abréviations. Au début, j'utilisais aussi cette manière d'écrire mais je devais tout le temps me référer à la liste d'IDs Après, je pense qu'il est difficile de faire un nommage parfait, mais mon exemple montre qu'il y a plusieurs possibilités pour définir ses IDs ou groupes d'IDs. J'utilise sublime text pour faire mes scripts GEA. Et en entrant le nom de la pièce et ".", il m'affiche la liste des modules qui existent (en plus de fonctions Lua prérenseignées).
  21. tibahut

    Support Gea

    Merci Oui, tout à fait. Mais pour l'instant je n'ai pas eu trop de soucis avec ma box et mes modules et donc j'ai voulu privilégier la lisibilité et trouver un nom plus intuitif pour écrire le code plus rapidement ^^ Déformation professionnelle peut-être.
  22. tibahut

    Showroom Gea V2

    post défunt
  23. tibahut

    Showroom Gea V2

    Message de remplissage 21 ok
  24. tibahut

    Showroom Gea V2

    Message de remplissage 20
  25. tibahut

    Showroom Gea V2

    En fait il y en a plus que 18 àfaire !
×