Page 2 sur 2
Re: Voyant EJP
Publié : 10 août 2018, 15:36
par nene82
hi,
Bien vu pour le fichier JSON.lua >
Pour le reste du log je ne vois pas trop d'erreurs, mais ça ne ressemble pas non plus a ce que j'ai dans réglages/log/status :
> je comprends pas!
En réglages/paramètres/autre/dzvents, je suis en: Errors + minimal execution infos + generic info
> Ok, ça c'est fait.
J'imagine que aucuns des 3 capteurs virtuels ne se mettent a jour c'est bien ça?
> C'est ça!

- 1.png (60.21 Kio) Consulté 8045 fois
Actuellement le script ne se lance qu'une fois par heure, si tu veux toutes les minutes pour debugger, tu peux changer ces 2 lignes 83 et 84 comme ceci: >
Sauf erreur de ma part je pense que c'est déjà comme ça dans ton script ver. 1.2
.
Bon merci quand même.
Re: Voyant EJP
Publié : 11 août 2018, 04:15
par petrapi
Désolé que ça ne fonctionne pas.
Par "réglages/log/status" je voulais dire dans la page log de dz, accessible par les menus réglages puis log, il y a 3 onglets tout/statut/erreur, et l'exemple de log que j'ai posté provient de l'onglet statut.
Les 3 capteurs semblent ok.
Lignes 83 et 84, dans le script 1.2 c'est 1 lancement par heure:
Et si tu veux qu'il se lance toutes les minutes c'est bien ( '--' met la ligne en commentaire):
As tu configuré un login? je crois que pour que dzVents fonctionne il faut autoriser localhost sans mot de passe:
Dans le menu réglages/système: "Réseaux locaux (pas d'identification):" Tu peux ajouter 127.0.0.1
Bon courrage
Re: Voyant EJP
Publié : 11 août 2018, 10:02
par nene82
bonjour,
Bon il se passe bien quelque chose....mais les capteurs ne semblent pas se mettre à jour.
les logs,
"2018-08-11 10:21:00.152 dzVents: Info: ------ Start internal script: Gestion_EJP:, trigger: every minute
2018-08-11 10:21:01.640 dzVents: Debug: Device-adapter found for EJP Aujourdhui: Alert sensor adapter
2018-08-11 10:21:01.658 dzVents: Debug: Processing device-adapter for EJP Aujourdhui: Alert sensor adapter
2018-08-11 10:21:01.659 dzVents: Debug: Device-adapter found for EJP Demain: Alert sensor adapter
2018-08-11 10:21:01.659 dzVents: Debug: Processing device-adapter for EJP Demain: Alert sensor adapter
2018-08-11 10:21:01.659 dzVents: Debug: Device-adapter found for EJP Restant: Custom sensor device adapter
2018-08-11 10:21:01.660 dzVents: Debug: Processing device-adapter for EJP Restant: Custom sensor device adapter
2018-08-11 10:21:01.660 dzVents: NON_EJP
2018-08-11 10:21:01.660 dzVents: curl -s "
https://particulier.edf.fr/bin/edf_rc/s ... 2018-08-11"
2018-08-11 10:21:01.660 dzVents: curl -s "
https://particulier.edf.fr/services/res ... chType=ejp"
2018-08-11 10:21:01.660 dzVents: Info: ------ Finished Gestion_EJP "
Est ce que le script doit s’appeler "Gestion_EJP" ou "Gestion_EJP.lua" ou est ce que ça n'a pas d'importance?
derniers points,
--Edf
local URLhisto ="
https://particulier.edf.fr/services/res ... chType=ejp"
> Ok revoie quelque chose
local URLparams ="
https://particulier.edf.fr/services/res ... _PROPERTY="
> renvoie une erreur si on met cette url directement dans l'explorateur!
local URLetat ="
https://particulier.edf.fr/bin/edf_rc/s ... _remonter="
> renvoie aussi une erreursi on met cette url directement dans l'explorateur!
local EJPok ="EST_EJP"
> est ce là qu'il faut régler la région?
Merci
Re: Voyant EJP
Publié : 11 août 2018, 14:26
par petrapi
Ah cool tes 3 capteurs sont bien mis a jour!
En fait ils se mettent a jour seulement si les valeurs affichées sont différentes de celles récupérées.
Tu peux essayer de mettre des valeurs bidon dans tes capteurs, et tu verras qu'ils se mettront a jour lors du prochain lancement de script.
Pour le nom du script tu peux mettre ce que tu veux oui, aucune importance.
Pour régler ta région c'est plutôt ici (pour moi c'est sud):
Les url de la section constantes ne sont pas entiers, ils sont complétés par le script, par exemple:
local URLetat ="
https://particulier.edf.fr/bin/edf_rc/s ... _remonter="
Dans ton log ça devient:
2018-08-11 10:21:01.660 dzVents: curl -s "
https://particulier.edf.fr/bin/edf_rc/s ... 2018-08-11"
Bonne journée

Re: Voyant EJP
Publié : 11 août 2018, 14:57
par nene82
Ok, bon be c'est cool alors.
moi aussi c'est Sud.
merci et @ bientôt.
Re: Voyant EJP
Publié : 14 nov. 2018, 07:13
par nene82
Bonjour,
EDF n'a t'il pas changé quelque chose sur leur site ?
Le voyant EJP m'affiche maintenant "EJP restant : 0"
CI dessous le retour des logs
2018-11-14 07:59:00.428 Error: dzVents: Error: An error occured when calling event handler Gestion_EJP
2018-11-14 07:59:00.429 Error: dzVents: Error: /volume1/@appstore/domoticz/var/scripts/lua/JSON.lua:1009: /volume1/@appstore/domoticz/var/scripts/lua/JSON.lua:660: can't parse JSON at char 1 of: �
Merci,
Cdt
Re: Voyant EJP
Publié : 14 nov. 2018, 21:43
par petrapi
Bonjour Nene,
Effectivement il a du y avoir des modifs sur le site edf (et ça doit être aussi pour ça que ça affichait -22 en hors saison ejp).
la page semble remonter le total des 2 dernières années.
J'ai donc remplacé la ligne 99:
par:
En espérant que ça fonctionne, a vérifier dès qu'il y aura une journée ejp
J’espère que ça résoudra aussi tes erreurs dans le log, mais j'ai des doutes.
Merci pour ton retour, a++
Re: Voyant EJP
Publié : 14 nov. 2018, 23:34
par nene82
Bonsoir,
Tout à l'air d'être rentré dans l'ordre. A priori je n'ai plus d'erreurs dans le journal.
Super!
Maintenant on va vite être fixé
Bonne soirée et merci encore
JP
Re: Voyant EJP
Publié : 23 janv. 2020, 13:24
par Paldor
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 ?
Re: Voyant EJP
Publié : 23 janv. 2020, 23:26
par petrapi
Bonjour Paldor,
Le plus simple dans ces cas la est d'aller voir dans le log pour voir si il n'y a pas d'erreurs affichées.
Voici tout de même la dernière version du script qui fonctionne chez moi:
Code : Tout sélectionner
--[[
Ce script récupère les infos EJP et met a jour 3 dummy sensor seulement si necessaire.
version 1.4 : 4/11/2019
Ajout du userAgent dans la commande curl sinon "access denied"
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 ='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/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 ="EST_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 userAgent = '-A \"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0\" '
local cmdHisto = 'curl -s ' .. userAgent .. '\"' .. URLetat .. dateJ .. '\"'
local cmdParams = 'curl -s ' .. userAgent .. '\"' .. URLparams .. KeyNbj .. '\"'
local cmdEtat = 'curl -s ' .. userAgent .. '\"' .. 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)
--debug
if ( dzDebugLog == true ) then
dz.log(cmdHisto, dz.PRIORITY_LOW)
dz.log(cmdParams, dz.PRIORITY_LOW)
dz.log(cmdEtat, dz.PRIORITY_LOW)
end
--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))
--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()
end
--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
end
}