[Store] Tempo EDF

Lecture des compteurs EDF avec téléinformation

Re: [Store] Tempo EDF

Messagepar Jordi » 16 Sep 2024 18:46

Merci pour ton aide
ca fonctionne :)
Jordi
 
Messages : 50
Inscription : 22 Nov 2015

Re: [Store] Tempo EDF

Messagepar damien673 » 16 Sep 2024 21:11

Merci pour ton aide. J'attends ton nouveau script alors !
damien673
 
Messages : 25
Inscription : 31 Mai 2022

Re: [Store] Tempo EDF

Messagepar opa95 » 18 Sep 2024 09:12

Bonjour
RTE ne met pas à jour son fichier avec indication "demain" -> "ND" à minuit mais plutôt vers 01h (en fait on n'a pas besoin de cet appel : à minuit "demain" devient "aujourdhui" et la prévision de "demain" devient "ND", sauf le samedi car on sait que le lendemain sera "BLEU").
Ce matin, la mise à jour de la prévision RTE s'est faite à 06h10 et celle d'EDF vers 9h (avant 9h45).
La version utilisable avance.
Bonne journée
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)
opa95
 
Messages : 871
Inscription : 04 Fév 2019
Localisation : Val d'Oise

Re: [Store] Tempo EDF

Messagepar danardf » 21 Sep 2024 16:56

Le module ne sample plus fonctionner.

Erreur: Impossible de parser XML.
https://particulier.edf.fr/services/res ... 2024-09-21
retourne:
RESTEASY003210: Could not find resource for full path: https://particulier.edf.fr/services/res ... 2024-09-21


Code : Tout sélectionner
# curl -X 'GET' \
>   'https://www.api-couleur-tempo.fr/api/jourTempo/today' \
>   -H 'accept: application/json'
{"dateJour":"2024-09-21","codeJour":1,"periode":"2024-2025"}





Je me demande si EDF n'aurait pas changer quelque chose.
https://www.api-couleur-tempo.fr/api
danardf
 
Messages : 83
Inscription : 27 Juil 2018

Re: [Store] Tempo EDF

Messagepar opa95 » 21 Sep 2024 17:23

Bonsoir danarf
danardf a écrit:Le module ne sample plus fonctionner.

Erreur: Impossible de parser XML.
https://particulier.edf.fr/services/res ... 2024-09-21
retourne:
RESTEASY003210: Could not find resource for full path: https://particulier.edf.fr/services/res ... 2024-09-21


Code : Tout sélectionner
# curl -X 'GET' \
>   'https://www.api-couleur-tempo.fr/api/jourTempo/today' \
>   -H 'accept: application/json'
{"dateJour":"2024-09-21","codeJour":1,"periode":"2024-2025"}





Je me demande si EDF n'aurait pas changer quelque chose.
https://www.api-couleur-tempo.fr/api


Les liens edf sont
https://www.api-couleur-tempo.fr/api/jo ... o?dateJour[]=2024-09-21&dateJour[]=2024-09-22
ou avec référence
https://www.api-couleur-tempo.fr/api/today
ou
https://www.api-couleur-tempo.fr/api/tomorrow
:)
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)
opa95
 
Messages : 871
Inscription : 04 Fév 2019
Localisation : Val d'Oise

Re: [Store] Tempo EDF

Messagepar danardf » 21 Sep 2024 17:27

Oui, mais pas dans le code PHP du module!
Ce qui retourne une erreur.

Je l'ai démontré dans le test Curl que l'API fonctionnait avec l'URL donnée par EDF sur leur site.
danardf
 
Messages : 83
Inscription : 27 Juil 2018

Re: [Store] Tempo EDF

Messagepar opa95 » 21 Sep 2024 17:50

Bonjour danarf
danardf a écrit:Oui, mais pas dans le code PHP du module!
Ce qui retourne une erreur.

Je l'ai démontré dans le test Curl que l'API fonctionnait avec l'URL donnée par EDF sur leur site.

dans mon script, ça marche bien
$url_edf = 'https://www.api-couleur-tempo.fr/api/jourTempo/today';
Réponse
Code : Tout sélectionner
"{"dateJour":"2024-09-21","codeJour":1,"periode":"2024-2025"}"

:)
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)
opa95
 
Messages : 871
Inscription : 04 Fév 2019
Localisation : Val d'Oise

Re: [Store] Tempo EDF

Messagepar danardf » 21 Sep 2024 18:55

Pas de mise à jour du module?
En tout cas il ne le propose pas.
Lorsque je clique sur MAJ, il me dit que j'ai la dernière version (début 2024).
Dans le code, les deux URL ne pointent pas vers celles qui fonctionnent actuellement.

Normalement le module doit se mettre à jour tout seul, ou on doit faire une action pour çà?

Code : Tout sélectionner
$url                = "https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant=".$date_en."&_=".$millisec;
danardf
 
Messages : 83
Inscription : 27 Juil 2018

Re: [Store] Tempo EDF

Messagepar danardf » 21 Sep 2024 19:02

https://secure.eedomus.com/pages/verify ... =edf_tempo

Fichier installé : edf_tempo.php (2024-01-14 16:03)

Vous avez déjà la dernière version disponible.
danardf
 
Messages : 83
Inscription : 27 Juil 2018

Re: [Store] Tempo EDF

Messagepar danardf » 21 Sep 2024 19:04

opa95 a écrit:Bonjour danarf
danardf a écrit:Oui, mais pas dans le code PHP du module!
Ce qui retourne une erreur.

Je l'ai démontré dans le test Curl que l'API fonctionnait avec l'URL donnée par EDF sur leur site.

dans mon script, ça marche bien
$url_edf = 'https://www.api-couleur-tempo.fr/api/jourTempo/today';
Réponse
Code : Tout sélectionner
"{"dateJour":"2024-09-21","codeJour":1,"periode":"2024-2025"}"

:)


Je n'ai pas de variable de ce type $url_edf dans le module.
Est-ce le même module ou une autre version de ce module?
danardf
 
Messages : 83
Inscription : 27 Juil 2018

Re: [Store] Tempo EDF

Messagepar danardf » 21 Sep 2024 19:06

Par contre, j'ai la 1ere version de la box Eedomus.
Peut-être qu'il n'y a plus de mise à jour pour ma box?!
danardf
 
Messages : 83
Inscription : 27 Juil 2018

Re: [Store] Tempo EDF

Messagepar danardf » 21 Sep 2024 19:10

Je ne comprend pas pourquoi ça fonctionne avec votre script et qu'avec le mien ça ne fonctionne pas du fait que les URL soient différentes!
ça devrait vous indiquer quelque chose du genre. Oh, un problème dans la MàJ? Pb de version?

Y a t-il une solution?
danardf
 
Messages : 83
Inscription : 27 Juil 2018

Re: [Store] Tempo EDF

Messagepar opa95 » 21 Sep 2024 19:32

Bonsoir danarf
danardf a écrit:Je ne comprend pas pourquoi ça fonctionne avec votre script et qu'avec le mien ça ne fonctionne pas du fait que les URL soient différentes!
ça devrait vous indiquer quelque chose du genre. Oh, un problème dans la MàJ? Pb de version?

Y a t-il une solution?

Je ne connais pas les problèmes liés à la box : je ne travaille que sur l'eedomus plus.
Je peux essayer de t'envoyer un script "simpliste" pour que tu puisses voir où ça plante, mais ce ne sera pas ce soir. :)
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)
opa95
 
Messages : 871
Inscription : 04 Fév 2019
Localisation : Val d'Oise

Re: [Store] Tempo EDF

Messagepar danardf » 21 Sep 2024 19:44

opa95 a écrit:Bonsoir danarf
danardf a écrit:Je ne comprend pas pourquoi ça fonctionne avec votre script et qu'avec le mien ça ne fonctionne pas du fait que les URL soient différentes!
ça devrait vous indiquer quelque chose du genre. Oh, un problème dans la MàJ? Pb de version?

Y a t-il une solution?

Je ne connais pas les problèmes liés à la box : je ne travaille que sur l'eedomus plus.
Je peux essayer de t'envoyer un script "simpliste" pour que tu puisses voir où ça plante, mais ce ne sera pas ce soir. :)


Ok.

Je vais essayer de modifier le code de mon côté avec les nouvelles URL.
Je ne sais pas si le code sur l'Eedomus + est compatible. On peut essayer.
Merci en tout cas.
danardf
 
Messages : 83
Inscription : 27 Juil 2018

Re: [Store] Tempo EDF

Messagepar toshopp » 21 Sep 2024 20:09

Hello, j'ai une eedomus + mais je suis toujours sur la version 3.6 de fin 2022. La nouvelle version du script a été publié sur le store ou pas encore ?

Merci beaucoup opa95!
toshopp
 
Messages : 13
Inscription : 08 Juin 2020

Re: [Store] Tempo EDF

Messagepar opa95 » 21 Sep 2024 20:25

Bonsoir
toshopp a écrit:Hello, j'ai une eedomus + mais je suis toujours sur la version 3.6 de fin 2022. La nouvelle version du script a été publié sur le store ou pas encore ?

Merci beaucoup opa95!

Le mieux est d'attendre quelques jours que je termine la mise au point.
Les tests sont en cours, mais prennent un peu de temps car je dois attendre la véritable mise à jour des sites pour tester les effets en temps réel.
L'interrogation et le décodage des sites fonctionne bien, c'est juste la synchronisation globale qui reste à ajuster.
:)
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)
opa95
 
Messages : 871
Inscription : 04 Fév 2019
Localisation : Val d'Oise

Re: [Store] Tempo EDF

Messagepar toshopp » 21 Sep 2024 22:38

Ok donc c'est normal qu'aucune mise à jour ne soit visible pour la box. ;)

Merci!
toshopp
 
Messages : 13
Inscription : 08 Juin 2020

Re: [Store] Tempo EDF

Messagepar paope » 23 Sep 2024 11:02

;Bonjour OPA,

merci pour ton retour rapide. Désolé pour ma réponse tardive mais je n'etais pas à la maison.
j'ai essayé de charger le script ce matin, mais apparement j'ai un souci aussi.
ci dessous le retour il n'arrive pas à trouver les valeurs.
merci d'avance pour ton aide.

<root>
<tempo>
<aujourdhui>ND</aujourdhui>
<date_aujourdhui>ND</date_aujourdhui>
<demain>ND</demain>
<date_demain>ND</date_demain>
<now/>
<date_now/>
<decompte_bleu/>
<decompte_blanc/>
<decompte_rouge/>
<reste_bleu/>
<reste_blanc/>
<reste_rouge/>
<type>tempo</type>
<hphc>HP</hphc>
<tarifs_aujourdhui>/</tarifs_aujourdhui>
<tarifs_demain>/</tarifs_demain>
<tarif_now/>
<bleu_hc/>
<bleu_hp/>
<blanc_hc/>
<blanc_hp/>
<rouge_hc/>
<rouge_hp/>
</tempo>
<debug>
<date_fichier/>
<timestamp/>
<date_lecture>Lundi 23/09 12:00:58</date_lecture>
<url>https://www.api-couleur-tempo.fr/api/joursTempo?</url>
<url_/>
<result/>
</debug>
</root>
Paope
paope
 
Messages : 34
Inscription : 08 Juin 2019

Re: [Store] Tempo EDF

Messagepar opa95 » 23 Sep 2024 13:55

Bonjour paope
paope a écrit:;Bonjour OPA,

merci pour ton retour rapide. Désolé pour ma réponse tardive mais je n'etais pas à la maison.
j'ai essayé de charger le script ce matin, mais apparement j'ai un souci aussi.
ci dessous le retour il n'arrive pas à trouver les valeurs.
merci d'avance pour ton aide.

Je ne sais pas quelle version tu as essayée.
Je suis en train de finaliser la version 4 ; l'arrivée est incessante.
En attendant, tu peux tester la version 3.7; je viens de la tester sur un device "propre" qui démarre sur une mémoire vide.
Pour cela, il faut effacer l'ancien fichier avant de recharger le nouveau.
Ensuite, tout devrait fonctionner direct (je viens de le tester).
La version 3.7 devrait afficher dans la fenêtre de test
Code : Tout sélectionner
<root>
<tempo>
.....
<tempo>
<debug>
   <version>3.7</version>
......
</debug>
</root>

Voici la version 3.7 (dernière avant la publication de la 4.0) :)
Code : Tout sélectionner
<?php
    /*****************************************************************************
    **
    ** Script Tempo/EJP pour eedomus
    **
    ** Script qui permet de récupérer au format XML les données Tempo ou EJP :
    **   - Couleur Tempo du jour/EJP (//aujourdhui),
    **  - Couleur Tempo du lendemain/EJP (//demain),
    **  - Nombre de jours Bleus Tempo restants (//decompte_bleu),
    **  - Nombre de jours Blancs Tempo restants (//decompte_blanc),
    **  - Nombre de jours Rouge Tempo restants (//decompte_rouge),
    **  - Nombre de jours Rouge EJP restants (//decompte),
    **  - Tarif du jour
    ** Les données sont stockées en mémoire et le polling sur les sites est réglé
    ** par la valeur de 'timer' (3600 secondes par défaut).
    ** Un polling automatique est fait au passage à minuit, 6h, 12h et 22h,
    ** pour que ce polling automatique se fasse bien, on peut régler la fréquence des plugins à une valeur faible (1 ou 2 minutes) : dans ce cas, les pollings
    réels seront synchronisés à peu près sur les passages à l'heure (0:01h,1:01h... pour timer=3600) ou par exemple à (0:01h, 6h:01, 12h:01,18:01h,22:01h pour timer=21600 [6*3600] ); si timer>=36000, les lectures seront (0:01h, 6h:01, 12h:01,22:01h)
    ** Le nombre d'appels sera donc compris entre 4 et 25 par jour, quel que soit le nombre de devices créés. Le reste du temps les appels se conteteront de renvoyer le contenu de la mémoire.
    ** en mode test, on peut forcer la lecture avec la commande &reset=1 ou &simul=x, avec x<0 ou >timer
    ****************************************************************************
    **  - URL de la Requête
    **: http://localhost/script/?exec=edf_tempo.php
    **  - ou http://localhost/script/?exec=edf_tempo.php&contrat=[VAR1]&site=[VAR2]&timer=[VAR3]
    ** avec
    **   VAR1 : vide (-> tempo) ou tempo ou ejp (ou contenu dans le nom du script)
    **   VAR2 : vide ou numéro du site secondaire, 0 par défaut -> test de tous les sites
    **   VAR3 : vide ou période de polling (secondes) 3600 par défaut
    ** - Fréquence de la Requête : 60 minutes ou 1 si on veut mettre à jour l'affichage plus souvent pour le passage à 0h, 6h, 12h, 22h, de toute façon le polling vers les sites est réglé par 'timer' (3600 par défaut)
    ** L'URL est de la forme (Tempo) : edf_tempo.php ou edf_ejp.php&contrat=tempo ou utiliser VAR1
    ** L'URL est de la forme (EJP)   : edf_ejp.php   ou edf_tempo.php&contrat=ejp ou utiliser VAR1
    ** si l'URL porte un autre nom, le champ &contrat est obligatoire (ou VAR1)
    ** commandes ajouter à la fin de la ligne de commande:
    ** type contrat : &contrat=1 (tempo par défaut ou récupéré dans le nom)
    ** mode debug : &debug=1 (0 par défaut)
    ** site  : &site=n (0 par défaut -> tous les sites, sinon n° du site)
    ** timer (Validité du fichier en secondes) :&timer=xxxxx (3600 par défaut)
    ** reset : effacement mémoire : &reset=n (0 par défaut, 1 sinon)
    ** simul décalage temporel (secondes) : &simul=yyyyy (0 par défaut)
    ****************************************************************************
    Resultats : /tempo/champ ou //champ
    ?xml version="1.0" encoding="UTF-8"?>
    <root>
    <tempo>
       <aujourdhui>BLEU</aujourdhui> // de 6h à 6h (demain)
       <date_aujourdhui>JOUR</date_aujourdhui> // de 6h à 6h (demain)
       <demain>BLEU</demain> // de 6h (demain) à 6h (aprèsdemain)
       <date_demain>11/09</date_demain> // de 6h (demain) à 6h (aprèsdemain)
       <now>BLEU</now> // couleur actuelle (dépend de l'heure, avant 6h -> hier)
       <date_now>JOUR</date_now> // date actuelle (dépend de l'heure, avant 6h -> hier)
       <decompte_bleu>10</decompte_bleu> //nombre de jours écoulés
       <decompte_blanc>0</decompte_blanc> //nombre de jours écoulés
       <decompte_rouge>0</decompte_rouge> //nombre de jours écoulés
       <reste_bleu>290</reste_bleu> //nombre de jours restants
       <reste_blanc>43</reste_blanc> //nombre de jours restants
       <reste_rouge>22</reste_rouge> //nombre de jours restants
       <type>tempo</type>
       <hphc>HP</hphc> // période actuelle (dépend de l'heure, avant 6h -> hier)
       <tarifs_aujourdhui>0.1609/0.1296</tarifs_aujourdhui> // de 6h à 6h (demain)
       <tarifs_demain>0.1609/0.1296</tarifs_demain> // de 6h (demain) à 6h (aprèsdemain)
       <tarif_now>0.1609</tarif_now>// tarif actuel (dépend de l'heure, avant 6h -> hier)
       <bleu_hc>0.1296</bleu_hc> // tarif
       <bleu_hp>0.1609</bleu_hp> // tarif
       <blanc_hc>0.1486</blanc_hc> // tarif
       <blanc_hp>0.1894</blanc_hp> // tarif
       <rouge_hc>0.1568</rouge_hc> // tarif
       <rouge_hp>0.7562</rouge_hp> // tarif
    </tempo>
    <debug>
       <date_fichier>2024-09-10 11:34:28</date_fichier>
       <timestamp>1725960868</timestamp> //fichier
       <date_lecture>Mardi 10/09 11:34:28</date_lecture>
       <url>https://www.api-couleur-tempo.fr/api/joursTempo?dateJour[]=2024-09-09&amp;dateJour[]=2024-09-10&amp;dateJour[]=2024-09-11</url> //api edf
       <url_>https://selectra.info/energie/fournisseurs/edf/tempo</url_> // url secondaire
      <result>1</result> //1->OK
    </debug>
    </root>
    ********************************************************************************
    urls compatibles :
    tempo
    https://www.api-couleur-tempo.fr/api/joursTempo?',
    https://selectra.info/energie/fournisseurs/edf/tempo#selectran',
    https://www.fournisseurs-electricite.com/edf/tarifs/tempo#selectran',
    https://prix-elec.com/tarifs/fournisseurs/edf/tempo#selectran'
    ejp (pas testé le 2024/09/10)
    https://electricite.net/edf/tarifs/ejp // **dates fausses le 2/04
    https://prix-elec.com/tarifs/fournisseurs/edf/ejp-demain
    https://selectra.info/energie/fournisseurs/edf/ejp
    https://selectra.info/energie/fournisseurs/edf/ejp/demain
    https://observatoires.net/calendrier
    https://selectra.info/energie/fournisseurs/edf/ejp/jours
    https://www.fournisseurs-electricite.com/edf/tarifs/ejp/jour-demain
    https://www.fournisseurs-electricite.com/edf/tarifs/ejp
    https://www.kelwatt.fr/fournisseurs/edf/ejp/demain
    https://www.kelwatt.fr/guide/ejp

    ******************************************************************************
    **
    ** Evolution des versions :
    **
    ** 2017-07-26 (DjMomo)    :V1.0 - Version initiale
    ** 2019-10-24 (Merguez07) :V2.0 - utilisation du proxy Eedomus
    ** 2019-10-26 (Merguez07) :V2.1 - Passage du cache de 24h à 1h
    ** 2020-11-11 (Merguez07) :V3.0 - utilisation des données du site de selectra
    ** 2021-10-04 (Merguez07) :V3.1 - correction du script suite à evolution du site Electra
    ** 2022-01-07 (Merguez07) :V3.2 - correction du script suite à evolution du site Electra
    ** 2022-03-24 (Merguez07) :V3.3 - correction du script suite à evolution du site Electra
    ** 2022-03-27 (Merguez07) :V3.4 - bug dans le store
    ** 2022-04-01 (opa95)     :V3.5 - corrections mineures, compatible autres sites et EJP
    ** 2022-04-01 (opa95)     :V3.6 - utilisation du site edf tempo et EJP
    ** 2024-09-10 (opa95)     :V3.7 - Utilisation api edf et sites selectra...
    *******************************************************************************/
    function sdk_jour($time_now,$nbJours = 0,$jourStr = 2) {
      //creation date à partir du temps unix décale de $nbJours
      //sortie jourFrançais jj/mm
      global $days;
      $time_now += 86400*$nbJours;
      $jour_semaine = date('w',$time_now);
      $start = 0;
      foreach ($days as $key => $day) {
        if ($start == $jour_semaine) {
          $jour_semaine = $key;
          break;
        }
        $start ++;
      }
      switch ($jourStr) {
        case 2 : $ret= date('Y-m-d',$time_now);
        return $ret;
        case 1 : return $jour_semaine.' '.date('d/m',$time_now);
        default :
          $ret= date('d/m',$time_now);
          return $ret;
    }
    //  if ($jourStr ==1 ) return $jour_semaine.' '.date('d/m',$time_now);
    //  else return date('d/m',$time_now);
    //  return;
    }

    function sdk_multiextract($string,$startStr,$stopStr='',&$start,$startIn = false,$stopIn = false) { // Extraire une chaine de caracteres suivant plusieurs separateurs
      // startStr : string ou array recherche de startStr ou de startStr[0], puis de startStr[1]à partir de là, puis ...
      // stopStr  : string ou array recherche de stopStr ou de stopStr[0], puis de stopStr[1]à partir de là, puis ...
      // renvoi de la portion de $string entre le dernier startStr et le dernier stopStr
      // Si outer les balises sont incluses, sinon elles ne sont pas incluses
      // start est remis a jour
      // eviter les caractères non standards
      // si startStr (ou stopStr) de la forme
      // array(array('a','b'),array('d','e')) recherche de (a puis b) ou bien (d puis e), si séquence 1 absente
      // array('ab', 'ef') recherche de 'ab' puis 'ef'
      // 'abc' recherche de 'abc'
      $found = true;
      if (!is_array($startStr)) {
        $startStr = array($startStr);
      }
      foreach ($startStr as $codes){
        if (!is_array($codes)) {
          $codes = $startStr;//$codes = array($codes);
        }
        $beg = $start;
        $startPos = '';
        foreach ($codes as $code) {
          $startLen = strlen($code);
          if ( ($startLen != 0) && (($pos = strpos(substr($string,$beg),$code)) !== false) ) {
            if ($startPos == '') $startPos = $beg + $pos;
            $beg = $beg + $pos + $startLen;
          }
          else {
            $beg = $start;
            if ($startPos == '') $startPos = $beg;
            $found = false;
            break;
          }
        }
        if ($found) break;
      }
      $start = $beg;
      $found = true;
      if (!is_array($stopStr)) {
        $stopStr = array($stopStr);
      }
      foreach ($stopStr as $codes){
        if (!is_array($codes)) {
          $codes = $stopStr;//$codes = array($codes);
        }
        $end = $start;
        $stopPos = '';
        foreach ($codes as $code) {
          $stopLen = strlen($code);
          if ( ($stopLen != 0) && (($pos = strpos(substr($string,$end+1),$code)) !== false) ) {
            $end = $end + 1 + $pos;
            if ($stopPos == '') $stopPos = $end;
          }
          else {
            $end = $start;
            if ($stopPos == '') $stopPos = $end;
            $found = false;
            break;
          }
        }
        if ($found) break;
      }
      if ($startIn) $beg = $startPos;
      if ($stopIn)  $end += $stopLen;
      else $end = $stopPos;
      $launch  = substr($string,$beg,$end-$beg);
      return $launch;
    }

    function sdk_extract($string,$startStr,$stopStr='',$start = 0,$startIn = false,$stopIn = false) { // Ectraire une chaine de caracteres suivant plusieurs separateurs
    // appel de sdk_multiextract, start inchangé
      $launch = sdk_multiextract($string,$startStr,$stopStr,$start,$startIn,$stopIn );
      return  $launch;
    }

    function sdk_multiexplode ($delimiters,$string) {   // Separer une chaine de caracteres suivant plusieurs separateurs
    // remplacement delimiters[1] par delimiters[0]
    // renvoi du tableau rédultat de explode
      $ready  = str_replace($delimiters, $delimiters[0], $string);
      $launch = explode($delimiters[0], $ready);
      return  $launch;
    }

    function sdk_format ($string,$field = 'color') {  // met en forme selon la semantique du plugin du store
      // formatage de date -> format[dayWeek] dayWeek et format[dateJM] jj/mm ou renvoi ND ND
      // formatage de couleur tempo -> BLEU, BLANC, ROUGE ND
      // formatage de couleur ejp -> NON_EJP, EST_EJP, ND
      global $contrat;// tempo ou ejp
      global $upc_contrat;// TEMPO ou EJP
      global $days;// jour de la semaine
      $string   =   str_replace($upc_contrat,'',trim(strtoupper($string)));
      if ($field == 'date') {
        if (strlen($string) < 6) $string = 'ND '.$string;
        list($format['dayWeek'],$format['dateJM']) = explode(' ',trim($string));
        if ($format['dayWeek'] != 'ND') $format['dayWeek'] = $format['dayWeek'][0].strtolower(substr($format['dayWeek'],1));
        if (!array_key_exists($format['dayWeek'],$days) ) $format['dayWeek'] = 'ND';
      }
      else {
        $format   = "ND";
        $string   =   strtoupper(str_replace(' ','',$string));
        if ($contrat == 'ejp') {
          if ( ($string == "PASD'") || (strpos($string,'JAMAIS') !== false) ) $format="NON_EJP";
          if ($string == "JOUR")  $format="EST_EJP";
        }
        else {
          $string = strtoupper($string);
          $color  =   array("1"=>"BLEU","2"=>"BLANC","3"=>"ROUGE","0"=>"ND");
          if (is_numeric($string)) {
              $string = $string%4;
              if ($string>0) return $color[$string];
          }
          foreach ($color as $col) {
            if (strpos($string,$col) !== false) {
              $format = $col;
              break;
            }
          }
        }
      }
      return  $format;
    }


    define('MEM','OLD');
    define('DEFTYPE','selectran');// format url annexe
    define('DEFTIME','3600');//3600 secondes
    define('NBB','300');
    define('NBW','43');
    define('NBR','22');
    define('TSTART',6);//début start
    define('TSTOP',22);//fin HP
    define('VER','3.7');
    $months = array('janvier' => 'January', 'février' => 'February','mars' => 'March','avril' => 'April','mai' => 'May',
                    'juin' => 'June','juillet' => 'July','août' => 'August','septembre' => 'September','octobre' => 'October',
                    'novembre' => 'November','décembre' => 'December');
    $days   = array('Dimanche' => 'Sunday','Lundi' => 'Monday','Mardi' => 'Tuesday','Mercredi' => 'Wednesday','Jeudi' => 'Tuesday',
                    'Vendredi' => 'Friday','Samedi' => 'Saturday');
                    //initialisation des variables
    //$start = strlen('exec=edf_');
    $source = (array_key_exists('exec',$_GET))? strtolower($_GET['exec']):"";
    if (strpos('Z'.$source,'tempo')) $contrat = 'tempo';
    elseif (strpos('Z'.$source,'ejp'))$contrat = 'ejp';
    else $contrat = "";
    $contrats = array('tempo','ejp');
    $urls     = array('tempo' => array (
      'https://www.api-couleur-tempo.fr/api/joursTempo?',
      'https://selectra.info/energie/fournisseurs/edf/tempo#selectran',
      'https://www.fournisseurs-electricite.com/edf/tarifs/tempo#selectran',
      'https://prix-elec.com/tarifs/fournisseurs/edf/tempo#selectran',
      'https://www.kelwatt.fr/guide/tempo#selectra',
      'https://observatoires.net#selectra',
      'https://observatoires.net/tempo#selectra',
      ),
            'ejp'   => array (
        1 => 'https://selectra.info/energie/fournisseurs/edf/ejp#selectra',
        'https://observatoires.net#selectra',
        'https://observatoires.net/ejp#selectra',
        'https://prix-elec.com/tarifs/fournisseurs/edf/ejp-demain#selectra',
        'https://www.fournisseurs-electricite.com/edf/tarifs/ejp/jour-demain#selectra',
        'https://www.kelwatt.fr/fournisseurs/edf/ejp#selectra',
        'https://electricite.net/edf/tarifs/ejp#selectra',
        'https://agence-energie.com/edf/tarifs/ejp#selectra'
      )
          );
    $types = array('selectra','selectran','keskeces');               

    $contrat_  = strtolower(getArg('contrat',false,""));
    $contrat = (($contrat_!="") && (in_array($contrat_,$contrats)))?  $contrat_:$contrat;
    $debug  = getArg('debug',false);
    if ( (!$debug) || (!in_array($debug,array(0,1))) ) $debug = 0;
    $num_site   = abs(getArg('site',false));
    if ( (!$num_site) || (($num_site > count($urls[$contrat]) )) ) $num_site = 1;
    if ($num_site == 0 ) $scan = 1; else $scan = 0;
    $timer = getArg('timer',false,DEFTIME);//Validité du fichier
    $upc_contrat = strtoupper($contrat);
    $poll = 0;
    $reset = getArg('reset',false,0);
    if ($reset) {
      deleteVariable(MEM.$contrat);
      $poll = 1;
    }
    $simul = getArg('simul',false,0);//Décalage temps secondes

    $time_now    = time()+$simul;
    $annee_now   = date('Y',$time_now);//aaaa
    $heure_now   = date('H',$time_now);//hh
    $date_now    = sdk_jour($time_now,0,1);// jj/mm
    $date_demain = sdk_jour($time_now,1,1);//jour jj/mm
    $date_hier   = sdk_jour($time_now,-1,0);//jour jj/mm
    $nowDate     = sdk_jour($time_now,0,0);//jour semaine
    $dateDemain  = sdk_jour($time_now,1,0);//jour semaine
    list($nowDayWeek,$bof)    = explode(' ',$date_now);
    list($tomorrowDayWeek,$bof) = explode(' ',$date_demain);
    $infos_ = array (
      'todayDate' => 'ND', 'todayDayWeek' => 'ND',
      'todayYear' => 'ND', 'todayColor' => 'ND', 'hphc' =>'HP',
      'tomorrowDate' => 'ND', 'tomorrowDayWeek' => 'ND', 'tomorrowYear' => 'ND', 'tomorrowColor' => 'ND',
      'yesterdayColor' =>'ND', 'yesterdayRate' => 'ND', 'yesterdayDate' => 'ND',
      'nowDate' => 'ND','nowColor'=>'ND', 'tarifnow' => 'ND',
      'decRed' => NBR, 'totRed' => NBR, 'remRed' => 'ND',
      'decWhite' => NBW, 'totWhite' => NBW, 'remWhite' => 'ND',
      'decBlue' => NBB, 'totBlue' => NBB, 'remBlue' => 'ND',
      'fileDate' => 'ND', 'fileTimestamp' => 'ND',
      'BLEU' => array('HC'=>'0.1296','HP'=>'0.1609'),
      'BLANC' => array('HC'=>'0.1486','HP'=>'0.1894'),
      'ROUGE' => array('HC'=>'0.1568','HP'=>'0.7562'),
    ) ;

    if (loadVariable(MEM.$contrat)) $infos_ = loadVariable(MEM.$contrat);
      else $poll = 1;
    $infos_['hphc'] = (($heure_now<TSTART) || ($heure_now>=TSTOP))?'HC':'HP';
    if (!$poll && array_key_exists('fileTimestamp',$infos_)){// forçage lecture
      $file_hour = date("H",$infos_['fileTimestamp']);
      if ($time_now<$infos_['fileTimestamp']) {$poll=1;}// simulation (recul)
      elseif (($time_now-$infos_['fileTimestamp'])>$timer) {$poll=1;}// temps expiré
      elseif (($file_hour<TSTART) && ($heure_now>=TSTART)) {$poll=1;}// passage à 6h
      elseif (($file_hour<TSTOP) && ($heure_now>=TSTOP)) {$poll=1;} // passage à 22h
      elseif (($file_hour>$heure_now)) {$poll=1;}// passage à minuit
      elseif (($file_hour<12) && ($heure_now>=12)) {$poll=1;} // passage à 12h
    }
    $heure_lecture = date('H:i:s',$time_now);
    if ($poll)
    {  $urls['tempo'][0] .= 'dateJour[]='.sdk_jour($time_now,-1).'&dateJour[]='.sdk_jour($time_now).'&dateJour[]='.sdk_jour($time_now,1);
      $infos_['todayDate']       = $nowDate; // dd/mm
      $infos_['todayDayWeek']    = $nowDayWeek; // Jour ou ND
      $infos_['tomorrowDate']    = $dateDemain; // dd/mm
      $infos_['tomorrowDayWeek'] = $tomorrowDayWeek; // Jour ou ND
      $infos_['yesterdayDate']   = $date_hier;
      if ('todayDayWeek' == 'Samedi') $infos_['tomorrowColor'] = 'BLEU';
      elseif ('todayDayWeek' == 'Dimanche') $infos_['todayColor'] = 'BLEU';
      $response0 = httpQuery($urls['tempo'][0],'GET');
      $response0 = sdk_json_decode($response0);
      $api_edf = count($response0)>1;
      $infos_['yesterdayColor'] = sdk_format($response0[0]['codeJour']);
      $bof = sdk_format($response0[1]['codeJour']);
      $infos_['todayColor']  = $bof;
      $bof = sdk_format($response0[2]['codeJour']);
      if ($bof!='ND') $infos_['tomorrowColor']  = $bof;
      for ($i=$num_site;$i<=count($urls[$contrat]);$i++){
        if (!$i) $i++;
        list($url,$type) = explode('#',$urls[$contrat][$num_site]);
        if ( (!$type) || (!in_array($type,$types)) ) $type = DEFTYPE;
        $response = trim(httpQuery($url,'GET'));
        if (strpos($response,'html') === false) $result = 0;
          else {$result = 1;break;}
        if ($num_site) break;
      }

      if ($result) {
        $erreur = 0;
        switch ($type) {
          case 'selectra' :
              //lecture block
              $sep2  = array(array('<!-- END'),array('<div id="block-'));
              $sep   = array('<div id="block-'.$contrat,'<div');
              $start = 0;
              $block = trim(strtolower(sdk_extract($response,$sep,$sep2,$start,false,false)));//pas de MaJ $start
              $err_num = 1;
              if (strlen($block) == 0) {$erreur = $err_num;break;}
              //extraction infos Aujourd'hui
              $sep2  ='</';
              // date
              $sep   = array('aujourd',$contrat);// jour dd/mm
              $bof   = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
              $bof   = sdk_format($bof,'date');
              $infos_['todayDate']    = $bof['dateJM']; // dd/mm
              $infos_['todayDayWeek'] = $bof['dayWeek']; // Jour ou ND
              //couleur
              $sep    = array('_icon','<span>');// couleur
              $infos_['todayColor'] = trim(sdk_multiextract($block,$sep,$sep2,$start));
              $infos_['todayColor'] = sdk_format($infos_['todayColor']);//COUL ou ND
              //extraction infos demain
              $start = 0;// debut block
              // date
              $sep = array('demain',$contrat);// jour dd:mm
              $bof = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
              $bof = sdk_format($bof,'date');
              $infos_['tomorrowDate']    = $bof['dateJM']; // dd/mm
              $infos_['tomorrowDayWeek'] = $bof['dayWeek']; // Jour ou ND
              // couleur
              $sep = array('_icon','<span>');// couleur
              $infos_['tomorrowColor'] = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
              $infos_['tomorrowColor'] = sdk_format($infos_['tomorrowColor']);
              // bilan
              $sep = array('title','>'); //{ejp}nbjoursecoules/nbtotjours {tempo} nbjoursrestants
              $bof = trim(sdk_multiextract($block,$sep,$sep2,$start));
              if ($contrat == 'ejp') {
                list($bof,$bof1) = explode('/',$bof);
                $bof1 = trim($bof1);
                if (is_numeric($bof1))  $infos_['totRed'] = $bof1;
                $bof  = trim($bof);
                if (is_numeric($bof)) {
                  $infos_['decRed'] = $infos_['totRed'] - $bof;}
              }
              //complements
              $bof = str_replace('/','-',$infos_['todayDate'].'-'.$annee_now);//date europeenne
              $bof = strtotime($bof);
              if ($bof > $time_now) $infos_['todayYear'] = $annee_now -1;
              else $infos_['todayYear'] = $annee_now;
              $infos_['tomorrowYear'] = $infos_['todayYear'];
              if ($infos_['tomorrowDate'] == '01/01') $infos_['tomorrowYear']++;
            break;
          case 'selectran' :
            $sep2  = array(array('<!-- END'),array('<div class='));
            $sep   = array('"intro">','hui, ');
            $start = 0;
            $block = trim(strtolower(sdk_extract($response,$sep,$sep2,$start,false,false)));//pas de MaJ $start
            $err_num = 1;
            if (strlen($block) == 0) {$erreur = $err_num;break;}
            if ($api_edf){
              $sep   = array('il reste');// jour dd/mm
              $sep2  =array('</p>');
              $block = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
              $start=0;
              $sep2   =array('</');
            }else{
              //lecture block
              //extraction infos Aujourd'hui
              // date
              $sep  = array('hui, ');// jour dd/mm
              $sep2 = array(',');// jour dd/mm
              $bof  = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
              $jour = explode(" ",$bof);
              $jour[1] = $months[$jour[1]];
              $date = strtotime($jour[0]." ".$jour[1]." ".$jour[2]);
              //couleur
              $sep  = array('est');// couleur
              $sep2 ='</';
              $bof  = trim(sdk_multiextract($block,$sep,$sep2,$start));
              $infos_['todayColor'] = sdk_format($bof);//COUL ou ND
              //extraction infos demain
              // date
              // couleur
              $sep    = array('sera');// couleur
              $bof = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
              $infos_['tomorrowColor'] = sdk_format($bof);
            }
            // bilan
            $sep    = array('<strong>'); //{ejp}nbjoursecoules/nbtotjours {tempo} nbjoursrestants
            for ($i =0;$i<3;$i++) {
              $bof = trim(sdk_multiextract($block,$sep,$sep2,$start));
                $nb = (int)$bof;
                if (strpos($bof,'bleu')>1) $infos_['remBlue'] = $nb;
                elseif (strpos($bof,'rouge')>1) $infos_['remRed'] = $nb;
                elseif (strpos($bof,'blanc')>1) $infos_['remWhite'] = $nb;
              }
            $infos_['decRed'] = $infos_['totRed'] - $infos_['remRed'];
            $infos_['decWhite'] = $infos_['totWhite'] - $infos_['remWhite'];
            $infos_['decBlue'] = $infos_['totBlue'] - $infos_['remBlue'];
            $sep2  = array(array('<!-- END'),array('</tr'));
            $sep   = array('<th>Abonnement','<strong>','<strong>','</td>');
            $start = 0;
            $block = trim(strtolower(sdk_extract($response,$sep,$sep2,$start,false,false)));//pas de MaJ $start
            $sep2  = array('&nbsp;');
            $sep   = array('<td>');
            $bof   = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
            if ($bof>0) $infos_['BLEU']['HC'] = $bof;
            $bof   = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
            if ($bof>0) $infos_['BLEU']['HP'] = $bof;
            $bof   = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
            if ($bof>0) $infos_['BLANC']['HC'] = $bof;
            $bof   = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
            if ($bof>0) $infos_['BLANC']['HP'] = $bof;
            $bof   = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
            if ($bof>0) $infos_['ROUGE']['HC'] = $bof;
            $bof   = trim(strtolower(sdk_multiextract($block,$sep,$sep2,$start)))+0;//MaJ $start
            if ($bof>0) $infos_['ROUGE']['HP'] = $bof;
            break;
          case 'keskeces' :
          //lecture block1
            $sep   = array("<div class='cont' onclick=","Aujourd'hui");
            $sep2  = "<div class='cont' onclick=";
            $startBlock = 0;
            $block = trim(str_replace(',','',sdk_multiextract($response,$sep,$sep2,$startBlock)));
            if (strlen($block == 0) ) {$erreur = 1;break;}
            //extraction dates et couleur
            $sep2  = '</';
            $sep   = '';
            $start = 0;
            $infos_['todayDate']     = trim(sdk_multiextract($block,$sep,$sep2,$start));//MaJ $start
            $sep   = array('Jour','<div','>');//Bleu Blanc Rouge Indeterminé
            $infos_['todayColor']    = sdk_multiextract($block,$sep,$sep2,$start);//MaJ $start
            $infos_['todayColor']    = sdk_format($infos_['todayColor']);
            $sep   = array('Lendemain','<div','>');//Bleu Blanc Rouge Indeterminé
            $infos_['tomorrowColor'] = sdk_multiextract($block,$sep,$sep2,$start);//MaJ $start
            $infos_['tomorrowColor'] = sdk_format($infos_['tomorrowColor']);
            $date_array = explode(' ',$infos_['todayDate']);//Jour J mois aaaa (français)
            $bof = strtotime($date_array[1].' '.$months[$date_array[2]].' '.$date_array[3]);
            $infos_['todayDayWeek']  = $date_array[0];
            $infos_['todayDate']     = sdk_jour($bof,0,false);//jour JJ/MM
            $infos_['todayYear']    = $date_array[3];
            $infos_['tomorrowDate']  = sdk_jour($bof,1,false);
            $infos_['tomorrowYear'] = $infos_['todayYear'];
            if ($infos_['tomorrowDate'] == '01/01') $infos_['tomorrowYear']++;
          //lecture block2
            $sep   = array("<div class='cont' onclick=",'Tempo','Jours');
            $sep2  = "<div class='cont pub'";
            $block = trim(str_replace(',','',sdk_multiextract($response,$sep,$sep2,$startBlock)));
            //bilan
            $sep2                    = '</';
            $start = 0;
            $sep                     = array('bj','<b>');//Bleu Blanc Rouge Indeterminé
            $infos_['decBlue']     = sdk_multiextract($block,$sep,$sep2,$start);//nn
            $infos_['totBlue']  = sdk_multiextract($block,$sep,$sep2,$start) + $infos_['decBlue'];//nn
            $start = 0;
            $sep                     = array('wj','<b>');//Bleu Blanc Rouge Indeterminé
            $infos_['decWhite']     = sdk_multiextract($block,$sep,$sep2,$start);//nn
            $infos_['totWhite']  = sdk_multiextract($block,$sep,$sep2,$start) + $infos_['decWhite'];//nn
            $start = 0;
            $sep                     = array('rj','<b>');//Bleu Blanc Rouge Indeterminé
            $infos_['decRed']     = sdk_multiextract($block,$sep,$sep2,$start);//nn
            $infos_['totRed']  = sdk_multiextract($block,$sep,$sep2,$start) + $infos_['decRed'];//nn
            $sep                     = array('/table',':');//J mois aaaa à hhhmm(français)
            $infos_['fileDate']      = trim(sdk_multiextract($block,$sep,'<',$start));//MaJ $start
            $date_array = explode(' ',$infos_['fileDate']);//array JJ mois aaaa à hhhmm
            $bof = strtotime($date_array[0].' '.$months[$date_array[1]].' '.$date_array[2]);
            $infos_['heureFile']     = str_replace('h',':',$date_array[4]);//hh:mm
            $infos_['fileDate']      = sdk_jour($bof,0);
            break;
          }
      }
      if ($heure_now<TSTART) {
        if ($infos_['nowDate'] != $infos_['yesterdayDate']){
          $infos_['nowDate'] = $infos_['yesterdayDate'];
          $infos_['nowColor'] = $infos_['yesterdayColor'];
      //    $infos_['tarifNow'] = $infos_['yesterdayRate'];
        }
      }elseif ($infos_['nowDate'] != $infos_['todayDate']){
        $infos_['nowDate'] = $infos_['todayDate'];
        $infos_['nowColor'] = $infos_['todayColor'];
      //  $infos_['tarifNow'] = $infos_['tarifToday'];
      }

      if ( ($infos_['todayColor'] == 'ND') || ($infos_['tomorrowColor'] == 'ND') ) {
        $result = 0;
      }

      $infos_['fileTimestamp'] = $time_now;;
      $infos_['fileDate'] = date('Y-m-d H:i:s',$infos_['fileTimestamp']);
      //var_dump($infos_);
      saveVariable(MEM.$contrat,$infos_);
    }
    // Génération du XML
      sdk_header('text/xml');
    $xml  = '<?xml version="1.0" encoding="UTF-8"?>'."\n";
    $xml .= "<root>\n";
    $xml .= '<'.$contrat.'>'."\n";
    $xml .= '   <aujourdhui>'.$infos_['todayColor']."</aujourdhui>\n";
    $xml .= '   <date_aujourdhui>'.$infos_['todayDate']."</date_aujourdhui>\n";
    $xml .= '   <demain>'.$infos_['tomorrowColor']."</demain>\n";
    $xml .= '   <date_demain>'.$infos_['tomorrowDate']."</date_demain>\n";
    $xml .= '   <now>'.$infos_['nowColor']."</now>\n";
    $xml .= '   <date_now>'.$infos_['nowDate']."</date_now>\n";
    if ($contrat == 'ejp') {
      $xml .= '   <decompte>'.$infos_['decRed']."</decompte>\n";
    }
    else {
      $xml .= "   <decompte_bleu>".$infos_['decBlue']."</decompte_bleu>\n";
      $xml .= "   <decompte_blanc>" .$infos_['decWhite']."</decompte_blanc>\n";
      $xml .= '   <decompte_rouge>' .$infos_['decRed']."</decompte_rouge>\n";
      $xml .= "   <reste_bleu>"  .$infos_['remBlue']."</reste_bleu>\n";
      $xml .= "   <reste_blanc>" .$infos_['remWhite']."</reste_blanc>\n";
      $xml .= '   <reste_rouge>' .$infos_['remRed']."</reste_rouge>\n";
      $xml .= '   <type>'.$contrat."</type>\n";
      $xml .= '   <hphc>'.$infos_['hphc']."</hphc>\n";
      $xml .= '   <tarifs_aujourdhui>'.$infos_[$infos_['todayColor']]['HP'].'/'.$infos_[$infos_['todayColor']]['HC']."</tarifs_aujourdhui>\n";
      $xml .= '   <tarifs_demain>'.$infos_[$infos_['tomorrowColor']]['HP'].'/'.$infos_[$infos_['todayColor']]['HC']."</tarifs_demain>\n";
      $xml .= '   <tarif_now>'.$infos_[$infos_['nowColor']][$infos_['hphc']]."</tarif_now>\n";
      $xml .= '   <bleu_hc>'.$infos_['BLEU']['HC']."</bleu_hc>\n";
      $xml .= '   <bleu_hp>'.$infos_['BLEU']['HP']."</bleu_hp>\n";
      $xml .= '   <blanc_hc>'.$infos_['BLANC']['HC']."</blanc_hc>\n";
      $xml .= '   <blanc_hp>'.$infos_['BLANC']['HP']."</blanc_hp>\n";
      $xml .= '   <rouge_hc>'.$infos_['ROUGE']['HC']."</rouge_hc>\n";
      $xml .= '   <rouge_hp>'.$infos_['ROUGE']['HP']."</rouge_hp>\n";
    }
    $xml .='</'.$contrat.'>'."\n";
    $xml .= "<debug>\n";
    $xml .= '   <version>'.VER."</version>\n";
    $xml .= '   <date_fichier>'.$infos_['fileDate']."</date_fichier>\n";
    $xml .= '   <timestamp>'.$infos_['fileTimestamp']."</timestamp>\n";
    $xml .= '   <date_lecture>'.$date_now." ".$heure_lecture."</date_lecture>\n";
    $xml .= '   <url>'.htmlentities($urls['tempo'][0])."</url>\n";
    $xml .= '   <url_>'.htmlentities($url)."</url_>\n";
    $xml .= '   <result>'.$result."</result>\n";
    if ($debug) {
        $xml .= '   <source>'       .$source                    ."</source>\n";
        $xml .= "   <response>   "  .substr($response,0,100)    .".....\n   </response>\n";
      foreach ($infos_ as $key => $info){
        $xml .= '   <test_'.$key.'>'       .$info               ."</test_".$key.">\n";
      }
      $xml .= "   <debugLen>"     .strlen($block)               ."</debugLen>\n";
      $xml .= "   <debugStr>\n"   .$block                       ."\n   </debugStr>\n";
      foreach ($urls[$contrat] as $key => $url)  {
        $xml .= '   <url_'.$key.'>'.$url                        ."</url_".$key.">\n";
      }     
    }
    $xml .= "</debug>\n";
    $xml .= "</root>\n";
    echo $xml;
    ?>
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)
opa95
 
Messages : 871
Inscription : 04 Fév 2019
Localisation : Val d'Oise

Re: [Store] Tempo EDF

Messagepar paope » 23 Sep 2024 14:25

Merci OPA,

effectivement le fil du forum était long et j'ai du m'emmeler les pinceaux, n'étant pas expert.
Bon cette version 3.7 fonctionne chez moi désormais ! :D Top
Merci, au plaisir d'avoir le version 4.0 qui apportera quoi de neuf ?
Belle journée.
Paope
paope
 
Messages : 34
Inscription : 08 Juin 2019

PrécédentSuivant

Retour vers Téléinformation

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 22 invité(s)