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; }
|