EDF-Tempo: Couleur du lendemain

ha j’avais mal mis un espace avec la suite, donc j’avais une erreur.
Merci pour tout.

Bonjour, apparemment la page du site edf à changée et du coup plus de remontée d’info

Bonjour,

Selon https://particulier.edf.fr/fr/accueil/gestion-contrat/options/tempo.html#/selection-bp cà devrait être bleu jusqu’au 31 aout.
image

la page n’existe plus :frowning:
https://particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?Date_a_remonter=2022-06-11&TypeAlerte=TEMPO

Je vais tenter d’adapter pour cette « nouvelle » page :
https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant=2022-6-11

Pour le comptage des jours restants : https://particulier.edf.fr/services/rest/referentiel/getNbTempoDays?TypeAlerte=TEMPO

En modifiant le script existant avec ce contenu ci-dessous. Version précédente: ( EDF-Tempo: Couleur du lendemain - #2 par jpty )

<?php
  $opts = array(
    'http'=>array(
      'method'=>"GET",
      'header'=>array( "User-Agent: Wget/1.20.3 (linux-gnu)",
          "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
          "Content-Type: application/json"
      )
    )
  );
  $context = stream_context_create($opts);
  $resu = @file_get_contents("https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant=" .date('Y-m-d'), false, $context);

  if($resu === false || strstr($resu, "couleurJourJ") === false)
    echo '{"couleurJourJ1": "Erreur Récupération","couleurJourJ": "Erreur Récupération"}';
  else {
    echo $resu;
  }

et ce paramétrage,

Ca fonctionne:
image

@tomtom Merci pour la nouvelle URL.

2 « J'aime »

Je n’avais pas cette version de script. Le mien récup également le nombre de jours restants.

<?php

  $JoursRestant = "https://particulier.edf.fr/services/rest/referentiel/getNbTempoDays?TypeAlerte=TEMPO";
  $CouleurJour  = "https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant=" .date('Y-m-d');

  $opts = array(
    'http'=>array(
      'method'=>"GET",
      'header'=>array( "User-Agent: Wget/1.20.3 (linux-gnu)",
          "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
          "Content-Type: application/json"
      )
    )
  );
  $context  = stream_context_create($opts);
  $resu     = json_decode(file_get_contents($CouleurJour, false, $context));
  $rest     = json_decode(file_get_contents($JoursRestant, false, $context));
  $retour   = [];

  $couleur = $restant = "";
  if($resu === false)
    $couleur = json_decode('{"couleurJourJ":"NA","couleurJourJ1":"NA"}');
  else {
    $couleur = $resu;
  }

  if($rest === false)
    $restant = json_decode('{"PARAM_NB_J_BLANC":"NA","PARAM_NB_J_ROUGE":"NA","PARAM_NB_J_BLEU":"NA"}');
  else {
    $restant = $rest;
  }

  $retour["couleur"] = $couleur; // couleurJourJ / couleurJourJ1
  $retour["restant"] = $restant; // PARAM_NB_J_BLANC / PARAM_NB_J_ROUGE / PARAM_NB_J_BLEU

  echo json_encode($retour);

Dans le virtuel/script :

1 « J'aime »

Bonjour ,

Merci pour vos retour et réactivité .

Cela fonctionne à nouveau
++

Bonjour

@tomtom , comment identifie tu une nouvelle page EDF pour la modification du script , avec F12 sur la page des jours Tempo ?

en effet,j’ai regardé le comportement de la page avec le calendrier tempo

Bonjour à tous,

Moi j’ai un scénario avec le code suivant

//
$LienTempoUrl = 'https://particulier.edf.fr/bin/edf_rc/servlets/ejptempodaysnew?TypeAlerte=TEMPO';
//
$InitPage = curl_init();
curl_setopt($InitPage, CURLOPT_URL, $LienTempoUrl);
curl_setopt($InitPage, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($InitPage, CURLOPT_USERAGENT, 'Le site de Jeedom (www.jeedom.com)');
$resultatJoursRestant = curl_exec ($InitPage);
curl_close($InitPage);
$scenario->setLog($resultatJoursRestant);
//
$DateDuJour = date('Y-m-d',time());
$LienTempoUrl = 'https://particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?Date_a_remonter='. $DateDuJour .'&TypeAlerte=TEMPO';
$InitPage = curl_init();
curl_setopt($InitPage, CURLOPT_URL, $LienTempoUrl);
curl_setopt($InitPage, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($InitPage, CURLOPT_USERAGENT, 'Le site de Jeedom (www.jeedom.com)');
$resultatCouleurJour = curl_exec ($InitPage);
curl_close($InitPage);
$scenario->setLog($resultatCouleurJour);
//
// Recherche des informations des jours restants (Bleu, Blanc, Rouge)
$json_source_Nb_Jours =  $resultatJoursRestant;
// Décode le JSON
$json_data = json_decode($json_source_Nb_Jours);
// Stockage des jours restants dans des variables
$Bleu_Restant = "Jours_Bleus_Restants";
$Blanc_Restant = "Jours_Blancs_Restants";
$Rouge_Restant = "Jours_Rouges_Restants";
// Jours bleus restants
$scenario->setData($Bleu_Restant,$json_data->PARAM_NB_J_BLEU.' / 300');
// Jours blancs restants
$scenario->setData($Blanc_Restant,$json_data->PARAM_NB_J_BLANC.' / 43');
// Jours rouges restants
$scenario->setData($Rouge_Restant,$json_data->PARAM_NB_J_ROUGE.' / 22');
// Affiche la valeur des attributs remontés (Json) dans les logs
$scenario->setLog('Nombre de jours restants Bleu  : '.$scenario->getData($Bleu_Restant));
$scenario->setLog('Nombre de jours restants Blanc : '.$scenario->getData($Blanc_Restant));
$scenario->setLog('Nombre de jours restants Rouge : '.$scenario->getData($Rouge_Restant));
// Recherche des informations couleur du jour
$json_source_Couleur_Jour =  $resultatCouleurJour;
// Décode le JSON
$json_data = json_decode($json_source_Couleur_Jour);
// Stockage couleur du jour et couleur du lendemain dans des variables
$Couleur_Jour = "Tempo_Coul_Jour";
$Couleur_Lendemain = "Tempo_Coul_Lendemain";
// Couleur du jour
$scenario->setData($Couleur_Jour,$json_data->JourJ->Tempo);
// Couleur du lendemain
$scenario->setData($Couleur_Lendemain,$json_data->JourJ1->Tempo);
// Affiche la valeur des attributs remontés (Json) dans les logs
$scenario->setLog("Couleur aujourd'hui  : ".$scenario->getData($Couleur_Jour));
$scenario->setLog('Couleur demain       : '.$scenario->getData($Couleur_Lendemain));

Depuis quelques jours cela ne fonctionne plus vu que le lien n’existe plus.
Je n’arrive plus à retrouver l’auteur de ce code et je suis bien incapable de le modifier.

Est-que ça parle à quelqu’un ce code ?

Merci d’avance.

Bonjour
Grace aux liens postés par @tomtom j’ai pu modifier le fichier PHP original de ECO2WAT (plugin/ecowatt/core/class/ecowatt.class.php).
Je n’ai modifié et pu tester que la partie TEMPO. Je n’ai pas touché à la partie EJP

Voici le fichier modifié:

<?php

/* This file is part of Jeedom.
 *
 * Jeedom is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Jeedom is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Jeedom. If not, see <http://www.gnu.org/licenses/>.
 */

/* * ***************************Includes********************************* */
require_once dirname(__FILE__) . '/../../../../core/php/core.inc.php';
require_once dirname(__FILE__) . '/../../vendor/autoload.php';

class ecowatt extends eqLogic {
	/*     * *************************Attributs****************************** */
	public static $_widgetPossibility = array('custom' => true, 'custom::layout' => false);

	/*     * ***********************Methode static*************************** */

	public static function cronHourly() {
		$hour = array(
			'ejp' => array(1, 6, 12, 16, 19, 23),
			'ecowatt' => array(6, 10, 13, 16, 19, 23),
			'tempo' => array(6, 10, 13, 16, 19, 23),
		);
		foreach (self::byType('ecowatt',true) as $ecowatt) {
			if (isset($hour[$ecowatt->getConfiguration('datasource')]) && !in_array(date('H'), $hour[$ecowatt->getConfiguration('datasource')])) {
				continue;
			}
			$ecowatt->updateInfo();
		}
	}

	public static function valueFromUrl($_url) {
		$InitPage = curl_init();
		curl_setopt($InitPage, CURLOPT_URL, $_url);
		curl_setopt($InitPage, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($InitPage, CURLOPT_USERAGENT, 'Le site de Jeedom (www.jeedom.com)');
		$dataUrl = curl_exec ($InitPage);
		curl_close($InitPage);
		return json_decode($dataUrl, true);
	}

	/*     * *********************Méthodes d'instance************************* */

	public function preSave() {
		$this->setCategory('energy', 1);
	}

	public function postSave() {
		$cmd_list = array();
		if ($this->getConfiguration('datasource') == 'ejp') {
			$cmd_list = array(
				'today' => array(
					'name' => __('Aujourd\'hui', __FILE__),
					'subtype' => 'string',
					'order' => 1,
				),
				'tomorrow' => array(
					'name' => __('Demain', __FILE__),
					'subtype' => 'string',
					'order' => 2,
				),
				'remainingDays' => array(
					'name' => __('EJP restants', __FILE__),
					'subtype' => 'numeric',
					'order' => 3,
				),
				'totalDays' => array(
					'name' => __('EJP écoulés', __FILE__),
					'subtype' => 'numeric',
					'order' => 4,
				),
			);
		}
		if ($this->getConfiguration('datasource') == 'tempo') {
			$cmd_list = array(
				'today' => array(
					'name' => __('Aujourd\'hui', __FILE__),
					'subtype' => 'string',
					'order' => 1,
				),
				'tomorrow' => array(
					'name' => __('Demain', __FILE__),
					'subtype' => 'string',
					'order' => 2,
				),
				'blue-remainingDays' => array(
					'name' => __('Jours Bleus restants', __FILE__),
					'subtype' => 'numeric',
					'order' => 3,
				),
				'blue-totalDays' => array(
					'name' => __('Total jours Bleus', __FILE__),
					'subtype' => 'numeric',
					'order' => 4,
				),
				'white-remainingDays' => array(
					'name' => __('Jours Blancs restants', __FILE__),
					'subtype' => 'numeric',
					'order' => 5,
				),
				'white-totalDays' => array(
					'name' => __('Total jours Blancs', __FILE__),
					'subtype' => 'numeric',
					'order' => 6,
				),
				'red-remainingDays' => array(
					'name' => __('Jours Rouges restants', __FILE__),
					'subtype' => 'numeric',
					'order' => 7,
				),
				'red-totalDays' => array(
					'name' => __('Total jours Rouges', __FILE__),
					'subtype' => 'numeric',
					'order' => 8,
				),
			);
		}
		foreach ($this->getCmd() as $cmd) {
			if (!isset($cmd_list[$cmd->getLogicalId()]) && $cmd->getLogicalId() != 'refresh') {
				$cmd->remove();
			}
		}
		foreach ($cmd_list as $key => $cmd_info) {
			$cmd = $this->getCmd(null, $key);
			if (!is_object($cmd)) {
				$cmd = new ecowattCmd();
				$cmd->setLogicalId($key);
				$cmd->setIsVisible(1);
				$cmd->setName($cmd_info['name']);
				$cmd->setOrder($cmd_info['order']);
			}
			$cmd->setType('info');
			$cmd->setSubType($cmd_info['subtype']);
			$cmd->setEqLogic_id($this->getId());
			$cmd->setEventOnly(1);
			$cmd->save();
		}

		$refresh = $this->getCmd(null, 'refresh');
		if (!is_object($refresh)) {
			$refresh = new ecowattCmd();
			$refresh->setName(__('Rafraichir', __FILE__));
		}
		$refresh->setEqLogic_id($this->getId());
		$refresh->setLogicalId('refresh');
		$refresh->setType('action');
		$refresh->setSubType('other');
		$refresh->setOrder(99);
		$refresh->save();

		$this->updateInfo();
	}

	public function updateInfo() {
		switch ($this->getConfiguration('datasource')) {
			case 'ejp':
				$ejpdays = self::valueFromUrl('https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant=' . date('Y-m-d') . '&TypeAlerte=EJP');
				$region = 'Ejp' . ucfirst(strtolower(str_replace(array('_', 'EJP'), '', $this->getConfiguration('region-ejp'))));

				$value = 'Non déterminé';
				if (isset($ejpdays['JourJ'][$region])) {
					if ($ejpdays['JourJ'][$region] == 'NON_EJP') {
						$value = 'Pas d\'EJP';
					} elseif ($ejpdays['JourJ'][$region] == 'EST_EJP') {
						$value = 'EJP';
					}
				}

				$today = $this->getCmd(null, 'today');
				if (is_object($today) && $today->execCmd(null, 2) != $today->formatValue($value)) {
					$today->event($value);
				}
				$value = 'Non déterminé';
				if (isset($ejpdays['JourJ1'][$region])) {
					if ($ejpdays['JourJ1'][$region] == 'NON_EJP') {
						$value = 'Pas d\'EJP';
					} elseif ($ejpdays['JourJ1'][$region] == 'EST_EJP') {
						$value = 'EJP';
					}
				}
				$this->checkAndUpdateCmd('tomorrow', $value);

				$ejptotaldays = self::valueFromUrl('https://particulier.edf.fr/services/rest/referentiel/historicEJPStore?searchType=ejp');
				$region = str_replace(array('_', 'EJP'), '', $this->getConfiguration('region-ejp'));
				$this->fillValue('totalDays', $region . '::Total', $ejptotaldays, -1);
				$totalDays = $this->getCmd(null, 'totalDays');
				$remainingDays = $this->getCmd(null, 'remainingDays')->event(22 - $totalDays->execCmd(null, 2));
				break;
			case 'tempo':
				$tempodays = self::valueFromUrl('https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant=' . date('Y-m-d') . '&TypeAlerte=TEMPO');
				$this->fillValue('today', 'couleurJourJ', $tempodays);
				$this->fillValue('tomorrow', 'couleurJourJ1', $tempodays);

				$tempodays = self::valueFromUrl('https://particulier.edf.fr/services/rest/referentiel/getNbTempoDays?TypeAlerte=TEMPO');
				$this->fillValue('white-remainingDays', 'PARAM_NB_J_BLANC', $tempodays);
				$this->fillValue('blue-remainingDays', 'PARAM_NB_J_BLEU', $tempodays);
				$this->fillValue('red-remainingDays', 'PARAM_NB_J_ROUGE', $tempodays);

				$tempodays = self::valueFromUrl('https://particulier.edf.fr/services/rest/referentiel/getConfigProperty?PARAM_CONFIG_PROPERTY=param.nb.bleu.periode');
				$this->fillValue('blue-totalDays', 'param.nb.bleu.periode', $tempodays);
				$tempodays = self::valueFromUrl('https://particulier.edf.fr/services/rest/referentiel/getConfigProperty?PARAM_CONFIG_PROPERTY=param.nb.blanc.periode');
				$this->fillValue('white-totalDays', 'param.nb.blanc.periode', $tempodays);
				$tempodays = self::valueFromUrl('https://particulier.edf.fr/services/rest/referentiel/getConfigProperty?PARAM_CONFIG_PROPERTY=param.nb.rouge.periode');
				$this->fillValue('red-totalDays', 'param.nb.rouge.periode', $tempodays);
				break;
		}
		$this->refreshWidget();
	}

	public function fillValue($_logicalId, $_value, $_data, $_default = 'N/A') {
		$result = $_default;
		foreach (explode('::', $_value) as $key) {
			if (isset($_data[$key])) {
				$_data = $_data[$key];
			} else {
				$_data = null;
				break;
			}
		}
		if (!is_array($_data) && $_data !== null) {
			$result = $_data;
		}
		$this->checkAndUpdateCmd($_logicalId, $result);
	}

	public function toHtml($_version = 'dashboard') {
		$replace = $this->preToHtml($_version, array('#background-color#' => '#bdc3c7'));
		if (!is_array($replace)) {
			return $replace;
		}
		$version = jeedom::versionAlias($_version);
		foreach ($this->getCmd('info') as $cmd) {
			$replace['#' . $cmd->getLogicalId() . '_history#'] = '';
			$replace['#' . $cmd->getLogicalId() . '_id#'] = $cmd->getId();
			$replace['#' . $cmd->getLogicalId() . '#'] = $cmd->execCmd(null, 2);
			$replace['#' . $cmd->getLogicalId() . '_collect#'] = $cmd->getCollectDate();
			if ($cmd->getIsHistorized() == 1) {
				$replace['#' . $cmd->getLogicalId() . '_history#'] = 'history cursor';
			}

		}
		$refresh = $this->getCmd(null, 'refresh');
		if (is_object($refresh)) {
			$replace['#refresh_id#'] = $refresh->getId();
		}
		if ($this->getConfiguration('datasource') == 'ecowatt') {
			return $this->postToHtml($_version, template_replace($replace, getTemplate('core', $version, 'ecowatt_ecowatt', 'ecowatt')));
		}
		if ($this->getConfiguration('datasource') == 'ejp') {
			return $this->postToHtml($_version, template_replace($replace, getTemplate('core', $version, 'ecowatt_ejp', 'ecowatt')));
		}
		if ($this->getConfiguration('datasource') == 'tempo') {
			return $this->postToHtml($_version, template_replace($replace, getTemplate('core', $version, 'ecowatt_tempo', 'ecowatt')));
		}
	}

	/*     * **********************Getteur Setteur*************************** */
}

class ecowattCmd extends cmd {
	/*     * *************************Attributs****************************** */

	/*     * ***********************Methode static*************************** */

	/*     * *********************Methode d'instance************************* */

	public function execute($_options = array()) {
		if ($this->getLogicalId() == 'refresh') {
			$eqLogic = $this->getEqLogic();
			$eqLogic->updateInfo();
		}

	}

	/*     * **********************Getteur Setteur*************************** */
}

?>

image

A priori ça fonctionne en l’état

bonjour Dan_73,

je suis très intéressé par la modif que tu as apporté au fichier « ecowatt.class.php » du plug-in Eco2Wat car j’avais déjà modifié celui d’origine pour le faire fonctionner lorsque je suis passé sous jeedom en mars 2021 (modif qui n’était pas de moi mais récupéré sur le forum).
J’ai donc remplacé mon fichier ecowatt.class.php par le tien et cela fonctionne je te remercie beaucoup de ton travail.
J’ai juste un petit souci avec la couleur du lendemain qui ne remonte pas. Lorsque je test l’url cela me donne le retour « NON_DEFINI »
Qu’en pense-tu?
Merci par avance de ton aide.

bonjour Dan_73,

finalement il semble que ce soit le site edf qui ne donne pas la couleur du lendemain, d’où le status « non_ defini ».
En revanche il persiste un tout petit défaut : le nombre total de jours bleus, blancs et rouge reste à 0 (le nombre de jours restants lui fonctionne bien)
merci

Il faut attendre 13h pour que la couleur du lendemain change. Le statut « non_defini » est normal.
Tu peux essayer avec cet URL:
https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant=2022-06-19

Ce sont les valeurs remontées par le site EDF.
Essaie en saisissant cet URL:
https://particulier.edf.fr/services/rest/referentiel/getNbTempoDays?TypeAlerte=TEMPO
Et tu verras les informations retournées.
Cela changera sans doute après le redémarrage en Septembre, puisqu’il n’y a que des bleus jusque là.

Bonjour dan_73,

Comment je peux trouver les url qui remplacent celles que j’ai dans mon script (scénario) :
https://particulier.edf.fr/bin/edf_rc/servlets/ejptempodaysnew?TypeAlerte=TEMPO
et
[https://particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?Date_a_remonter=’. $DateDuJour .’&TypeAlerte=TEMPO](https://particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?Date_a_remonter=’. $DateDuJour .’&TypeAlerte=TEMPO)

merci d’avance

tu as 100% raison dès 13h la couleur du lendemain est bien remontée correctement
merci

dan_73,

le petit défaut (non pénalisant) qui subsiste est sur le nombre total de jour : 244 bleus, 43 blancs et 22 rouges.
En effet ton lien vers EDF et ton script fonctionne bien et remontent bien le nombre de jours restants, cependant le nombre total de jours sur l’année par couleur est désespérément bloqué à 0.

Les URL ont été postées par @tomtom un peu plus haut dans ce sujet.
Attention, car il n’y a pas que les URL à modifier, il y a aussi quelques lignes que j’ai du modifier. C’est pour cela que j’ai posté le script complet.

Après analyse du script, ce serait encore un URL qui aurait changé ou qui serait inopérant.
Dans le script, on trouve :
https://particulier.edf.fr/services/rest/referentiel/getConfigProperty?PARAM_CONFIG_PROPERTY=param.nb.bleu.periode
et ce pour chacune des couleurs.
Malheureusement cet URL ne fonctionne plus et retourne un 404 :frowning:

J’ignore comment @tomtom a récupéré les autres liens, mais si jamais il arrive aussi à débusquer celui-ci, je pourrai mettre le script à jour.