Bonjour,
Voici le contenu de la mise à jour prévue ce lundi :
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 :
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 28 invité(s)