Erreur : Access Denied, sur script EJP "RESOLUT"

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
VBill
Messages : 86
Inscription : 26 janv. 2019, 16:43

Erreur : Access Denied, sur script EJP "RESOLUT"

Message par VBill »

Boujour
Voila l'erreur que j'ai sur le script EJP :
2019-11-02 15:29:00.761 Error: dzVents: Error: (2.4.29) An error occurred when calling event handler dzVents Script_time_ejp
2019-11-02 15:29:00.761 Error: dzVents: Error: (2.4.29) /home/pi/domoticz/scripts/lua/JSON.lua:660: html passed to JSON:decode(): <HTML><HEAD>
2019-11-02 15:29:00.761 <TITLE>Access Denied</TITLE>
2019-11-02 15:29:00.761 </HEAD><BODY>
2019-11-02 15:29:00.761 <H1>Access Denied</H1>
2019-11-02 15:29:00.761
2019-11-02 15:29:00.761 You don't have permission to access "http&#58;&#47;&#47;particulier&#46;edf&#46;fr&#47;bin&#47;edf&#95;rc&#47;servlets&#47;ejptemponew&#63;" on this server.<P>
2019-11-02 15:29:00.761 Reference&#32;&#35;18&#46;40281102&#46;1572704940&#46;80f2d056
2019-11-02 15:29:00.761 </BODY>
2019-11-02 15:29:00.761 </HTML>

Pourtant dans un navigateur le lien : https://particulier.edf.fr/bin/edf_rc/s ... 2019-11-02 fonctionne bien.

Ci dessous le script que j'utilise :

Code : Tout sélectionner

--Ce script dzVents récupère les infos EJP 
--infos site EDF:
--    Période ejp : 1er novembre au 31 mars
--    Journée ejp: de 7h à 1h le lendemain
--    Le jour ejp de demain : Cette information est actualisée tous les jours à partir de 16h.
--    Liste des status : "EST_EJP" "NON_EJP" "ND"
--    
-----------------------------------------------------------------------
------------------ 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 dzEJPS    ='EJP Switch'       -- Switch etat EJP du jour
local dzNb      ='EJP J_Restant'    -- dz Custom sensor : Nom exact du "Custom sensor" indiquant le nombre de jours ejp restants
local dzDebugLog='Log'              --Entrée avec sans Log
-----------------------------------------------------------------------
------------------ Constantes -----------------------------------------
-----------------------------------------------------------------------
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)
local mois = os.date("%m",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 .. '\"'
-----------------------------------------------------------------------
------------------ 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' }
    },
    execute = function(dz)
        
        local StatusLog = dz.devices(dzDebugLog).state
        
        if ( tonumber(mois) < 4 or tonumber(mois) > 10 ) then
            --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]['Total']
        
            --Nombre de jours restants
		    local NbRestant = tostring(tonumber(NbPass) - tonumber(NbTotal)) 
					
		    --Recup des valeurs dz
            local StatusEjpJ        = dz.devices(dzJourJ).state
            local StatusEjpJ1       = dz.devices(dzJourJ1).state
            local StatusEjpRestant  = dz.devices(dzNb).state

            if ( StatusEjpRestant ~= NbRestant ) then
                dz.devices(dzNb).updateCustomSensor(NbRestant)
            end
		
		    if ( StatusEjpJ ~= EjpJ ) then
			    if (EjpJ =='NON_EJP' ) then
				    dz.devices(dzJourJ).updateAlertSensor(dz.ALERTLEVEL_GREEN,EjpJ) else
				    dz.devices(dzJourJ).updateAlertSensor(dz.ALERTLEVEL_RED,EjpJ)
			    end
		    end
		
		    if (EjpJ =='NON_EJP' ) then
				dz.devices(dzEJPS).switchOff().silent() else
				dz.devices(dzEJPS).switchOn().silent()
		    end
		
		    if ( StatusEjpJ1 ~= EjpJ1 ) then
			    if (EjpJ1 =='NON_EJP' ) then
				    dz.devices(dzJourJ1).updateAlertSensor(dz.ALERTLEVEL_GREEN,EjpJ1) else
				        if (EjpJ1 =='ND' ) then
				            dz.devices(dzJourJ1).updateAlertSensor(dz.ALERTLEVEL_GREY,EjpJ1) else
				            dz.devices(dzJourJ1).updateAlertSensor(dz.ALERTLEVEL_RED,EjpJ1)
				        end
			    end
            end
        
	        --debug
            if ( StatusLog == 'On' ) then
                dz.log('EJP du Jour :', dz.PRIORITY_LOW)
                dz.log(EjpJ, dz.PRIORITY_LOW)
                dz.log('EJP de Demain :', dz.PRIORITY_LOW)
                dz.log(EjpJ1, dz.PRIORITY_LOW)
                dz.log('EJP Jours écoulés :', dz.PRIORITY_LOW)
                dz.log(NbRestant, dz.PRIORITY_LOW)
                --dz.log(cmdHisto, dz.PRIORITY_LOW)
                --dz.log(cmdParams, dz.PRIORITY_LOW)
                --dz.log(cmdEtat, dz.PRIORITY_LOW)
            end
	 else
	        dz.devices(dzJourJ).updateAlertSensor(dz.ALERTLEVEL_GREEN,"NON_EJP")
	        dz.devices(dzJourJ1).updateAlertSensor(dz.ALERTLEVEL_GREEN,"Hors_période")
	        dz.devices(dzEJPS).switchOff().silent()
	        dz.devices(dzNb).updateCustomSensor(0)
	        
	        --debug
            if ( StatusLog == 'On' ) then
                dz.log('Hors période EJP', dz.PRIORITY_LOW)
                dz.log('EJP du 1er Novembre au 31 Mars', dz.PRIORITY_LOW)
            end

 	end
	    
end
}
Petite info qui a peut être son importance : depuis septembre je suis passé sur un Pi4/Raspbian Buster

J'ai essayé de remplacer :
local cmdHisto = 'curl -s \"' .. URLetat .. dateJ .. '\"'
par
local cmdHisto = 'curl -s \"https://particulier.edf.fr/bin/edf_rc/s ... 2019-11-02"'

et j'ai la même erreur
2019-11-02 15:55:00.978 Error: dzVents: Error: (2.4.29) An error occurred when calling event handler dzVents Script_time_ejp
2019-11-02 15:55:00.978 Error: dzVents: Error: (2.4.29) /home/pi/domoticz/scripts/lua/JSON.lua:660: html passed to JSON:decode(): <HTML><HEAD>
2019-11-02 15:55:00.978 <TITLE>Access Denied</TITLE>
2019-11-02 15:55:00.978 </HEAD><BODY>
2019-11-02 15:55:00.978 <H1>Access Denied</H1>
2019-11-02 15:55:00.978
2019-11-02 15:55:00.978 You don't have permission to access "http&#58;&#47;&#47;particulier&#46;edf&#46;fr&#47;bin&#47;edf&#95;rc&#47;servlets&#47;ejptemponew&#63;" on this server.<P>
2019-11-02 15:55:00.978 Reference&#32;&#35;18&#46;2f281102&#46;1572706500&#46;5d45b36f
2019-11-02 15:55:00.978 </BODY>
2019-11-02 15:55:00.978 </HTML>
Dernière modification par VBill le 15 nov. 2019, 09:03, modifié 1 fois.
lmet
Messages : 252
Inscription : 30 juin 2017, 18:16
Localisation : Val d'Oise
Contact :

Re: Erreur : Access Denied, sur script EJP

Message par lmet »

Salut,
Connais rien en DzVents :( mais peut-être que la syntaxe de ta commande curl n'est pas correcte:

Code : Tout sélectionner

local dateJ = os.date("%F",d)
print (dateJ)
local cmdHisto = 'curl -s ' .. '"' .. "https://particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?TypeAlerte=EJP&Date_a_remonter=" .. dateJ .. '"'
print (cmdHisto)
Domoticz : V4.10717
Zigate : V4.11230 plugin:4.5.4 firmware:031a
Mon petit blog domotique
VBill
Messages : 86
Inscription : 26 janv. 2019, 16:43

Re: Erreur : Access Denied, sur script EJP

Message par VBill »

lmet a écrit : 02 nov. 2019, 16:56 Salut,
Connais rien en DzVents :( mais peut-être que la syntaxe de ta commande curl n'est pas correcte:

Code : Tout sélectionner

local dateJ = os.date("%F",d)
print (dateJ)
local cmdHisto = 'curl -s ' .. '"' .. "https://particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?TypeAlerte=EJP&Date_a_remonter=" .. dateJ .. '"'
print (cmdHisto)
Bonjour et merci
le print retourne :
2019-11-02 17:20:00.917 Status: dzVents: curl -s "https://particulier.edf.fr/bin/edf_rc/s ... 2019-11-02"
donc tout est ok de ce côté la

en continuant de fouiller sur le forum j'ai trouvé dans les discutions TEMPO qu'il fallait remplacer les curl par des wget
j'ai fait quelque essai à l'arrache mais j'ai le même problème ...
Et dire que tout foncionnait l'hiver dernier ...
je vais relancer un pi 3b+ pour voir si le problème ne vient pas du pi4 et/ou buster
VBill
Messages : 86
Inscription : 26 janv. 2019, 16:43

Re: Erreur : Access Denied, sur script EJP

Message par VBill »

J'ai refais une config avec un pi 3B+ et restauré domoticz dessus :
le résultat est le même erreur acces denied

donc ce n'est pas le pi 4 ou buster
higgins91
Messages : 669
Inscription : 17 nov. 2016, 11:06

Re: Erreur : Access Denied, sur script EJP

Message par higgins91 »

il y a des options dans curl et wget qui permettent d'indiquer le navigateur utilisé (par exemple faire croire que tu utilises FireFox dans ta commande).
Tu peux regarder cette piste (j'avais eu cette proposition quand j'ai du refaire mon script Tempo avant de passer par un Wget qui marche bien, mais en script SH)
Dz version : 2024.7
Rpi 4 avec dongle téléinfo, GPIO pour le moment !
VBill
Messages : 86
Inscription : 26 janv. 2019, 16:43

Re: Erreur : Access Denied, sur script EJP

Message par VBill »

higgins91 a écrit : 04 nov. 2019, 18:15 il y a des options dans curl et wget qui permettent d'indiquer le navigateur utilisé (par exemple faire croire que tu utilises FireFox dans ta commande).
Tu peux regarder cette piste (j'avais eu cette proposition quand j'ai du refaire mon script Tempo avant de passer par un Wget qui marche bien, mais en script SH)
Merci pour ta réponse mais je ne trouve pas les options pour faire cela
quelqu'un sait ou les trouver ?
higgins91
Messages : 669
Inscription : 17 nov. 2016, 11:06

Re: Erreur : Access Denied, sur script EJP

Message par higgins91 »

Dz version : 2024.7
Rpi 4 avec dongle téléinfo, GPIO pour le moment !
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Erreur : Access Denied, sur script EJP

Message par vil1driver »

MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
lmet
Messages : 252
Inscription : 30 juin 2017, 18:16
Localisation : Val d'Oise
Contact :

Re: Erreur : Access Denied, sur script EJP

Message par lmet »

Salut,
Il s'agit bien de la requête curl qui pose problème. A priori la piste de higgins semble bonne :

Code : Tout sélectionner

local dateJ = os.date("%F",d)
print (dateJ)
local cmdHisto = "curl -A 'Wget/1.20.3 (linux-gnu)' " .. '"' .. "https://particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?Date_a_remonter=" .. dateJ .. "&TypeAlerte=TEMPO" .. '"'
print (cmdHisto)
Pas d'access denied et ta fonction os.capture renvoie :
{"JourJ1":{"Tempo":"ND"},"JourJ":{"Tempo":"TEMPO_BLEU"}}
Domoticz : V4.10717
Zigate : V4.11230 plugin:4.5.4 firmware:031a
Mon petit blog domotique
VBill
Messages : 86
Inscription : 26 janv. 2019, 16:43

Re: Erreur : Access Denied, sur script EJP

Message par VBill »

Bonjour et merci a tous pour vos réponses.

En mixant tout cela j'ai réécrit un ptit truc :
D’abord il faut créer un bash : EJP.sh qu'il faut mettre là : /home/pi/domoticz/EJP.sh

Dedans il y a ça :

Code : Tout sélectionner

#!/bin/bash
DATEJOUR=$(date +%Y-%m-%d)

adresse="https://particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?TypeAlerte=EJP&Date_a_remonter="
adresse=${adresse}${DATEJOUR}

echo $adresse
wget -O EJP.txt $adresse

echo RechercheJour
EJP_J=$(grep -Po '(?<="JourJ":{"EjpNord":")[^"]+(?=")' EJP.txt)
EJP_J1=$(grep -Po '(?<="JourJ1":{"EjpNord":")[^"]+(?=")' EJP.txt)
echo "EJP Aujourd'hui lu"
echo $EJP_J
echo "EJP demain lu"
echo $EJP_J1

EJP_JControle=$(grep -Po '(?<="Etat du jour":{")[^"]+(?=")' EJPJ.txt)
EJP_J1Controle=$(grep -Po '(?<="Etat de demain":{")[^"]+(?=")' EJPJ1.txt)
echo "EJP Aujourd'hui sauv"
echo $EJP_JControle
echo "EJP demain sauv"
echo $EJP_J1Controle

echo "EnvoiDomoticz"
echo "Demain"

if [ $EJP_J1 = "ND" ] && [ $EJP_J1 != $EJP_J1Controle ] ; then
echo "demain non determine"
curl "http://192.168.1.70:8080/json.htm?type=command&param=udevice&idx=104&nvalue=0&svalue=ND"
fi

if [ $EJP_J1 = "NON_EJP" ] && [ $EJP_J1 != $EJP_J1Controle ] ; then
echo "demain jour Non EJP"
curl "http://192.168.1.70:8080/json.htm?type=command&param=udevice&idx=104&nvalue=1&svalue=NON_EJP"
fi

if [ $EJP_J1 = "EST_EJP" ] && [ $EJP_J1 != $EJP_J1Controle ] ; then
echo "demain jour EJP"
curl "http://192.168.1.70:8080/json.htm?type=command&param=udevice&idx=104&nvalue=4&svalue=EJP"
fi

echo "Aujourd'hui"
if [ $EJP_J = "NON_EJP" ] && [ $EJP_J != $EJP_JControle ] ; then
echo "aujourd'hui jour Non EJP"
curl "http://192.168.1.70:8080/json.htm?type=command&param=udevice&idx=103&nvalue=1&svalue=NON_EJP"
fi

if [ $EJP_J = "EST_EJP" ] && [ $EJP_J != $EJP_JControle ] ; then
echo "aujourd'hui jour rouge"
curl "http://192.168.1.70:8080/json.htm?type=command&param=udevice&idx=103&nvalue=4&svalue=EJP"
fi

adresse="https://particulier.edf.fr/services/rest/referentiel/historicEJPStore?searchType=ejp"
echo $adresse
wget -O JOUR.txt $adresse

echo RechercheJour
NBRE=$(grep -Po '(?<="NORD":{"TotalCurrentPeriod":)[^"]+(?=,)' JOUR.txt)
echo "Nombre de jours écoulés"
echo $NBRE

echo EnvoiDomoticz
#Total
curl "http://192.168.1.70:8080/json.htm?type=command&param=udevice&idx=105&nvalue=0&svalue="$NBRE

echo '{"Etat du jour":{"'$EJP_J'"}}' > EJPJ.txt
echo '{"Etat de demain":{"'$EJP_J1'"}}' > EJPJ1.txt
Il vous faudra modifier l'adresse IP de votre domoticz (moi 192.168.1.70)
Remplacer les EjpNord par EjpOuest ou EjpPaca ou EjpSud selon votre région (respecter les minuscules et Majuscules)
Remplacer les NORD par OUEST ou PACA ou SUD selon votre région (respecter les minuscules et Majuscules)
et modifier les idx de vos dispositif (moi 103 104 et 105)(deux type "General Alert" 103 et 104 et 1 type "General Custom sensor" 105 avec perso nom de l'axe : Jours/22)

et le script dzVents suivant :

Code : Tout sélectionner

-----------------------------------------------------------------------
------------------ Variables utilisateur ------------------------------
-----------------------------------------------------------------------
local dzJourJ   ='EJP Aujourdhui'   -- Alert sensor indiquant l'ejp du jour
local dzJourJ1  ='EJP Demain'       -- Alert sensor indiquant l'ejp de demain
local dzNb      ='EJP Nbre Jours'   -- Custom sensor indiquant le nombre de jours ejp
local dzEJP     ='EJP'              -- Entrée contact physique relais EJP
local dzDebugLog='Log'              -- Entrée avec sans Log
local dzEJPS    ='EJP Switch'       -- Sortie etat EJP du jour
local Mois      = os.date("%m",d)
local Minute    = os.date('%M')
-----------------------------------------------------------------------
------------------ DzVents --------------------------------------------
-----------------------------------------------------------------------
return {
    
    on = {
        timer = { 'every minute' }
    },

    execute = function(dz)
        if ( Minute == '00' or Minute == '30' ) then
            os.execute('bash /home/pi/domoticz/EJP.sh')
        end
        
        local StatusLog = dz.devices(dzDebugLog).state
        
        if ( tonumber(Mois) < 4 or tonumber(Mois) > 10 ) then
            local StatusEjpJ        = dz.devices(dzJourJ).state
            local StatusEjpJ1       = dz.devices(dzJourJ1).state
            local StatusEjpRestant  = dz.devices(dzNb).state
            local StatusEJP         = dz.devices(dzEJP).state
            
            if ( StatusEJP == 'Open' ) then                 --Etat Open ou Closed
                dz.devices(dzEJPS).switchOff().silent()
            else
                dz.devices(dzEJPS).switchOn().silent()
            end
            
	    --debug
            if ( StatusLog == 'On' ) then
                dz.log('EJP du Jour :', dz.PRIORITY_LOW)
                dz.log(StatusEjpJ, dz.PRIORITY_LOW)
                dz.log('EJP de Demain :', dz.PRIORITY_LOW)
                dz.log(StatusEjpJ1, dz.PRIORITY_LOW)
                dz.log('EJP Jours écoulés :', dz.PRIORITY_LOW)
                dz.log(StatusEjpRestant, dz.PRIORITY_LOW)
                dz.log('EJP contact EDF :', dz.PRIORITY_LOW)
                dz.log(StatusEJP, dz.PRIORITY_LOW)
                dz.log('Mois :', dz.PRIORITY_LOW)
                dz.log(Mois, dz.PRIORITY_LOW)
                dz.log('Minute :', dz.PRIORITY_LOW)
                dz.log(Minute, dz.PRIORITY_LOW)
            end
        else
            dz.devices(dzJourJ).updateAlertSensor(dz.ALERTLEVEL_GREEN,"NON_EJP")
            dz.devices(dzJourJ1).updateAlertSensor(dz.ALERTLEVEL_GREEN,"Hors_période")
            dz.devices(dzNb).updateCustomSensor(0)
        
        --debug
            if ( StatusLog == 'On' ) then
                dz.log('Hors période EJP', dz.PRIORITY_LOW)
                dz.log('EJP du 1er Novembre au 31 Mars', dz.PRIORITY_LOW)
            end
        end
	end
}
a adapter selon vos gouts
Voila si vous avez besoin d'infos j’essaierais de répondre

Faut il le mettre dans la partie "La Bibliothèque Scripts et Tutos"
Répondre