MAJ Tempo EDF

Forum pour tous les autres protocoles : Enocean, X10, les cartes piface.razberry ...
Pour les questions concernant le choix de protocoles, merci d'utiliser le forum Les autres objets.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: MAJ Tempo EDF

Message par Keros »

Essayer quoi :roll:

Tu peux nous partager ton script ?
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
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: MAJ Tempo EDF

Message par lost »

Si c'est le script python au dessus, en plus de mettre la bonne url, il faut y inclure un user:password ou mettre son LAN en réseau de confiance.
Une réponse 401 c'est un pb d'autorisation.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: MAJ Tempo EDF

Message par Keros »

Je cherchais un script en bash :?
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
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: MAJ Tempo EDF

Message par lost »

Le script en python était appelé par un autre en bash qui incluait juste l'appel explicite via l'interpréteur, ce qui est en effet pas le plus évident et serait je pense évitable si le script en python avait ce genre de shebang plutôt qu'un env:

Code : Tout sélectionner

#!/usr/bin/python
Assorti d'un chmod +x du fichier.

Au passage: En utilisant sans intermédiaire l'appel RTE utilisé par le site de ce script, de mon côté, c'est pour le moment 100% fiable avec l'info dès 6h15. A suivre aux 1ers jours blancs/rouges pour voir si le flag fallback correspond bien à ce que je pense...
Dernière modification par Keros le 07 oct. 2024, 20:06, modifié 1 fois.
Raison : Citation supprimée. Merci de ne pas citer le message précédent lors d'une réponse directe.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: MAJ Tempo EDF

Message par Keros »

J'ai du bleu qui remonte pour le moment. On verra au premier changement de couleur :geek:
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
Pierrot72
Messages : 22
Inscription : 21 mai 2019, 19:10

Re: MAJ Tempo EDF

Message par Pierrot72 »

marcus_54 a écrit : 06 oct. 2024, 18:08 Bonsoir,
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
Salut Marcus,
As-tu bien adapté le script en créant dans ton DMTZ deux variables utilisateurs J , J+1 et renseigné l'IP de ton DMTZ?

Aussi comme l'a dit @lost il faut effectivement autoriser l'exécution du script par un chmod +x

Je suis loin d'être un pro du script et je ne vais pas vous cacher que GPT m'a bien aidé.
Il y a certainement plus simple et si @lost tu as des idées d'amélio du script que j'ai fourni n'hésite pas.
En fait si je passe par un script qui en lance un second c'est parce que je n'ai jamais réussi à lancer directement le .py sans erreurs, c'est crade mais fonctionnel, enfin tant que c'est bleu tous les jours :D ...
Domoticz 4.xx Windows 10 x64
Alain78
Messages : 75
Inscription : 05 févr. 2022, 09:18

Re: MAJ Tempo EDF

Message par Alain78 »

Bonjour,

J'utilise depuis plusieurs année l'API officielle de RTE pour les jours Tempo, mais depuis l’arrêt des infos sur le site EDF pour récupérer le nombre de jours Tempo restant, je ne peux plus traiter ces jours Tempo. J'ai pu voir le dernier script de @lost qui m'a poussé à le rependre et à le modifier pour avoir un seul script qui gère l'ensemble. je vous le partage pour ceux qui sont intéressés.
Merci à @lost pour ces idées et certaines méthodes que je n'utilise pas.

1ere étape créer les variables suivantes si non existantes:
Variables pour script Tempo
Variables pour script Tempo
Variables pour script Temp RTE.jpg (14.07 Kio) Consulté 1601 fois
Le script (Version 1.5) du 10/01/2025: normalement les commentaires devraient suffire.

Code : Tout sélectionner

--[[Récupération des informations TEMPO de RTE. Couleurs Bleu, Blanc ou Rouge
Couleur du jour, et nombre de jours restants pour chaque couleur(BLEU, BLANC et ROUGE).
Inspiré du script de "Lost" ici: https://easydomoticz.com/forum/viewtopic.php?p=122000#p122000 version de septembre 2024.
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
]]--
local urlTempoJoursRTE  = 'https://www.services-rte.com/cms/open_data/v1/tempo?season=' --- Nombre de jours restants pour chaque couleur.
local scriptName        = 'script_time_Tempo_Couleur_RTE'
local scriptVersion     = '1.5'
local tempoCount        = {blue=0, white=0, red=0}
local coloursFR         = {BLUE = "BLEU", WHITE = "BLANC", RED = "ROUGE", UNDEFINED = "NON_DEFINI"}
local tempoColor        = {J="GRIS", J1="GRIS"} -- Couleur tempo sur jour J et J+1
local tempoDay          = {J="NON_DEFINI", J1="NON_DEFINI"} -- Jour Tempo J et J+1
local tempoSeason       = nil
local Hvalid            = '10:30:00' -- Heure de validation d'ENEDIS pour la couleur TEMPO (10h30) valeur: hh:mm:ss.
local nbrTempoRouge     = 22  -- Nombre de jours Tempo ROUGE dans l'année.
local nbrTempoBlanc     = 43  -- Nombre de jours Tempo BLANC dans l'année.
local nbrTempoBleu      = 300 -- Nombre de jours Tempo BLEU dans l'année.
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------

return {
        on = {  timer =  {'at 06:51', 'at 10:00-22:00 at *:51' }, 
            system = { 'start' }, -- Pour execution en cas d'arret de plusieurs jours.
        	httpResponses = { scriptName } -- doit correspondre au "callback" passé par l'url à traiter.
         },
            logging =   {   -- level    =   domoticz.LOG_DEBUG,
                            -- level    =   domoticz.LOG_INFO,             -- Seulement un niveau peut être actif; commenter les autres
                               level    =   domoticz.LOG_ERROR,            -- Only one level can be active; comment others
                            -- level    =   domoticz.LOG_MODULE_EXEC_INFO,
                            marker = scriptName..' v'..scriptVersion },

	    execute = function(domoticz, item)
        local Time        = require('Time')
        local nowDate     = domoticz.time -- Recupération heure du traitement.
        local TEMPOJ      = domoticz.variables('TempoJ') -- Variable Couleur TEMPO du jour.
        local TEMPOJ1     = domoticz.variables('TempoJ1') -- Variable Couleur TEMPO lu lendemain.
        local DateTempoJ  = domoticz.time.dateToDate(domoticz.time.rawDateTime,'yyyy-mm-dd hh:MM:ss','yyyy-mm-dd') -- Date du jour TEMPOJ
        local DateTempoJ1 = domoticz.time.dateToDate(domoticz.time.addDays(1).rawDateTime,'yyyy-mm-dd hh:MM:ss','yyyy-mm-dd') -- Date du jour TEMPOJ1
        local DateValid   = Time(DateTempoJ..' '..Hvalid) -- Date et heure de validation d'ENEDIS pour la couleur TEMPO (10h30).

        -- Si traitement déjà réalisé et validé apres 10h30.
	    if (TEMPOJ1.value ~= "GRIS" and DateValid.compare(TEMPOJ1.lastUpdate).compare == 1 and TEMPOJ1.lastUpdate.hoursAgo < 12) then  -- Test si le traitement apres 10h30 (validation RTE) est passé pour sortir.
	        return
	    elseif TEMPOJ1.value == "GRIS" and nowDate.hour > 20 then  -- Test si aucune valeur récupérée durant la journée et alerte par email.
	        domoticz.notify("Alerte Tempo","Alerte pas de mise à jour de la couleur TEMPO pour demain", domoticz.PRIORITY_NORMAL)
        end

        -- Récupération saison tempo (démarrage au 1er Septembre) pour url RTE.
        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
        domoticz.log("La saison tempo est: "..tempoSeason,domoticz.LOG_DEBUG)
        urlTempoJoursRTE = urlTempoJoursRTE..tempoSeason -- Mise à jour de l'url avec la saison Tempo. 
        domoticz.log("Url de récuperation des jours Tempo est: "..urlTempoJoursRTE,domoticz.LOG_DEBUG)
        
        if item.isTimer or item.isSystemEvent then
		    domoticz.openURL({
                url = urlTempoJoursRTE,
			    method = 'GET',
			    headers = {["User-Agent"]= "Wget/1.20.3 (linux-gnu)",["Content-Type"]="application/json"},
			    callback = scriptName, -- voir la reponse "httpResponses" à la suite.
			})

        elseif (item.isHTTPResponse) and (item.ok) then -- Traitement de la reponse à l'url chez RTE.
		    if (item.isJSON) then
                local tempoSeasonData = domoticz.utils.fromJSON(item.data)
                domoticz.log(tempoSeasonData, domoticz.LOG_DEBUG)
                for k,v in pairs(tempoSeasonData.values) do
                    -- Calcul du nombre de jours par couleur depuis le deput de la saison
                    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 == DateTempoJ  then tempoColor.J  = v -- Récupération de la couleur tempo du jour.
                    elseif k == DateTempoJ1 then tempoColor.J1 = v -- Récupération de la couleur tempo du lendemain.
                    end
                end
            end
            tempoCount.blue = nbrTempoBleu - tempoCount.blue        -- nombre de jours BLEU restant pour la saison Tempo.
            tempoCount.white = nbrTempoBlanc - tempoCount.white     -- nombre de jours BLANC restant pour la saison Tempo.
            tempoCount.red = nbrTempoRouge - tempoCount.red         -- nombre de jours ROUGE restant pour la saison Tempo.
            tempoDay = {J = coloursFR[tempoColor.J], J1=coloursFR[tempoColor.J1]}   --Couleur des jours TEMPOJ et TEMPOJ1
            
            --- Update variables pour TEMPO RTE
            domoticz.variables('Tempo_J_Blanc').set(tempoCount.white)
            domoticz.variables('Tempo_J_Rouge').set(tempoCount.red)
            domoticz.variables('Tempo_J_Bleu').set(tempoCount.blue)
            domoticz.variables('TempoJ').set(tempoDay.J)
            domoticz.variables('TempoJ1').set(tempoDay.J1)
            
            -- Envoi de mail pour information Jour Rouge demain.
            if tempoDay.J1 == "ROUGE" and DateValid.compare(nowDate).compare == 1 then -- demain jour ROUGE
			    message = 'Demain le: '..DateTempoJ1..' la couleur TEMPO sera: ROUGE'
        	    domoticz.notify("Alerte TEMPO jour ROUGE", message, domoticz.PRIORITY_EMERGENCY)
            elseif tempoDay.J1 == "ROUGE" then -- demain jour ROUGE
			    message = 'Demain le: '..DateTempoJ1..' la couleur provisoire TEMPO sera: ROUGE'
        	    domoticz.notify("Alerte TEMPO provisoire jour ROUGE", message, domoticz.PRIORITY_EMERGENCY)
    		end
            -- Envoi de mail pour information Jour Blanc demain.
            if tempoDay.J1 == "BLANC" and DateValid.compare(nowDate).compare == 1 then -- demain jour BLANC
			    message = 'Demain le: '..DateTempoJ1..' la couleur TEMPO sera: BLANC'
        	    domoticz.notify("Alerte TEMPO jour BLANC", message, domoticz.PRIORITY_EMERGENCY)
            elseif tempoDay.J1 == "BLANC" then -- demain jour BLANC
			    message = 'Demain le: '..DateTempoJ1..' la couleur provisoire TEMPO sera: BLANC'
        	    domoticz.notify("Alerte TEMPO provisoire jour BLANC", message, domoticz.PRIORITY_EMERGENCY)
    		end

            domoticz.log("Nombre de jours bleu restant: "..tempoCount.blue, domoticz.LOG_DEBUG)
            domoticz.log("Nombre de jours blanc restant: "..tempoCount.white, domoticz.LOG_DEBUG)
            domoticz.log("Nombre de jours rouge restant: "..tempoCount.red, domoticz.LOG_DEBUG)
            domoticz.log("Couleur Tempo du jour: "..tempoDay.J, domoticz.LOG_DEBUG)
            domoticz.log("Couleur Tempo de demain: "..tempoDay.J1, domoticz.LOG_DEBUG)
        else
            domoticz.log('Réponse KO : '..item.statusText, domoticz.LOG_FORCE)            
        end
    end
}


Je vous laisse intégrer les informations dans les widgets de votre choix.
J'utilise un script dédié pour toutes les modifications de widgets

Exemples de Widgets:
Widget temp
Widget temp
Widget Tempo.jpg (34.21 Kio) Consulté 1601 fois

Bonne journée.
Dernière modification par Alain78 le 10 janv. 2025, 08:57, modifié 9 fois.
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: MAJ Tempo EDF

Message par lost »

Hello,

Chez moi c'est un peu spécifique avec les changements auto de plannings sur jour rouge et le système de notif, donc j'avais en effet pas envoyé un truc complet mais juste la partie MAJ, à reprendre/réintégrer dans son système.

Comme indiqué avant dans le fil de messages, j'avais ajouté la partie info fallback sans MAJ des extraits de code (Lua) concernés. Pas certain néanmoins de l'intérêt de les reprendre pour Alain78 (dans sa version dzVent) tant que je n'ai pas pu confirmer mon hypothèse sur cette info, surtout si le script cherche l'info à partir de l'heure officielle de MAJ et non au plus tôt expérimentalement constaté (peu après 6h du matin) comme je le fais. Et cela pourrait être long (il faudra au moins un jour ou la pré-annonce couleur lendemain sera effectivement revue et ils ne sont pas forcément nombreux, peut-être même sur plusieurs saisons).

La MAJ version RTE avec récup fallback ajouté (FJ, Fallback J et FJ1 pour J+1)

Code : Tout sélectionner

-- RTE version
-- Check url extracted from browser/network log accessing :
-- https://www.services-rte.com/fr/visualisez-les-donnees-publiees-par-rte/calendrier-des-offres-de-fourniture-de-type-tempo.html
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", RED = "ROUGE", UNDEFINED = "NON_DEFINI"}
    tempoCount = {blue=0, white=0, red=0}
    tempoColor = {J="UNDEFINED", J1="UNDEFINED", FJ="?", FJ1="?"}
    tempoDay   = {J="NON_DEFINI", J1="NON_DEFINI", FJ="?", FJ1="?"}

    -- 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

        -- Get J/J1 fallback info
        if     k == tempoDate.J.."-fallback"  then tempoColor.FJ  = v
        elseif k == tempoDate.J1.."-fallback" then tempoColor.FJ1 = v
        end

        --print(k.." = "..v)  -- DEBUG
    end

    tempoDay = {J = coloursFR[tempoColor.J], J1=coloursFR[tempoColor.J1], FJ = tempoColor.FJ, FJ1 = tempoColor.FJ1}
    return tempoDay, tempoCount
end
Et la partie MAJ qui n'update couleur lendemain que si fallback est à false (qui semble expérimentalement être son état "normal"):

Code : Tout sélectionner

    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.." (Fallback = "..tempoDay.FJ.."/"..tempoDay.FJ1..").")
    
    -- Only update when next day "color" is defined and it's fallback info is false.
    if ((tempoDay.J1 ~= "NON_DEFINI") and (tempoDay.FJ1 == "false")) 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
Côté logs sur ces 2 derniers jours (14 et 15 octobre), on voit la 1ère tentative de 6h00 KO et celle de 6h15 toujours OK (couleur renseignée et fallback à false, me semblant potentiellement indiquer une info anticipée non susceptible d'être modifiée d'ici 10h30 heure officielle). Et il en est ainsi depuis le changement pour RTE:

Code : Tout sélectionner

 $ grep -i "lua: tempo" /tmp/domoticz.txt 
2024-10-14 06:00:01.439  Status: LUA: TEMPO : Monday:BLEU - Tuesday:NON_DEFINI (Fallback = false/?).
2024-10-14 06:15:01.588  Status: LUA: TEMPO : Monday:BLEU - Tuesday:BLEU (Fallback = false/false).
2024-10-14 06:15:01.588  Status: LUA: TEMPO : Updated !
2024-10-15 06:00:01.477  Status: LUA: TEMPO : Tuesday:BLEU - Wednesday:NON_DEFINI (Fallback = false/?).
2024-10-15 06:15:00.916  Status: LUA: TEMPO : Tuesday:BLEU - Wednesday:BLEU (Fallback = false/false).
2024-10-15 06:15:00.916  Status: LUA: TEMPO : Updated !
EDIT 02/12/2024 : Ajout du 'léger' oubli RED -> ROUGE dans le tableau couleurs francisées, qui donna une erreur de concaténation avec valeur 'nil' dans le script Lua au 1er jour rouge... :roll:
Dernière modification par lost le 02 déc. 2024, 11:07, modifié 1 fois.
marcus_54
Messages : 425
Inscription : 28 févr. 2018, 12:15

Re: MAJ Tempo EDF

Message par marcus_54 »

Bonjour, merci pour vos réponses.

je me fais toujours avoir sur ce site car je ne reçois pas de notification par email et j'avais pas vu que l'on était passé à la page numéro 3 je continuai à rafraîchir la page 2 je suis nul 😊

Je teste le programme Python ci-dessous

tempo.py et tempo.sh sont dans domoticz/scrits chmod en rwx
j'ai mes deux variables (D'ailleurs domoticz n'a pas accepté de me faire une variable avec J+1)
Capture d'écran 2024-10-15 101859.png
Capture d'écran 2024-10-15 101859.png (12 Kio) Consulté 1586 fois
j'ai deux widgets de type alerts
Capture d'écran 2024-10-15 102903.png
Capture d'écran 2024-10-15 102903.png (4.61 Kio) Consulté 1584 fois
user:password ou mettre son LAN en réseau de confiance.
J'ai le user password par défaut admin domoticz (je teste ça sur un raspberry PI de test et je suis sur un réseau de confiance)
j'ai toujours l'erreur :

Code : Tout sélectionner

Erreur lors de l'envoi du log à Domoticz: 401
Le programme python que j'utilise:

Code : Tout sélectionner

#!/usr/bin/env python

import requests
from datetime import date
import time

# Variables pour Domoticz
domoticz_ip = '192.168.0.203:8084'
idx_couleur_jour = '21'
idx_couleur_jour_j1 = '22'
vname_couleur_jour = 'Couleur TEMPO J'
vname_couleur_jour_j1 = 'Couleur TEMPO J1'

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&param=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 2024.7
Domoticz sur RPI 4B+ : MQTT; MQTTMapper; Zigbee; RFlink DIY 433; Téléinfo; DS18B20; Capteur; compteur eau wmbusmeter, NanoLeaf...
Pierrot72
Messages : 22
Inscription : 21 mai 2019, 19:10

Re: MAJ Tempo EDF

Message par Pierrot72 »

à @lost et ceux qui touchent bien en code....

Y'aurai pas moyen que vous fassiez un plugin "tempo" pour les poireaux comme nous ???
Domoticz 4.xx Windows 10 x64
Répondre