[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.
Répondre
M@v€ricK1st
Messages : 4
Inscription : 14 déc. 2017, 10:46

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

Message par M@v€ricK1st »

Bonjour à tous,

Dans ma recherche d'automatiser la gestion de mon chauffage, il fallait que le système puisse connaitre la couleur du jour pour l'abonnement Tempo d'EDF auquel je suis abonné.

Les pré-requis sont les suivants :

- Avoir un abonnement Tempo d'EDF
- 3 Switchs Virtuels On/Off "Aujourd'hui EDF Bleu", "Aujourd'hui EDF Blanc", "Aujourd'hui EDF Rouge"
- 3 Switchs Virtuels On/Off "Demain EDF Bleu", "Demain EDF Blanc", "Demain EDF Rouge"

Une fois cette info remontée dans Domoticz, je peux gérer différemment mon chauffage selon que nous sommes en BLEU, BLANC ou ROUGE (aïe !)

De même le script pour connaître la couleur du lendemain me permet de déclencher ensuite, depuis Domoticz, l'envoi d'un SMS qui me préviens à 15h (au lieu de 20h chez EDF) si l'on est en BLANC ou ROUGE le lendemain et ainsi m'organiser et prévenir Mme assez tôt (coefficient WAF) pour que nous puissions lancer des lessives, seche-linge et lave-vaisselle avant que nous ne soyons en tarification la plus chère...

Voici donc mes 2 scripts :

Couleur EDF du jour :

Code : Tout sélectionner

-- domoticz/scripts/lua/script_time_tempo_jour.lua
-- EDF Tempo Status Request from Domogeek API
-- http://domogeek.entropialux.com/tempoedf/now
-- Prerequis: 3 switch On/Off: "Aujourd'hui EDF Bleu", "Aujourd'hui EDF Blanc", "Aujourd'hui EDF Rouge"


-- Path to curl
-- Windows: curl = 'C:\\bin\\curl.exe'
curl = "curl"

-- Devices (Switch On/Off on virtual hardware)
switchBLEU = "Aujourd'hui EDF Bleu"
switchBLANC = "Aujourd'hui EDF Blanc"
switchROUGE = "Aujourd'hui EDF Rouge"


-- Function to get result of HTTP request
function os.capture(cmd, raw)
  local f = assert(io.popen(cmd, 'r'))
  local s = assert(f:read('*a'))
  f:close()
  if raw then return s end
  s = string.gsub(s, '^%s+', '')
  s = string.gsub(s, '%s+$', '')
  s = string.gsub(s, '[\n\r]+', ' ')
  return s
end

-- Function to update a switch
function updateZoneSwitch(zone, switch)
  local cmd = curl .. " http://domogeek.entropialux.com/tempoedf/now"
  local vac = os.capture(cmd, true)
  print("¤¤¤ Couleur EDF Tempo du Jour: " .. cmd .. ": " .. vac)

  if (vac == "BLEU") then
    commandArray[switchBLEU] = "On"
    commandArray[switchBLANC] = "Off"
    commandArray[switchROUGE] = "Off";

  elseif (vac == "BLANC") then
    commandArray[switchBLEU] = "Off"
    commandArray[switchBLANC] = "On"
    commandArray[switchROUGE] = "Off";

  elseif (vac == "ROUGE") then
    commandArray[switchBLEU] = "Off"
    commandArray[switchBLANC] = "Off"
    commandArray[switchROUGE] = "On";
    end
  end

commandArray = {}
time = os.date("*t")

-- Trigger at 6:10 every day
if (time.min == 10 and time.hour == 6) then

  -- BLEU
updateZoneSwitch("BLEU", switchBLEU)

  -- BLANC
updateZoneSwitch("BLANC", switchBLANC)

  -- ROUGE
updateZoneSwitch("ROUGE", switchROUGE)
end

return commandArray
Couleur EDF du lendemain :

Code : Tout sélectionner

-- domoticz/scripts/lua/script_time_tempo_jour.lua
-- EDF Tempo Status Request from Domogeek API
-- http://domogeek.entropialux.com/tempoedf/tomorrow
-- Prerequis: 3 switch On/Off: "Demain EDF Bleu", "Demain EDF Blanc", "Demain EDF Rouge"


-- Path to curl
-- Windows: curl = 'C:\\bin\\curl.exe'
curl = "curl"

-- Devices (Switch On/Off on virtual hardware)
switchBLEU = "Demain EDF Bleu"
switchBLANC = "Demain EDF Blanc"
switchROUGE = "Demain EDF Rouge"


-- Function to get result of HTTP request
function os.capture(cmd, raw)
  local f = assert(io.popen(cmd, 'r'))
  local s = assert(f:read('*a'))
  f:close()
  if raw then return s end
  s = string.gsub(s, '^%s+', '')
  s = string.gsub(s, '%s+$', '')
  s = string.gsub(s, '[\n\r]+', ' ')
  return s
end

-- Function to update a switch
function updateZoneSwitch(zone, switch)
  local cmd = curl .. " http://domogeek.entropialux.com/tempoedf/tomorrow"
  local vac = os.capture(cmd, true)
  print("¤¤¤ Couleur EDF Tempo de demain: " .. cmd .. ": " .. vac)

  if (vac == "BLEU") then
    commandArray[switchBLEU] = "On"
    commandArray[switchBLANC] = "Off"
    commandArray[switchROUGE] = "Off";

  elseif (vac == "BLANC") then
    commandArray[switchBLEU] = "Off"
    commandArray[switchBLANC] = "On"
    commandArray[switchROUGE] = "Off";

  elseif (vac == "ROUGE") then
    commandArray[switchBLEU] = "Off"
    commandArray[switchBLANC] = "Off"
    commandArray[switchROUGE] = "On";
    end
  end

commandArray = {}
time = os.date("*t")

-- Trigger at 15:00 every day
if (time.min == 00 and time.hour == 15) then

  -- BLEU
updateZoneSwitch("BLEU", switchBLEU)

  -- BLANC
updateZoneSwitch("BLANC", switchBLANC)

  -- ROUGE
updateZoneSwitch("ROUGE", switchROUGE)
end

return commandArray
J'espère que cela vous servira !

(Pour info, c'est une adaptation d'un script Vacances Scolaires dont je ne me rappelle plus du nom de l'auteur, mais je l'en remercie, si quelqu'un sait qui c'est, n'hésitez pas à me le signaler !)
poupinou82
Messages : 1
Inscription : 05 avr. 2019, 12:00

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

Message par poupinou82 »

super merci beaucoup pour ce script, maintenant je vais essayé de l’adapter sur un sélecteur pour avoir un seul switch
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,
ne trouvant pas chaussure à mon pied, j'ai créé ce script LUA que je partage.
Normalement il est facile à comprendre, rien de sorcier. Il ne met à jour qu'un device de type text mais facilement adaptable à des switch etc..

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 ttidx = 816
if (time.hour==heure_execution) and time.min==minute_execution 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_", "")
end

return commandArray
ça donnera ça:
Capture d’écran 2023-02-11 122222.png
Capture d’écran 2023-02-11 122222.png (11.15 Kio) Consulté 5414 fois
silicium
Messages : 34
Inscription : 22 déc. 2016, 15:52

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

Message par silicium »

J'ai utilisé le script de oeildefeu avec succès sur une version ancienne de domoticz (V3.8153), la mise à jour du device text se faisait parfaitement mais j'ai migré sur la dernière version (2023.1) et je n'arrive plus à le faire fonctionner... !!
J'ai ce message dans le fichier log: "Error: EventSystem: in Script #1: [string "commandArray = {} ..."]:8: attempt to call a nil value"
et comme je ne comprends rien aux scripts... Si une ame charitable passe par là, merci d'avance !
Dernière modification par Keros le 05 mars 2023, 20:39, modifié 2 fois.
Raison : Citation supprimée. Merci de ne pas citer le message précédent lors d'une réponse directe.
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,
étrange je suis sous 2023.1 aussi et ça fonctionne !
Essaie de tout virer et le refaire ou alors créé une copie pour tenter de comprendre ...
silicium
Messages : 34
Inscription : 22 déc. 2016, 15:52

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

Message par silicium »

Merci pour la réponse rapide !
J'ai déjà fait cela plusieurs fois... J'ai réinstallé completement domoticz sur un autre raspi 3 en repartant de zéro pour éviter des conflits de version (et conserver le systeme précédent fonctionnel).
Sur la nouvelle version j'ai bien les scripts LUA de validés dans les paramètres et aussi les accès http...
Si cela fonctionne chez toi, c'est que chez moi il y a un blocage quelque part, je vais essayé de comprendre ce qui ne va pas... Peut être que le script n'arrive pas a accéder au site de edf :(
Y a t'il une possibilité de déboguer un scrip en pas à pas ?
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 »

tu peux commenter une ligne puis une autre pour voir laquelle te pose vraiment problème ...
mais c'est bizarre.. t'aurais pas une " ou un ' au tout début de ton script ?

Tu es bien sur un script de type "time" ?
silicium
Messages : 34
Inscription : 22 déc. 2016, 15:52

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

Message par silicium »

Le script est exactement le même que celui qui fonctionnait avant (a l'idx près)
J'ai tout essayé comme mode de trigger, ça ne change rien à l'erreur et si je commente la ligne
-- commandArray['UpdateDevice'] = ttidx.."|0|"..DateJour..":"..string.gsub(jsonTempo.couleurJourJ, "TEMPO_", "").." - "..DateJourPlus1..":"..string.gsub(jsonTempo.couleurJourJ1, "TEMPO_", "") qui semble générer l'erreur, cela ne supprime pas l'erreur ??
Je désespère d'y comprendre quelque chose... :D
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 »

Active tous les prints et mets nous ton script complet ainsi que les logs quand il s'exécute. On y verra peut-être quelque chose.
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
silicium
Messages : 34
Inscription : 22 déc. 2016, 15:52

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

Message par silicium »

Bon, c'est résolu 8-)
En commentant tout et en testant les lignes une par une, j'ai rapidement vu que la ligne
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() posait problème...
En fait domoticz est installé en /home/silicium/... :oops:
il a donc suffi de remplacer le pi par silicium...
json = (loadfile "/home/silicium/domoticz/scripts/lua/JSON.lua")()
ça fonctionne parfaitement maintenant
Merci pour votre aide !
Image
Répondre