Page 1 sur 12

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

Publié : 15 déc. 2017, 19:33
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 !)

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

Publié : 08 avr. 2019, 12:08
par poupinou82
super merci beaucoup pour ce script, maintenant je vais essayé de l’adapter sur un sélecteur pour avoir un seul switch

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

Publié : 11 févr. 2023, 12:18
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é 5418 fois

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

Publié : 05 mars 2023, 19:50
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 !

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

Publié : 05 mars 2023, 22:16
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 ...

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

Publié : 06 mars 2023, 16:16
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 ?

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

Publié : 06 mars 2023, 20:22
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" ?

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

Publié : 06 mars 2023, 21:58
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

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

Publié : 06 mars 2023, 22:06
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.

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

Publié : 07 mars 2023, 12:40
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