Forum eedomus
http://forum.eedomus.fr/

[STORE] création plugin DAIKIN ONECTA
http://forum.eedomus.fr/viewtopic.php?f=50&t=12443
Page 1 sur 1
Auteur:  bigjohn007 [ 02 Déc 2024 10:52 ]
Sujet du message:  [STORE] création plugin DAIKIN ONECTA

Bonjour,

Depuis la création de l'application DAIKIN ONECTA, il n'est plus possible de piloter des climatiseurs en local, il est impératif de passer par l'API Cloud de Daikin.

Un plugin a été crée sous Jeedom mais rien sous Eedomus. Je n'ai hélas pas les compétences en script pour le développer.

Une bonne âme aurait-elle l'envie de convertir le plugin Jeedom pour qu'il marche sur nos box Eedomus ?
Auteur:  bigjohn007 [ 23 Déc 2024 06:17 ]
Sujet du message:  Re: [STORE] création plugin DAIKIN ONECTA

Bonjour,

Un connaissance a démarré le travail pour écrire le script DAIKIN via leur cloud. Hélas ce n'est pas fini. Y aurait-il qqun d'intéressé pour finaliser ?

Code : Tout sélectionner
<?php
// Inclure les dépendances nécessaires pour envoyer des requêtes HTTP
require 'vendor/autoload.php'; // Assurez-vous que Guzzle est installé via Composer : `composer require guzzlehttp/guzzle`

use GuzzleHttp\Client;

// Configuration de base
define('CLIENT_ID', 'YOUR_CLIENT_ID');
define('CLIENT_SECRET', 'YOUR_CLIENT_SECRET');
define('REDIRECT_URI', 'YOUR_REDIRECT_URI');
define('DAIKIN_API_BASE', 'https://api.daikincloud.com');
define('AUTH_URL', 'https://idp.onecta.daikineurope.com/v1/oidc');

// Fonction pour obtenir un token d'accès via OAuth 2.0
function getAccessToken($authorizationCode) {
    $client = new Client();

    try {
        $response = $client->post(AUTH_URL . '/token', [
            'form_params' => [
                'grant_type' => 'authorization_code',
                'code' => $authorizationCode,
                'redirect_uri' => REDIRECT_URI,
                'client_id' => CLIENT_ID,
                'client_secret' => CLIENT_SECRET,
            ]
        ]);

        $body = json_decode($response->getBody(), true);
        return $body['access_token'];
    } catch (Exception $e) {
        http_response_code(500);
        echo 'Erreur lors de l\'obtention du token : ' . $e->getMessage();
        exit;
    }
}

// Fonction pour envoyer une requête à l'API Daikin
function sendApiRequest($accessToken, $endpoint, $method = 'GET', $data = null) {
    $client = new Client();

    $options = [
        'headers' => [
            'Authorization' => 'Bearer ' . $accessToken,
            'Content-Type' => 'application/json',
        ],
    ];

    if ($data) {
        $options['json'] = $data;
    }

    try {
        $response = $client->request($method, DAIKIN_API_BASE . $endpoint, $options);
        return json_decode($response->getBody(), true);
    } catch (Exception $e) {
        http_response_code(500);
        echo 'Erreur API : ' . $e->getMessage();
        exit;
    }
}

// Récupérer les paramètres de la requête
$action = $_GET['p'] ?? null;
$deviceId = $_GET['device_id'] ?? null;
$value = $_GET['v'] ?? null;
$authorizationCode = $_GET['code'] ?? null;

if (!$authorizationCode) {
    echo 'Le code d\'autorisation est manquant.';
    exit;
}

// Obtenir le token d'accès
$accessToken = getAccessToken($authorizationCode);

// Traiter les actions demandées
switch ($action) {
    case 'on_off':
        if (!$deviceId || !$value) {
            echo 'Paramètres manquants pour l\'action on_off.';
            exit;
        }
        $response = sendApiRequest($accessToken, "/devices/$deviceId/onOffMode", 'PUT', ['value' => $value]);
        echo json_encode($response);
        break;

    case 'set_temperature':
        if (!$deviceId || !$value) {
            echo 'Paramètres manquants pour l\'action set_temperature.';
            exit;
        }
        $response = sendApiRequest($accessToken, "/devices/$deviceId/operationModes/heating/setpoints/roomTemperature", 'PUT', ['value' => (float)$value]);
        echo json_encode($response);
        break;

    case 'get_status':
        if (!$deviceId) {
            echo 'Paramètre device_id manquant pour l\'action get_status.';
            exit;
        }
        $response = sendApiRequest($accessToken, "/devices/$deviceId");
        echo json_encode($response);
        break;

    default:
        echo 'Action non reconnue.';
        exit;
}
Page 1 sur 1 Le fuseau horaire est UTC+1 heure