Bonjour,
Voici le contenu de la mise à jour prévue ce lundi :
			
				 merci la team
 merci la team 

didou45 a écrit:Pour ma part je suis a la recherche d’une commande pour les tarifs Tempo , il y en a bien dans le store eedomus mais sûrement trot ancien et ne fonctionne pas ou plus ,
Bart (eedomus team) a écrit:Bonjour,
Voici le contenu de la mise à jour prévue ce lundi :
 script ou au moins lui dire que l'état 0 correspond à l'état 1 (en mieux).
  script ou au moins lui dire que l'état 0 correspond à l'état 1 (en mieux).  redéclarer une autre utilisation pour que ça marche.
 redéclarer une autre utilisation pour que ça marche.vva a écrit:Bonjour,
je relance le sujet car j'ai reçu un mail de RTE-Ecowatt indiquant que la v4 de leur API ne fonctionnera plus à compter du 30.06.2024.
Une âme charitable peut il migrer le script de notre box vers la version 5 de leur api ?
 
 <?php
// Peripherique EcoWatt pour eedomus
// Basé sur les travaux de Ianx74
// Version 1.2
// Les donnees sont desormais "cachees" sur le cloud eedomus ce qui evite la creation d'identifiants Oauth pour chaque utilisateur
// Version 1.3 adaptation opa95 (janvier 2024)
//
// action : [request (par défaut),restart]
// alerte : [-1,0,1,2,3] prochain niveau d'alerte recherché (-1 => non spécifié)
// heure  : [now,0..23] ou h,d (heure h, durée en heures(1 par défaut)) now
// par défaut 
// jour   : [1(par défaut)..max] JMIN=1
//Lancement 
// état aujourd'hui http://localhost/script/?exec=ecowatt_eedomus.php
//    (a=-1,h=(0,24),j=1)
// état demain http://localhost/script/?exec=ecowatt_eedomus.php&jour=2
//    (a=-1,h=(0,24),j=2)
// état maintenant http://localhost/script/?exec=ecowatt_eedomus.php&heure=now
//    (a=-1,h=(now,1),j=1)
// état dans (x-1) heures http://localhost/script/?exec=ecowatt_eedomus.php&heure=now,
//    (a=-1,h=(now,x),j=1) (x=1 -> maintenant) comme JMIN
// état entre 7h et 21h http://localhost/script/?exec=ecowatt_eedomus.php&heure=7,14 (depuis 7h pour une durée de 14h)
//    (a=-1,h=(7,14),j=1), si heure actuelle<7 aujourd'hui sinon demain
//     durée limitée par la taille du fichier retourné (96h le 2023-01-08)
// Première alerte http://localhost/script/?exec=ecowatt_eedomus.php&alerte=x
//    (a=x,h=0,j=1) (depuis aujourd'hui à 0h)
// Première alerte à venir http://localhost/script/?exec=ecowatt_eedomus.php&alerte=x&heure=now
//    (a=x,h=now,j=1) (depuis maintenant)
// Resultat //status pour rester compatible avec V1.2
/*
<root>
  <status>1</status>resultat, dépend de la demande
  <etat>1</etat> état 0->Vert décarboné, 1->Vert, 2->Orange, 3->Rouge, -2->erreur (valeur max dan la période recherchée)
  <message>Pas d'alerte.</message> Message
  <alerte>-1</alerte> alerte recherchée (comme status)
  <jour>2024-01-09</jour> jour début
  <heure>0</heure> heure début
  <duree>24</duree> durée (heures)
  <url>https://secure.eedomus.com/json/ecowatt_cache.php</url> url utilisée
  <buffer>non</buffer> relecture du buffer ([oui, non])
  <date>1704725407</date> Timestamp
  <datestr>2024-01-08 15:50:07</datestr> date requete
  <expdate>2024-01-08 15:59:12</expdate> date expiration buffer
</root>
*/
define('JSON','{ "eedomus_downloaded_time":"2023-12-27 15:48:29", "signals":[{"GenerationFichier":"2023-12-26T23:00:00+01:00","jour":"2023-12-27T00:00:00+01:00","dvalue":1,"message":"Pas d\u2019alerte.","values":[{"pas":0,"hvalue":1},{"pas":1,"hvalue":1},{"pas":2,"hvalue":2},{"pas":3,"hvalue":1},{"pas":4,"hvalue":1},{"pas":5,"hvalue":1},{"pas":6,"hvalue":1},{"pas":7,"hvalue":1},{"pas":8,"hvalue":1},{"pas":9,"hvalue":1},{"pas":10,"hvalue":1},{"pas":11,"hvalue":2},{"pas":12,"hvalue":1},{"pas":13,"hvalue":1},{"pas":14,"hvalue":1},{"pas":15,"hvalue":1},{"pas":16,"hvalue":1},{"pas":17,"hvalue":1},{"pas":18,"hvalue":1},{"pas":19,"hvalue":1},{"pas":20,"hvalue":1},{"pas":21,"hvalue":1},{"pas":22,"hvalue":1},{"pas":23,"hvalue":1}]},{"GenerationFichier":"2023-12-26T23:00:00+01:00","jour":"2023-12-28T00:00:00+01:00","dvalue":1,"message":"Pas d\u2019alerte.","values":[{"pas":0,"hvalue":1},{"pas":1,"hvalue":0},{"pas":2,"hvalue":2},{"pas":3,"hvalue":0},{"pas":4,"hvalue":1},{"pas":5,"hvalue":1},{"pas":6,"hvalue":1},{"pas":7,"hvalue":1},{"pas":8,"hvalue":1},{"pas":9,"hvalue":1},{"pas":10,"hvalue":1},{"pas":11,"hvalue":1},{"pas":12,"hvalue":2},{"pas":13,"hvalue":1},{"pas":14,"hvalue":1},{"pas":15,"hvalue":1},{"pas":16,"hvalue":1},{"pas":17,"hvalue":1},{"pas":18,"hvalue":1},{"pas":19,"hvalue":1},{"pas":20,"hvalue":1},{"pas":21,"hvalue":1},{"pas":22,"hvalue":1},{"pas":23,"hvalue":1}]},{"GenerationFichier":"2023-12-26T23:00:00+01:00","jour":"2023-12-29T00:00:00+01:00","dvalue":1,"message":"Pas d\u2019alerte.","values":[{"pas":0,"hvalue":1},{"pas":1,"hvalue":1},{"pas":2,"hvalue":1},{"pas":3,"hvalue":2},{"pas":4,"hvalue":1},{"pas":5,"hvalue":1},{"pas":6,"hvalue":1},{"pas":7,"hvalue":2},{"pas":8,"hvalue":2},{"pas":9,"hvalue":2},{"pas":10,"hvalue":1},{"pas":11,"hvalue":1},{"pas":12,"hvalue":1},{"pas":13,"hvalue":1},{"pas":14,"hvalue":1},{"pas":15,"hvalue":1},{"pas":16,"hvalue":1},{"pas":17,"hvalue":1},{"pas":18,"hvalue":1},{"pas":19,"hvalue":1},{"pas":20,"hvalue":1},{"pas":21,"hvalue":1},{"pas":22,"hvalue":1},{"pas":23,"hvalue":1}]},{"GenerationFichier":"2023-12-26T23:00:00+01:00","jour":"2023-12-30T00:00:00+01:00","dvalue":1,"message":"Pas d\u2019alerte.","values":[{"pas":0,"hvalue":1},{"pas":1,"hvalue":1},{"pas":2,"hvalue":1},{"pas":3,"hvalue":1},{"pas":4,"hvalue":1},{"pas":5,"hvalue":1},{"pas":6,"hvalue":1},{"pas":7,"hvalue":1},{"pas":8,"hvalue":1},{"pas":9,"hvalue":1},{"pas":10,"hvalue":1},{"pas":11,"hvalue":1},{"pas":12,"hvalue":1},{"pas":13,"hvalue":1},{"pas":14,"hvalue":1},{"pas":15,"hvalue":1},{"pas":16,"hvalue":1},{"pas":17,"hvalue":1},{"pas":18,"hvalue":1},{"pas":19,"hvalue":1},{"pas":20,"hvalue":1},{"pas":21,"hvalue":1},{"pas":22,"hvalue":1},{"pas":23,"hvalue":1}]}]}');
define('VER','1.4');// version juin 2024
define('DELTAT','900');// Ecart lecture serveur (sec)
define('JMIN','1');// indice d'aujourd'hui et heure actuelle (compatibilté V1.2)
define('ALUKN','-2');// alerte non définie
define('ALOK','-1');// pas d'alerte
define('ALMIN','0');// niveau d'alerte min
define('ALMAX','3');// niveau d'alerte max
define('DECARB','0');// niveau d'alerte décarboné
define('VERT','1');// niveau d'alerte vert
define('ORANGE','2');// niveau d'alerte orange
define('ROUGE','3');// niveau d'alerte rouge
define('DEFMODE','auto');//['auto','eedomus','edf','rte','simul']
$GLOBALS['TS_JOUR'] = 86400; /*60*60*24*/
$GLOBALS['valstatus'] = array(ALUKN => 'Etat non défini',ALOK => "Pas d'alarme",DECARB => 'Vert décarboné',VERT => 'Vert',ORANGE => 'Orange', ROUGE => 'Rouge' );
$GLOBALS['time']  = time();
$GLOBALS['urls'] = array('eedomus','edf','rte');
$GLOBALS['jour'] = strtotime(date('Y-m-d',$GLOBALS['time']));
// $url nom du site
// return mise à jour $GLOBALS
// return nom du site
function sdk_select_url($url)
{
  switch ($url){
    case 'auto' :
    case 'eedomus' :
      $GLOBALS['LOCAL_CACHE_DURATION_SEC'] = 60;//60 sec
      $GLOBALS['url'] = "https://secure.eedomus.com/json/ecowatt_cache.php";
      break;
    case 'edf' :
      $GLOBALS['LOCAL_CACHE_DURATION_SEC'] = DELTAT;//15*60; sec
      $GLOBALS['url'] = "https://particulier.edf.fr/content/dam/2-Actifs/Scripts/ecowattSignal.json";
      break;
    case 'rte' :
      $GLOBALS['LOCAL_CACHE_DURATION_SEC'] = DELTAT;//15*60; sec
      $GLOBALS['url'] = "https://digital.iservices.rte-france.com/open_api/ecowatt/v5/signals";
      break;
    case 'simul' :
      $GLOBALS['LOCAL_CACHE_DURATION_SEC'] = 0;
      $GLOBALS['url'] = "";
      $GLOBALS['time']  = strtotime(substr(JSON,strpos(JSON,'jour":"')+strlen('jour":"'),25))+43200;//12h
      break;
    default : $GLOBALS['url']='';
  }
  $GLOBALS['message']  = "";
  $GLOBALS['value']  = "";
   return $url;
}
// json donnees
// return tableau donnees
function sdk_get_data_array($json)
{
//  $json = str_replace('{"pas":2,"hvalue":1}','{"pas":2,"hvalue":3}',$json);
  $json = str_replace(array('"pas":',',"hvalue"'),array('',''),$json);
   $response = sdk_json_decode($json,true);
  $num = 0;
  foreach($response['signals'] as $signals){
    $response['signals'][$num]['message']=htmlentities(preg_replace('/\\\\u([0-9a-fA-F]{4})/', "&#x$1;", $signals['message']), ENT_NOQUOTES, 'UTF-8');
      $num++;
    }
   return $response;
}
// jour  : JMIN (jour_actuel)..jour relatif souhaité
// data = [jour => yyyy-mm-dd,heure => h]
function sdk_get_abs_date($jRel)
{
   $jAbs = date('Y-m-d', $GLOBALS['time']+(($jRel-JMIN)*$GLOBALS['TS_JOUR']));
   return $jAbs;
}
// $date : 2023-12-26...
// return  format Y-m-d
function sdk_extract_jour($date)
{
   $jAbs = substr($date,0,10);
   return $jAbs;
}
// $jRel : jour relatif (>=JMIN)
// return  nom du jour
function sdk_get_jour_str($jRel)
{
  switch ($jRel)
  {
    case 1 : return "Aujourd'hui";
//    case 2 : return "Demain";
    default :
      $jours_traduction = array(1 => 'Lundi', 2 => 'Mardi', 3 => 'Mercredi', 4 => 'Jeudi', 5 => 'Vendredi', 6 => 'Samedi', 7 => 'Dimanche');
      $result = $jours_traduction[date('N',$GLOBALS['time']+$GLOBALS['TS_JOUR']*($jRel-JMIN))];
      return $result;
  }
}
// jour : false = JMIN..JMAX;
// heure : null, 0..23
// return mise à jour $GLOBALS
function sdk_get_values($datas, $jRel, $heure='',$duree=1)
{
   $GLOBALS['value'] = ALUKN;
   $GLOBALS['status'] = ALUKN;
   $GLOBALS['message'] = 'Données invalides';
   $jAbs = null;
  $GLOBALS['jour'] = null;
  $GLOBALS['heure'] = null;
  $GLOBALS['duree'] = 0;
  if (array_key_exists('signals', $datas))
   {
      $jAbs = sdk_get_abs_date($jRel);
    $numJour = JMIN-1;
      foreach ($datas['signals'] as $elem_jour)//Valeurs journalières
      {
         if ($jAbs == sdk_extract_jour($elem_jour['jour']))
         {
        if ($GLOBALS['jour'] == null) $GLOBALS['jour'] = $jAbs;//premier tour
            if ($heure === '')//aujourd'hui
            {
          $GLOBALS['value'] = $elem_jour['dvalue'];
          $GLOBALS['message'] = $elem_jour['message'];
          $GLOBALS['duree'] = 24;
          $GLOBALS['heure'] = 0;
          $GLOBALS['status'] = $GLOBALS['value'];
               break;
            }
            else
            {
               foreach ($elem_jour['values'] as $elem)
               {
            if (array_key_exists($heure,$elem)){
                $GLOBALS['value'] = max($GLOBALS['value'],$elem[$heure]);
              $GLOBALS['duree']++;
              $duree--;
              if ($GLOBALS['heure'] == null) $GLOBALS['heure'] = $heure;//premier tour
              if ($duree <= 0)
              {
                $GLOBALS['message'] = $GLOBALS['valstatus'][$GLOBALS['value']];
                $GLOBALS['status'] = $GLOBALS['value'];
                break 2;
              }
              $heure++;
              if ($heure==24)
              {
                $jRel++;
                $jAbs = sdk_get_abs_date($jRel);
                $heure=0;
              }
            }
               }
            }
         }
    $numJour++;
    $GLOBALS['message'] = 'Erreur jour >'.$numJour;
      }   
   }
   return;
}
// jour : false = JMIN..JMAX;
// heure : null, 0..23
// return mise à jour $GLOBALS
function sdk_get_alert($datas, $alert, $jRel=1, $heure='')
{
   $GLOBALS['value'] = ALUKN;
   $GLOBALS['status'] = ALUKN;
   $GLOBALS['message'] = 'Données invalides';
   $jAbs = null;
  $GLOBALS['jour'] = null;
  $GLOBALS['heure'] = null;
  $GLOBALS['duree'] = 0;
  if ($heure == '') $heure =date('G',$GLOBALS['time']);
  if (array_key_exists('signals', $datas))
   {
      $jAbs = sdk_get_abs_date($jRel);
    $numJour = JMIN-1;
    $first = true;
      foreach ($datas['signals'] as $elem_jour)//Valeurs journalières
      {
         if ($jAbs == sdk_extract_jour($elem_jour['jour']))
         {
            foreach ($elem_jour['values'] as $elem)
            {
          if (array_key_exists($heure,$elem)){
            if ($first)
            {
                if ($elem[$heure] == $alert)
              {
                $GLOBALS['jour'] = $jAbs;
                $GLOBALS['heure'] = $heure;
                $GLOBALS['value'] = $alert;
                $GLOBALS['duree']++;
                $first = false;
              }
            }
            else// recherche fin de séquence
            {
                if ($elem[$heure] == $alert)
              {
                $GLOBALS['duree']++;
              }
              else
              {
                break 2;
              }
            }
            $heure++;
            if ($heure==24)
            {
              $jRel++;
              $jAbs = sdk_get_abs_date($jRel);
              $heure=0;
            }
          }
            }
         }
    $numJour++;
      }   
   }
  if ($first) $GLOBALS['message'] = "Pas d'alerte ".$GLOBALS['valstatus'][$alert];
  else $GLOBALS['message'] = sdk_get_jour_str($jRel).' à '.$GLOBALS['heure'].'h (durée '.$GLOBALS['duree'].'h)';
  $GLOBALS['status'] = $GLOBALS['message'];
   return;
}
/* Programme principal */
$action = getArg('action',false,'request');
switch ($action)
{
   case 'restart':
      saveVariable('json_time', null);// force la relecture
   case 'request':
      $alert = strtolower(getArg('alerte', false, ALOK));//si ALOK, champ global du jour
    if (is_numeric($alert))
      $alert  = max(min(intval($alert),ALMAX),ALOK);
    else{
      switch ($alert){
        case 'rouge'  : $alert =ROUGE; break;
        case 'orange' : $alert =ORANGE; break;
        case 'vert'   : $alert =VERT; break;
        case 'decarb' : $alert =DECARB; break;
        default : $alert = ALUKN;
      }
    }
    $mode = strtolower(getArg('mode', false, DEFMODE));
    $GLOBALS['mode']=sdk_select_url($mode);
      $jRel_ = getArg('jour', false, null);
    $jRel  = max(intval($jRel_),JMIN);
      $heures = getArg('heure', false, null);//heures=heure,duree
    list($heure_,$duree) = explode(',',$heures);
    $heure = $heure_;
    if ($heure == 'now') {
      $heure = date('G',$GLOBALS['time'])+max(0,(int)$duree-JMIN);
      $duree = 1;
      while ($heure > 23) {
        $heure -= 24;
        $jRel++;
      }
    }
    if ($heure !== '') $heure = max(min(intval($heure),23),0);
    if ($duree != '') 
    {
      $duree = max(intval($duree),1);
    }
    if ( ($alert <= ALOK) && ($heure_ !== '') && (date('G',$GLOBALS['time'])>$heure) ) $jRel++;//si heure dépassée, passer au lendemain
      $prev_json_val_time = loadVariable('json_time');
    $left_time = $prev_json_val_time-$GLOBALS['time'];
    $json = '';
    $buffer = 'non';
      if ($left_time<=0)
      {
      if ($GLOBALS['url'] == "")
      {
        $json = JSON;
        $infos = array('url'=>'simulation','http_code' => 200,'header'=>'HTTP/1.1 200 OK Date:');
      }
      else
      { 
        foreach ($GLOBALS['urls'] as $url)
          {
            if ($GLOBALS['mode'] != 'auto' && $GLOBALS['mode'] != $url) continue;
            sdk_select_url($url);
               $json = httpQuery($GLOBALS['url'], 'GET', null, null, $header,false,false,$infos);
               if (($GLOBALS['mode'] != 'auto') || ($infos['http_code'] == 200) )break;
          }
      }
         if ($info['http_code'] != 200){
             $message = 'info :'.substr($info['header'],0,strpos($info['header'],'Date')-1).PHP_EOL;
         }
         if ($json != '')
         {
        $json = str_replace(array('{ ',', '),array('{',','),$json);//suppression espaces
            saveVariable('json_cache', $json);
        $new_time = $time + $GLOBALS['LOCAL_CACHE_DURATION_SEC'];
            saveVariable('json_time', $new_time);
         }
      }
      // cache ou erreur de telechargement
      if ($json == '')
      {
         $json = loadVariable('json_cache');
      if ($json) {
        $buffer = 'oui';
      }
      }
         
    $response = sdk_get_data_array($json);
    if (array_key_exists('eedomus_downloaded_time',$response))
         saveVariable('json_time', DELTAT + rand (0,60)+ strtotime($response['eedomus_downloaded_time']));
      if ($alert != ALOK){  
         sdk_get_alert($response, $alert, $jRel, $heure);}
      else  
         sdk_get_values($response, $jRel, $heure, $duree);
      break;
   default:
      $GLOBALS['value'] = ALUKN;
      $GLOBALS['message'] = "Invalid action : [$action]";
}
@sdk_header('text/xml');
//"utf8" "iso-8859-1"
//var_dump($response);
$xml = '<?xml version="1.0" encoding="utf8" ?>'.PHP_EOL;
$xml .= '<root>'.PHP_EOL;
$xml .= '  <status>'.$GLOBALS['status'].'</status>'.PHP_EOL;
$xml .= '  <valeur>'.$GLOBALS['value'].'</valeur>'.PHP_EOL;
$xml .= '  <message>'.$GLOBALS['message'].'</message>'.PHP_EOL;
$xml .= '  <alerte>'.$alert.'</alerte>';
$xml .= '<jour>'.$GLOBALS['jour'].'</jour>';
$xml .= '<heure>'.$GLOBALS['heure'].'</heure>';
$xml .= '<duree>'.$GLOBALS['duree'].'</duree>'.PHP_EOL;
$xml .= '  <url>'.$GLOBALS['url'].'</url>';
$xml .= '<buffer>'.$buffer.'</buffer>'.PHP_EOL;
$xml .= '  <date>'.$GLOBALS['time'].'</date>';
$xml .= '<datestr>'.date('Y-m-d H:i:s',$GLOBALS['time']).'</datestr>';
$xml .= '<expdate>'.date('Y-m-d H:i:s',loadVariable('json_time')).'</expdate>';
$xml .= '<creation>'.$response['signals'][0]['GenerationFichier'].'</creation>'.PHP_EOL;
$xml .= '  <json>'.$json.'</json>'.PHP_EOL;
$xml .= '</root>';
echo $xml;
?>
Retour vers Nouveautés & Annonces
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 10 invité(s)