MAJ Tempo EDF
Re: MAJ Tempo EDF
La MAJ chez RTE semble faite entre 6h et 6h15 au final. Au moins les jours bleux ou cela n'hésite pas.
Re: MAJ Tempo EDF
06h, me fait plutôt penser à l'horaire de changement de couleur. Tu es sûr que c'est la donnée du lendemain que tu vois ?
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Re: MAJ Tempo EDF
Oui, tant que je n'ai pas de match sur la date du lendemain je tente toutes les 15mn. Comme je voulais connaître l'heure de MAJ j'ai mis une plage de check de 5h à 12h et j'ai bien vu passer en log les 5 essais infructueux avant que ce soit bon à 6h15.
Afin de ne pas charger inutilement leurs serveurs, j'ai mis à partir de 6h désormais. Je verrais si cela s'y tiens ou s'il y a des variations car je pense qu'en ce moment la décision bleu ne fait guère de doute 1 semaine à l'avance. Peut-être que ce sera parfois MAJ plus tard, chez EDF la veille de certains jours rouges j'ai vu 1/2h ou 1h plus tard, car avait pu hésiter entre mettre du blanc ou du rouge en attendant des prévisions météo affinées pour le lendemain par exemple.
Là je verrais à l'usage mais je pense que ce sera dans tous les cas plus tôt que côté EDF car c'est RTE qui est la source de l'info de toutes manières.
Afin de ne pas charger inutilement leurs serveurs, j'ai mis à partir de 6h désormais. Je verrais si cela s'y tiens ou s'il y a des variations car je pense qu'en ce moment la décision bleu ne fait guère de doute 1 semaine à l'avance. Peut-être que ce sera parfois MAJ plus tard, chez EDF la veille de certains jours rouges j'ai vu 1/2h ou 1h plus tard, car avait pu hésiter entre mettre du blanc ou du rouge en attendant des prévisions météo affinées pour le lendemain par exemple.
Là je verrais à l'usage mais je pense que ce sera dans tous les cas plus tôt que côté EDF car c'est RTE qui est la source de l'info de toutes manières.
Re: MAJ Tempo EDF
Je confirme, pour une MAJ RTE entre 6h et 6h15 actuellement, ce matin encore:
La fonction qui gère la MAJ de l'info ayant été faite pour renvoyer des valeurs compatibles avec le comportement de l'API EDF qui ne fonctionne plus actuellement, les couleurs sont francisées et tant qu'on n'a pas la date du lendemain dans le JSON retourné par RTE elle renvoie "NON_DEFINI" en couleur:
EDIT: Certains bouts de code corrigés/complétés ici:
viewtopic.php?p=122439#p122439
Qui encapsule l'appel à wget ainsi, utilisant lui-même la lib json fournie dans le répertoire script:
Puis la logique de décision de MAJ (une plage d'heures pleines combiné au last_update pour arrêter les requêtes une fois la MAJ du jour OK) des 2 variables utilisateur couleur jour/lendemain utilisée par d'autres scripts et du device text domoticz (+notif mail si ça change du bleu!) contenant couleur et totaux bleu/blanc/rouge en cours, visible sur la webUI (je détaille pas toutes les dépendances propre à mon système, c'est juste pour voir la logique du truc et appel/usage de la fonction de base ci dessus ; à chacun d'adapter si intéressé):
Ça devrait fixer les idées sur comment je procède.
L'ancienne fonction qui récupérait chez EDF, à remettre si cela devait retomber en marche et compatible avec la partie commune ci dessus, getTempoEDF() et getTempoRTE() étant interchangeables côté appel. EDF offrait une réponse plus courte, surtout au fur et à mesure du nb de jours écoulés depuis le début de la saison Tempo en cours, mais nécessitait 2 requêtes/url contre 1 chez RTE.
Code : Tout sélectionner
2024-09-08 06:00:01.517 Status: LUA: TEMPO : Sunday:BLEU - Monday:NON_DEFINI
2024-09-08 06:15:00.781 Status: LUA: TEMPO : Sunday:BLEU - Monday:BLEU
2024-09-08 06:15:00.781 Status: LUA: TEMPO : Updated !
EDIT: Certains bouts de code corrigés/complétés ici:
viewtopic.php?p=122439#p122439
Code : Tout sélectionner
urlTempoRTE = 'https://www.services-rte.com/cms/open_data/v1/tempo?season='
local function getTempoRTE(time_epoch)
-- Match (old) EDF API
coloursFR = {BLUE = "BLEU", WHITE = "BLANC", UNDEFINED = "NON_DEFINI"}
tempoCount = {blue=0, white=0, red=0}
tempoColor = {J="UNDEFINED", J1="UNDEFINED"}
tempoDay = {J="NON_DEFINI", J1="NON_DEFINI"}
-- Build tempo season string (tempo year change at 1st of september) for RTE url
now = time_epoch
nowDate = os.date("*t", now)
if (nowDate.month >= 1) and (nowDate.month <= 8) then
tempoSeason=tostring(nowDate.year - 1)..'-'..tostring(nowDate.year)
else
tempoSeason=tostring(nowDate.year)..'-'..tostring(nowDate.year + 1)
end
--print("Current Tempo season : "..tempoSeason.."\n") -- DEBUG
-- Get all data for current tempo season
tempoSeasonURL = 'https://www.services-rte.com/cms/open_data/v1/tempo?season='..tempoSeason
tempoSeasonData = getUrlJson(tempoSeasonURL)
if (tempoSeasonData == nil) then
print("TEMPO : Warning, no data/color received from RTE ; Network issue?")
return tempoDay, tempoCount
end
--print("\nValues :") -- DEBUG
--print(json:encode_pretty(tempoSeasonData.values))
tempoDate = {J=tostring(os.date("%Y-%m-%d", now)), J1=tostring(os.date("%Y-%m-%d", now + 86400))}
-- Table walk for day colour/current counts...
for k,v in pairs(tempoSeasonData.values) do
-- Calculate current tempo year colours count
if v == "BLUE" then tempoCount.blue = tempoCount.blue + 1
elseif v == "WHITE" then tempoCount.white = tempoCount.white + 1
elseif v == "RED" then tempoCount.red = tempoCount.red + 1
end
-- Get J/J1 colors
if k == tempoDate.J then tempoColor.J = v
elseif k == tempoDate.J1 then tempoColor.J1 = v
end
--print(k.." = "..v) -- DEBUG
end
tempoDay = {J = coloursFR[tempoColor.J], J1=coloursFR[tempoColor.J1]}
return tempoDay, tempoCount
end
Code : Tout sélectionner
--
-- Internal fct :
-- Get json answer EDF or RTE http/json API.
--
local function getUrlJson(url)
config = assert(io.popen('curl --retry 1 --connect-timeout 2 -m 4 \"'..url..'\"'))
tempo = config:read('*all')
config:close()
jsonOut = json:decode(tempo)
return(jsonOut)
end
Code : Tout sélectionner
--hCheckRange = {11, 16} -- Begin/end hours for updates check (EDF : should be done ~11h00)
hCheckRange = {6, 13} -- Begin/end hours for updates check (RTE : Done earlier)
time = os.date("*t")
-- TEMPO "COLOR" UPDATE:
-- Exec every 15mn in hereupper hours range until next day status is defined,
-- retrying while last update > range to handle tempory fails (site unreachable...).
if ((time.min % 15 == 0) and (time.hour >= hCheckRange[1]) and (time.hour < hCheckRange[2]) and (timeLastUpdate(tempoName, false) > ((hCheckRange[2] - hCheckRange[1])* 3600))) then
jsonLib = assert(loadfile(jsonLibPath))
json = (jsonLib)()
epoch = os.time()
dateDay = tostring(os.date("%A"), epoch)
dateNextDay = tostring(os.date('%A', epoch + 86400))
tempoDay, tempoCount = getTempoRTE(epoch)
--tempoDay, tempoCount = getTempoEDF(epoch)
tempoText = dateDay..":"..tempoDay.J.." - "..dateNextDay..":"..tempoDay.J1
print("TEMPO : "..tempoText)
-- Only update when next day "color" is defined.
if (tempoDay.J1 ~= "NON_DEFINI") then
commandArray[#commandArray+1]={['Variable:'..tempoVarJ] = tempoDay.J}
commandArray[#commandArray+1]={['Variable:'..tempoVarJ1] = tempoDay.J1}
tempoText = tempoText..' ('..tempoCount.blue..'/'..tempoCount.white..'/'..tempoCount.red..')'
commandArray[#commandArray+1]={['UpdateDevice'] = otherdevices_idx[tempoName].."|0|"..tempoText}
-- Send notification mail if today or tomorrow prices are high...
if ((tempoDay.J ~= "BLEU") or (tempoDay.J1 ~= "BLEU")) then
commandArray[#commandArray+1]={['SendEmail'] = 'TEMPO Demain : '..tempoDay.J1..'#'..tempoText..'#'..emailNotifyAlarm}
end
print("TEMPO : Updated !")
end
end
L'ancienne fonction qui récupérait chez EDF, à remettre si cela devait retomber en marche et compatible avec la partie commune ci dessus, getTempoEDF() et getTempoRTE() étant interchangeables côté appel. EDF offrait une réponse plus courte, surtout au fur et à mesure du nb de jours écoulés depuis le début de la saison Tempo en cours, mais nécessitait 2 requêtes/url contre 1 chez RTE.
Code : Tout sélectionner
urlTempoColor = 'https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant='
urlTempoCount = 'https://particulier.edf.fr/services/rest/referentiel/getNbTempoDays?TypeAlerte=TEMPO'
local function getTempoEDF(time_epoch)
tempoCount = {blue=0, white=0, red=0}
tempoDay = {J="NON_DEFINI", J1="NON_DEFINI"}
today = tostring(os.date("%Y-%m-%d"), time_epoch)
jsonTempo = getUrlJson(urlTempoColor..today)
--print(jsonTempo.couleurJourJ)
--print(jsonTempo.couleurJourJ1)
if (jsonTempo == nil) then
print("TEMPO : Warning, no data/color received ; Network issue?")
return tempoDay, tempoCount
end
tempoJ = string.gsub(jsonTempo.couleurJourJ, "TEMPO_", "")
tempoJ1 = string.gsub(jsonTempo.couleurJourJ1, "TEMPO_", "")
tempoDay = {J = tempoJ, J1 = tempoJ1}
-- Only go ahead with counts when next day "color" is defined.
if (tempoJ1 ~= "NON_DEFINI") then
-- Get/add remaining days count information...
jsonTempo = getUrlJson(urlTempoCount)
--print(jsonTempo.PARAM_NB_J_BLEU)
--print(jsonTempo.PARAM_NB_J_BLANC)
--print(jsonTempo.PARAM_NB_J_ROUGE)
if (jsonTempo == nil) then
print("TEMPO : Warning, no data/count received from EDF ; Network issue?")
else
tempoCount = {blue=jsonTempo.PARAM_NB_J_BLEU, white=jsonTempo.PARAM_NB_J_BLANC, red=jsonTempo.PARAM_NB_J_ROUGE}
end
end
return tempoDay, tempoCount
end
Dernière modification par lost le 02 déc. 2024, 11:10, modifié 2 fois.
Re: MAJ Tempo EDF
J'amène ma pierre à l'édifice.
J'utilise deux variables utilisateur pour traiter couleur J et J+1
C'est un script en python, je le lance tous les jours à midi et ça marche nickel.
Veuillez à bien mettre l'IP de votre domoticz et l'IDX des deux variables (en haut du script tempo.py)
Donc dans /home/pi/domoticz/scripts j'ai deux fichier: tempo.sh et tempo.py
tempo.sh :
et
tempo.py
J'utilise deux variables utilisateur pour traiter couleur J et J+1
C'est un script en python, je le lance tous les jours à midi et ça marche nickel.
Veuillez à bien mettre l'IP de votre domoticz et l'IDX des deux variables (en haut du script tempo.py)
Donc dans /home/pi/domoticz/scripts j'ai deux fichier: tempo.sh et tempo.py
tempo.sh :
Code : Tout sélectionner
#!/bin/bash
python3 /home/pi/domoticz/scripts/tempo.pytempo.py
Code : Tout sélectionner
#!/usr/bin/env python
import requests
from datetime import date
import time
# Variables pour Domoticz
domoticz_ip = '192.168.0.10:8080'
idx_couleur_jour = '109'
idx_couleur_jour_j1 = '110'
vname_couleur_jour = 'Couleur TEMPO J'
vname_couleur_jour_j1 = 'Couleur TEMPO J+1'
def map_code_to_color(code):
# Mapping des codes de jour à des couleurs spécifiques
mapping = {
0: "Non défini",
1: "Bleu",
2: "Blanc",
3: "Rouge"
}
return mapping.get(code, "Inconnu")
def get_tempo_colors():
# URLs de l'API
url_today = 'https://www.api-couleur-tempo.fr/api/jourTempo/today'
url_tomorrow = 'https://www.api-couleur-tempo.fr/api/jourTempo/tomorrow'
try:
# Requête pour obtenir la couleur du jour
response_today = requests.get(url_today)
if response_today.status_code == 200:
data_today = response_today.json()
couleur_jour = map_code_to_color(data_today.get('codeJour', 0))
else:
log_to_domoticz(f"Erreur lors de la requête pour la couleur du jour: {response_today.status_code}")
return None, None
# Requête pour obtenir la couleur du lendemain
response_tomorrow = requests.get(url_tomorrow)
if response_tomorrow.status_code == 200:
data_tomorrow = response_tomorrow.json()
couleur_jour_j1 = map_code_to_color(data_tomorrow.get('codeJour', 0))
else:
log_to_domoticz(f"Erreur lors de la requête pour la couleur du lendemain: {response_tomorrow.status_code}")
return couleur_jour, None
return couleur_jour, couleur_jour_j1
except Exception as e:
log_to_domoticz(f"Une erreur s'est produite: {e}")
return None, None
def update_domoticz_variables(couleur_jour, couleur_jour_j1):
# URL de l'API JSON de Domoticz
url_domoticz = f'http://{domoticz_ip}/json.htm'
# Paramètres pour mettre à jour la variable de couleur du jour (J) dans Domoticz
params_couleur_jour = {'type': 'command', 'param': 'updateuservariable', 'idx': idx_couleur_jour, 'vname': vname_couleur_jour, 'vtype': 2, 'vvalue': couleur_jour}
# Paramètres pour mettre à jour la variable de couleur du jour suivant (J+1) dans Domoticz
params_couleur_jour_j1 = {'type': 'command', 'param': 'updateuservariable', 'idx': idx_couleur_jour_j1, 'vname': vname_couleur_jour_j1, 'vtype': 2, 'vvalue': couleur_jour_j1}
try:
# Envoyer la requête pour mettre à jour la variable de couleur du jour (J) dans Domoticz
response_couleur_jour = requests.get(url_domoticz, params=params_couleur_jour)
# Vérifier si la requête a réussi
if response_couleur_jour.status_code != 200:
log_to_domoticz(f"Erreur lors de la mise à jour de la couleur TEMPO J dans Domoticz: {response_couleur_jour.status_code}")
# Envoyer la requête pour mettre à jour la variable de couleur du jour suivant (J+1) dans Domoticz
response_couleur_jour_j1 = requests.get(url_domoticz, params=params_couleur_jour_j1)
# Vérifier si la requête a réussi
if response_couleur_jour_j1.status_code != 200:
log_to_domoticz(f"Erreur lors de la mise à jour de la couleur TEMPO J+1 dans Domoticz: {response_couleur_jour_j1.status_code}")
except Exception as e:
log_to_domoticz(f"Une erreur s'est produite lors de la mise à jour des variables dans Domoticz: {e}")
def log_to_domoticz(message):
# URL pour ajouter un log dans Domoticz
url_log = f'http://{domoticz_ip}/json.htm?type=command¶m=addlogmessage&message={message}'
try:
response = requests.get(url_log)
if response.status_code != 200:
print(f"Erreur lors de l'envoi du log à Domoticz: {response.status_code}")
except Exception as e:
print(f"Une erreur s'est produite lors de l'envoi du log à Domoticz: {e}")
# Appel de la fonction pour obtenir les couleurs Tempo du jour en cours et du jour suivant
couleur_jour, couleur_jour_j1 = get_tempo_colors()
# Affichage des résultats et enregistrement des logs
if couleur_jour is not None and couleur_jour_j1 is not None:
log_to_domoticz("* Les valeurs EDF Tempo ont bien été mises à jour")
log_to_domoticz(f"* Aujourd'hui est un jour : {couleur_jour}")
log_to_domoticz(f"* Demain est un jour : {couleur_jour_j1}")
# Appel de la fonction pour mettre à jour les variables dans Domoticz
update_domoticz_variables(couleur_jour, couleur_jour_j1)
else:
log_to_domoticz("Impossible d'obtenir les couleurs Tempo.")
# Attendre 3 secondes avant de fermer
time.sleep(3)
Domoticz 4.xx Windows 10 x64
Re: MAJ Tempo EDF
Bonjour à tous,
Un petit rappel sur les horaires de publications de la couleur des jours TEMPO.
Site RTE: https://www.services-rte.com/fr/visuali ... tempo.html
Et un extrait: RTE diffuse un pré-signalement à titre purement informatif entre 8h et 10h30. L'information pré-signalée ne présage pas de l'information définitive et n'engage pas RTE. Exceptée la couleur du jour du lendemain publiée à 10h30, les autres informations disponibles sur cette page sont fournies à titre purement informatif par RTE qui ne pourra être tenu responsable de l'usage qui pourrait être fait de ces données.
Donc bien lancer une requête après 10h30 pour être sure de la couleur.
J'utilise l' API "Tempo Like Supply Contract" sur RTE depuis plusieurs années et jamais de problème contrairement au site d'EDF qui est souvent très en retard.
Cordialement
Un petit rappel sur les horaires de publications de la couleur des jours TEMPO.
Site RTE: https://www.services-rte.com/fr/visuali ... tempo.html
Et un extrait: RTE diffuse un pré-signalement à titre purement informatif entre 8h et 10h30. L'information pré-signalée ne présage pas de l'information définitive et n'engage pas RTE. Exceptée la couleur du jour du lendemain publiée à 10h30, les autres informations disponibles sur cette page sont fournies à titre purement informatif par RTE qui ne pourra être tenu responsable de l'usage qui pourrait être fait de ces données.
Donc bien lancer une requête après 10h30 pour être sure de la couleur.
J'utilise l' API "Tempo Like Supply Contract" sur RTE depuis plusieurs années et jamais de problème contrairement au site d'EDF qui est souvent très en retard.
Cordialement
Re: MAJ Tempo EDF
Bonjour,
En effet, comme le précise Alain78 c'est l'info à 10h30 qui engage RTE. Mais si on regarde via les liens cités ce que propose la page RTE, il s'agit en fait d'une remise en forme de l'info de l'URL saison ci dessus via le JS de la page. On voit la requête passer en mode F12/réseau sur un navigateur et en rechargeant la page: Donc il y a à mon sens moyen d'avoir l'info bien plus tôt et retenter régulièrement pour les jours ou cela tarde et que l'on n'a pas encore la date du lendemain dans le JSON.
La seule interrogation à laquelle je n'ai pas réponse, c'est l'info datée "fallback" contenant un booléen (true/false): Personnellement, je ne l'ai pour le moment pas vu à true ni dans les données regardées manuellement ni dans les données historiques de saisons précédentes (mais je n'ai dû en regarder que 2 ou 3).
RTE indique que cela correspond à une info "dégradée" sans en indiquer la signification précise pour eux. Mon petit doigt me dit, au vu du nom anglais, qu'il pourrait s'agir d'une information qui ne serait pas encore définitive quand ce flag est à "true" au lieu de "false" comme je l'ai toujours vu pour le moment.
Je pense que je vais modifier mon script pour au moins le logguer, ce qui permettra au besoin de ne pas mettre à jour le widget et les variables utilisateur tant qu'il n'est pas lu à false.
Bref, j'aurais l'info tôt l'essentiel du temps et plus tard quand cela hésite.
En tout cas le dump ci-dessus illustre que la source est fiable car elle correspond à ce que le site grand public de RTE mets en forme.
En effet, comme le précise Alain78 c'est l'info à 10h30 qui engage RTE. Mais si on regarde via les liens cités ce que propose la page RTE, il s'agit en fait d'une remise en forme de l'info de l'URL saison ci dessus via le JS de la page. On voit la requête passer en mode F12/réseau sur un navigateur et en rechargeant la page: Donc il y a à mon sens moyen d'avoir l'info bien plus tôt et retenter régulièrement pour les jours ou cela tarde et que l'on n'a pas encore la date du lendemain dans le JSON.
La seule interrogation à laquelle je n'ai pas réponse, c'est l'info datée "fallback" contenant un booléen (true/false): Personnellement, je ne l'ai pour le moment pas vu à true ni dans les données regardées manuellement ni dans les données historiques de saisons précédentes (mais je n'ai dû en regarder que 2 ou 3).
RTE indique que cela correspond à une info "dégradée" sans en indiquer la signification précise pour eux. Mon petit doigt me dit, au vu du nom anglais, qu'il pourrait s'agir d'une information qui ne serait pas encore définitive quand ce flag est à "true" au lieu de "false" comme je l'ai toujours vu pour le moment.
Je pense que je vais modifier mon script pour au moins le logguer, ce qui permettra au besoin de ne pas mettre à jour le widget et les variables utilisateur tant qu'il n'est pas lu à false.
Bref, j'aurais l'info tôt l'essentiel du temps et plus tard quand cela hésite.
En tout cas le dump ci-dessus illustre que la source est fiable car elle correspond à ce que le site grand public de RTE mets en forme.
Re: MAJ Tempo EDF
Je viens d'installer ton script, ca a l'air de bien fonctionner. Enfin on se rendra mieux compte quand les 1ers jours blancs arriveront, mais ca semble OK.
Merci beaucoup pour ton aide, j'ai plein de choses de basées sur la couleur du jour, c'était bien les boules que ca ne fonctionne plus.
Re: MAJ Tempo EDF
J'avais pour ma part ajouté log et check de l'info fallback donnée côté source/RTE, que je suppose indiquer une info encore provisoire (pré-signalement évoqué par Alain78 ci avant) tant que ce flag serait à true. Pour le moment c'est MAJ sur la même tranche horaire que la couleur (et toujours vu direct à false depuis le changement de mon script).
2024-09-17 06:00:01.136 Status: LUA: TEMPO : Tuesday:BLEU - Wednesday:NON_DEFINI (Fallback = false/?).
2024-09-17 06:15:00.718 Status: LUA: TEMPO : Tuesday:BLEU - Wednesday:BLEU (Fallback = false/false).
2024-09-17 06:15:00.719 Status: LUA: TEMPO : Updated !
A suivre...
2024-09-17 06:00:01.136 Status: LUA: TEMPO : Tuesday:BLEU - Wednesday:NON_DEFINI (Fallback = false/?).
2024-09-17 06:15:00.718 Status: LUA: TEMPO : Tuesday:BLEU - Wednesday:BLEU (Fallback = false/false).
2024-09-17 06:15:00.719 Status: LUA: TEMPO : Updated !
A suivre...
Re: MAJ Tempo EDF
Bonsoir,
Je viens d'essayer
j'ai ceci au lancement :
Je viens d'essayer
j'ai ceci au lancement :
Code : Tout sélectionner
marc@test:~/domoticz/scripts $ ./tempo.sh
Erreur lors de l'envoi du log à Domoticz: 401
Erreur lors de l'envoi du log à Domoticz: 401
Erreur lors de l'envoi du log à Domoticz: 401
Erreur lors de l'envoi du log à Domoticz: 401
Erreur lors de l'envoi du log à Domoticz: 401
Domoticz 2024.7
Domoticz sur RPI 4B+ : MQTT; MQTTMapper; Zigbee; RFlink DIY 433; Téléinfo; DS18B20; Capteur; compteur eau wmbusmeter, NanoLeaf...
Domoticz sur RPI 4B+ : MQTT; MQTTMapper; Zigbee; RFlink DIY 433; Téléinfo; DS18B20; Capteur; compteur eau wmbusmeter, NanoLeaf...