[LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par lost »

Hello,

Pour ma part j'interroge de Lua via:

Code : Tout sélectionner

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
Si je teste avec la commande curl de cette fonction c'est aussi la foire ce soir:
{"PARAM_NB_J_BLANC":20,"PARAM_NB_J_ROUGE":9,"PARAM_NB_J_BLEU":183}
{"PARAM_NB_J_BLANC":19,"PARAM_NB_J_ROUGE":9,"PARAM_NB_J_BLEU":181}
{"PARAM_NB_J_BLANC":19,"PARAM_NB_J_ROUGE":9,"PARAM_NB_J_BLEU":181}

Niveau historique de mon device text combiné couleurs/comptes, on voit qu'il y a eu bien des gags ces derniers jours:
tempo.jpg
tempo.jpg (33.03 Kio) Consulté 2509 fois
J'avais surveillé au début et c'était bon. J'espère que les couleurs J/J1 reportées sont OK par compte, car cela va faire cher le gag. Si qqun ayant cela via téléinfo peut confirmer qu'au moins de ce côté c'est bon au vu de la capture ci dessus? Merci!

EDIT: Avec l'url couleur, sur date de ce jour c'est stable sur qq réponses mais celle d'hier, Yoloooo: Ca retourne 1 fois sur 3 des NON_DEFINI au lieu des couleurs passées...
:?:
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par Keros »

Le problème n'est pas seulement chez moi, merci Lost.

Pour les couleurs de jour, cela correspond à leur site : https://particulier.edf.fr/fr/accueil/c ... -jour.html# et c'est aussi ce que j'ai eu via la téléinfo.

Ce que je n'arrive pas à expliquer, c'est pourquoi quand je lance l'appel API via le navigateur, je n'ai jamais eu d'erreur.

J'essaierai de faire une recherche sur internet pour voir si d'autres ont rencontré le même souci.

Edit : Je n'ai pas trouvé d'autres cas sur internet. Je vais revenir à ce que je faisais avant : compter moi-même les jours restants.
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: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par lost »

Keros a écrit : 03 févr. 2024, 18:55 Ce que je n'arrive pas à expliquer, c'est pourquoi quand je lance l'appel API via le navigateur, je n'ai jamais eu d'erreur.
Pour le navigateur, il peut y avoir l'effet cache dont ils usent et abusent: 1 requête initiale et plus rien derrière, ils recrachent juste l'info initiale qui ne bouge alors pas.

Quand j'avais ajouté cette info, j'avais pour ma part juste constaté que le compteur correspondant à la couleur du lendemain était décrémenté au moment ou la MAJ était faite peu après 11h: Le lendemain était déjà décompté en fait et on pouvait donc avoir une instabilité d'1j sur le seul compteur de la couleur à venir, entre avant et après la MAJ.

C'est pourquoi mon device text n'est renseigné que quand la couleur lendemain est sortie du NON_DEFINI, afin d'avoir toujours une prise du décompte courant après la MAJ et une info cohérente avant ces problèmes.

On peut en effet tenir le décompte personnel, mais il suffit alors d'un raté dans la MAJ pour se retrouver décalé. Je vais laisser ainsi pour le moment pour ma part, on verra s'ils corrigent. Et mettre leur appli débilophone à la con pour avoir l'info couleur lendemain, même si de ce côté ça semble fiable (pour la date du jour au moins), de 2 manières vu que j'ai pas de téléinfo.

Dans mon log on voit que ca cloche dès jeudi 1er, avec le jour blanc du lendemain non décompté et des infos décompte (bleu/blanc/rouge) restants inchangées vs mercredi 31... Le lendemain les 2 sont décomptés d'un coup et samedi c'est le pompon avec bleu/blanc qui montent de 2 et 5 jours... pour une info de décompte, oupsss!

Un device text semble limité à 16 jours et ça va pas plus loin histoire de voir si avant c'était tout bon ou pas.
bartras
Messages : 140
Inscription : 17 mars 2017, 17:44
Localisation : Saint Etienne (42)

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par bartras »

Bonjour à tous,

Depuis un moment, le script LUA pour avoir la couleur du jour ne fonctionne plus.
Je viens de m'en apercevoir et je pense que c'est l'adresse qui a du changer mais après avoir fait des recherches sur le net je ne trouve pas :/

Voici le message d'erreur dans le log domoticz :

Code : Tout sélectionner

2024-12-10 11:50:00.557 Error: EventSystem: in 5_Couleur_EDF: /home/pi/domoticz/scripts/lua/JSON.lua:1348: /home/pi/domoticz/scripts/lua/JSON.lua:836: can't parse JSON at byte 1 of: RESTEASY003210: Could not find resource for full path: https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant=2024-12-10
Et voici le code LUA que j'utilise, je m'étais inspiré de ce qui avait été fait ici.

Code : Tout sélectionner

commandArray = {}

    time = os.date("*t") -- put the time/date table in variable time
    
    local heure_execution = 11
    local minute_execution = 50
    local heure_execution1 = 1
    local minute_execution1 = 1
    local ttidx = 82
    
    if (time.hour==heure_execution) and time.min==minute_execution or (time.hour==heure_execution1) and time.min==minute_execution1 then 
        
        print ("Tempo");
        json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()
        --https://www.domoticz.com/wiki/Lua_-_json.lua
        --https://easydomoticz.com/forum/viewtopic.php?t=9015&start=20
    
        local today=tostring(os.date("%Y-%m-%d"))
        local config=assert(io.popen('curl \"https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant='..today..'\"'))
        local tempo = config:read('*all')
        
        -- print (location) 
        --modèle exemple {"couleurJourJ":"TEMPO_ROUGE","couleurJourJ1":"TEMPO_ROUGE"}
        config:close()
        
        local jsonTempo = json:decode(tempo)
        --print (jsonTempo.couleurJourJ)	        			
        --print (jsonTempo.couleurJourJ1)
        --local DateJour=tostring(os.date("%A"))
        --local DateJourPlus1 = tostring(os.date('%A', (os.time()+ 60*60*24)))
        
        --commandArray['UpdateDevice'] = ttidx.."|0|"..DateJour..":"..string.gsub(jsonTempo.couleurJourJ, "TEMPO_", "").." - "..DateJourPlus1..":"..string.gsub(jsonTempo.couleurJourJ1, "TEMPO_", "")
        commandArray['UpdateDevice'] = ttidx.."|0| Aujourd'hui: "..string.gsub(jsonTempo.couleurJourJ, "TEMPO_", "").." - Demain: "..string.gsub(jsonTempo.couleurJourJ1, "TEMPO_", "")..""
    
    end

return commandArray

Est ce que quelqu'un pourrait m'aider à trouver la nouvelle url à mettre ?
Surtout avec tous les jours rouges qui tombent en ce moment :)

Merci.
oeildefeu
Messages : 31
Inscription : 18 févr. 2022, 19:28

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par oeildefeu »

Salut,
voici mon code qui fonctionne avec une nouvelle URL:

Code : Tout sélectionner

commandArray = {}

local heure_execution = 11
local minute_execution = 10
local minute_execution2 = 50
local id_device_text = 816 --device id ou est stocké l'info des jours Tempo
local nom_device_text = "Tempo" --device ou est stocké l'info des jours Tempo
local Text_sensor_update = ""
local alert_bleu = false
local alert_blanc = true
local alert_rouge = true
local debug = false

local t1 = os.time()
local s = otherdevices_lastupdate[nom_device_text]
local string_device = otherdevices_svalues[nom_device_text]

if debug then print ('Valeur actuelle: '..string_device) end

year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = (os.difftime (t1, t2))
if debug then print(difference) end
time = os.date("*t") -- put the time/date table in variable time
if ( time.hour==heure_execution and (time.min==minute_execution or time.min==minute_execution2) or (difference > 88200 and time.min==30) or string.find(string_device, "NON_DEFINI") or debug == true) then 
    json = (loadfile "scripts/lua/JSON.lua")()

    local config=assert(io.popen('curl -X \'GET\' \'https://www.api-couleur-tempo.fr/api/jourTempo/today\' -H \'accept: application/json\''))
    local tempo = config:read('*all')
    config:close()
    if debug then print (tempo) end


    local jsonTempo = json:decode(tempo)
    if debug then print (jsonTempo.codeJour) end
    couleurJourJ = jsonTempo.codeJour
    if (couleurJourJ == 1) then
        couleurJourJ = "BLEU"
    elseif(couleurJourJ == 2) then
        couleurJourJ = "BLANC"
    elseif(couleurJourJ == 3) then
        couleurJourJ = "ROUGE"
    elseif(couleurJourJ == 0) then
        couleurJourJ = "NON_DEFINI"
    end
    local config=assert(io.popen('curl -X \'GET\' \'https://www.api-couleur-tempo.fr/api/jourTempo/tomorrow\' -H \'accept: application/json\''))
    local tempo = config:read('*all')
    config:close()
    if debug then print (tempo) end
    local jsonTempo = json:decode(tempo)
    if debug then print (jsonTempo.codeJour) end
    couleurJourJ1 = jsonTempo.codeJour
    if (couleurJourJ1 == 1) then
        couleurJourJ1 = "BLEU"
    elseif(couleurJourJ1 == 2) then
        couleurJourJ1 = "BLANC"
    elseif(couleurJourJ1 == 3) then
        couleurJourJ1 = "ROUGE"
    elseif(couleurJourJ1 == 0) then
        couleurJourJ1 = "NON_DEFINI"
    end
    if debug then print (jsonTempo.couleurJourJ1) end
    local DateJour=tostring(os.date("%A"))
    local DateJourPlus1 = tostring(os.date('%A', (os.time()+ 60*60*24)))
    daysFr = {Monday = "Lundi", Tuesday = "Mardi", Wednesday = "Mercredi", Thursday = "Jeudi", Friday = "Vendredi", Saturday = "Samedi", Sunday = "Dimanche"}
    Text_sensor_update = daysFr[DateJour]..":"..couleurJourJ.." - "..daysFr[DateJourPlus1]..":"..couleurJourJ1
    if(otherdevices_svalues[nom_device_text] ~= Text_sensor_update) then
        commandArray['UpdateDevice'] = id_device_text.."|0|"..Text_sensor_update
        if couleurJourJ1 == "ROUGE" and alert_rouge == true then
            commandArray['SendNotification']='Tempo: Demain Rouge#Demain (à partir de 6h du matin) est annoncé comme un jour tempo ROUGE !'
        elseif couleurJourJ1 == "BLANC" and alert_blanc == true then
            commandArray['SendNotification']='Tempo: Demain Blanc#Demain (à partir de 6h du matin) est annoncé comme un jour tempo BLANC.'
        elseif couleurJourJ1 == "BLEU" and alert_bleu == true then
            commandArray['SendNotification']='Tempo: Demain Bleu#Demain (à partir de 6h du matin) est annoncé comme un jour tempo BLEU.'
        end
    end
end

return commandArray
Dernière modification par oeildefeu le 17 déc. 2024, 16:02, modifié 2 fois.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par Keros »

Nous avons discuté de ce changement dans le sujet MAJ Tempo EDF.
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
bartras
Messages : 140
Inscription : 17 mars 2017, 17:44
Localisation : Saint Etienne (42)

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par bartras »

Merci oeildefeu, c'est tout bon grâce à ton code :)
Dernière modification par Keros le 13 déc. 2024, 20:50, modifié 1 fois.
Raison : Supression de la citation
oeildefeu
Messages : 31
Inscription : 18 févr. 2022, 19:28

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par oeildefeu »

Et il y avait un bug : les notifications ne marchaient pas pour une erreur de nom de variable:
dans les tests de notification, il faut remplacer Jour1 par couleurJourJ1

J'ai corrigé mon post
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par lost »

Hello,

Le script ne choppe pas l'info à la source (RTE) mais tant que cette alternative fonctionne pourquoi pas...

Par contre, au delà de conversions inutiles (chaines de caractères qui en sont déjà), la francisation des jours pique un peu! Il y a moyen de faire bien plus simple et efficace (surtout pour un langage totalement basé sur les tables) avec une simple table de conversion:

Code : Tout sélectionner

daysFr = {Monday = "Lundi", Tuesday = "Mardi", Wednesday = "Mercredi", Thursday = "Jeudi", Friday = "Vendredi", Saturday = "Samedi", Sunday = "Dimanche"}

local DateJour=os.date("%A")
print("Jour EN : "..DateJour.." / FR : "..daysFr[DateJour])
Ceci sauvé dans un fichier date.lua et appelé via l'interpréteur (si on l'a installé d'un "apt get lua", au delà de celui intégré à domoticz) donne ce jour:
lua date.lua
Jour EN : Tuesday / FR : Mardi
Je ne sais pas si c'est chatGPT qui a proposé ta version, mais si c'est le cas il semble partisan du "pourquoi faire simple quand on peut faire compliqué" :D

Le même principe peut bien entendu être appliqué aux codes couleur.
oeildefeu
Messages : 31
Inscription : 18 févr. 2022, 19:28

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par oeildefeu »

Salut,
J'ai tenté de bidouiller un truc qui récupère chez RTE mais pas réussi. Donc j'ai pris ce site qui me semblait pas mal et facile à récupérer.

Merci pour la suggestion de la table de jour. Et non pas besoin de chatgpt pour faire ce niveau de simplicité :) Oui c'est plus de ligne de code mais ma réflexion/recherche était "comment modifier une chaine de caractère?" et donc la réponse était à base de string.gsub(). C'était effectivement sale de réutiliser ça 14 fois mais sur le moment, mon temps étant compté pour remettre en marche ce script, j'ai pas cherché plus loin/une autre solution ! tout simplement !
Répondre