Récupération données Enedis Pro non fonctionnelle

Bonjour,

J’utilise :
Version : 4.4.12
Source : default
Branche : master
Système : diy
avec le plugin Enedis Officiel Version 2023-11-28 15:29:46

Je me suis connecté au site Enedis sur un compte Professionnel.
Les données ne remontent pas et j’ai les logs suivants :

> [2025-04-02 08:52:07] DEBUG  : [Aucun][xxx] *** Début d'interrogation des serveurs Enedis ***
[2025-04-02 08:52:07] DEBUG  : [Aucun][xxx] Récupération des données journalières : consumption?start=2025-01-01&end=2025-04-02
[2025-04-02 08:52:07]WARNING : [Aucun][xxx] Erreur lors de la récupération des données journalières : Can no get enedis2 server
[2025-04-02 08:52:07] DEBUG  : [Aucun][xxx] Récupération des données horaires : consumption?start=2025-01-01&end=2025-04-02
[2025-04-02 08:52:07]WARNING : [Aucun][xxx] Erreur lors de la récupération des données horaires : Can no get enedis2 server
[2025-04-02 08:52:07] DEBUG  : [Aucun][xxx] Récupération des données de puissance : consumption?start=2025-01-01&end=2025-04-02
[2025-04-02 08:52:08]WARNING : [Aucun][xxx] Erreur lors de la récupération des données de puissance : Can no get enedis2 server
[2025-04-02 08:52:08] DEBUG  : [Aucun][xxx] Récupération des données journalières : production?start=2025-01-01&end=2025-04-02
[2025-04-02 08:52:09]WARNING : [Aucun][xxx] Erreur lors de la récupération des données journalières : Can no get enedis2 server
[2025-04-02 08:52:09] DEBUG  : [Aucun][xxx] Récupération des données horaires : production?start=2025-01-01&end=2025-04-02
[2025-04-02 08:52:09]WARNING : [Aucun][xxx] Erreur lors de la récupération des données horaires : Can no get enedis2 server
[2025-04-02 08:52:09]WARNING : [Aucun][xxx] Certaines données n'ont pas été récupérées : daily_consumption consumption_load_curve daily_consumption_max_power daily_production production_load_curve
[2025-04-02 08:52:09] DEBUG  : [Aucun][xxx] Prochaine programmation : 02/04/2025 09:22
[2025-04-02 08:52:09] DEBUG  : [Aucun][xxx] *** Fin d'interrogation des serveurs Enedis ***

Je suis allé sur le site d’Enedis et j’ai forcé le partage de données avec Jeedom SAS (le lien n’a pas été fait automatiquement)

Une idée de l’origine ?

Merci par avance

Salut

Il faudrait changer le dépôt de votre jeedom pour passer sur jeedom 4.4.19

Après on pourra élucider le problème en excluant la version jeedom

Antoine

Bonjour,

Fait (même si le lien parle de ZWave et mon souci est sur Enedis).

[2025-04-03 17:36:41] DEBUG  : [Aucun][xxx] *** Début d'interrogation des serveurs Enedis ***
[2025-04-03 17:36:41] DEBUG  : [Aucun][xxx] Récupération des données journalières : consumption?start=2025-01-01&end=2025-04-03
[2025-04-03 17:36:42]WARNING : [Aucun][xxx] Erreur lors de la récupération des données journalières : Can no get enedis2 server
[2025-04-03 17:36:42] DEBUG  : [Aucun][xxx] Récupération des données horaires : consumption?start=2025-01-01&end=2025-04-03
[2025-04-03 17:36:43]WARNING : [Aucun][xxx] Erreur lors de la récupération des données horaires : Can no get enedis2 server
[2025-04-03 17:36:43] DEBUG  : [Aucun][xxx] Récupération des données de puissance : consumption?start=2025-01-01&end=2025-04-03
[2025-04-03 17:36:43]WARNING : [Aucun][xxx] Erreur lors de la récupération des données de puissance : Can no get enedis2 server
[2025-04-03 17:36:43] DEBUG  : [Aucun][xxx] Récupération des données journalières : production?start=2025-01-01&end=2025-04-03
[2025-04-03 17:36:44]WARNING : [Aucun][xxx] Erreur lors de la récupération des données journalières : Can no get enedis2 server
[2025-04-03 17:36:44] DEBUG  : [Aucun][xxx] Récupération des données horaires : production?start=2025-01-01&end=2025-04-03
[2025-04-03 17:36:44]WARNING : [Aucun][xxx] Erreur lors de la récupération des données horaires : Can no get enedis2 server
[2025-04-03 17:36:44]WARNING : [Aucun][xxx] Certaines données n'ont pas été récupérées : daily_consumption consumption_load_curve daily_consumption_max_power daily_production production_load_curve
[2025-04-03 17:36:44] DEBUG  : [Aucun][xxx] Prochaine programmation : 03/04/2025 18:06
[2025-04-03 17:36:44] DEBUG  : [Aucun][xxx] *** Fin d'interrogation des serveurs Enedis ***

D’autres idées ?

Merci par avance

J’ai désactivé les données horaires pour éviter trop d’appels.
D’autres idées ?

J’ai l’impression que l’inscription de Jeedom à Enedis passe via un compte Particulier.

N’est-ce pas une piste ?

Comment donner l’autorisation au compte Professionnel ?
Je en trouve pas Jeedom sous :


Normal ?

Merci de vos conseils :slight_smile:

Bonjour
A toutes fins utiles, j’avais le même pb. J’ai désactivé le plugin puis réactivé puis remis les crédentials jeedom et enedis via le bouton fait pour et tout remarche. Je n’ai pas perdu mes anciennes données.
A+

Bonjour @manu747 ,

En creusant de mon côté, il s’avère que l’API utilisée n’est pas celle qui donne accès aux données qui m’intéresse.
Il faudrait l’API SGE :frowning:

Hello,
Le plugin Enedis ne permet qu’une connexion aux compte personnels. Les comptes entreprises ne sont pas pris en charge par le plugin visiblement, mais pour les comptes PRO une API très complète permet de récupérer les données via un plugin script php.

J’ai pu remonter les données de conso journalières et de pic de puissance soutirée
Capture d’écran 2026-01-14 155827

Et l’API permet de récupérer 36 mois d’historique

Je peux partager le code.php pour les interessés !

Bonne journée
Julien

1 « J'aime »

Bonjour,

Le code php pour récupérer l’API des comptes pro m’intéresse beaucoup effectivement !

Merci !

Bonjour,
Ça marche nickel, merci !
Je vais maintenant essayé de récupérer la conso toutes les 30 minutes

Bonjour,
Où trouver le code ?

Le demander à jdum25 qui a bien voulu me l’envoyer par MP

Ci joint le code commenté !

<?php
// ============================================================
// 1. CONFIGURATION
// ============================================================
$clientId         = trim("CLIENT API"); 
$clientSecret     = trim("API KEY");
$prm              = trim("PDL ENEDIS"); // Attention le PDL doit etre transmis par le fournisseur d'énergie (edf,engie, etc.) a Enedis pour qu'il remonte sur l'espace Pro 
$commandeJeedomId = 000000; // REMPLACER PAR L'ID DE COMMANDE JEEDOM

// ============================================================
// 2. CHARGEMENT DU COEUR JEEDOM (Chemin Absolu)
// ============================================================
if (file_exists('/var/www/html/core/php/core.inc.php')) {
    require_once '/var/www/html/core/php/core.inc.php';
} else {
    die("Erreur critique : Impossible de trouver le coeur de Jeedom dans /var/www/html/core/php/core.inc.php");
}

// URLs API Enedis
$urlAuth = "https://gw.ext.prod.api.enedis.fr/oauth2/v3/token"; // OAuth2 natif dans l'API Enedis
$urlApi  = "https://gw.ext.prod.api.enedis.fr/mesure_synchrone_auto/v1/metering_data/daily_consumption"; // Lien de l'API choisie dans Enedis pro. Il faut activer l'API avant de configurer Jeedom

// ============================================================
// 3. AUTHENTIFICATION
// ============================================================
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $urlAuth);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Décommenter seulement si erreur SSL
$authString = base64_encode($clientId . ":" . $clientSecret);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Basic " . $authString,
    "Content-Type: application/x-www-form-urlencoded"
]);
$resToken = curl_exec($ch);
curl_close($ch);
$jsonToken = json_decode($resToken, true);

if (!isset($jsonToken['access_token'])) {
    // On utilise le log Jeedom pour plus de propreté
    log::add('script', 'error', 'API Enedis - Erreur Auth : ' . $resToken);
    die("Erreur Auth (voir logs script)");
}
$token = $jsonToken['access_token'];

// ============================================================
// 4. RECUPERATION DONNEES (J-5 à J-1)
// ============================================================
$end = date('Y-m-d'); 
$start = date('Y-m-d', strtotime('-5 days')); // pour charger l'historique disponible sur Enedis Pro, mettre strtotime('-36 months')

$params = [
    'usage_point_id' => $prm,
    'start'          => $start,
    'end'            => $end
];
$urlFinal = $urlApi . "?" . http_build_query($params);

$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, $urlFinal);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
// curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, false); // Décommenter seulement si erreur SSL
curl_setopt($ch2, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer " . $token,
    "Accept: application/json"
]);
$finalResult = curl_exec($ch2);
curl_close($ch2);

// ============================================================
// 5. INJECTION DANS L'HISTORIQUE JEEDOM
// ============================================================
$data = json_decode($finalResult, true);

if (isset($data['meter_reading']['interval_reading'])) {
    
    // On charge la commande Jeedom via son ID
    $cmd = cmd::byId($commandeJeedomId);
    if (!is_object($cmd)) {
        die("Erreur : La commande Jeedom ID $commandeJeedomId n'existe pas.");
    }

    $count = 0;
    foreach ($data['meter_reading']['interval_reading'] as $reading) {
        
        // A. Conversion Wh -> kWh
        $valeur_kwh = floatval($reading['value']) / 1000;
        
        // B. Date de la mesure (Format Y-m-d)
        $date_mesure = date('Y-m-d H:i:s', strtotime($reading['date']));
        
        // C. Injection dans l'historique
        $cmd->addHistoryValue($valeur_kwh, $date_mesure);
        $count++;
    }
    
    if (isset($valeur_kwh)) {
        echo $valeur_kwh;
    } else {
        echo 0;
    }

} else {
    // En cas d'erreur, on log mais on affiche 0 (type numérique)
    log::add('script', 'error', 'API Enedis - Pas de données : ' . $finalResult);
    echo 0;
}
?>
1 « J'aime »

Bonjour,

Il faudrait modifier le titre du post pour ajouter « pro » après Enedis

Si vous avez besoin d’aide pour utiliser le script n’hésitez pas à demander, je viens de le faire et c’est tout frais :innocent:

1 « J'aime »

Titre modifié.

Merci @jdum25.
Bonne remarque @Bonjour . Si c’est tout frais, un tuto serait très pratique.

Merci à vous 2 !

  • S’abonner à l’API mesure_synchrone_auto sur le site Enedis Pro après avoir créé une application
  • Créer un équipement script avec une commande info numérique type script avec historisation et aucun comme lissage
  • Aller dans plugins/script/data avec l’éditeur de fichier de jeedom et créer un fichier par exemple Enedis.php
  • Coller le script dans Enedis.php
  • Aller sur l’application créée sur votre compte Enedis pro
  • Copier coller API key à la place de CLIENT API
  • Copier coller API secret à la place de API KEY
  • PRM à la place de PDL ENEDIS
  • Mettre l’ID de la commande jeedom nouvellement créée à la place de 000000
  • modifier les dates dans le script php en fonction de vos besoins ($end et $start)
  • Mettre dans la requête de la commande script jeedom : /var/www/html/plugins/script/data/Enedis.php
  • Sauvegarder - Les données sont dans l’historique de la commande

Si après avoir obtenu votre historique vous voulez récupérer la conso de la veille chaque jour vous pouvez indiquer -1 days pour le start en actualisant le script chaque jour à 8 h 07 par exemple et en commentant les lignes suivantes pour ne pas avoir de valeur à l’heure ou vous demandez l’actualisation.

if (isset($valeur_kwh)) {
    echo $valeur_kwh;
} else {
    echo 0;
}

Votre commande gardera une valeur à 0 mais son historique sera correct

Dans le même principe, pour récupérer la consommation horaire (dans ce cas par tranches de 5 minutes sur le comptage d’un transformateur)

<?php
// ============================================================
// 1. CONFIGURATION
// ============================================================
$clientId         = trim("XXXX..."); 
$clientSecret     = trim("XXXX....");
$prm              = trim("XXXX...."); // Attention le PDL doit etre transmis par le fournisseur d'énergie (edf,engie, etc.) a Enedis pour qu'il remonte sur l'espace Pro 
$commandeJeedomId = 0000000; // REMPLACER PAR L'ID DE COMMANDE JEEDOM

// ============================================================
// 2. CHARGEMENT DU COEUR JEEDOM (Chemin Absolu)
// ============================================================
if (file_exists('/var/www/html/core/php/core.inc.php')) {
    require_once '/var/www/html/core/php/core.inc.php';
} else {
    die("Erreur critique : Impossible de trouver le coeur de Jeedom dans /var/www/html/core/php/core.inc.php");
}

// URLs API Enedis
$urlAuth = "https://gw.ext.prod.api.enedis.fr/oauth2/v3/token"; // OAuth2 natif dans l'API Enedis
$urlApi  = "https://gw.ext.prod.api.enedis.fr/mesure_synchrone_auto/v1/metering_data/consumption_load_curve";
// Lien de l'API choisie dans Enedis pro. Il faut activer l'API avant de configurer Jeedom

// ============================================================
// 3. AUTHENTIFICATION
// ============================================================
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $urlAuth);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Décommenter seulement si erreur SSL
$authString = base64_encode($clientId . ":" . $clientSecret);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Basic " . $authString,
    "Content-Type: application/x-www-form-urlencoded"
]);
$resToken = curl_exec($ch);
curl_close($ch);
$jsonToken = json_decode($resToken, true);

if (!isset($jsonToken['access_token'])) {
    // On utilise le log Jeedom pour plus de propreté
    log::add('script', 'error', 'API Enedis - Erreur Auth : ' . $resToken);
    die("Erreur Auth (voir logs script)");
}
$token = $jsonToken['access_token'];

// ============================================================
// 4. RECUPERATION DONNEES 
// ============================================================
$end = date('Y-m-d'); 
$start = date('Y-m-d', strtotime('-1 days'));
//$start = date('Y-m-d', strtotime('-5 days')); // pour charger l'historique disponible sur Enedis Pro, mettre strtotime('-36 months')

$params = [
    'usage_point_id' => $prm,
    'start'          => $start,
    'end'            => $end
];
$urlFinal = $urlApi . "?" . http_build_query($params);

$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, $urlFinal);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
// curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, false); // Décommenter seulement si erreur SSL
curl_setopt($ch2, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer " . $token,
    "Accept: application/json"
]);
$finalResult = curl_exec($ch2);
curl_close($ch2);

// ============================================================
// 5. INJECTION DANS L'HISTORIQUE JEEDOM
// ============================================================
$data = json_decode($finalResult, true);

if (isset($data['meter_reading']['interval_reading'])) {
    
    // On charge la commande Jeedom via son ID
    $cmd = cmd::byId($commandeJeedomId);
    if (!is_object($cmd)) {
        die("Erreur : La commande Jeedom ID $commandeJeedomId n'existe pas.");
    }

    $count = 0;
    foreach ($data['meter_reading']['interval_reading'] as $reading) {
      
     // log::add('script', 'info', 'Value ' . $reading['value'][0] . $reading['value'][1]);
        
        // A. Conversion Wh -> kWh      
        $valeur_kwh = floatval($reading['value'][0]) / 1000;
        
        // B. Date de la mesure (Format Y-m-d)
        $date_mesure = date('Y-m-d H:i:s', strtotime($reading['date'][0]));
        
        // C. Injection dans l'historique
        $cmd->addHistoryValue($valeur_kwh, $date_mesure);
        $count++;
    }
    
 //   if (isset($valeur_kwh)) {
 //       echo $valeur_kwh;
 //   } else {
 //       echo 0;
 //   }

} else {
    // En cas d'erreur, on log mais on affiche 0 (type numérique)
    log::add('script', 'error', 'API Enedis - Pas de données : ' . $finalResult);
    echo 0;
}
?>

On récupère 2 valeurs, la deuxième est la puissance réactive