Bonjour petrapi, je me lance dans Domoticz est je suis intéresser par ton code lua pour EJP j'ai mis ton code dans Domoticz
Réglage/Plus d'options/Evénements
Code : Tout sélectionner
--[[
Ce script récupère les infos EJP et met a jour 3 dummy sensor seulement si necessaire.
version 1.2 : 15/03/2018
Changement des widgets type text par des widgets type Alert
variable NbRestant convertie en string pour les opérateur logiques
infos site EDF:
Période ejp : 1er novembre 20xx au 31 mars 20xx
Journee ejp: de 7h à 1h le lendemain
Le jour ejp de demain : Cette information est actualisée tous les jours à partir de 17h.
Liste des status : "EST_EJP" "NON_EJP" "ND"
sources:
https://github.com/DjMomo/eedomus-ejp/blob/master/eedomus-ejp.php
https://easydomoticz.com/lua-et-json/
https://m-particuliers.edf.com/jour-ejp/#_bk_x=1#
https://particulier.edf.fr/fr/accueil/contrat-et-conso/options/ejp.html
]]--
-----------------------------------------------------------------------
------------------ Variables utilisateur ------------------------------
-----------------------------------------------------------------------
local zone ='Nord' -- Zone ejp concernée
local dzJourJ ='EJP_Aujourdhui' -- dz Text sensor : Nom exact du "Alert sensor" indiquant l'ejp du jour
local dzJourJ1 ='EJP_Demain' -- dz Text sensor : Nom exact du "Alert sensor" indiquant l'ejp de demain
local dzNb ='EJP_Jours_Restant' -- dz Custom sensor : Nom exact du "Custom sensor" indiquant le nombre de jours ejp restants
local dzNotifJ =true -- Recevoir une notification lorsque EJP aujourdhui
local dzNotifJ1 =true -- Recevoir une notification lorsque EJP demain
local dzDebugLog=true -- Debug
-----------------------------------------------------------------------
------------------ Constantes -----------------------------------------
-----------------------------------------------------------------------
--Edf
local URLhisto ="https://particulier.edf.fr/services/rest/referentiel/historicEJPStore?searchType=ejp"
local URLparams ="https://particulier.edf.fr/services/rest/referentiel/getConfigProperty?PARAM_CONFIG_PROPERTY="
local URLetat ="https://particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?TypeAlerte=EJP&Date_a_remonter="
local EJPok ="NORD_EJP"
--Chargement du fichier JSON.lua
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux
-----------------------------------------------------------------------
------------------ Traitement de chaine -------------------------------
-----------------------------------------------------------------------
--formatage zone
local MinZone = string.lower(zone)
local MajZone = string.upper(zone)
local KeyZone = MinZone:gsub("^%l", string.upper)
--date du jour
local dateJ = os.date("%F",d)
--url/json du nombre de jours total
local KeyNbj = 'param.total.days.' .. MinZone
--Commandes url:
local cmdHisto = 'curl -s \"' .. URLetat .. dateJ .. '\"'
local cmdParams = 'curl -s \"' .. URLparams .. KeyNbj .. '\"'
local cmdEtat = 'curl -s \"' .. URLhisto .. '\"'
-----------------------------------------------------------------------
------------------ fonctions ------------------------------------------
-----------------------------------------------------------------------
--Fonction pour récupérer le retour d'une commande
function os.capture(cmd)
local f = assert(io.popen(cmd, 'r'))
local s = assert(f:read('*a'))
f:close()
return s
end
-----------------------------------------------------------------------
------------------ DzVents --------------------------------------------
-----------------------------------------------------------------------
return {
on = {
timer = { 'every minute' }
--timer = { 'every hour' }
},
execute = function(dz)
--Extraction des EJP du jour et du lendemain
local jsonHisto = json:decode(os.capture(cmdHisto))
local EjpJ = jsonHisto['JourJ']['Ejp' .. KeyZone]
local EjpJ1 = jsonHisto['JourJ1']['Ejp' .. KeyZone]
--Extraction du nombre de jours total
local jsonParams = json:decode(os.capture(cmdParams))
local NbTotal = jsonParams[KeyNbj]
--Extraction du nombre de jours passés
local jsonEtat = json:decode(os.capture(cmdEtat))
local NbPass = jsonEtat[MajZone]['TotalCurrentPeriod']
--Nombre de jours restants
local NbRestant = tostring(tonumber(NbTotal) - tonumber(NbPass))
--Recup des valeurs dz
local StatusEjpJ = dz.devices(dzJourJ).state
local StatusEjpJ1 = dz.devices(dzJourJ1).state
local StatusEjpRestant = dz.devices(dzNb).state
--EjpJ='NORD_EJP'
--EjpJ1='test'--'NORD_EJP_EJP'
--NbRestant='1'
--Notifications
if ( (dzNotifJ == true) and (EjpJ == EJPok) and (StatusEjpRestant ~= NbRestant) ) then
-- Si plusieurs jour "EST_EJP" consécutifs, on detecte le nouveau jour avec NbRestant qui lui change
dz.notify('EJP', 'Journée EJP, il en reste encore: ' .. NbRestant, dz.PRIORITY_NORMAL)
end
if ( dzNotifJ1 == true and EjpJ1 == EJPok and StatusEjpJ1 ~= EjpJ1 ) then
-- Le lendemain passe par l'etat ND entre chaque annonce, donc "EST_EJP" détecté même si plusieurs jours consécutifs
dz.notify('EJP', 'Demain sera une journée EJP', dz.PRIORITY_NORMAL)
end
--Update dz seulement si différent:
if ( StatusEjpJ ~= EjpJ ) then
if ( EJPok == EjpJ ) then
dz.devices(dzJourJ).updateAlertSensor(dz.ALERTLEVEL_RED,EjpJ)
else
dz.devices(dzJourJ).updateAlertSensor(dz.ALERTLEVEL_GREY,EjpJ)
end
end
if ( StatusEjpJ1 ~= EjpJ1 ) then
if ( EJPok == EjpJ1 ) then
dz.devices(dzJourJ1).updateAlertSensor(dz.ALERTLEVEL_RED,EjpJ1)
else
dz.devices(dzJourJ1).updateAlertSensor(dz.ALERTLEVEL_GREY,EjpJ1)
end
end
if ( StatusEjpRestant ~= NbRestant ) then
dz.devices(dzNb).updateCustomSensor(NbRestant)
end
--debug
if ( dzDebugLog == true ) then
dz.log(EjpJ, dz.PRIORITY_LOW)
dz.log(EjpJ1, dz.PRIORITY_LOW)
dz.log(NbRestant, dz.PRIORITY_LOW)
--dz.devices(dzJourJ).dump()
--dz.devices(dzNb).dump()
dz.log(cmdHisto, dz.PRIORITY_LOW)
dz.log(cmdParams, dz.PRIORITY_LOW)
dz.log(cmdEtat, dz.PRIORITY_LOW)
end
end
}
créer les 3 capteurs de mesures virtuels "dummy",
- l'ejp du jour (de type texte)
- l'ejp de demain (de type texte)
- le nombre de jours ejp restants (de type custom sensor)
mais voila rien ne ce lance ?