Bonjour à tous,
Je suis habitant de l’agglo Bordelaise, agglomération qui nous impose un monopole pour la distribution de gaz de ville par un seul ELD (Entreprises Locales de Distribution) : « Gaz de Bordeaux ».
Autrement dit, nous n’avons pas le choix que de prendre ce fournisseur, comme c’est le cas dans une vingtaines de régions en France.
De fait, tous les plugin existant liés à la récupération de la conso de gaz via des API (comme GRDF) ne sont pas applicables pour nous. C’est pourquoi il faut passer par un plugin dédié.
Il est possible de récupérer ses propres conso à deux conditions : avoir un compteur gazpar communicant (son installation est gratuite sur simple demande si vous possédez un ancien compteur), et avoir créé son espace regaz sur le site dédié.
Pour ma part, j’ai déjà implémenté un scenario code qui effectue tous les appels API nécessaires pour récupérer les données json de consommation.
Votre mission (si toute fois vous l’acceptez), consisterait donc à écrire un plugin en s’inspirant de mon code pour les appels API, puis gérer la donnée de consommation récupérée pour la mettre à dispo à l’utilisateur jeedom.
Je n’ai pas les compétences php pour me plonger dans l’écriture d’un plugin, et pas non plus le temps de m’investir dans la doc jeedom et dans php pour le faire.
Néanmoins, voici le code du scenario qui permet de récupérer les données API, qui pourra être utile à un développeur charitable.
Le scenario nécessite trois tag : « login », « mdp » et « pce ».
function sendPostRequest($url, $headers, $body) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode != 200) {
$scenario->setLog('HTTP request failed with code $httpCode and response: $response');
$scenario->stop();
}
return $response;
}
function sendGetRequest($url, $headers) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode != 200) {
$scenario->setLog('HTTP request failed with code $httpCode and response: $response');
$scenario->stop();
}
return $response;
}
try {
$tags = $scenario->getTags();
$login = $tags['#login#'];
$mdp = $tags['#mdp#'];
$pce = $tags['#pce#'];
// Première requête POST pour récupérer le token
$loginUrl = 'https://monespace.regaz.fr/api/login_check';
$loginHeaders = ['Content-Type: application/json'];
$loginBody = json_encode(['username' => $login, 'password' => $mdp]);
$loginResponse = sendPostRequest($loginUrl, $loginHeaders, $loginBody);
$loginData = json_decode($loginResponse, true);
if (isset($loginData['token'])) {
$token = $loginData['token'];
$scenario->setLog('Token :'.$token);
} else {
$scenario->setLog("Token not found in login response: $loginResponse");
$scenario->stop();
}
// Deuxième requête GET avec le token dans l'en-tête d'autorisation
$consumptionUrl = 'https://monespace.regaz.fr/api/consumption/'.$pce.'/level/all';
$consumptionHeaders = [
'Content-Type: application/json',
"Authorization: Bearer $token"
];
$consumptionResponse = sendGetRequest($consumptionUrl, $consumptionHeaders);
// Afficher ou traiter la réponse
$scenario->setLog("Response: $consumptionResponse");
} catch (Exception $e) {
$scenario->setLog('Error: ' . $e->getMessage());
}
Les données récupérés (contenu de la variable $consumptionResponse
) sont de la forme :
{
"year":{
"2019":12756,
"2020":11396,
...
},
"month":{
"2019-01":"2659",
"2019-02":"1679",
"2019-03":"1384",
...
},
"day":{
"2023-06-12":".5102",
"2023-06-13":"5.72432",
"2023-06-14":"8.41648",
...
},
"history":[
{
"year":"2019",
"total":"12756"
},
{
"year":"2020",
"total":"11396"
},
...
]
}
Voilà, si une âme charitable serait assez gentille pour implémenter ce plugin, je lui en serait très reconnaissant !
Merci d’avance !