[STORE] création plugin DAIKIN ONECTA

Discussion et échanges de scripts pour la box eedomus

[STORE] création plugin DAIKIN ONECTA

Messagepar bigjohn007 » 02 Déc 2024 10:52

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 ?
bigjohn007
 
Messages : 14
Inscription : 20 Août 2023

Re: [STORE] création plugin DAIKIN ONECTA

Messagepar bigjohn007 » 23 Déc 2024 06:17

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;
}
bigjohn007
 
Messages : 14
Inscription : 20 Août 2023


Retour vers Scripts & Périphériques du store

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 36 invité(s)