Bonjour,
Bon j'ai trouvé. C'est un script de récupération et décompte des jours EJP.
Je me suis rendu compte qu'en fait Domoticz marchait bien, mais avait une latence inhabituelle qui pouvait laisser penser que ça ne marchait plus. Après plusieurs manips et quelques suspicions sur ce script, j'ai eu l'idée de débrancher ma box et rompre les requêtes vers internet. Là bingo, tout est reparti dans délais normaux. DU coup j'ai pu désactiver ce dernier.
Ce script je l'ai récupéré sur ce site et l'ai adapté à mon syno. A l'origine il est prévu pour un raspberry! Comme je suis une quiche j'ai mal du l'adapter bien qu'il ai fonctionné l'année précédente. Néanmoins j'avais bien vu des erreurs apparaître dans les logs. j'imagine que la mise à jour à eu raison de ce script et de mon interprétation plus qu'aléatoire
Je le mets ci dessous, si quelqu'un voit le problème je suis preneur, sinon ce n'est pas garve.
Je vous en remercie par avance.
Cdt,
JP
--[[
Ce script récupère les infos EJP et met a jour 3 dummy sensor seulement si nécessaire.
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/b ... us-ejp.php
https://easydomoticz.com/lua-et-json/
https://m-particuliers.edf.com/jour-ejp/#_bk_x=1#
https://particulier.edf.fr/fr/accueil/c ... s/ejp.html
]]--
-----------------------------------------------------------------------
------------------ Variables utilisateur ------------------------------
-----------------------------------------------------------------------
local zone ='sud' -- 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 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/res ... chType=ejp"
local URLparams ="
https://particulier.edf.fr/services/res ... _PROPERTY="
local URLetat ="
https://particulier.edf.fr/bin/edf_rc/s ... _remonter="
local EJPok ="EST_EJP"
--Chargement du fichier JSON.lua
json = (loadfile "/volume1/@appstore/domoticz/var/scripts/lua/JSON.lua")() -- For Linux
--json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux
--json = (loadfile "/usr/local/domoticz/var/scripts/dzVents//
-----------------------------------------------------------------------
------------------ 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='EST_EJP'
--EjpJ1='test'--'EST_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
}